[nostalgia/core/studio] Add delete tile

This commit is contained in:
Gary Talent 2020-03-22 01:34:09 -05:00
parent 4ae0becf79
commit 7ae0befc37
3 changed files with 28 additions and 3 deletions

@ -95,6 +95,14 @@ Rectangle {
sheetData.insertTileCmd(tile.tileNumber); sheetData.insertTileCmd(tile.tileNumber);
} }
} }
MenuItem {
text: "Delete Tile"
onTriggered: {
var tile = mouseArea.tileAt(contextMenu.x, contextMenu.y);
sheetData.deleteTileCmd(tile.tileNumber);
}
}
} }
onPositionChanged: sheetData.updatePixel(pixelAt(mouseX, mouseY)) onPositionChanged: sheetData.updatePixel(pixelAt(mouseX, mouseY))

@ -190,11 +190,13 @@ class InsertTileCommand: public QUndoCommand {
private: private:
SheetData *m_sheetData = nullptr; SheetData *m_sheetData = nullptr;
int m_idx = 0; int m_idx = 0;
bool m_delete = false;
public: public:
InsertTileCommand(SheetData *sheetData, int idx) { InsertTileCommand(SheetData *sheetData, int idx, bool del = false) {
m_sheetData = sheetData; m_sheetData = sheetData;
m_idx = idx; m_idx = idx;
m_delete = del;
} }
virtual ~InsertTileCommand() = default; virtual ~InsertTileCommand() = default;
@ -204,12 +206,20 @@ class InsertTileCommand: public QUndoCommand {
} }
void redo() override { void redo() override {
if (m_delete) {
m_sheetData->deleteTile(m_idx);
} else {
m_sheetData->insertTile(m_idx); m_sheetData->insertTile(m_idx);
} }
}
void undo() override { void undo() override {
if (m_delete) {
m_sheetData->insertTile(m_idx);
} else {
m_sheetData->deleteTile(m_idx); m_sheetData->deleteTile(m_idx);
} }
}
}; };
@ -235,6 +245,10 @@ void SheetData::insertTileCmd(int tileIdx) {
m_cmdStack.push(new InsertTileCommand(this, tileIdx)); m_cmdStack.push(new InsertTileCommand(this, tileIdx));
} }
void SheetData::deleteTileCmd(int tileIdx) {
m_cmdStack.push(new InsertTileCommand(this, tileIdx, true));
}
int SheetData::columns() const { int SheetData::columns() const {
return m_columns; return m_columns;
} }
@ -311,6 +325,7 @@ void SheetData::insertTile(int tileIdx) {
void SheetData::deleteTile(int tileIdx) { void SheetData::deleteTile(int tileIdx) {
m_pixels.remove(tileIdx * PixelsPerTile, PixelsPerTile); m_pixels.remove(tileIdx * PixelsPerTile, PixelsPerTile);
emit pixelsChanged(); emit pixelsChanged();
emit changeOccurred();
} }
void SheetData::setSelectedColor(int index) { void SheetData::setSelectedColor(int index) {

@ -45,6 +45,8 @@ class SheetData: public QObject {
Q_INVOKABLE void insertTileCmd(int tileIdx); Q_INVOKABLE void insertTileCmd(int tileIdx);
Q_INVOKABLE void deleteTileCmd(int tileIdx);
[[nodiscard]] int columns() const; [[nodiscard]] int columns() const;
[[nodiscard]] int rows() const; [[nodiscard]] int rows() const;