Refactor EditorManager to handle status from ROM operations; improve error handling in ROM selector. Update overworld loading logic for consistency.
This commit is contained in:
@@ -21,7 +21,6 @@
|
|||||||
#include "editor/editor.h"
|
#include "editor/editor.h"
|
||||||
#include "imgui/imgui.h"
|
#include "imgui/imgui.h"
|
||||||
#include "imgui/misc/cpp/imgui_stdlib.h"
|
#include "imgui/misc/cpp/imgui_stdlib.h"
|
||||||
#include "util/hex.h"
|
|
||||||
#include "util/macro.h"
|
#include "util/macro.h"
|
||||||
|
|
||||||
namespace yaze {
|
namespace yaze {
|
||||||
@@ -53,6 +52,7 @@ std::string GetEditorName(EditorType type) {
|
|||||||
void DrawRomSelector(EditorManager &editor_manager) {
|
void DrawRomSelector(EditorManager &editor_manager) {
|
||||||
const auto &roms = editor_manager.GetRoms();
|
const auto &roms = editor_manager.GetRoms();
|
||||||
const Rom *current_rom = editor_manager.GetCurrentRom();
|
const Rom *current_rom = editor_manager.GetCurrentRom();
|
||||||
|
absl::Status status;
|
||||||
|
|
||||||
SameLine((GetWindowWidth() / 2) - 100);
|
SameLine((GetWindowWidth() / 2) - 100);
|
||||||
if (current_rom && current_rom->is_loaded()) {
|
if (current_rom && current_rom->is_loaded()) {
|
||||||
@@ -60,11 +60,15 @@ void DrawRomSelector(EditorManager &editor_manager) {
|
|||||||
if (BeginCombo("##ROMSelector", current_rom->filename().c_str())) {
|
if (BeginCombo("##ROMSelector", current_rom->filename().c_str())) {
|
||||||
for (const auto &rom : roms) {
|
for (const auto &rom : roms) {
|
||||||
if (MenuItem(rom->filename().c_str())) {
|
if (MenuItem(rom->filename().c_str())) {
|
||||||
editor_manager.SetCurrentRom(rom.get());
|
status = editor_manager.SetCurrentRom(rom.get());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
EndCombo();
|
EndCombo();
|
||||||
}
|
}
|
||||||
|
if (!status.ok()) {
|
||||||
|
std::string error_message = status.message().data();
|
||||||
|
throw std::runtime_error(error_message);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
Text("No ROM loaded");
|
Text("No ROM loaded");
|
||||||
}
|
}
|
||||||
@@ -90,9 +94,9 @@ void EditorManager::Initialize(const std::string &filename) {
|
|||||||
context_.popup_manager = popup_manager_.get();
|
context_.popup_manager = popup_manager_.get();
|
||||||
|
|
||||||
context_.shortcut_manager.RegisterShortcut(
|
context_.shortcut_manager.RegisterShortcut(
|
||||||
"Open", {ImGuiKey_O, ImGuiMod_Ctrl}, [&]() { LoadRom(); });
|
"Open", {ImGuiKey_O, ImGuiMod_Ctrl}, [&]() { status_ = LoadRom(); });
|
||||||
context_.shortcut_manager.RegisterShortcut(
|
context_.shortcut_manager.RegisterShortcut(
|
||||||
"Save", {ImGuiKey_S, ImGuiMod_Ctrl}, [&]() { SaveRom(); });
|
"Save", {ImGuiKey_S, ImGuiMod_Ctrl}, [&]() { status_ = SaveRom(); });
|
||||||
context_.shortcut_manager.RegisterShortcut(
|
context_.shortcut_manager.RegisterShortcut(
|
||||||
"Close", {ImGuiKey_W, ImGuiMod_Ctrl}, [&]() {
|
"Close", {ImGuiKey_W, ImGuiMod_Ctrl}, [&]() {
|
||||||
if (current_rom_) current_rom_->Close();
|
if (current_rom_) current_rom_->Close();
|
||||||
@@ -125,7 +129,7 @@ void EditorManager::Initialize(const std::string &filename) {
|
|||||||
manager.Load();
|
manager.Load();
|
||||||
if (!manager.GetRecentFiles().empty()) {
|
if (!manager.GetRecentFiles().empty()) {
|
||||||
auto front = manager.GetRecentFiles().front();
|
auto front = manager.GetRecentFiles().front();
|
||||||
OpenRomOrProject(front);
|
status_ = OpenRomOrProject(front);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -141,7 +145,7 @@ void EditorManager::Initialize(const std::string &filename) {
|
|||||||
} else {
|
} else {
|
||||||
for (const auto &filePath : manager.GetRecentFiles()) {
|
for (const auto &filePath : manager.GetRecentFiles()) {
|
||||||
recent_files.emplace_back(
|
recent_files.emplace_back(
|
||||||
filePath, "", [filePath, this]() { OpenRomOrProject(filePath); });
|
filePath, "", [filePath, this]() { status_ = OpenRomOrProject(filePath); });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -159,7 +163,7 @@ void EditorManager::Initialize(const std::string &filename) {
|
|||||||
project_menu_subitems.emplace_back("Open Project", "",
|
project_menu_subitems.emplace_back("Open Project", "",
|
||||||
[&]() { status_ = OpenProject(); });
|
[&]() { status_ = OpenProject(); });
|
||||||
project_menu_subitems.emplace_back(
|
project_menu_subitems.emplace_back(
|
||||||
"Save Project", "", [&]() { SaveProject(); },
|
"Save Project", "", [&]() { status_ = SaveProject(); },
|
||||||
[&]() { return current_project_.project_opened_; });
|
[&]() { return current_project_.project_opened_; });
|
||||||
|
|
||||||
gui::kMainMenu = {
|
gui::kMainMenu = {
|
||||||
|
|||||||
@@ -1032,7 +1032,7 @@ absl::Status OverworldEditor::Save() {
|
|||||||
absl::Status OverworldEditor::LoadGraphics() {
|
absl::Status OverworldEditor::LoadGraphics() {
|
||||||
util::logf("Loading overworld.");
|
util::logf("Loading overworld.");
|
||||||
// Load the Link to the Past overworld.
|
// Load the Link to the Past overworld.
|
||||||
RETURN_IF_ERROR(overworld_.Load(rom_))
|
RETURN_IF_ERROR(overworld_.Load(rom_));
|
||||||
palette_ = overworld_.current_area_palette();
|
palette_ = overworld_.current_area_palette();
|
||||||
|
|
||||||
util::logf("Loading overworld graphics.");
|
util::logf("Loading overworld graphics.");
|
||||||
|
|||||||
Reference in New Issue
Block a user