Fix some tool button issues

This commit is contained in:
GriffinR 2025-05-11 18:13:51 -04:00
parent 521410e1f6
commit dd8486ba34
6 changed files with 73 additions and 184 deletions

View File

@ -162,8 +162,10 @@ public:
QPointer<MapConnection> connection_to_select = nullptr;
enum class EditAction { None, Paint, Select, Fill, Shift, Pick, Move };
EditAction mapEditAction = EditAction::Paint;
EditAction eventEditAction = EditAction::Select;
void setEditAction(EditAction editAction);
EditAction getEditAction() const;
EditAction getMapEditAction() const { return this->mapEditAction; }
EditAction getEventEditAction() const { return this->eventEditAction; }
enum class EditMode { None, Disabled, Metatiles, Collision, Header, Events, Connections, Encounters };
void setEditMode(EditMode editMode);
@ -220,6 +222,9 @@ private:
EditMode editMode = EditMode::None;
EditAction mapEditAction = EditAction::Paint;
EditAction eventEditAction = EditAction::Select;
bool save(bool currentOnly);
void clearMap();
void clearMetatileSelector();
@ -280,6 +285,7 @@ signals:
void mapRulerStatusChanged(const QString &);
void tilesetUpdated(QString);
void gridToggled(bool);
void editActionSet(EditAction newEditAction);
};
#endif // EDITOR_H

View File

@ -407,8 +407,7 @@ private:
void openNextMap();
void displayMapProperties();
void checkToolButtons();
void clickToolButtonFromEditAction(Editor::EditAction editAction);
void setEditActionUi(Editor::EditAction editAction);
void updateWindowTitle();

View File

@ -92,6 +92,7 @@ public:
private:
void paintSmartPath(int x, int y, bool fromScriptCall = false);
static QList<int> smartPathTable;
QPoint lastMetatileSelectionPos = QPoint(-1,-1);
unsigned actionId_ = 0;

View File

