Add Reload ROM and Close ROM options to File menu
This commit is contained in:
@@ -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")) {
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user