[nostalgia/core/studio] Add delete tile
This commit is contained in:
parent
4ae0becf79
commit
7ae0befc37
src/nostalgia/core/studio
@ -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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user