yaze 0.3.2
Link to the Past ROM Editor
 
Loading...
Searching...
No Matches
yaze::gfx::PaletteManager Class Reference

Centralized palette management system. More...

#include <palette_manager.h>

Collaboration diagram for yaze::gfx::PaletteManager:

Public Types

using ChangeCallback = std::function<void(const PaletteChangeEvent&)>
 

Public Member Functions

 PaletteManager (const PaletteManager &)=delete
 
PaletteManageroperator= (const PaletteManager &)=delete
 
 PaletteManager (PaletteManager &&)=delete
 
PaletteManageroperator= (PaletteManager &&)=delete
 
void Initialize (zelda3::GameData *game_data)
 Initialize the palette manager with GameData.
 
void Initialize (Rom *rom)
 Legacy initialization with ROM (deprecated, use GameData version)
 
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.
 
absl::Status ApplyPreviewChanges ()
 Apply preview changes to other editors without saving to ROM.
 
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 PaletteManagerGet ()
 Get the singleton instance.
 

Private Member Functions

 PaletteManager ()=default
 
 ~PaletteManager ()=default
 
PaletteGroupGetMutableGroup (const std::string &group_name)
 Helper: Get mutable palette group.
 
const PaletteGroupGetGroup (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

zelda3::GameDatagame_data_ = nullptr
 GameData instance (not owned) - preferred.
 
Romrom_ = nullptr
 ROM instance (not owned) - legacy, used when game_data_ is null.
 
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< PaletteColorChangeundo_stack_
 Undo/redo stacks.
 
std::deque< PaletteColorChangeredo_stack_
 
std::unordered_map< int, ChangeCallbackchange_listeners_
 Change listeners.
 
int next_callback_id_ = 1
 
int batch_depth_ = 0
 Batch operation support.
 
std::vector< PaletteColorChangebatch_changes_
 

Static Private Attributes

static constexpr size_t kMaxUndoHistory = 500
 

Detailed Description

Centralized palette management system.

Singleton coordinator for ALL palette editing operations. Provides:

  • Global dirty tracking across all palette groups
  • Transaction-based editing with automatic ROM synchronization
  • Unified undo/redo stack shared across all editors
  • Batch operations (save all, discard all)
  • Change notifications via observer pattern
  • Conflict resolution when multiple editors modify same palette

Thread-safety: This class is NOT thread-safe. All operations must be called from the main UI thread.

Definition at line 74 of file palette_manager.h.

Member Typedef Documentation

◆ ChangeCallback

Definition at line 76 of file palette_manager.h.

Constructor & Destructor Documentation

◆ PaletteManager() [1/3]

yaze::gfx::PaletteManager::PaletteManager ( const PaletteManager & )
delete

◆ PaletteManager() [2/3]

yaze::gfx::PaletteManager::PaletteManager ( PaletteManager && )
delete

◆ PaletteManager() [3/3]

yaze::gfx::PaletteManager::PaletteManager ( )
privatedefault

◆ ~PaletteManager()

yaze::gfx::PaletteManager::~PaletteManager ( )
privatedefault

Member Function Documentation

◆ Get()

◆ operator=() [1/2]

PaletteManager & yaze::gfx::PaletteManager::operator= ( const PaletteManager & )
delete

◆ operator=() [2/2]

PaletteManager & yaze::gfx::PaletteManager::operator= ( PaletteManager && )
delete

◆ Initialize() [1/2]

void yaze::gfx::PaletteManager::Initialize ( zelda3::GameData * game_data)

Initialize the palette manager with GameData.

Parameters
game_dataPointer to GameData instance (must outlive PaletteManager)

Definition at line 15 of file palette_manager.cc.

References yaze::gfx::PaletteGroup::clear(), ClearHistory(), game_data_, yaze::gfx::PaletteGroupMap::get_group(), modified_colors_, modified_palettes_, original_palettes_, yaze::zelda3::GameData::palette_groups, and rom_.

Referenced by yaze::editor::DungeonEditorV2::Load(), and yaze::editor::PaletteEditor::Load().

Here is the call graph for this function:

◆ Initialize() [2/2]

void yaze::gfx::PaletteManager::Initialize ( Rom * rom)

Legacy initialization with ROM (deprecated, use GameData version)

Parameters
romPointer to ROM instance (must outlive PaletteManager)

Definition at line 55 of file palette_manager.cc.

References ClearHistory(), game_data_, modified_colors_, modified_palettes_, and rom_.

Here is the call graph for this function:

◆ IsInitialized()

bool yaze::gfx::PaletteManager::IsInitialized ( ) const
inline

Check if manager is initialized.

Definition at line 107 of file palette_manager.h.

References game_data_, and rom_.

Referenced by ApplyPreviewChanges(), DiscardAllChanges(), DiscardGroup(), GetGroup(), GetMutableGroup(), ResetPalette(), SaveAllToRom(), SaveGroup(), and SetColor().

◆ GetColor()

SnesColor yaze::gfx::PaletteManager::GetColor ( const std::string & group_name,
int palette_index,
int color_index ) const

Get a color from a palette.

Parameters
group_namePalette group name
palette_indexPalette index within group
color_indexColor index within palette
Returns
The color, or default SnesColor if invalid indices

Definition at line 72 of file palette_manager.cc.

References GetGroup().

Referenced by yaze::editor::PaletteGroupPanel::GetOriginalColor().

Here is the call graph for this function:

◆ SetColor()

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)

