mirror of
https://github.com/huderlem/porymap.git
synced 2026-08-12 20:05:55 -05:00
Fix Tools menu items not disabling alongside tool buttons
Some checks failed
Build Porymap / build-linux (, 5.14.2) (push) Has been cancelled
Build Porymap / build-linux (, 6.8.*) (push) Has been cancelled
Build Porymap / build-linux (minimal, 5.14.2) (push) Has been cancelled
Build Porymap / build-macos (macos-15-intel) (push) Has been cancelled
Build Porymap / build-macos (macos-latest) (push) Has been cancelled
Build Porymap / build-static-windows (push) Has been cancelled
Some checks failed
Build Porymap / build-linux (, 5.14.2) (push) Has been cancelled
Build Porymap / build-linux (, 6.8.*) (push) Has been cancelled
Build Porymap / build-linux (minimal, 5.14.2) (push) Has been cancelled
Build Porymap / build-macos (macos-15-intel) (push) Has been cancelled
Build Porymap / build-macos (macos-latest) (push) Has been cancelled
Build Porymap / build-static-windows (push) Has been cancelled
This commit is contained in:
@@ -24,6 +24,7 @@ and this project somewhat adheres to [Semantic Versioning](https://semver.org/sp
|
||||
- Fix event sprite names that appear in `symbol_obj_event_gfx_pointers` by value and not by name not rendering with the correct sprite.
|
||||
- Fix event sprites sometimes rendering with incorrect transparency temporarily after a sprite change.
|
||||
- Fix not being able to minimize/maximize some windows.
|
||||
- Fix some menu items under `Tools` not being disabled when their corresponding button is disabled.
|
||||
|
||||
## [6.3.0] - 2025-12-26
|
||||
### Added
|
||||
|
||||
@@ -231,24 +231,18 @@ private slots:
|
||||
void on_actionBetter_Cursors_triggered();
|
||||
void on_actionPlayer_View_Rectangle_triggered();
|
||||
void on_actionCursor_Tile_Outline_triggered();
|
||||
void on_actionPencil_triggered();
|
||||
void on_actionPointer_triggered();
|
||||
void on_actionFlood_Fill_triggered();
|
||||
void on_actionEyedropper_triggered();
|
||||
void on_actionMove_triggered();
|
||||
void on_actionMap_Shift_triggered();
|
||||
|
||||
void tryAddEventTab(QWidget * tab);
|
||||
void displayEventTabs();
|
||||
void updateSelectedEvents();
|
||||
void updateEvents();
|
||||
|
||||
void on_toolButton_Paint_clicked();
|
||||
void on_toolButton_Select_clicked();
|
||||
void on_toolButton_Fill_clicked();
|
||||
void on_toolButton_Dropper_clicked();
|
||||
void on_toolButton_Move_clicked();
|
||||
void on_toolButton_Shift_clicked();
|
||||
void activatePaintTool();
|
||||
void activateSelectTool();
|
||||
void activateFillTool();
|
||||
void activatePickTool();
|
||||
void activateMoveTool();
|
||||
void activateShiftTool();
|
||||
|
||||
void onOpenMapListContextMenu(const QPoint &point);
|
||||
void currentMetatilesSelectionChanged();
|
||||
@@ -429,6 +423,7 @@ private:
|
||||
void initLogStatusBar();
|
||||
void initCustomUI();
|
||||
void initExtraSignals();
|
||||
void connectToolButtons();
|
||||
void initEditor();
|
||||
void initMiscHeapObjects();
|
||||
void initMapList();
|
||||
|
||||
@@ -17,15 +17,22 @@ public slots:
|
||||
};
|
||||
|
||||
|
||||
/// Emits a signal when a window gets activated / regains focus
|
||||
class ActiveWindowFilter : public QObject {
|
||||
/// Emits a signal when the given event or events occur
|
||||
class EventSignaler : public QObject {
|
||||
Q_OBJECT
|
||||
public:
|
||||
ActiveWindowFilter(QObject *parent) : QObject(parent) {}
|
||||
virtual ~ActiveWindowFilter() {}
|
||||
EventSignaler(const QSet<QEvent::Type>& types, QObject *parent) : QObject(parent), m_types(types) {}
|
||||
EventSignaler(QEvent::Type type, QObject *parent) : EventSignaler(QSet<QEvent::Type>{type}, parent) {}
|
||||
virtual ~EventSignaler() {}
|
||||
|
||||
void addEventType(QEvent::Type type) { m_types.insert(type); }
|
||||
void removeEventType(QEvent::Type type) { m_types.remove(type); }
|
||||
|
||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||
signals:
|
||||
void activated();
|
||||
void triggered();
|
||||
private:
|
||||
QSet<QEvent::Type> m_types;
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ void MainWindow::initialize() {
|
||||
this->initWindow();
|
||||
this->installEventFilter(new GeometrySaver(this));
|
||||
if (porymapConfig.reopenOnLaunch && !porymapConfig.projectManuallyClosed && this->openProject(porymapConfig.getRecentProject(), true)) {
|
||||
on_toolButton_Paint_clicked();
|
||||
activatePaintTool();
|
||||
}
|
||||
|
||||
// there is a bug affecting macOS users, where the trackpad deilveres a bad touch-release gesture
|
||||
@@ -390,8 +390,7 @@ void MainWindow::initExtraSignals() {
|
||||
connect(ui->actionProject_Settings, &QAction::triggered, this, &MainWindow::openProjectSettingsEditor);
|
||||
connect(ui->actionCopy, &QAction::triggered, this, &MainWindow::copy);
|
||||
connect(ui->actionPaste, &QAction::triggered, this, &MainWindow::paste);
|
||||
connect(ui->actionChange_Map_Dimensions, &QAction::triggered, this, &MainWindow::resizeMapLayout);
|
||||
connect(ui->toolButton_Resize, &QToolButton::clicked, this, &MainWindow::resizeMapLayout);
|
||||
connectToolButtons();
|
||||
}
|
||||
|
||||
void MainWindow::on_actionCheck_for_Updates_triggered() {
|
||||
@@ -2671,19 +2670,12 @@ void MainWindow::on_horizontalSlider_CollisionTransparency_valueChanged(int valu
|
||||
this->editor->collision_item->draw(true);
|
||||
}
|
||||
|
||||
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::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); }
|
||||
void MainWindow::activatePaintTool() { editor->setEditAction(Editor::EditAction::Paint); }
|
||||
void MainWindow::activateSelectTool() { editor->setEditAction(Editor::EditAction::Select); }
|
||||
void MainWindow::activateFillTool() { editor->setEditAction(Editor::EditAction::Fill); }
|
||||
void MainWindow::activatePickTool() { editor->setEditAction(Editor::EditAction::Pick); }
|
||||
void MainWindow::activateMoveTool() { editor->setEditAction(Editor::EditAction::Move); }
|
||||
void MainWindow::activateShiftTool() { editor->setEditAction(Editor::EditAction::Shift); }
|
||||
|
||||
void MainWindow::setEditActionUi(Editor::EditAction editAction) {
|
||||
ui->toolButton_Paint->setChecked(editAction == Editor::EditAction::Paint);
|
||||
@@ -2694,6 +2686,28 @@ void MainWindow::setEditActionUi(Editor::EditAction editAction) {
|
||||
ui->toolButton_Shift->setChecked(editAction == Editor::EditAction::Shift);
|
||||
}
|
||||
|
||||
void MainWindow::connectToolButtons() {
|
||||
auto connectToolButton = [this](QToolButton* button, QAction* action, void (MainWindow::*activateFunc)()) {
|
||||
connect(action, &QAction::triggered, this, activateFunc);
|
||||
connect(button, &QAbstractButton::clicked, this, activateFunc);
|
||||
|
||||
// When one of the tool buttons is enabled/disabled,
|
||||
// sync this state to the corresponding menu action.
|
||||
auto monitor = new EventSignaler(QEvent::EnabledChange, button);
|
||||
connect(monitor, &EventSignaler::triggered, button, [action, button]{
|
||||
action->setEnabled(button->isEnabled());
|
||||
});
|
||||
button->installEventFilter(monitor);
|
||||
};
|
||||
connectToolButton(ui->toolButton_Paint, ui->actionPencil, &MainWindow::activatePaintTool);
|
||||
connectToolButton(ui->toolButton_Select, ui->actionPointer, &MainWindow::activateSelectTool);
|
||||
connectToolButton(ui->toolButton_Fill, ui->actionFlood_Fill, &MainWindow::activateFillTool);
|
||||
connectToolButton(ui->toolButton_Dropper, ui->actionEyedropper, &MainWindow::activatePickTool);
|
||||
connectToolButton(ui->toolButton_Move, ui->actionMove, &MainWindow::activateMoveTool);
|
||||
connectToolButton(ui->toolButton_Shift, ui->actionMap_Shift, &MainWindow::activateShiftTool);
|
||||
connectToolButton(ui->toolButton_Resize, ui->actionChange_Map_Dimensions, &MainWindow::resizeMapLayout);
|
||||
}
|
||||
|
||||
void MainWindow::onOpenConnectedMap(MapConnection *connection) {
|
||||
if (!connection)
|
||||
return;
|
||||
|
||||
@@ -18,10 +18,8 @@ bool MapSceneEventFilter::eventFilter(QObject*, QEvent *event) {
|
||||
}
|
||||
|
||||
|
||||
bool ActiveWindowFilter::eventFilter(QObject*, QEvent *event) {
|
||||
if (event->type() == QEvent::WindowActivate) {
|
||||
emit activated();
|
||||
}
|
||||
bool EventSignaler::eventFilter(QObject*, QEvent *event) {
|
||||
if (m_types.contains(event->type())) emit triggered();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
@@ -27,8 +27,8 @@ PaletteColorSearch::PaletteColorSearch(Project *project, const Tileset *primaryT
|
||||
|
||||
// Rather than try to keep track of metatile/tile changes that affect which colors are used,
|
||||
// we'll just refresh when the window is activated.
|
||||
ActiveWindowFilter *filter = new ActiveWindowFilter(this);
|
||||
connect(filter, &ActiveWindowFilter::activated, this, &PaletteColorSearch::refresh);
|
||||
auto filter = new EventSignaler(QEvent::WindowActivate, this);
|
||||
connect(filter, &EventSignaler::triggered, this, &PaletteColorSearch::refresh);
|
||||
this->installEventFilter(filter);
|
||||
|
||||
ui->spinBox_ColorId->setRange(0, Tileset::numColorsPerPalette() - 1);
|
||||
|
||||
@@ -48,8 +48,8 @@ PaletteEditor::PaletteEditor(Project *project, Tileset *primaryTileset, Tileset
|
||||
|
||||
// Rather than try to keep track of metatile/tile changes that affect which colors are used,
|
||||
// we'll just refresh when the window is activated.
|
||||
ActiveWindowFilter *filter = new ActiveWindowFilter(this);
|
||||
connect(filter, &ActiveWindowFilter::activated, this, &PaletteEditor::invalidateCache);
|
||||
auto filter = new EventSignaler(QEvent::WindowActivate, this);
|
||||
connect(filter, &EventSignaler::triggered, this, &PaletteEditor::invalidateCache);
|
||||
this->installEventFilter(filter);
|
||||
|
||||
this->ui->spinBox_PaletteId->setRange(0, Project::getNumPalettesTotal() - 1);
|
||||
|
||||
@@ -39,8 +39,8 @@ TilesetEditor::TilesetEditor(Project *project, Layout *layout, QWidget *parent)
|
||||
ui->actionShow_Tileset_Divider->setChecked(porymapConfig.showTilesetEditorDivider);
|
||||
ui->actionShow_Raw_Metatile_Attributes->setChecked(porymapConfig.showTilesetEditorRawAttributes);
|
||||
|
||||
ActiveWindowFilter *filter = new ActiveWindowFilter(this);
|
||||
connect(filter, &ActiveWindowFilter::activated, this, &TilesetEditor::onWindowActivated);
|
||||
auto filter = new EventSignaler(QEvent::WindowActivate, this);
|
||||
connect(filter, &EventSignaler::triggered, this, &TilesetEditor::onWindowActivated);
|
||||
installEventFilter(filter);
|
||||
|
||||
setTilesets(this->layout->tileset_primary_label, this->layout->tileset_secondary_label);
|
||||
|
||||
Reference in New Issue
Block a user