From 2669aafe81fa82b30cb3ce43b963bb5798bd89cd Mon Sep 17 00:00:00 2001 From: Gary Talent Date: Sun, 1 Jan 2023 15:27:28 -0600 Subject: [PATCH] [nostalgia] Cleanup frequent allocations and const correctness in project explorer --- src/nostalgia/studio/projectexplorer.hpp | 2 +- src/nostalgia/studio/projecttreemodel.cpp | 36 +++++++++++++---------- src/nostalgia/studio/projecttreemodel.hpp | 4 +-- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/src/nostalgia/studio/projectexplorer.hpp b/src/nostalgia/studio/projectexplorer.hpp index 522f54aa..7f613407 100644 --- a/src/nostalgia/studio/projectexplorer.hpp +++ b/src/nostalgia/studio/projectexplorer.hpp @@ -32,7 +32,7 @@ class ProjectExplorer: public studio::Widget { // slots public: - ox::Signal fileChosen; + ox::Signal fileChosen; }; } \ No newline at end of file diff --git a/src/nostalgia/studio/projecttreemodel.cpp b/src/nostalgia/studio/projecttreemodel.cpp index 36335f89..946262cb 100644 --- a/src/nostalgia/studio/projecttreemodel.cpp +++ b/src/nostalgia/studio/projecttreemodel.cpp @@ -10,31 +10,37 @@ namespace nostalgia { ProjectTreeModel::ProjectTreeModel(ProjectExplorer *explorer, ox::String name, - ProjectTreeModel *parent) noexcept { - m_explorer = explorer; - m_name = std::move(name); - m_parent = parent; + ProjectTreeModel *parent) noexcept: + m_explorer(explorer), + m_parent(parent), + m_name(std::move(name)) { } -ProjectTreeModel::ProjectTreeModel(ProjectTreeModel &&other) noexcept { - m_name = std::move(other.m_name); - m_children = std::move(other.m_children); +ProjectTreeModel::ProjectTreeModel(ProjectTreeModel &&other) noexcept: + m_explorer(other.m_explorer), + m_parent(other.m_parent), + m_name(std::move(other.m_name)), + m_children(std::move(other.m_children)) { } -void ProjectTreeModel::draw(core::Context *ctx) noexcept { +void ProjectTreeModel::draw(core::Context *ctx) const noexcept { constexpr auto dirFlags = ImGuiTreeNodeFlags_OpenOnArrow | ImGuiTreeNodeFlags_OpenOnDoubleClick; if (!m_children.empty()) { if (ImGui::TreeNodeEx(m_name.c_str(), dirFlags)) { - for (auto &child : m_children) { + for (const auto &child : m_children) { child->draw(ctx); } ImGui::TreePop(); } - } else if (auto path = fullPath(); ImGui::TreeNodeEx(ox::sfmt("{}##{}", m_name, path).c_str(), ImGuiTreeNodeFlags_Leaf)) { - if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(0)) { - m_explorer->fileChosen.emit(path); + } else { + const auto path = fullPath(); + const auto name = ox::sfmt>("{}##{}", m_name, path); + if (ImGui::TreeNodeEx(name.c_str(), ImGuiTreeNodeFlags_Leaf)) { + if (ImGui::IsItemHovered() && ImGui::IsMouseDoubleClicked(0)) { + m_explorer->fileChosen.emit(path); + } + ImGui::TreePop(); } - ImGui::TreePop(); } } @@ -42,9 +48,9 @@ void ProjectTreeModel::setChildren(ox::Vector> c m_children = std::move(children); } -ox::String ProjectTreeModel::fullPath() noexcept { +ox::BasicString<255> ProjectTreeModel::fullPath() const noexcept { if (m_parent) { - return m_parent->fullPath() + "/" + m_name; + return m_parent->fullPath() + "/" + ox::StringView(m_name); } return ""; } diff --git a/src/nostalgia/studio/projecttreemodel.hpp b/src/nostalgia/studio/projecttreemodel.hpp index 1d45aab5..5efc598d 100644 --- a/src/nostalgia/studio/projecttreemodel.hpp +++ b/src/nostalgia/studio/projecttreemodel.hpp @@ -23,13 +23,13 @@ class ProjectTreeModel { ProjectTreeModel(ProjectTreeModel &&other) noexcept; - void draw(core::Context *ctx) noexcept; + void draw(core::Context *ctx) const noexcept; void setChildren(ox::Vector> children) noexcept; private: [[nodiscard]] - ox::String fullPath() noexcept; + ox::BasicString<255> fullPath() const noexcept; }; } \ No newline at end of file