@ -169,7 +169,6 @@ void Editor::setEditMode(EditMode editMode) {
editStack = &this->layout->editHistory;
}
this->cursorMapTileRect->setSingleTileMode(editMode == EditMode::Collision);
this->cursorMapTileRect->setActive(editingLayout);
this->playerViewRect->setActive(editingLayout);
this->editGroup.setActiveStack(editStack);
@ -185,6 +184,39 @@ void Editor::setEditMode(EditMode editMode) {
if (this->editMode == EditMode::Events){
updateWarpEventWarnings();
}
if (current_view) {
// Updating the edit action is only relevant for edit modes with a graphics view.
setEditAction(getEditAction());
}
}
Editor::EditAction Editor::getEditAction() const {
return this->editMode == EditMode::Events ? getEventEditAction() : getMapEditAction();
}
void Editor::setEditAction(EditAction editAction) {
if (this->editMode == EditMode::Events) {
this->eventEditAction = editAction;
this->map_ruler->setEnabled(editAction == EditAction::Select);
} else {
this->mapEditAction = editAction;
this->map_ruler->setEnabled(false);
}
this->cursorMapTileRect->setSingleTileMode(!(editAction == EditAction::Paint && this->editMode == EditMode::Metatiles));
// Update cursor
static const QMap<EditAction, QCursor> cursors = {
{EditAction::Paint, QCursor(QPixmap(":/icons/pencil_cursor.ico"), 10, 10)},
{EditAction::Select, QCursor()},
{EditAction::Fill, QCursor(QPixmap(":/icons/fill_color_cursor.ico"), 10, 10)},
{EditAction::Pick, QCursor(QPixmap(":/icons/pipette_cursor.ico"), 10, 10)},
{EditAction::Move, QCursor(QPixmap(":/icons/move.ico"), 7, 7)},
{EditAction::Shift, QCursor(QPixmap(":/icons/shift_cursor.ico"), 10, 10)},
};
this->settings->mapCursor = cursors.value(editAction);
emit editActionSet(editAction);
}
void Editor::clearWildMonTables() {
@ -1377,7 +1409,7 @@ void Editor::mouseEvent_map(QGraphicsSceneMouseEvent *event, LayoutPixmapItem *i
} else if (mapEditAction == EditAction::Pick) {
if (event->buttons() & Qt::RightButton) {
item->updateMetatileSelection(event);
} else {
} else if (event->type() != QEvent::GraphicsSceneMouseRelease) {
item->pick(event);
}
} else if (mapEditAction == EditAction::Shift) {
@ -1392,10 +1424,7 @@ void Editor::mouseEvent_map(QGraphicsSceneMouseEvent *event, LayoutPixmapItem *i
if (eventEditAction == EditAction::Paint && event->type() == QEvent::GraphicsSceneMousePress) {
// Right-clicking while in paint mode will change mode to select.
if (event->buttons() & Qt::RightButton) {
this->eventEditAction = EditAction::Select;
this->settings->mapCursor = QCursor();
this->ui->toolButton_Paint->setChecked(false);
this->ui->toolButton_Select->setChecked(true);
setEditAction(EditAction::Select);
} else {
// Left-clicking while in paint mode will add a new event of the
// type of the first currently selected events.

View File

@ -363,6 +363,7 @@ void MainWindow::initEditor() {
connect(this->editor, &Editor::wildMonTableEdited, [this] { markMapEdited(this->editor->map); });
connect(this->editor, &Editor::mapRulerStatusChanged, this, &MainWindow::onMapRulerStatusChanged);
connect(this->editor, &Editor::tilesetUpdated, this, &Scripting::cb_TilesetUpdated);
connect(this->editor, &Editor::editActionSet, this, &MainWindow::setEditActionUi);
connect(ui->newEventToolButton, &NewEventToolButton::newEventAdded, this->editor, &Editor::addNewEvent);
connect(ui->toolButton_deleteEvent, &QAbstractButton::clicked, this->editor, &Editor::deleteSelectedEvents);
connect(ui->graphicsView_Connections, &ConnectionsView::pressedDelete, this->editor, &Editor::removeSelectedConnection);
@ -2167,10 +2168,8 @@ void MainWindow::on_mainTabBar_tabBarClicked(int index)
if (index == MainTab::Map) {
ui->stackedWidget_MapEvents->setCurrentIndex(0);
on_mapViewTab_tabBarClicked(ui->mapViewTab->currentIndex());
clickToolButtonFromEditAction(editor->mapEditAction);
} else if (index == MainTab::Events) {
ui->stackedWidget_MapEvents->setCurrentIndex(1);
clickToolButtonFromEditAction(editor->eventEditAction);
} else if (index == MainTab::Connections) {
ui->graphicsView_Connections->setFocus(); // Avoid opening tab with focus on something editable
}
@ -2180,9 +2179,6 @@ void MainWindow::on_mainTabBar_tabBarClicked(int index)
if (editor->project && editor->project->wildEncountersLoaded)
editor->saveEncounterTabData();
}
if (index != MainTab::Events) {
editor->map_ruler->setEnabled(false);
}
}
void MainWindow::on_actionZoom_In_triggered() {
@ -2278,36 +2274,6 @@ void MainWindow::connectSubEditorsToShortcutsEditor() {
customScriptsEditor, &CustomScriptsEditor::applyUserShortcuts);
}
void MainWindow::on_actionPencil_triggered()
{
on_toolButton_Paint_clicked();
}
void MainWindow::on_actionPointer_triggered()
{
on_toolButton_Select_clicked();
}
void MainWindow::on_actionFlood_Fill_triggered()
{
on_toolButton_Fill_clicked();
}
void MainWindow::on_actionEyedropper_triggered()
{
on_toolButton_Dropper_clicked();
}
void MainWindow::on_actionMove_triggered()
{
on_toolButton_Move_clicked();
}
void MainWindow::on_actionMap_Shift_triggered()
{
on_toolButton_Shift_clicked();
}
void MainWindow::resetMapViewScale() {
editor->scaleMapView(0);
}
@ -2572,133 +2538,33 @@ void MainWindow::on_horizontalSlider_CollisionTransparency_valueChanged(int valu
this->editor->collision_item->draw(true);
}
void MainWindow::on_toolButton_Paint_clicked()
{
if (ui->mainTabBar->currentIndex() == MainTab::Map)
editor->mapEditAction = Editor::EditAction::Paint;
else
editor->eventEditAction = Editor::EditAction::Paint;
void MainWindow::on_actionPencil_triggered() { on_toolButton_Paint_clicked(); }
void MainWindow::on_actionPointer_triggered() { on_toolButton_Select_clicked(); }
void MainWindow::on_actionFlood_Fill_triggered() { on_toolButton_Fill_clicked(); }
void MainWindow::on_actionEyedropper_triggered() { on_toolButton_Dropper_clicked(); }
void MainWindow::on_actionMove_triggered() { on_toolButton_Move_clicked(); }
void MainWindow::on_actionMap_Shift_triggered() { on_toolButton_Shift_clicked(); }
editor->settings->mapCursor = QCursor(QPixmap(":/icons/pencil_cursor.ico"), 10, 10);
void MainWindow::on_toolButton_Paint_clicked() { editor->setEditAction(Editor::EditAction::Paint); }
void MainWindow::on_toolButton_Select_clicked() { editor->setEditAction(Editor::EditAction::Select); }
void MainWindow::on_toolButton_Fill_clicked() { editor->setEditAction(Editor::EditAction::Fill); }
void MainWindow::on_toolButton_Dropper_clicked() { editor->setEditAction(Editor::EditAction::Pick); }
void MainWindow::on_toolButton_Move_clicked() { editor->setEditAction(Editor::EditAction::Move); }
void MainWindow::on_toolButton_Shift_clicked() { editor->setEditAction(Editor::EditAction::Shift); }
if (ui->mapViewTab->currentIndex() != MapViewTab::Collision)
editor->cursorMapTileRect->setSingleTileMode(false);
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QScroller::ungrabGesture(ui->graphicsView_Map);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::MinimalViewportUpdate);
ui->graphicsView_Map->setFocus();
checkToolButtons();
}
void MainWindow::on_toolButton_Select_clicked()
{
if (ui->mainTabBar->currentIndex() == MainTab::Map)
editor->mapEditAction = Editor::EditAction::Select;
else
editor->eventEditAction = Editor::EditAction::Select;
editor->settings->mapCursor = QCursor();
editor->cursorMapTileRect->setSingleTileMode(true);
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QScroller::ungrabGesture(ui->graphicsView_Map);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::MinimalViewportUpdate);
ui->graphicsView_Map->setFocus();
checkToolButtons();
}
void MainWindow::on_toolButton_Fill_clicked()
{
if (ui->mainTabBar->currentIndex() == MainTab::Map)
editor->mapEditAction = Editor::EditAction::Fill;
else
editor->eventEditAction = Editor::EditAction::Fill;
editor->settings->mapCursor = QCursor(QPixmap(":/icons/fill_color_cursor.ico"), 10, 10);
editor->cursorMapTileRect->setSingleTileMode(true);
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QScroller::ungrabGesture(ui->graphicsView_Map);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::MinimalViewportUpdate);
ui->graphicsView_Map->setFocus();
checkToolButtons();
}
void MainWindow::on_toolButton_Dropper_clicked()
{
if (ui->mainTabBar->currentIndex() == MainTab::Map)
editor->mapEditAction = Editor::EditAction::Pick;
else
editor->eventEditAction = Editor::EditAction::Pick;
editor->settings->mapCursor = QCursor(QPixmap(":/icons/pipette_cursor.ico"), 10, 10);
editor->cursorMapTileRect->setSingleTileMode(true);
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QScroller::ungrabGesture(ui->graphicsView_Map);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::MinimalViewportUpdate);
ui->graphicsView_Map->setFocus();
checkToolButtons();
}
void MainWindow::on_toolButton_Move_clicked()
{
if (ui->mainTabBar->currentIndex() == MainTab::Map)
editor->mapEditAction = Editor::EditAction::Move;
else
editor->eventEditAction = Editor::EditAction::Move;
editor->settings->mapCursor = QCursor(QPixmap(":/icons/move.ico"), 7, 7);
editor->cursorMapTileRect->setSingleTileMode(true);
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QScroller::grabGesture(ui->graphicsView_Map, QScroller::LeftMouseButtonGesture);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::FullViewportUpdate);
ui->graphicsView_Map->setFocus();
checkToolButtons();
}
void MainWindow::on_toolButton_Shift_clicked()
{
if (ui->mainTabBar->currentIndex() == MainTab::Map)
editor->mapEditAction = Editor::EditAction::Shift;
else
editor->eventEditAction = Editor::EditAction::Shift;
editor->settings->mapCursor = QCursor(QPixmap(":/icons/shift_cursor.ico"), 10, 10);
editor->cursorMapTileRect->setSingleTileMode(true);
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QScroller::ungrabGesture(ui->graphicsView_Map);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::MinimalViewportUpdate);
ui->graphicsView_Map->setFocus();
checkToolButtons();
}
void MainWindow::checkToolButtons() {
Editor::EditAction editAction;
if (ui->mainTabBar->currentIndex() == MainTab::Map) {
editAction = editor->mapEditAction;
void MainWindow::setEditActionUi(Editor::EditAction editAction) {
if (editAction == Editor::EditAction::Move) {
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
QScroller::grabGesture(ui->graphicsView_Map, QScroller::LeftMouseButtonGesture);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::FullViewportUpdate);
} else {
editAction = editor->eventEditAction;
if (editAction == Editor::EditAction::Select && editor->map_ruler)
editor->map_ruler->setEnabled(true);
else if (editor->map_ruler)
editor->map_ruler->setEnabled(false);
ui->graphicsView_Map->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
ui->graphicsView_Map->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
QScroller::ungrabGesture(ui->graphicsView_Map);
ui->graphicsView_Map->setViewportUpdateMode(QGraphicsView::ViewportUpdateMode::MinimalViewportUpdate);
}
ui->graphicsView_Map->setFocus();
ui->toolButton_Paint->setChecked(editAction == Editor::EditAction::Paint);
ui->toolButton_Select->setChecked(editAction == Editor::EditAction::Select);
@ -2708,22 +2574,6 @@ void MainWindow::checkToolButtons() {
ui->toolButton_Shift->setChecked(editAction == Editor::EditAction::Shift);
}
void MainWindow::clickToolButtonFromEditAction(Editor::EditAction editAction) {
if (editAction == Editor::EditAction::Paint) {
on_toolButton_Paint_clicked();
} else if (editAction == Editor::EditAction::Select) {
on_toolButton_Select_clicked();
} else if (editAction == Editor::EditAction::Fill) {
on_toolButton_Fill_clicked();
} else if (editAction == Editor::EditAction::Pick) {
on_toolButton_Dropper_clicked();
} else if (editAction == Editor::EditAction::Move) {
on_toolButton_Move_clicked();
} else if (editAction == Editor::EditAction::Shift) {
on_toolButton_Shift_clicked();
}
}
void MainWindow::onOpenConnectedMap(MapConnection *connection) {
if (!connection)
return;

View File

@ -321,6 +321,7 @@ void LayoutPixmapItem::updateMetatileSelection(QGraphicsSceneMouseEvent *event)
// Update/apply copied metatiles.
if (event->type() == QEvent::GraphicsSceneMousePress) {
this->lastMetatileSelectionPos = pos;
selection_origin = QPoint(pos.x(), pos.y());
selection.clear();
selection.append(QPoint(pos.x(), pos.y()));
@ -329,6 +330,9 @@ void LayoutPixmapItem::updateMetatileSelection(QGraphicsSceneMouseEvent *event)
this->metatileSelector->selectFromMap(block.metatileId(), block.collision(), block.elevation());
}
} else if (event->type() == QEvent::GraphicsSceneMouseMove) {
if (pos == this->lastMetatileSelectionPos)
return;
this->lastMetatileSelectionPos = pos;
int x1 = selection_origin.x();
int y1 = selection_origin.y();
int x2 = pos.x();