from collections import defaultdict
from PyQt5.QtWidgets import QUndoCommand
[docs]class cmdSetCol(QUndoCommand):
"""Sets a color in a color palette
:param palette: Target set of color palettes
:type palette: gamedata.ColorPalettes
:param name: Name of target color palette
:type name: str
:param index: Index of target color
:type index: int
:param color: New color to set to
:type color: QColor
:param orig: Original color
:type orig: QColor
:param desc: Text description of action
:type desc: Str
:param parent: Parent widget, defaults to None
:type parent: QWidget, optional
"""
def __init__(self, palette, name, index, color, orig, desc, parent=None):
super().__init__(desc, parent)
self.palette = palette
self.name = name
self.index = index
self.color = color
self.original_color = (
orig if orig is not None else self.palette[name][index]
)
[docs] def redo(self):
"""Redo setting a color
"""
self.palette[self.name, self.index] = self.color
[docs] def undo(self):
"""Undo setting a color
"""
self.palette[self.name, self.index] = self.original_color
[docs]class cmdSetColPalName(QUndoCommand):
"""Set the name of a color palette
:param palette: Target set of color palettes
:type palette: gamedata.ColorPalettes
:param cur_name: Target name of color palette
:type cur_name: str
:param new_name: New name for color palette
:type new_name: str
:param desc: Text description of action
:type desc: str
:param parent: Parent widget, defaults to None
:type parent: QWidget, optional
"""
def __init__(self, palette, cur_name, new_name, desc, parent=None):
super().__init__(desc, parent)
self.palette = palette
self.cur_name = cur_name
self.new_name = new_name
[docs] def redo(self):
"""Redo setting a color palette name
"""
self.palette.setName(self.cur_name, self.new_name)
[docs] def undo(self):
"""Undo setting a color palette name
"""
self.palette.setName(self.new_name, self.cur_name)
[docs]class cmdAddColPal(QUndoCommand):
"""Add a new sprite/tile color palette
:param palette: Target set of color palettes
:type palette: gamedata.ColorPalettes
:param name: Name of target color palette
:type name: str
:param contents: Contents of new color palette
:type contents: list
:param desc: Text description of action
:type desc: str
:param parent: Parent widget, defaults to None
:type parent: QWidget, optional
"""
def __init__(self, palette, name, contents, desc, parent=None):
super().__init__(desc, parent)
self.palette = palette
self.name = name
self.contents = contents
[docs] def redo(self):
"""Redo adding a color palette
"""
self.palette.addPalette(self.name, self.contents)
[docs] def undo(self):
"""Undo adding a color palette
"""
self.palette.remPalette(self.name)
[docs]class cmdRemColPal(QUndoCommand):
"""Remove a sprite/tile color palette
:param palette: Target set of color palettes
:type palette: gamedata.ColorPalettes
:param name: Name of target color palette
:type name: str
:param desc: Text description of action
:type desc: str
:param parent: Parent widget, defaults to None
:type parent: QWidget, optional
"""
def __init__(self, palette, name, desc, parent=None):
super().__init__(desc, parent)
self.palette = palette
self.name = name
self.contents = self.palette[self.name]
self.index = list(self.palette.keys()).index(self.name)
[docs] def redo(self):
"""Redo removing a color palette
"""
self.palette.remPalette(self.name)
[docs] def undo(self):
"""Undo removing a color palette
"""
self.palette.addPalette(self.name, self.contents, self.index)
[docs]class cmdSetPixBatch(QUndoCommand):
"""Apply a pixel batch update
:param palette: Target set of pixel palettes
:type palette: gamedata.PixelPalettes
:param batch: Set of pixel deltas represented by pixel indexes and new
values
:type batch: defaultdict
:param desc: Text description of action
:type desc: str
:param parent: Parent widget, defaults to None
:type parent: QWidget, optional
"""
def __init__(self, palette, batch, desc, parent=None):
super().__init__(desc, parent)
self.palette = palette
self.batch = batch
self.original_batch = defaultdict(list)
[docs] def redo(self):
"""Redo updating with a pixel batch
"""
for index, updates in self.batch.items():
for row, col, val in updates:
self.original_batch[index].append(
(row, col, self.palette[index][row][col])
)
self.palette[index, row, col] = val
self.palette.batchUpdate()
[docs] def undo(self):
"""Undo updating with a pixel batch
"""
for index, updates in self.original_batch.items():
for row, col, val in updates:
self.palette[index, row, col] = val
self.palette.batchUpdate()
[docs]class cmdAddPixRow(QUndoCommand):
"""Add a row of sprite/tiles to a pixel palette
:param palette: Target set of pixel palettes
:type palette: gamedata.PixelPalettes
:param desc: Text description of action
:type desc: str
:param parent: Parent widget, defaults to None
:type parent: QWidget, optional
"""
def __init__(self, palette, desc, parent=None):
super().__init__(desc, parent)
self.palette = palette
[docs] def redo(self):
"""Redo adding a row of sprites/tiles
"""
self.palette.addRow()
[docs] def undo(self):
"""Undo addign a row of sprites/tiles
"""
self.palette.remRow()
[docs]class cmdRemPixRow(QUndoCommand):
"""Remove a row of sprite/tiles from a pixel palette
:param palette: Target set of pixel palettes
:type palette: gamedata.PixelPalettes
:param desc: Text description of action
:type desc: str
:param parent: Parent widget, defaults to None
:type parent: QWidget, optional
"""
def __init__(self, palette, desc, parent=None):
super().__init__(desc, parent)
self.palette = palette
self.row = []
[docs] def redo(self):
"""Redo removing a row of sprites/tiles
"""
self.row = self.palette.remRow()
[docs] def undo(self):
"""Undo removing a row of sprites/tiles
"""
self.palette.addRow(self.row)