Add Reload ROM and Close ROM options to File menu

This commit is contained in:
scawful
2023-10-22 16:18:18 -04:00
parent f5c6899d4d
commit 82cca80191
3 changed files with 41 additions and 22 deletions

View File

@@ -168,6 +168,11 @@ void MasterEditor::DrawFileMenu() {
MENU_ITEM2("Save", "Ctrl+S") { status_ = rom()->SaveToFile(backup_rom_); }
MENU_ITEM("Save As..") { save_as_menu = true; }
if (rom()->isLoaded()) {
MENU_ITEM("Reload") { status_ = rom()->Reload(); }
MENU_ITEM("Close") { status_ = rom()->Close(); }
}
ImGui::Separator();
if (ImGui::BeginMenu("Options")) {

View File

@@ -160,7 +160,7 @@ absl::Status LoadGrassColors(const Bytes& rom_data,
RETURN_IF_ERROR(palette_groups["grass"].AddColor(
gfx::ReadColorFromROM(core::hardcodedGrassDW, rom_data.data())))
RETURN_IF_ERROR(palette_groups["grass"].AddColor(
gfx::ReadColorFromROM(core::hardcodedGrassSpecial, rom_data.data())));
gfx::ReadColorFromROM(core::hardcodedGrassSpecial, rom_data.data())))
return absl::OkStatus();
}
@@ -242,21 +242,21 @@ absl::Status ROM::LoadAllGraphicsData() {
}
absl::Status ROM::LoadAllPalettes() {
RETURN_IF_ERROR(LoadOverworldMainPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadOverworldAuxiliaryPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadOverworldAnimatedPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadHUDPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadGlobalSpritePalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadArmorPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadSwordPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadShieldPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadSpriteAux1Palettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadSpriteAux2Palettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadSpriteAux3Palettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadDungeonMainPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadGrassColors(rom_data_, palette_groups_));
RETURN_IF_ERROR(Load3DObjectPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadOverworldMiniMapPalettes(rom_data_, palette_groups_));
RETURN_IF_ERROR(LoadOverworldMainPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadOverworldAuxiliaryPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadOverworldAnimatedPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadHUDPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadGlobalSpritePalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadArmorPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadSwordPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadShieldPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadSpriteAux1Palettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadSpriteAux2Palettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadSpriteAux3Palettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadDungeonMainPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadGrassColors(rom_data_, palette_groups_))
RETURN_IF_ERROR(Load3DObjectPalettes(rom_data_, palette_groups_))
RETURN_IF_ERROR(LoadOverworldMiniMapPalettes(rom_data_, palette_groups_))
return absl::OkStatus();
}
@@ -306,7 +306,7 @@ absl::Status ROM::LoadFromFile(const absl::string_view& filename,
} else {
version_ = Z3_Version::US;
}
LoadAllPalettes();
RETURN_IF_ERROR(LoadAllPalettes())
}
// Set is_loaded_ flag and return success
@@ -381,8 +381,6 @@ absl::Status ROM::SaveToFile(bool backup, absl::string_view filename) {
absl::StrCat("Could not open ROM file: ", filename));
}
using byte_cast = const char* (*)(const void*);
// Save the data to the file
try {
file.write(

View File

@@ -128,7 +128,8 @@ constexpr uint32_t kFontSpriteLocation = 0x70000;
struct WriteAction {
int address;
std::variant<uint8_t, uint16_t, std::vector<uint8_t>, gfx::SNESColor> value;
std::variant<int, uint8_t, uint16_t, std::vector<uint8_t>, gfx::SNESColor>
value;
};
class ROM {
@@ -142,7 +143,8 @@ class ROM {
}
absl::Status WriteHelper(const WriteAction& action) {
if (std::holds_alternative<uint8_t>(action.value)) {
if (std::holds_alternative<uint8_t>(action.value) ||
std::holds_alternative<int>(action.value)) {
return Write(action.address, std::get<uint8_t>(action.value));
} else if (std::holds_alternative<uint16_t>(action.value)) {
return WriteShort(action.address, std::get<uint16_t>(action.value));
@@ -364,6 +366,20 @@ class ROM {
size_ = size;
}
absl::Status Reload() {
if (filename_.empty()) {
return absl::InvalidArgumentError("No filename specified");
}
return LoadFromFile(filename_);
}
absl::Status Close() {
rom_data_.clear();
size_ = 0;
is_loaded_ = false;
return absl::OkStatus();
}
void QueueChanges(std::function<void()> const& function) {
changes_.push(function);
}
@@ -458,10 +474,10 @@ class ROM {
Z3_Version version_ = Z3_Version::US;
gfx::BitmapTable graphics_bin_;
PaletteGroupMap palette_groups_;
std::stack<std::function<void()>> changes_;
std::shared_ptr<SDL_Renderer> renderer_;
std::unordered_map<std::string, gfx::PaletteGroup> palette_groups_;
};
class SharedROM {