[nostalgia/core/studio] Add Move Up/Down buttons to PaletteEditor
This commit is contained in:
parent
a63586d0b8
commit
f15ad04d33
@ -25,6 +25,7 @@ enum class PaletteEditorCommandId {
|
||||
AddColor,
|
||||
RemoveColor,
|
||||
UpdateColor,
|
||||
MoveColor,
|
||||
};
|
||||
|
||||
struct PaletteEditorColorTableDelegate: public QStyledItemDelegate {
|
||||
@ -138,6 +139,35 @@ class UpdateColorCommand: public QUndoCommand {
|
||||
|
||||
};
|
||||
|
||||
class MoveColorCommand: public QUndoCommand {
|
||||
private:
|
||||
PaletteEditor *m_editor = nullptr;
|
||||
int m_idx = -1;
|
||||
int m_offset = 0;
|
||||
|
||||
public:
|
||||
MoveColorCommand(PaletteEditor *editor, int idx, int offset) {
|
||||
m_editor = editor;
|
||||
m_idx = idx;
|
||||
m_offset = offset;
|
||||
}
|
||||
|
||||
virtual ~MoveColorCommand() = default;
|
||||
|
||||
int id() const override {
|
||||
return static_cast<int>(PaletteEditorCommandId::MoveColor);
|
||||
}
|
||||
|
||||
void redo() override {
|
||||
m_editor->moveColor(m_idx, m_offset);
|
||||
}
|
||||
|
||||
void undo() override {
|
||||
m_editor->moveColor(m_idx + m_offset, -m_offset);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
static QTableWidgetItem *mkCell(QString v, bool editable = true) {
|
||||
auto c = new QTableWidgetItem;
|
||||
@ -164,9 +194,15 @@ PaletteEditor::PaletteEditor(QString path, const studio::Context *ctx, QWidget *
|
||||
auto tb = new QToolBar(tr("Tile Sheet Options"));
|
||||
m_addBtn = new QPushButton(tr("Add"), tb);
|
||||
m_rmBtn = new QPushButton(tr("Remove"), tb);
|
||||
m_moveUpBtn = new QPushButton(tr("Move Up"), tb);
|
||||
m_moveDownBtn = new QPushButton(tr("Move Down"), tb);
|
||||
m_rmBtn->setEnabled(false);
|
||||
m_moveUpBtn->setEnabled(false);
|
||||
m_moveDownBtn->setEnabled(false);
|
||||
tb->addWidget(m_addBtn);
|
||||
tb->addWidget(m_rmBtn);
|
||||
tb->addWidget(m_moveUpBtn);
|
||||
tb->addWidget(m_moveDownBtn);
|
||||
canvasLyt->setMenuBar(tb);
|
||||
|
||||
m_table = new QTableWidget(this);
|
||||
@ -181,6 +217,8 @@ PaletteEditor::PaletteEditor(QString path, const studio::Context *ctx, QWidget *
|
||||
connect(m_table, &QTableWidget::itemSelectionChanged, this, &PaletteEditor::colorSelected);
|
||||
connect(m_addBtn, &QPushButton::clicked, this, &PaletteEditor::addColorClicked);
|
||||
connect(m_rmBtn, &QPushButton::clicked, this, &PaletteEditor::rmColorClicked);
|
||||
connect(m_moveUpBtn, &QPushButton::clicked, this, &PaletteEditor::moveColorUpClicked);
|
||||
connect(m_moveDownBtn, &QPushButton::clicked, this, &PaletteEditor::moveColorDownClicked);
|
||||
connect(m_table, &QTableWidget::cellChanged, this, &PaletteEditor::cellChanged);
|
||||
m_pal = m_ctx->project->loadObj<NostalgiaPalette>(m_itemPath);
|
||||
load();
|
||||
@ -190,18 +228,6 @@ QString PaletteEditor::itemName() const {
|
||||
return m_itemPath.mid(m_itemPath.lastIndexOf('/'));
|
||||
}
|
||||
|
||||
void PaletteEditor::addColor(int idx, Color16 c) {
|
||||
m_pal->colors.insert(static_cast<std::size_t>(idx), c);
|
||||
addTableRow(idx, c);
|
||||
setUnsavedChanges(true);
|
||||
}
|
||||
|
||||
void PaletteEditor::rmColor(int idx) {
|
||||
rmTableRow(idx);
|
||||
m_pal->colors.erase(static_cast<std::size_t>(idx));
|
||||
setUnsavedChanges(true);
|
||||
}
|
||||
|
||||
void PaletteEditor::addTableRow(int i, Color16 c) {
|
||||
disconnect(m_table, &QTableWidget::cellChanged, this, &PaletteEditor::cellChanged);
|
||||
m_table->insertRow(i);
|
||||
@ -229,12 +255,33 @@ void PaletteEditor::setTableRow(int idx, Color16 c) {
|
||||
connect(m_table, &QTableWidget::cellChanged, this, &PaletteEditor::cellChanged);
|
||||
}
|
||||
|
||||
void PaletteEditor::addColor(int idx, Color16 c) {
|
||||
m_pal->colors.insert(static_cast<std::size_t>(idx), c);
|
||||
addTableRow(idx, c);
|
||||
setUnsavedChanges(true);
|
||||
}
|
||||
|
||||
void PaletteEditor::rmColor(int idx) {
|
||||
rmTableRow(idx);
|
||||
m_pal->colors.erase(static_cast<std::size_t>(idx));
|
||||
setUnsavedChanges(true);
|
||||
}
|
||||
|
||||
void PaletteEditor::updateColor(int idx, Color16 c) {
|
||||
m_pal->colors[static_cast<std::size_t>(idx)] = c;
|
||||
setTableRow(idx, c);
|
||||
setUnsavedChanges(true);
|
||||
}
|
||||
|
||||
void PaletteEditor::moveColor(int idx, int offset) {
|
||||
auto c = m_pal->colors[static_cast<std::size_t>(idx)];
|
||||
m_pal->colors.erase(static_cast<std::size_t>(idx));
|
||||
m_pal->colors.insert(static_cast<std::size_t>(idx + offset), c);
|
||||
rmTableRow(idx);
|
||||
addTableRow(idx + offset, c);
|
||||
setUnsavedChanges(true);
|
||||
}
|
||||
|
||||
void PaletteEditor::saveItem() {
|
||||
m_ctx->project->writeObj(m_itemPath, m_pal.get());
|
||||
}
|
||||
@ -260,8 +307,12 @@ void PaletteEditor::colorSelected() {
|
||||
auto row = m_table->currentRow();
|
||||
if (row > -1) {
|
||||
m_rmBtn->setEnabled(true);
|
||||
m_moveUpBtn->setEnabled(row > 0);
|
||||
m_moveDownBtn->setEnabled(row < m_table->rowCount() - 1);
|
||||
} else {
|
||||
m_rmBtn->setEnabled(false);
|
||||
m_moveUpBtn->setEnabled(false);
|
||||
m_moveDownBtn->setEnabled(false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -281,4 +332,14 @@ void PaletteEditor::rmColorClicked() {
|
||||
undoStack()->push(new RemoveColorCommand(this, m_pal->colors[static_cast<std::size_t>(row)], row));
|
||||
}
|
||||
|
||||
void PaletteEditor::moveColorUpClicked() {
|
||||
auto row = m_table->currentRow();
|
||||
undoStack()->push(new MoveColorCommand(this, row, -1));
|
||||
}
|
||||
|
||||
void PaletteEditor::moveColorDownClicked() {
|
||||
auto row = m_table->currentRow();
|
||||
undoStack()->push(new MoveColorCommand(this, row, 1));
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ class PaletteEditor: public studio::Editor {
|
||||
friend class AddColorCommand;
|
||||
friend class RemoveColorCommand;
|
||||
friend class UpdateColorCommand;
|
||||
friend class MoveColorCommand;
|
||||
|
||||
private:
|
||||
const studio::Context *m_ctx = nullptr;
|
||||
@ -26,6 +27,8 @@ class PaletteEditor: public studio::Editor {
|
||||
class QTableWidget *m_table = nullptr;
|
||||
class QPushButton *m_addBtn = nullptr;
|
||||
class QPushButton *m_rmBtn = nullptr;
|
||||
class QPushButton *m_moveUpBtn = nullptr;
|
||||
class QPushButton *m_moveDownBtn = nullptr;
|
||||
|
||||
public:
|
||||
PaletteEditor(QString path, const studio::Context *ctx, QWidget *parent);
|
||||
@ -42,6 +45,8 @@ class PaletteEditor: public studio::Editor {
|
||||
|
||||
void updateColor(int idx, Color16);
|
||||
|
||||
void moveColor(int idx, int offset);
|
||||
|
||||
void saveItem() override;
|
||||
|
||||
private:
|
||||
@ -64,6 +69,10 @@ class PaletteEditor: public studio::Editor {
|
||||
|
||||
void rmColorClicked();
|
||||
|
||||
void moveColorUpClicked();
|
||||
|
||||
void moveColorDownClicked();
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user