Parameters
group_namePalette group name
palette_indexPalette index within group
color_indexColor index within palette
new_colorThe new color value
Returns
Status of the operation

Definition at line 87 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::PaletteGroupPanel::SetColor().

◆ ResetColor()

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 150 of file palette_manager.cc.

References GetOriginalColor(), and SetColor().

Referenced by yaze::editor::PaletteGroupPanel::ResetColor().

Here is the call graph for this function:

◆ ResetPalette()

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 156 of file palette_manager.cc.

References GetMutableGroup(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kPaletteReset, modified_colors_, modified_palettes_, NotifyListeners(), and original_palettes_.

Referenced by yaze::editor::PaletteGroupPanel::ResetPalette().

Here is the call graph for this function:

◆ HasUnsavedChanges()

bool yaze::gfx::PaletteManager::HasUnsavedChanges ( ) const

Check if there are ANY unsaved changes.

Definition at line 190 of file palette_manager.cc.

References modified_palettes_.

Referenced by yaze::editor::PaletteEditor::DrawControlPanel().

◆ GetModifiedGroups()

std::vector< std::string > yaze::gfx::PaletteManager::GetModifiedGroups ( ) const

Get list of modified palette group names.

Definition at line 194 of file palette_manager.cc.

References modified_palettes_.

Referenced by ApplyPreviewChanges(), DiscardAllChanges(), and SaveAllToRom().

◆ IsGroupModified()

bool yaze::gfx::PaletteManager::IsGroupModified ( const std::string & group_name) const

Check if a specific palette group has modifications.

Definition at line 202 of file palette_manager.cc.

References modified_palettes_.

Referenced by yaze::editor::PaletteGroupPanel::DrawToolbar(), and yaze::editor::PaletteGroupPanel::HasUnsavedChanges().

◆ IsPaletteModified()

bool yaze::gfx::PaletteManager::IsPaletteModified ( const std::string & group_name,
int palette_index ) const

Check if a specific palette is modified.

Definition at line 207 of file palette_manager.cc.

References modified_palettes_.

Referenced by yaze::editor::PaletteGroupPanel::IsPaletteModified().

◆ IsColorModified()

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 216 of file palette_manager.cc.

References modified_colors_.

Referenced by yaze::editor::PaletteGroupPanel::IsColorModified().

◆ GetModifiedColorCount()

size_t yaze::gfx::PaletteManager::GetModifiedColorCount ( ) const

Get count of modified colors across all groups.

Definition at line 231 of file palette_manager.cc.

References modified_colors_.

Referenced by yaze::editor::PaletteEditor::DrawControlPanel().

◆ SaveGroup()

◆ SaveAllToRom()

absl::Status yaze::gfx::PaletteManager::SaveAllToRom ( )

Save ALL modified palettes to ROM.

Definition at line 302 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().

Here is the call graph for this function:

◆ DiscardGroup()

void yaze::gfx::PaletteManager::DiscardGroup ( const std::string & group_name)

Discard changes for a specific group.

Definition at line 343 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::PaletteGroupPanel::DiscardChanges().

Here is the call graph for this function:

◆ DiscardAllChanges()

void yaze::gfx::PaletteManager::DiscardAllChanges ( )

◆ ApplyPreviewChanges()

absl::Status yaze::gfx::PaletteManager::ApplyPreviewChanges ( )

Apply preview changes to other editors without saving to ROM.

This triggers bitmap propagation notification so other editors can refresh their visuals with the modified palettes. Use this for "live preview" functionality before committing to ROM.

Returns
Status of the operation

Definition at line 319 of file palette_manager.cc.

References yaze::gfx::Arena::Get(), GetModifiedGroups(), IsInitialized(), yaze::gfx::PaletteChangeEvent::kAllSaved, NotifyListeners(), and yaze::gfx::Arena::NotifyPaletteModified().

Referenced by yaze::editor::PaletteEditor::DrawControlPanel().

◆ Undo()

void yaze::gfx::PaletteManager::Undo ( )

◆ Redo()

void yaze::gfx::PaletteManager::Redo ( )

◆ CanUndo()

bool yaze::gfx::PaletteManager::CanUndo ( ) const
inline

Check if undo is available.

Definition at line 225 of file palette_manager.h.

References undo_stack_.

Referenced by yaze::editor::PaletteGroupPanel::CanUndo(), and Undo().

◆ CanRedo()

bool yaze::gfx::PaletteManager::CanRedo ( ) const
inline

Check if redo is available.

Definition at line 230 of file palette_manager.h.

References redo_stack_.

Referenced by yaze::editor::PaletteGroupPanel::CanRedo(), and Redo().

◆ GetUndoStackSize()

size_t yaze::gfx::PaletteManager::GetUndoStackSize ( ) const
inline

Get size of undo stack.

Definition at line 235 of file palette_manager.h.

References undo_stack_.

◆ GetRedoStackSize()

size_t yaze::gfx::PaletteManager::GetRedoStackSize ( ) const
inline

Get size of redo stack.

Definition at line 240 of file palette_manager.h.

References redo_stack_.

◆ ClearHistory()

void yaze::gfx::PaletteManager::ClearHistory ( )

Clear undo/redo history.

Definition at line 452 of file palette_manager.cc.

References redo_stack_, and undo_stack_.

Referenced by yaze::editor::PaletteGroupPanel::ClearHistory(), DiscardAllChanges(), Initialize(), and Initialize().

◆ RegisterChangeListener()

int yaze::gfx::PaletteManager::RegisterChangeListener ( ChangeCallback callback)

Register a callback for palette change events.

Returns
Unique ID for this callback (use to unregister)

Definition at line 459 of file palette_manager.cc.

References change_listeners_, and next_callback_id_.

◆ UnregisterChangeListener()

void yaze::gfx::PaletteManager::UnregisterChangeListener ( int callback_id)

Unregister a change listener.

Definition at line 465 of file palette_manager.cc.

References change_listeners_.

◆ BeginBatch()

void yaze::gfx::PaletteManager::BeginBatch ( )

Begin a batch operation (groups multiple changes into one undo step)

Note
Must be paired with EndBatch()

Definition at line 471 of file palette_manager.cc.

References batch_changes_, and batch_depth_.

◆ EndBatch()

void yaze::gfx::PaletteManager::EndBatch ( )

End a batch operation.

Definition at line 478 of file palette_manager.cc.

References batch_changes_, batch_depth_, yaze::gfx::PaletteChangeEvent::group_name, yaze::gfx::PaletteChangeEvent::kColorChanged, NotifyListeners(), and RecordChange().

Here is the call graph for this function:

◆ InBatch()

bool yaze::gfx::PaletteManager::InBatch ( ) const
inline

Check if currently in a batch operation.

Definition at line 276 of file palette_manager.h.

References batch_depth_.

Referenced by SetColor().

◆ GetMutableGroup()

PaletteGroup * yaze::gfx::PaletteManager::GetMutableGroup ( const std::string & group_name)
private

Helper: Get mutable palette group.

Definition at line 503 of file palette_manager.cc.

References game_data_, yaze::gfx::PaletteGroupMap::get_group(), IsInitialized(), and yaze::zelda3::GameData::palette_groups.

Referenced by DiscardGroup(), Redo(), ResetPalette(), SaveGroup(), SetColor(), and Undo().

Here is the call graph for this function:

◆ GetGroup()

const PaletteGroup * yaze::gfx::PaletteManager::GetGroup ( const std::string & group_name) const
private

Helper: Get const palette group.

Definition at line 517 of file palette_manager.cc.

References game_data_, IsInitialized(), and yaze::zelda3::GameData::palette_groups.

Referenced by GetColor().

Here is the call graph for this function:

◆ GetOriginalColor()

SnesColor yaze::gfx::PaletteManager::GetOriginalColor ( const std::string & group_name,
int palette_index,
int color_index ) const
private

Helper: Get original color from snapshot.

Definition at line 533 of file palette_manager.cc.

References original_palettes_.

Referenced by ResetColor().

◆ RecordChange()

void yaze::gfx::PaletteManager::RecordChange ( const PaletteColorChange & change)
private

Helper: Record a change for undo.

Definition at line 549 of file palette_manager.cc.

References kMaxUndoHistory, redo_stack_, and undo_stack_.

Referenced by EndBatch(), and SetColor().

◆ NotifyListeners()

void yaze::gfx::PaletteManager::NotifyListeners ( const PaletteChangeEvent & event)
private

Helper: Notify all listeners of an event.

Definition at line 561 of file palette_manager.cc.

References change_listeners_.

Referenced by ApplyPreviewChanges(), DiscardAllChanges(), DiscardGroup(), EndBatch(), Redo(), ResetPalette(), SaveAllToRom(), SaveGroup(), SetColor(), and Undo().

◆ MarkModified()

void yaze::gfx::PaletteManager::MarkModified ( const std::string & group_name,
int palette_index,
int color_index )
private

Helper: Mark a color as modified.

Definition at line 567 of file palette_manager.cc.

References modified_colors_, and modified_palettes_.

Referenced by SetColor().

◆ ClearModifiedFlags()

void yaze::gfx::PaletteManager::ClearModifiedFlags ( const std::string & group_name)
private

Helper: Clear modified flags for a group.

Definition at line 573 of file palette_manager.cc.

References modified_colors_, and modified_palettes_.

Referenced by DiscardGroup(), and SaveGroup().

Member Data Documentation

◆ game_data_

zelda3::GameData* yaze::gfx::PaletteManager::game_data_ = nullptr
private

GameData instance (not owned) - preferred.

Definition at line 308 of file palette_manager.h.

Referenced by GetGroup(), GetMutableGroup(), Initialize(), Initialize(), and IsInitialized().

◆ rom_

Rom* yaze::gfx::PaletteManager::rom_ = nullptr
private

ROM instance (not owned) - legacy, used when game_data_ is null.

Definition at line 311 of file palette_manager.h.

Referenced by Initialize(), Initialize(), IsInitialized(), and SaveGroup().

◆ original_palettes_

std::unordered_map<std::string, std::vector<SnesPalette> > yaze::gfx::PaletteManager::original_palettes_
private

Original palette snapshots (loaded from ROM for reset/comparison) Key: group_name, Value: vector of original palettes

Definition at line 315 of file palette_manager.h.

Referenced by DiscardGroup(), GetOriginalColor(), Initialize(), ResetPalette(), and SaveGroup().

◆ modified_palettes_

std::unordered_map<std::string, std::unordered_set<int> > yaze::gfx::PaletteManager::modified_palettes_
private

Modified tracking Key: group_name, Value: set of modified palette indices

Definition at line 319 of file palette_manager.h.

Referenced by ClearModifiedFlags(), DiscardGroup(), GetModifiedGroups(), HasUnsavedChanges(), Initialize(), Initialize(), IsGroupModified(), IsPaletteModified(), MarkModified(), ResetPalette(), and SaveGroup().

◆ modified_colors_

std::unordered_map<std::string, std::unordered_map<int, std::unordered_set<int> > > yaze::gfx::PaletteManager::modified_colors_
private

Detailed color modification tracking Key: group_name, Value: map of palette_index -> set of color indices

Definition at line 325 of file palette_manager.h.

Referenced by ClearModifiedFlags(), GetModifiedColorCount(), Initialize(), Initialize(), IsColorModified(), MarkModified(), ResetPalette(), and SaveGroup().

◆ undo_stack_

std::deque<PaletteColorChange> yaze::gfx::PaletteManager::undo_stack_
private

Undo/redo stacks.

Definition at line 328 of file palette_manager.h.

Referenced by CanUndo(), ClearHistory(), GetUndoStackSize(), RecordChange(), Redo(), and Undo().

◆ redo_stack_

std::deque<PaletteColorChange> yaze::gfx::PaletteManager::redo_stack_
private

Definition at line 329 of file palette_manager.h.

Referenced by CanRedo(), ClearHistory(), GetRedoStackSize(), RecordChange(), Redo(), and Undo().

◆ kMaxUndoHistory

constexpr size_t yaze::gfx::PaletteManager::kMaxUndoHistory = 500
staticconstexprprivate

Definition at line 330 of file palette_manager.h.

Referenced by RecordChange().

◆ change_listeners_

std::unordered_map<int, ChangeCallback> yaze::gfx::PaletteManager::change_listeners_
private

Change listeners.

Definition at line 333 of file palette_manager.h.

Referenced by NotifyListeners(), RegisterChangeListener(), and UnregisterChangeListener().

◆ next_callback_id_

int yaze::gfx::PaletteManager::next_callback_id_ = 1
private

Definition at line 334 of file palette_manager.h.

Referenced by RegisterChangeListener().

◆ batch_depth_

int yaze::gfx::PaletteManager::batch_depth_ = 0
private

Batch operation support.

Definition at line 337 of file palette_manager.h.

Referenced by BeginBatch(), EndBatch(), and InBatch().

◆ batch_changes_

std::vector<PaletteColorChange> yaze::gfx::PaletteManager::batch_changes_
private

Definition at line 338 of file palette_manager.h.

Referenced by BeginBatch(), EndBatch(), and SetColor().


The documentation for this class was generated from the following files: