implement 'add new sibling' menu in System/Dir TreeView

This commit is contained in:
2022-08-04 09:16:13 +09:00
parent 74db4cf933
commit 8022323cea
2 changed files with 23 additions and 15 deletions

View File

@@ -18,8 +18,6 @@ class Dir : public File::Interface {
virtual File& Add(std::string_view, std::unique_ptr<File>&&) = 0;
virtual std::unique_ptr<File> Remove(std::string_view) noexcept = 0;
virtual std::map<std::string, File*> FetchItems() const noexcept = 0;
};
class Dir::DuplicateException : public Exception {
public:

View File

@@ -78,13 +78,6 @@ class Dir final : public File,
if (id()) ret->Isolate();
return ret;
}
std::map<std::string, File*> FetchItems() const noexcept override {
std::map<std::string, File*> ret;
for (const auto& item : items_) {
ret[item.first] = item.second.get();
}
return ret;
}
void Update() noexcept override;
void UpdateTree() noexcept override;
@@ -211,10 +204,6 @@ void Dir::Update() noexcept {
};
if (win_.Begin(kInit)) {
if (ImGui::BeginPopupContextWindow()) {
if (ImGui::MenuItem("new")) {
popup_ = "NewItemPopup";
}
ImGui::Separator();
UpdateMenu();
ImGui::EndPopup();
}
@@ -258,15 +247,32 @@ void Dir::UpdateTree() noexcept {
if (ImGui::MenuItem("copy path")) {
ImGui::SetClipboardText(file.abspath().Stringify().c_str());
}
ImGui::Separator();
if (ImGui::MenuItem("remove")) {
auto ctx = std::make_shared<nf7::GenericContext>(*this, "removing item");
env().ExecMain(ctx, [this, name]() { Remove(name); });
env().ExecMain(
std::make_shared<nf7::GenericContext>(*this, "removing item"),
[this, name]() { Remove(name); });
}
if (ImGui::MenuItem("rename")) {
rename_target_ = name;
popup_ = "RenamePopup";
}
if (ImGui::MenuItem("renew")) {
env().ExecMain(
std::make_shared<nf7::GenericContext>(*this, "removing item"),
[this, name]() { Add(name, Remove(name)); });
}
if (ImGui::IsItemHovered()) {
ImGui::SetTooltip("re-initialize the item by re-adding after removing");
}
ImGui::Separator();
if (ImGui::MenuItem("add new sibling")) {
popup_ = "NewItemPopup";
}
if (ditem && (ditem->flags() & DirItem::kMenu)) {
ImGui::Separator();
ditem->UpdateMenu();
@@ -303,6 +309,10 @@ void Dir::UpdateTree() noexcept {
}
}
void Dir::UpdateMenu() noexcept {
if (ImGui::MenuItem("add new child")) {
popup_ = "NewItemPopup";
}
ImGui::Separator();
ImGui::MenuItem("TreeView", nullptr, &win_.shown());
}
void Dir::UpdateTooltip() noexcept {