1#ifndef YAZE_APP_EDITOR_GRAPHICS_PALETTE_GROUP_CARD_H
2#define YAZE_APP_EDITOR_GRAPHICS_PALETTE_GROUP_CARD_H
7#include <unordered_map>
8#include <unordered_set>
11#include "absl/status/status.h"
14#include "imgui/imgui.h"
81 const std::string& display_name,
Rom* rom,
96 void Draw(
bool* p_open)
override;
132 void ResetColor(
int palette_index,
int color_index);
137 void SetColor(
int palette_index,
int color_index,
The Rom class is used to load, save, and modify Rom data. This is a generic SNES ROM container and do...
Dungeon Main palette group panel.
std::string GetIcon() const override
Material Design icon for this panel.
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
static const PaletteGroupMetadata metadata_
~DungeonMainPalettePanel() override=default
DungeonMainPalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
int GetPriority() const override
Get display priority for menu ordering.
static PaletteGroupMetadata InitializeMetadata()
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
Base interface for all logical panel components.
Equipment/Armor palette group panel.
int GetPriority() const override
Get display priority for menu ordering.
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
EquipmentPalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
static PaletteGroupMetadata InitializeMetadata()
static const PaletteGroupMetadata metadata_
std::string GetIcon() const override
Material Design icon for this panel.
~EquipmentPalettePanel() override=default
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
Overworld Animated palette group panel.
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
std::string GetIcon() const override
Material Design icon for this panel.
OverworldAnimatedPalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
static PaletteGroupMetadata InitializeMetadata()
~OverworldAnimatedPalettePanel() override=default
int GetPriority() const override
Get display priority for menu ordering.
static const PaletteGroupMetadata metadata_
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
Overworld Main palette group panel.
static PaletteGroupMetadata InitializeMetadata()
~OverworldMainPalettePanel() override=default
OverworldMainPalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
std::string GetIcon() const override
Material Design icon for this panel.
static const PaletteGroupMetadata metadata_
int GetPriority() const override
Get display priority for menu ordering.
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
Base class for palette group editing cards.
gfx::SnesColor editing_color_
virtual gfx::PaletteGroup * GetPaletteGroup()=0
Get the palette group for this card.
void ResetPalette(int palette_index)
Reset a specific palette to original ROM values.
virtual void DrawCustomToolbarButtons()
Draw additional toolbar buttons (called after standard buttons)
void DrawPaletteSelector()
Draw palette selector dropdown.
std::string GetIcon() const override
Material Design icon for this panel.
void ResetColor(int palette_index, int color_index)
Reset a specific color to original ROM value.
gfx::SnesColor GetOriginalColor(int palette_index, int color_index) const
Get original color from ROM (for reset/comparison)
gfx::SnesPalette * GetMutablePalette(int index)
Get mutable palette by index.
absl::Status ImportFromClipboard()
void DiscardChanges()
Discard all unsaved changes.
void SetGameData(zelda3::GameData *game_data)
int GetSelectedPaletteIndex() const
std::string ExportToJson() const
void DrawToolbar()
Draw standard toolbar with save/discard/undo/redo.
void MarkModified(int palette_index, int color_index)
Mark palette as modified.
bool HasUnsavedChanges() const
void DrawBatchOperationsPopup()
Draw batch operations popup.
int GetSelectedColorIndex() const
void SetSelectedPaletteIndex(int index)
void ClearModified(int palette_index)
Clear modified flags for palette.
void DrawMetadataInfo()
Draw palette metadata info panel.
void SetColor(int palette_index, int color_index, const gfx::SnesColor &new_color)
Set a color value (records change for undo)
std::string GetEditorCategory() const override
Editor category this panel belongs to.
virtual const gfx::PaletteGroup * GetPaletteGroup() const =0
virtual const PaletteGroupMetadata & GetMetadata() const =0
Get metadata for this palette group.
absl::Status SaveToRom()
Save all modified palettes to ROM.
absl::Status WriteColorToRom(int palette_index, int color_index, const gfx::SnesColor &color)
Write a single color to ROM.
virtual void DrawCustomPanels()
Draw additional panels (called after main content)
void DrawColorPicker()
Draw color picker for selected color.
bool IsPaletteModified(int palette_index) const
std::string display_name_
PaletteGroupPanel(const std::string &group_name, const std::string &display_name, Rom *rom, zelda3::GameData *game_data=nullptr)
Construct a new Palette Group Panel.
zelda3::GameData * game_data_
int GetPriority() const override
Get display priority for menu ordering.
bool IsColorModified(int palette_index, int color_index) const
void SetSelectedColorIndex(int index)
void Draw(bool *p_open) override
Draw the card's ImGui UI.
void DrawColorInfo()
Draw color info panel with RGB/SNES/Hex values.
virtual ~PaletteGroupPanel()=default
absl::Status ImportFromJson(const std::string &json)
std::string ExportToClipboard() const
virtual void DrawPaletteGrid()=0
Draw the palette grid specific to this palette type.
std::string GetDisplayName() const override
Human-readable name shown in menus and title bars.
std::string GetId() const override
Unique identifier for this panel.
virtual int GetColorsPerRow() const =0
Get the number of colors per row for grid layout.
Global Sprite palette group panel.
~SpritePalettePanel() override=default
std::string GetIcon() const override
Material Design icon for this panel.
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
static PaletteGroupMetadata InitializeMetadata()
static const PaletteGroupMetadata metadata_
SpritePalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
int GetPriority() const override
Get display priority for menu ordering.
void DrawCustomPanels() override
Draw additional panels (called after main content)
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
Sprites Aux1 palette group panel.
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
static PaletteGroupMetadata InitializeMetadata()
~SpritesAux1PalettePanel() override=default
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
int GetPriority() const override
Get display priority for menu ordering.
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
SpritesAux1PalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
static const PaletteGroupMetadata metadata_
std::string GetIcon() const override
Material Design icon for this panel.
Sprites Aux2 palette group panel.
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
std::string GetIcon() const override
Material Design icon for this panel.
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
~SpritesAux2PalettePanel() override=default
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
int GetPriority() const override
Get display priority for menu ordering.
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
static const PaletteGroupMetadata metadata_
static PaletteGroupMetadata InitializeMetadata()
SpritesAux2PalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
Sprites Aux3 palette group panel.
static PaletteGroupMetadata InitializeMetadata()
int GetColorsPerRow() const override
Get the number of colors per row for grid layout.
SpritesAux3PalettePanel(Rom *rom, zelda3::GameData *game_data=nullptr)
std::string GetIcon() const override
Material Design icon for this panel.
const PaletteGroupMetadata & GetMetadata() const override
Get metadata for this palette group.
int GetPriority() const override
Get display priority for menu ordering.
void DrawPaletteGrid() override
Draw the palette grid specific to this palette type.
static const PaletteGroupMetadata metadata_
gfx::PaletteGroup * GetPaletteGroup() override
Get the palette group for this card.
~SpritesAux3PalettePanel() override=default
Represents a palette of colors for the Super Nintendo Entertainment System (SNES).
#define ICON_MD_LANDSCAPE
Represents a single color change for undo/redo.
gfx::SnesColor original_color
Represents a group of palettes.