Centralized palette management system. More...
#include <palette_manager.h>
Public Types | |
using | ChangeCallback = std::function< void(const PaletteChangeEvent &)> |
Public Member Functions | |
PaletteManager (const PaletteManager &)=delete | |
PaletteManager & | operator= (const PaletteManager &)=delete |
PaletteManager (PaletteManager &&)=delete | |
PaletteManager & | operator= (PaletteManager &&)=delete |
void | Initialize (Rom *rom) |
Initialize the palette manager with ROM data. | |
bool | IsInitialized () const |
Check if manager is initialized. | |
SnesColor | GetColor (const std::string &group_name, int palette_index, int color_index) const |
Get a color from a palette. | |
absl::Status | SetColor (const std::string &group_name, int palette_index, int color_index, const SnesColor &new_color) |
Set a color in a palette (records change for undo) | |
absl::Status | ResetColor (const std::string &group_name, int palette_index, int color_index) |
Reset a single color to its original ROM value. | |
absl::Status | ResetPalette (const std::string &group_name, int palette_index) |
Reset an entire palette to original ROM values. | |
bool | HasUnsavedChanges () const |
Check if there are ANY unsaved changes. | |
std::vector< std::string > | GetModifiedGroups () const |
Get list of modified palette group names. | |
bool | IsGroupModified (const std::string &group_name) const |
Check if a specific palette group has modifications. | |
bool | IsPaletteModified (const std::string &group_name, int palette_index) const |
Check if a specific palette is modified. | |
bool | IsColorModified (const std::string &group_name, int palette_index, int color_index) const |
Check if a specific color is modified. | |
size_t | GetModifiedColorCount () const |
Get count of modified colors across all groups. | |
absl::Status | SaveGroup (const std::string &group_name) |
Save a specific palette group to ROM. | |
absl::Status | SaveAllToRom () |
Save ALL modified palettes to ROM. | |
void | DiscardGroup (const std::string &group_name) |
Discard changes for a specific group. | |
void | DiscardAllChanges () |
Discard ALL unsaved changes. | |
void | Undo () |
Undo the most recent change. | |
void | Redo () |
Redo the most recently undone change. | |
bool | CanUndo () const |
Check if undo is available. | |
bool | CanRedo () const |
Check if redo is available. | |
size_t | GetUndoStackSize () const |
Get size of undo stack. | |
size_t | GetRedoStackSize () const |
Get size of redo stack. | |
void | ClearHistory () |
Clear undo/redo history. | |
int | RegisterChangeListener (ChangeCallback callback) |
Register a callback for palette change events. | |
void | UnregisterChangeListener (int callback_id) |
Unregister a change listener. | |
void | BeginBatch () |
Begin a batch operation (groups multiple changes into one undo step) | |
void | EndBatch () |
End a batch operation. | |
bool | InBatch () const |
Check if currently in a batch operation. | |
Static Public Member Functions | |
static PaletteManager & | Get () |
Get the singleton instance. | |
Private Member Functions | |
PaletteManager ()=default | |
~PaletteManager ()=default | |
PaletteGroup * | GetMutableGroup (const std::string &group_name) |
Helper: Get mutable palette group. | |
const PaletteGroup * | GetGroup (const std::string &group_name) const |
Helper: Get const palette group. | |
SnesColor | GetOriginalColor (const std::string &group_name, int palette_index, int color_index) const |
Helper: Get original color from snapshot. | |
void | RecordChange (const PaletteColorChange &change) |
Helper: Record a change for undo. | |
void | NotifyListeners (const PaletteChangeEvent &event) |
Helper: Notify all listeners of an event. | |
void | MarkModified (const std::string &group_name, int palette_index, int color_index) |
Helper: Mark a color as modified. | |
void | ClearModifiedFlags (const std::string &group_name) |
Helper: Clear modified flags for a group. | |
Private Attributes | |
Rom * | rom_ = nullptr |
ROM instance (not owned) | |
std::unordered_map< std::string, std::vector< SnesPalette > > | original_palettes_ |
std::unordered_map< std::string, std::unordered_set< int > > | modified_palettes_ |
std::unordered_map< std::string, std::unordered_map< int, std::unordered_set< int > > > | modified_colors_ |
std::deque< PaletteColorChange > | undo_stack_ |
Undo/redo stacks. | |
std::deque< PaletteColorChange > | redo_stack_ |
std::unordered_map< int, ChangeCallback > | change_listeners_ |
Change listeners. | |
int | next_callback_id_ = 1 |
int | batch_depth_ = 0 |
Batch operation support. | |
std::vector< PaletteColorChange > | batch_changes_ |
Static Private Attributes | |
static constexpr size_t | kMaxUndoHistory = 500 |
Centralized palette management system.
Singleton coordinator for ALL palette editing operations. Provides:
Thread-safety: This class is NOT thread-safe. All operations must be called from the main UI thread.
Definition at line 68 of file palette_manager.h.
using yaze::gfx::PaletteManager::ChangeCallback = std::function<void(const PaletteChangeEvent&)> |
Definition at line 70 of file palette_manager.h.
|
delete |
|
delete |
|
privatedefault |
|
privatedefault |
|
inlinestatic |
Get the singleton instance.
Definition at line 73 of file palette_manager.h.
Referenced by yaze::editor::PaletteGroupCard::CanRedo(), yaze::editor::PaletteGroupCard::CanUndo(), yaze::editor::PaletteGroupCard::ClearHistory(), yaze::editor::PaletteGroupCard::DiscardChanges(), yaze::editor::PaletteEditor::DrawControlPanel(), yaze::editor::PaletteGroupCard::DrawToolbar(), yaze::editor::PaletteGroupCard::GetOriginalColor(), yaze::editor::PaletteGroupCard::HasUnsavedChanges(), yaze::editor::PaletteGroupCard::IsColorModified(), yaze::editor::PaletteGroupCard::IsPaletteModified(), yaze::editor::DungeonEditorV2::Load(), yaze::editor::PaletteEditor::Load(), yaze::editor::PaletteGroupCard::Redo(), yaze::editor::PaletteGroupCard::ResetColor(), yaze::editor::PaletteGroupCard::ResetPalette(), yaze::editor::DungeonEditorV2::Save(), yaze::editor::PaletteGroupCard::SaveToRom(), yaze::editor::PaletteGroupCard::SetColor(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), yaze::gfx::anonymous_namespace{palette_manager_test.cc}::TEST_F(), and yaze::editor::PaletteGroupCard::Undo().
|
delete |
|
delete |
void yaze::gfx::PaletteManager::Initialize | ( | Rom * | rom | ) |
Initialize the palette manager with ROM data.
rom | Pointer to ROM instance (must outlive PaletteManager) |
Definition at line 12 of file palette_manager.cc.
References ClearHistory(), modified_colors_, modified_palettes_, yaze::Rom::mutable_palette_group(), original_palettes_, and rom_.
Referenced by yaze::editor::DungeonEditorV2::Load(), and yaze::editor::PaletteEditor::Load().
|
inline |
Check if manager is initialized.
Definition at line 95 of file palette_manager.h.
References rom_.
Referenced by DiscardAllChanges(), DiscardGroup(), GetGroup(), GetMutableGroup(), ResetPalette(), SaveAllToRom(), SaveGroup(), and SetColor().
SnesColor yaze::gfx::PaletteManager::GetColor | ( | const std::string & | group_name, |
int | palette_index, | ||
int | color_index | ||
) | const |
Get a color from a palette.
group_name | Palette group name |
palette_index | Palette index within group |
color_index | Color index within palette |
Definition at line 53 of file palette_manager.cc.
References GetGroup().
Referenced by yaze::editor::PaletteGroupCard::GetOriginalColor().
absl::Status yaze::gfx::PaletteManager::SetColor | ( | const std::string & | group_name, |
int | palette_index, | ||
int | color_index, | ||
const SnesColor & | new_color | ||
) |
Set a color in a palette (records change for undo)
group_name | Palette group name |
palette_index | Palette index within group |
color_index | Color index within palette |
new_color | The new color value |
Definition at line 69 of file palette_manager.cc.
References batch_changes_, GetMutableGroup(), InBatch(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kColorChanged, MarkModified(), NotifyListeners(), and RecordChange().
Referenced by ResetColor(), and yaze::editor::PaletteGroupCard::SetColor().
absl::Status yaze::gfx::PaletteManager::ResetColor | ( | const std::string & | group_name, |
int | palette_index, | ||
int | color_index | ||
) |
Reset a single color to its original ROM value.
Definition at line 134 of file palette_manager.cc.
References GetOriginalColor(), and SetColor().
Referenced by yaze::editor::PaletteGroupCard::ResetColor().
absl::Status yaze::gfx::PaletteManager::ResetPalette | ( | const std::string & | group_name, |
int | palette_index | ||
) |
Reset an entire palette to original ROM values.
Definition at line 140 of file palette_manager.cc.
References GetMutableGroup(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kPaletteReset, modified_colors_, modified_palettes_, NotifyListeners(), and original_palettes_.
Referenced by yaze::editor::PaletteGroupCard::ResetPalette().
bool yaze::gfx::PaletteManager::HasUnsavedChanges | ( | ) | const |
Check if there are ANY unsaved changes.
Definition at line 175 of file palette_manager.cc.
References modified_palettes_.
Referenced by yaze::editor::PaletteEditor::DrawControlPanel().
std::vector< std::string > yaze::gfx::PaletteManager::GetModifiedGroups | ( | ) | const |
Get list of modified palette group names.
Definition at line 179 of file palette_manager.cc.
References modified_palettes_.
Referenced by DiscardAllChanges(), and SaveAllToRom().
bool yaze::gfx::PaletteManager::IsGroupModified | ( | const std::string & | group_name | ) | const |
Check if a specific palette group has modifications.
Definition at line 187 of file palette_manager.cc.
References modified_palettes_.
Referenced by yaze::editor::PaletteGroupCard::DrawToolbar(), and yaze::editor::PaletteGroupCard::HasUnsavedChanges().
bool yaze::gfx::PaletteManager::IsPaletteModified | ( | const std::string & | group_name, |
int | palette_index | ||
) | const |
Check if a specific palette is modified.
Definition at line 192 of file palette_manager.cc.
References modified_palettes_.
Referenced by yaze::editor::PaletteGroupCard::IsPaletteModified().
bool yaze::gfx::PaletteManager::IsColorModified | ( | const std::string & | group_name, |
int | palette_index, | ||
int | color_index | ||
) | const |
Check if a specific color is modified.
Definition at line 201 of file palette_manager.cc.
References modified_colors_.
Referenced by yaze::editor::PaletteGroupCard::IsColorModified().
size_t yaze::gfx::PaletteManager::GetModifiedColorCount | ( | ) | const |
Get count of modified colors across all groups.
Definition at line 217 of file palette_manager.cc.
References modified_colors_.
Referenced by yaze::editor::PaletteEditor::DrawControlPanel().
absl::Status yaze::gfx::PaletteManager::SaveGroup | ( | const std::string & | group_name | ) |
Save a specific palette group to ROM.
Definition at line 229 of file palette_manager.cc.
References ClearModifiedFlags(), GetMutableGroup(), yaze::gfx::GetPaletteAddress(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kGroupSaved, modified_colors_, modified_palettes_, NotifyListeners(), original_palettes_, rom_, yaze::Rom::set_dirty(), and yaze::Rom::WriteShort().
Referenced by SaveAllToRom(), and yaze::editor::PaletteGroupCard::SaveToRom().
absl::Status yaze::gfx::PaletteManager::SaveAllToRom | ( | ) |
Save ALL modified palettes to ROM.
Definition at line 284 of file palette_manager.cc.
References GetModifiedGroups(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kAllSaved, NotifyListeners(), RETURN_IF_ERROR, and SaveGroup().
Referenced by yaze::editor::PaletteEditor::DrawControlPanel(), and yaze::editor::DungeonEditorV2::Save().
void yaze::gfx::PaletteManager::DiscardGroup | ( | const std::string & | group_name | ) |
Discard changes for a specific group.
Definition at line 301 of file palette_manager.cc.
References ClearModifiedFlags(), GetMutableGroup(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kGroupDiscarded, modified_palettes_, NotifyListeners(), and original_palettes_.
Referenced by DiscardAllChanges(), and yaze::editor::PaletteGroupCard::DiscardChanges().
void yaze::gfx::PaletteManager::DiscardAllChanges | ( | ) |
Discard ALL unsaved changes.
Definition at line 336 of file palette_manager.cc.
References ClearHistory(), DiscardGroup(), GetModifiedGroups(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kAllDiscarded, and NotifyListeners().
Referenced by yaze::editor::PaletteEditor::DrawControlPanel().
void yaze::gfx::PaletteManager::Undo | ( | ) |
Undo the most recent change.
Definition at line 357 of file palette_manager.cc.
References CanUndo(), GetMutableGroup(), yaze::gfx::PaletteChangeEvent::group_name, yaze::gfx::PaletteChangeEvent::kColorChanged, NotifyListeners(), redo_stack_, and undo_stack_.
Referenced by yaze::editor::PaletteGroupCard::Undo().
void yaze::gfx::PaletteManager::Redo | ( | ) |
Redo the most recently undone change.
Definition at line 384 of file palette_manager.cc.
References CanRedo(), GetMutableGroup(), yaze::gfx::PaletteChangeEvent::group_name, yaze::gfx::PaletteChangeEvent::kColorChanged, NotifyListeners(), redo_stack_, and undo_stack_.
Referenced by yaze::editor::PaletteGroupCard::Redo().
|
inline |
Check if undo is available.
Definition at line 202 of file palette_manager.h.
References undo_stack_.
Referenced by yaze::editor::PaletteGroupCard::CanUndo(), and Undo().
|
inline |
Check if redo is available.
Definition at line 207 of file palette_manager.h.
References redo_stack_.
Referenced by yaze::editor::PaletteGroupCard::CanRedo(), and Redo().
|
inline |
|
inline |
void yaze::gfx::PaletteManager::ClearHistory | ( | ) |
Clear undo/redo history.
Definition at line 411 of file palette_manager.cc.
References redo_stack_, and undo_stack_.
Referenced by yaze::editor::PaletteGroupCard::ClearHistory(), DiscardAllChanges(), and Initialize().
int yaze::gfx::PaletteManager::RegisterChangeListener | ( | ChangeCallback | callback | ) |
Register a callback for palette change events.
Definition at line 418 of file palette_manager.cc.
References change_listeners_, and next_callback_id_.
void yaze::gfx::PaletteManager::UnregisterChangeListener | ( | int | callback_id | ) |
Unregister a change listener.
Definition at line 424 of file palette_manager.cc.
References change_listeners_.
void yaze::gfx::PaletteManager::BeginBatch | ( | ) |
Begin a batch operation (groups multiple changes into one undo step)
Definition at line 430 of file palette_manager.cc.
References batch_changes_, and batch_depth_.
void yaze::gfx::PaletteManager::EndBatch | ( | ) |
End a batch operation.
Definition at line 437 of file palette_manager.cc.
References batch_changes_, batch_depth_, yaze::gfx::PaletteChangeEvent::group_name, yaze::gfx::PaletteChangeEvent::kColorChanged, NotifyListeners(), and RecordChange().
|
inline |
Check if currently in a batch operation.
Definition at line 253 of file palette_manager.h.
References batch_depth_.
Referenced by SetColor().
|
private |
Helper: Get mutable palette group.
Definition at line 462 of file palette_manager.cc.
References IsInitialized(), yaze::Rom::mutable_palette_group(), and rom_.
Referenced by DiscardGroup(), Redo(), ResetPalette(), SaveGroup(), SetColor(), and Undo().
|
private |
Helper: Get const palette group.
Definition at line 473 of file palette_manager.cc.
References IsInitialized(), and rom_.
Referenced by GetColor().
|
private |
Helper: Get original color from snapshot.
Definition at line 487 of file palette_manager.cc.
References original_palettes_.
Referenced by ResetColor().
|
private |
Helper: Record a change for undo.
Definition at line 503 of file palette_manager.cc.
References kMaxUndoHistory, redo_stack_, and undo_stack_.
Referenced by EndBatch(), and SetColor().
|
private |
Helper: Notify all listeners of an event.
Definition at line 515 of file palette_manager.cc.
References change_listeners_.
Referenced by DiscardAllChanges(), DiscardGroup(), EndBatch(), Redo(), ResetPalette(), SaveAllToRom(), SaveGroup(), SetColor(), and Undo().
|
private |
Helper: Mark a color as modified.
Definition at line 521 of file palette_manager.cc.
References modified_colors_, and modified_palettes_.
Referenced by SetColor().
|
private |
Helper: Clear modified flags for a group.
Definition at line 527 of file palette_manager.cc.
References modified_colors_, and modified_palettes_.
Referenced by DiscardGroup(), and SaveGroup().
|
private |
ROM instance (not owned)
Definition at line 285 of file palette_manager.h.
Referenced by GetGroup(), GetMutableGroup(), Initialize(), IsInitialized(), and SaveGroup().
|
private |
Original palette snapshots (loaded from ROM for reset/comparison) Key: group_name, Value: vector of original palettes
Definition at line 290 of file palette_manager.h.
Referenced by DiscardGroup(), GetOriginalColor(), Initialize(), ResetPalette(), and SaveGroup().
|
private |
Modified tracking Key: group_name, Value: set of modified palette indices
Definition at line 295 of file palette_manager.h.
Referenced by ClearModifiedFlags(), DiscardGroup(), GetModifiedGroups(), HasUnsavedChanges(), Initialize(), IsGroupModified(), IsPaletteModified(), MarkModified(), ResetPalette(), and SaveGroup().
|
private |
Detailed color modification tracking Key: group_name, Value: map of palette_index -> set of color indices
Definition at line 301 of file palette_manager.h.
Referenced by ClearModifiedFlags(), GetModifiedColorCount(), Initialize(), IsColorModified(), MarkModified(), ResetPalette(), and SaveGroup().
|
private |
Undo/redo stacks.
Definition at line 304 of file palette_manager.h.
Referenced by CanUndo(), ClearHistory(), GetUndoStackSize(), RecordChange(), Redo(), and Undo().
|
private |
Definition at line 305 of file palette_manager.h.
Referenced by CanRedo(), ClearHistory(), GetRedoStackSize(), RecordChange(), Redo(), and Undo().
|
staticconstexprprivate |
Definition at line 306 of file palette_manager.h.
Referenced by RecordChange().
|
private |
Change listeners.
Definition at line 309 of file palette_manager.h.
Referenced by NotifyListeners(), RegisterChangeListener(), and UnregisterChangeListener().
|
private |
Definition at line 310 of file palette_manager.h.
Referenced by RegisterChangeListener().
|
private |
Batch operation support.
Definition at line 313 of file palette_manager.h.
Referenced by BeginBatch(), EndBatch(), and InBatch().
|
private |
Definition at line 314 of file palette_manager.h.
Referenced by BeginBatch(), EndBatch(), and SetColor().