void PaletteEntryEditor::updateCurrentSpritePalette(const char* operationName) { if (UIContext::instance()->activeDocument() && UIContext::instance()->activeDocument()->sprite()) { try { ContextWriter writer(UIContext::instance()); Document* document(writer.document()); Sprite* sprite(writer.sprite()); Palette* newPalette = get_current_palette(); // System current pal frame_t frame = writer.frame(); Palette* currentSpritePalette = sprite->palette(frame); // Sprite current pal int from, to; // Check differences between current sprite palette and current system palette from = to = -1; currentSpritePalette->countDiff(newPalette, &from, &to); if (from >= 0 && to >= from) { DocumentUndo* undo = document->undoHistory(); Cmd* cmd = new cmd::SetPalette(sprite, frame, newPalette); // Add undo information to save the range of pal entries that will be modified. if (m_implantChange && undo->lastExecutedCmd() && undo->lastExecutedCmd()->label() == operationName) { // Implant the cmd in the last CmdSequence if it's // related about color palette modifications ASSERT(dynamic_cast<CmdSequence*>(undo->lastExecutedCmd())); static_cast<CmdSequence*>(undo->lastExecutedCmd())->add(cmd); cmd->execute(UIContext::instance()); } else { Transaction transaction(writer.context(), operationName, ModifyDocument); transaction.execute(cmd); transaction.commit(); } } } catch (base::Exception& e) { Console::showException(e); } } PaletteView* palette_editor = ColorBar::instance()->getPaletteView(); palette_editor->invalidate(); if (!m_redrawTimer.isRunning()) m_redrawTimer.start(); m_redrawAll = false; m_implantChange = true; }