diff --git a/src/app/editor/master_editor.cc b/src/app/editor/master_editor.cc index 8bf6b4a8..ef3dd713 100644 --- a/src/app/editor/master_editor.cc +++ b/src/app/editor/master_editor.cc @@ -23,6 +23,28 @@ namespace yaze { namespace app { namespace editor { +namespace { + +constexpr ImGuiWindowFlags kMainEditorFlags = + ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | + ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_MenuBar | + ImGuiWindowFlags_NoBringToFrontOnFocus | ImGuiWindowFlags_NoTitleBar; + +void NewMasterFrame() { + const ImGuiIO &io = ImGui::GetIO(); + ImGui::NewFrame(); + ImGui::SetNextWindowPos(ImVec2(0, 0)); + ImVec2 dimensions(io.DisplaySize.x, io.DisplaySize.y); + ImGui::SetNextWindowSize(dimensions, ImGuiCond_Always); + + if (!ImGui::Begin("##YazeMain", nullptr, kMainEditorFlags)) { + ImGui::End(); + return; + } +} + +} // namespace + MasterEditor::~MasterEditor() { rom_.Close(); } void MasterEditor::SetupScreen(std::shared_ptr renderer) { @@ -31,18 +53,11 @@ void MasterEditor::SetupScreen(std::shared_ptr renderer) { } void MasterEditor::UpdateScreen() { - const ImGuiIO &io = ImGui::GetIO(); - ImGui::NewFrame(); - ImGui::SetNextWindowPos(ImVec2(0, 0)); - ImVec2 dimensions(io.DisplaySize.x, io.DisplaySize.y); - ImGui::SetNextWindowSize(dimensions, ImGuiCond_Always); - - if (!ImGui::Begin("##YazeMain", nullptr, main_editor_flags_)) { - ImGui::End(); - return; - } + NewMasterFrame(); DrawYazeMenu(); + DrawFileDialog(); + DrawStatusPopup(); TAB_BAR("##TabBar") DrawOverworldEditor(); @@ -51,11 +66,25 @@ void MasterEditor::UpdateScreen() { DrawScreenEditor(); END_TAB_BAR() + ImGui::End(); +} + +void MasterEditor::DrawFileDialog() { + if (ImGuiFileDialog::Instance()->Display("ChooseFileDlgKey")) { + if (ImGuiFileDialog::Instance()->IsOk()) { + std::string filePathName = ImGuiFileDialog::Instance()->GetFilePathName(); + rom_.LoadFromFile(filePathName); + status_ = rom_.OpenFromFile(filePathName); + overworld_editor_.SetupROM(rom_); + } + ImGuiFileDialog::Instance()->Close(); + } +} + +void MasterEditor::DrawStatusPopup() { if (!status_.ok()) { gui::widgets::DisplayStatus(status_); } - - ImGui::End(); } void MasterEditor::DrawYazeMenu() { @@ -65,17 +94,6 @@ void MasterEditor::DrawYazeMenu() { DrawViewMenu(); DrawHelpMenu(); END_MENU_BAR() - - if (ImGuiFileDialog::Instance()->Display("ChooseFileDlgKey")) { - if (ImGuiFileDialog::Instance()->IsOk()) { - std::string filePathName = ImGuiFileDialog::Instance()->GetFilePathName(); - std::string filePath = ImGuiFileDialog::Instance()->GetCurrentPath(); - rom_.LoadFromFile(filePathName); - status_ = rom_.OpenFromFile(filePathName); - overworld_editor_.SetupROM(rom_); - } - ImGuiFileDialog::Instance()->Close(); - } } void MasterEditor::DrawFileMenu() const { @@ -171,6 +189,9 @@ void MasterEditor::DrawViewMenu() { ImGui::MenuItem("HEX Editor", nullptr, &show_memory_editor); ImGui::MenuItem("ASM Editor", nullptr, &show_asm_editor); ImGui::MenuItem("ImGui Demo", nullptr, &show_imgui_demo); + if (ImGui::MenuItem("Invalid Argument Popup")) { + status_ = absl::InvalidArgumentError("Invalid Argument Status"); + } ImGui::Separator(); if (ImGui::BeginMenu("GUI Tools")) { diff --git a/src/app/editor/master_editor.h b/src/app/editor/master_editor.h index debc2e42..72f415dc 100644 --- a/src/app/editor/master_editor.h +++ b/src/app/editor/master_editor.h @@ -31,6 +31,9 @@ class MasterEditor { void UpdateScreen(); private: + void DrawFileDialog(); + void DrawStatusPopup(); + void DrawYazeMenu(); void DrawFileMenu() const; void DrawEditMenu() const; @@ -51,11 +54,6 @@ class MasterEditor { absl::Status status_; ImVec4 current_palette_[8]; - - ImGuiWindowFlags main_editor_flags_ = - ImGuiWindowFlags_AlwaysAutoResize | ImGuiWindowFlags_NoCollapse | - ImGuiWindowFlags_NoScrollbar | ImGuiWindowFlags_MenuBar | - ImGuiWindowFlags_NoTitleBar; ImGuiTableFlags toolset_table_flags_ = ImGuiTableFlags_SizingFixedFit; std::shared_ptr sdl_renderer_; diff --git a/src/gui/widgets.cc b/src/gui/widgets.cc index 66fb06fe..1339d0c5 100644 --- a/src/gui/widgets.cc +++ b/src/gui/widgets.cc @@ -9,7 +9,7 @@ namespace yaze { namespace gui { namespace widgets { -bool BeginCentered(const char *name) { +static bool BeginCentered(const char *name) { ImGuiIO &io = ImGui::GetIO(); ImVec2 pos(io.DisplaySize.x * 0.5f, io.DisplaySize.y * 0.5f); ImGui::SetNextWindowPos(pos, ImGuiCond_Always, ImVec2(0.5f, 0.5f)); @@ -19,29 +19,20 @@ bool BeginCentered(const char *name) { return ImGui::Begin(name, nullptr, flags); } -void DisplayStatus(const absl::Status &status) { - static bool display_open = true; - if (display_open) { - auto title = absl::StrCat("StatusWindow_", status.ToString()).data(); - if (BeginCentered(title)) { - ImGui::Text(status.ToString().data()); - - ImGui::Spacing(); - ImGui::NextColumn(); - - ImGui::Columns(1); - ImGui::Separator(); - - ImGui::NewLine(); - - ImGui::SameLine(270); - // click ok when finished adjusting - if (ImGui::Button("OK", ImVec2(200, 0))) { - display_open = false; - } - - ImGui::End(); +void DisplayStatus(absl::Status &status) { + auto title = absl::StrCat("StatusWindow_", status.ToString()).data(); + if (BeginCentered(title)) { + ImGui::Text(status.ToString().data()); + ImGui::Spacing(); + ImGui::NextColumn(); + ImGui::Columns(1); + ImGui::Separator(); + ImGui::NewLine(); + ImGui::SameLine(270); + if (ImGui::Button("OK", ImVec2(200, 0))) { + status = absl::OkStatus(); } + ImGui::End(); } } diff --git a/src/gui/widgets.h b/src/gui/widgets.h index b230250e..7304b77b 100644 --- a/src/gui/widgets.h +++ b/src/gui/widgets.h @@ -10,7 +10,7 @@ namespace yaze { namespace gui { namespace widgets { -void DisplayStatus(const absl::Status& status); +void DisplayStatus(absl::Status& status); TextEditor::LanguageDefinition GetAssemblyLanguageDef();