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_ITEM2("Save", "Ctrl+S") { status_ = rom()->SaveToFile(backup_rom_); }
|
||||||
MENU_ITEM("Save As..") { save_as_menu = true; }
|
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();
|
ImGui::Separator();
|
||||||
|
|
||||||
if (ImGui::BeginMenu("Options")) {
|
if (ImGui::BeginMenu("Options")) {
|
||||||
|
|||||||
@@ -160,7 +160,7 @@ absl::Status LoadGrassColors(const Bytes& rom_data,
|
|||||||
RETURN_IF_ERROR(palette_groups["grass"].AddColor(
|
RETURN_IF_ERROR(palette_groups["grass"].AddColor(
|
||||||
gfx::ReadColorFromROM(core::hardcodedGrassDW, rom_data.data())))
|
gfx::ReadColorFromROM(core::hardcodedGrassDW, rom_data.data())))
|
||||||
RETURN_IF_ERROR(palette_groups["grass"].AddColor(
|
RETURN_IF_ERROR(palette_groups["grass"].AddColor(
|
||||||
gfx::ReadColorFromROM(core::hardcodedGrassSpecial, rom_data.data())));
|
gfx::ReadColorFromROM(core::hardcodedGrassSpecial, rom_data.data())))
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -242,21 +242,21 @@ absl::Status ROM::LoadAllGraphicsData() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
absl::Status ROM::LoadAllPalettes() {
|
absl::Status ROM::LoadAllPalettes() {
|
||||||
RETURN_IF_ERROR(LoadOverworldMainPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadOverworldMainPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadOverworldAuxiliaryPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadOverworldAuxiliaryPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadOverworldAnimatedPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadOverworldAnimatedPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadHUDPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadHUDPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadGlobalSpritePalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadGlobalSpritePalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadArmorPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadArmorPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadSwordPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadSwordPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadShieldPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadShieldPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadSpriteAux1Palettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadSpriteAux1Palettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadSpriteAux2Palettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadSpriteAux2Palettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadSpriteAux3Palettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadSpriteAux3Palettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadDungeonMainPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadDungeonMainPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadGrassColors(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadGrassColors(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(Load3DObjectPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(Load3DObjectPalettes(rom_data_, palette_groups_))
|
||||||
RETURN_IF_ERROR(LoadOverworldMiniMapPalettes(rom_data_, palette_groups_));
|
RETURN_IF_ERROR(LoadOverworldMiniMapPalettes(rom_data_, palette_groups_))
|
||||||
return absl::OkStatus();
|
return absl::OkStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -306,7 +306,7 @@ absl::Status ROM::LoadFromFile(const absl::string_view& filename,
|
|||||||
} else {
|
} else {
|
||||||
version_ = Z3_Version::US;
|
version_ = Z3_Version::US;
|
||||||
}
|
}
|
||||||
LoadAllPalettes();
|
RETURN_IF_ERROR(LoadAllPalettes())
|
||||||
}
|
}
|
||||||
|
|
||||||
// Set is_loaded_ flag and return success
|
// 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));
|
absl::StrCat("Could not open ROM file: ", filename));
|
||||||
}
|
}
|
||||||
|
|
||||||
using byte_cast = const char* (*)(const void*);
|
|
||||||
|
|
||||||
// Save the data to the file
|
// Save the data to the file
|
||||||
try {
|
try {
|
||||||
file.write(
|
file.write(
|
||||||
|
|||||||
@@ -128,7 +128,8 @@ constexpr uint32_t kFontSpriteLocation = 0x70000;
|
|||||||
|
|
||||||
struct WriteAction {
|
struct WriteAction {
|
||||||
int address;
|
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 {
|
class ROM {
|
||||||
@@ -142,7 +143,8 @@ class ROM {
|
|||||||
}
|
}
|
||||||
|
|
||||||
absl::Status WriteHelper(const WriteAction& action) {
|
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));
|
return Write(action.address, std::get<uint8_t>(action.value));
|
||||||
} else if (std::holds_alternative<uint16_t>(action.value)) {
|
} else if (std::holds_alternative<uint16_t>(action.value)) {
|
||||||
return WriteShort(action.address, std::get<uint16_t>(action.value));
|
return WriteShort(action.address, std::get<uint16_t>(action.value));
|
||||||
@@ -364,6 +366,20 @@ class ROM {
|
|||||||
size_ = size;
|
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) {
|
void QueueChanges(std::function<void()> const& function) {
|
||||||
changes_.push(function);
|
changes_.push(function);
|
||||||
}
|
}
|
||||||
@@ -458,10 +474,10 @@ class ROM {
|
|||||||
|
|
||||||
Z3_Version version_ = Z3_Version::US;
|
Z3_Version version_ = Z3_Version::US;
|
||||||
gfx::BitmapTable graphics_bin_;
|
gfx::BitmapTable graphics_bin_;
|
||||||
|
PaletteGroupMap palette_groups_;
|
||||||
|
|
||||||
std::stack<std::function<void()>> changes_;
|
std::stack<std::function<void()>> changes_;
|
||||||
std::shared_ptr<SDL_Renderer> renderer_;
|
std::shared_ptr<SDL_Renderer> renderer_;
|
||||||
std::unordered_map<std::string, gfx::PaletteGroup> palette_groups_;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class SharedROM {
|
class SharedROM {
|
||||||
|
|||||||
Reference in New Issue
Block a user