[jasper/world/studio/worldeditor] Add file drag/drop support

This commit is contained in:
Gary Talent 2025-01-19 16:58:28 -06:00
parent 7dfbfc834b
commit 92a549ad38
3 changed files with 10 additions and 4 deletions

View File

@ -8,9 +8,9 @@
namespace studio { namespace studio {
ObjectExplorerModel::ObjectExplorerModel(ox::StringView name, ObjectExplorerModel *parent) noexcept: ObjectExplorerModel::ObjectExplorerModel(ox::StringParam name, ObjectExplorerModel *parent) noexcept:
m_parent(parent), m_parent(parent),
m_name(name), m_name(std::move(name)),
m_fullPath(m_parent ? (m_parent->m_fullPath + "/" + m_name) : ox::String{}) { m_fullPath(m_parent ? (m_parent->m_fullPath + "/" + m_name) : ox::String{}) {
} }

View File

@ -15,7 +15,7 @@ class ObjectExplorerModel {
ox::String m_fullPath; ox::String m_fullPath;
ox::Vector<ox::UPtr<ObjectExplorerModel>> m_children; ox::Vector<ox::UPtr<ObjectExplorerModel>> m_children;
public: public:
explicit ObjectExplorerModel(ox::StringView name, ObjectExplorerModel *parent = {}) noexcept; explicit ObjectExplorerModel(ox::StringParam name, ObjectExplorerModel *parent = {}) noexcept;
void draw(turbine::Context &ctx) const noexcept; void draw(turbine::Context &ctx) const noexcept;
private: private:
}; };

View File

@ -201,6 +201,12 @@ void WorldEditorImGui::drawObjSetSelector() noexcept {
} }
return setName; return setName;
}, m_doc.objSets.size(), m_palMgr.selectedIdx); }, m_doc.objSets.size(), m_palMgr.selectedIdx);
if (ig::DragDropTarget const d; d) {
auto const [fr, err] = ig::getDragDropPayload<studio::FileRef>("FileRef");
if (!err && endsWith(fr.path, FileExt_jwob)) {
std::ignore = addObjSet(fr.path);
}
}
} }
void WorldEditorImGui::drawObjSelector() noexcept { void WorldEditorImGui::drawObjSelector() noexcept {
@ -386,7 +392,7 @@ ox::Error WorldEditorImGui::handleDrop(float const fbPaneScale) noexcept {
ox::Error WorldEditorImGui::addObjSet(ox::StringViewCR path) noexcept { ox::Error WorldEditorImGui::addObjSet(ox::StringViewCR path) noexcept {
OX_REQUIRE(uuid, getUuid(keelCtx(m_sctx), path)); OX_REQUIRE(uuid, getUuid(keelCtx(m_sctx), path));
std::ignore = pushCommand<AddObjectSet>(m_doc, uuid); std::ignore = pushCommand<AddObjectSet>(m_doc, uuid);
return {}; return loadObjectSets();
} }
void WorldEditorImGui::rmObjSet() noexcept { void WorldEditorImGui::rmObjSet() noexcept {