Merge branch 'dev' of https://github.com/huderlem/porymap into local-id

This commit is contained in:
GriffinR 2025-04-13 22:45:39 -04:00
commit fa4ecf4842
24 changed files with 193 additions and 159 deletions

View File

@ -30,6 +30,7 @@ The **"Breaking Changes"** listed below are changes that have been made in the d
- Redesigned the new map dialog, including better error checking and a collapsible section for header data.
- New maps/layouts are no longer saved automatically, and can be fully discarded by closing without saving.
- Map groups and ``MAPSEC`` names specified when creating a new map will be added automatically if they don't already exist.
- Custom fields in JSON files that Porymap writes are no longer discarded.
- Edits to map connections now have Undo/Redo and can be viewed in exported timelapses.
- Changes to the "Mirror to Connecting Maps" setting will now be saved between sessions.
- A notice will be displayed when attempting to open the "Dynamic" map, rather than nothing happening.

View File

@ -9,6 +9,7 @@ namespace Util {
int roundUp(int numToRound, int multiple);
QString toDefineCase(QString input);
QString toHexString(uint32_t value, int minLength = 0);
Qt::Orientations getOrientation(bool xflip, bool yflip);
}
#endif // UTILITY_H

View File

@ -248,8 +248,6 @@ private slots:
void on_comboBox_PrimaryTileset_currentTextChanged(const QString &arg1);
void on_comboBox_SecondaryTileset_currentTextChanged(const QString &arg1);
void on_pushButton_ChangeDimensions_clicked();
void on_checkBox_smartPaths_stateChanged(int selected);
void on_checkBox_ToggleBorder_stateChanged(int selected);
void resetMapViewScale();
@ -260,7 +258,6 @@ private slots:
void eventTabChanged(int index);
void on_checkBox_MirrorConnections_stateChanged(int selected);
void on_actionDive_Emerge_Map_triggered();
void on_actionShow_Events_In_Map_View_triggered();
void on_groupBox_DiveMapOpacity_toggled(bool on);
@ -437,6 +434,10 @@ private:
void checkForUpdates(bool requestedByUser);
void setDivingMapsVisible(bool visible);
void setSmartPathsEnabled(bool enabled);
void setBorderVisibility(bool visible);
void setMirrorConnectionsEnabled(bool enabled);
};
// These are namespaced in a struct to avoid colliding with e.g. class Map.

View File

@ -73,11 +73,11 @@ private:
void onWeatherChanged(const QString &weather);
void onTypeChanged(const QString &type);
void onBattleSceneChanged(const QString &battleScene);
void onRequiresFlashChanged(int selected);
void onShowLocationNameChanged(int selected);
void onAllowRunningChanged(int selected);
void onAllowBikingChanged(int selected);
void onAllowEscapingChanged(int selected);
void onRequiresFlashChanged(bool enabled);
void onShowLocationNameChanged(bool enabled);
void onAllowRunningChanged(bool enabled);
void onAllowBikingChanged(bool enabled);
void onAllowEscapingChanged(bool enabled);
void onFloorNumberChanged(int offset);
};

View File

@ -91,30 +91,27 @@ protected:
virtual void showEvent(QShowEvent *) override;
virtual void resizeEvent(QResizeEvent *) override;
private slots:
void on_checkBox_Objects_stateChanged(int state);
void on_checkBox_Warps_stateChanged(int state);
void on_checkBox_BGs_stateChanged(int state);
void on_checkBox_Triggers_stateChanged(int state);
void on_checkBox_HealLocations_stateChanged(int state);
void on_checkBox_AllEvents_stateChanged(int state);
void on_checkBox_ConnectionUp_stateChanged(int state);
void on_checkBox_ConnectionDown_stateChanged(int state);
void on_checkBox_ConnectionLeft_stateChanged(int state);
void on_checkBox_ConnectionRight_stateChanged(int state);
void on_checkBox_AllConnections_stateChanged(int state);
void on_checkBox_Collision_stateChanged(int state);
void on_checkBox_Grid_stateChanged(int state);
void on_checkBox_Border_stateChanged(int state);
private:
void setShowGrid(bool checked);
void setShowBorder(bool checked);
void setShowObjects(bool checked);
void setShowWarps(bool checked);
void setShowBgs(bool checked);
void setShowTriggers(bool checked);
void setShowHealLocations(bool checked);
void setShowAllEvents(bool checked);
void setShowConnectionUp(bool checked);
void setShowConnectionDown(bool checked);
void setShowConnectionLeft(bool checked);
void setShowConnectionRight(bool checked);
void setShowAllConnections(bool checked);
void setShowCollision(bool checked);
void setDisablePreviewScaling(bool checked);
void setDisablePreviewUpdates(bool checked);
void on_pushButton_Reset_pressed();
void on_spinBox_TimelapseDelay_editingFinished();
void on_spinBox_FrameSkip_editingFinished();
void on_checkBox_DisablePreviewScaling_stateChanged(int state);
void on_checkBox_DisablePreviewUpdates_stateChanged(int state);
};
#endif // MAPIMAGEEXPORTER_H

View File

@ -121,6 +121,9 @@ private:
void restoreWindowState();
void closeEvent(QCloseEvent* event);
void setTileHFlip(bool enabled);
void setTileVFlip(bool enabled);
private slots:
void on_action_RegionMap_Save_triggered();
void on_actionSave_All_triggered();
@ -145,8 +148,6 @@ private slots:
void on_spinBox_RM_LayoutWidth_valueChanged(int);
void on_spinBox_RM_LayoutHeight_valueChanged(int);
void on_spinBox_tilePalette_valueChanged(int);
void on_checkBox_tileHFlip_stateChanged(int);
void on_checkBox_tileVFlip_stateChanged(int);
void on_verticalSlider_Zoom_Map_Image_valueChanged(int);
void on_verticalSlider_Zoom_Image_Tiles_valueChanged(int);
void onHoveredRegionMapTileChanged(int x, int y);

View File

@ -49,9 +49,6 @@ public:
void setAutoRepeat(bool on);
bool autoRepeat() const;
int id() const;
QList<int> ids() const;
inline QWidget *parentWidget() const
{ return static_cast<QWidget *>(QObject::parent()); }

View File

@ -71,10 +71,6 @@ private slots:
void on_spinBox_paletteSelector_valueChanged(int arg1);
void on_checkBox_xFlip_stateChanged(int arg1);
void on_checkBox_yFlip_stateChanged(int arg1);
void on_actionSave_Tileset_triggered();
void on_actionImport_Primary_Tiles_triggered();
@ -149,6 +145,8 @@ private:
void commitTerrainType();
void commitLayerType();
void setRawAttributesVisible(bool visible);
void setXFlip(bool enabled);
void setYFlip(bool enabled);
Ui::TilesetEditor *ui;
History<MetatileHistoryItem*> metatileHistory;

View File

@ -42,3 +42,10 @@ QString Util::toDefineCase(QString input) {
QString Util::toHexString(uint32_t value, int minLength) {
return "0x" + QString("%1").arg(value, minLength, 16, QChar('0')).toUpper();
}
Qt::Orientations Util::getOrientation(bool xflip, bool yflip) {
Qt::Orientations flags;
if (xflip) flags |= Qt::Orientation::Horizontal;
if (yflip) flags |= Qt::Orientation::Vertical;
return flags;
}

View File

@ -296,8 +296,8 @@ void Editor::addNewWildMonGroup(QWidget *window) {
form.addRow(new QLabel(monField.name), fieldCheckbox);
}
// Reading from ui here so not saving to disk before user.
connect(copyCheckbox, &QCheckBox::stateChanged, [=](int state){
if (state == Qt::Checked) {
connect(copyCheckbox, &QCheckBox::toggled, [=](bool checked){
if (checked) {
int fieldIndex = 0;
MonTabWidget *monWidget = static_cast<MonTabWidget *>(stack->widget(stack->currentIndex()));
for (EncounterField monField : project->wildMonFields) {
@ -305,7 +305,7 @@ void Editor::addNewWildMonGroup(QWidget *window) {
fieldCheckboxes[fieldIndex]->setEnabled(false);
fieldIndex++;
}
} else if (state == Qt::Unchecked) {
} else {
int fieldIndex = 0;
for (EncounterField monField : project->wildMonFields) {
fieldCheckboxes[fieldIndex]->setEnabled(true);

View File

@ -299,6 +299,9 @@ void MainWindow::initExtraSignals() {
connect(ui->action_NewLayout, &QAction::triggered, this, &MainWindow::openNewLayoutDialog);
connect(ui->actionDuplicate_Current_Map_Layout, &QAction::triggered, this, &MainWindow::openDuplicateMapOrLayoutDialog);
connect(ui->comboBox_LayoutSelector->lineEdit(), &QLineEdit::editingFinished, this, &MainWindow::onLayoutSelectorEditingFinished);
connect(ui->checkBox_smartPaths, &QCheckBox::toggled, this, &MainWindow::setSmartPathsEnabled);
connect(ui->checkBox_ToggleBorder, &QCheckBox::toggled, this, &MainWindow::setBorderVisibility);
connect(ui->checkBox_MirrorConnections, &QCheckBox::toggled, this, &MainWindow::setMirrorConnectionsEnabled);
}
void MainWindow::on_actionCheck_for_Updates_triggered() {
@ -2753,25 +2756,20 @@ void MainWindow::on_pushButton_ChangeDimensions_clicked() {
}
}
void MainWindow::on_checkBox_smartPaths_stateChanged(int selected)
void MainWindow::setSmartPathsEnabled(bool enabled)
{
bool enabled = selected == Qt::Checked;
editor->settings->smartPathsEnabled = enabled;
if (enabled) {
editor->cursorMapTileRect->setSmartPathMode(true);
} else {
editor->cursorMapTileRect->setSmartPathMode(false);
}
this->editor->settings->smartPathsEnabled = enabled;
this->editor->cursorMapTileRect->setSmartPathMode(enabled);
}
void MainWindow::on_checkBox_ToggleBorder_stateChanged(int selected)
void MainWindow::setBorderVisibility(bool visible)
{
editor->toggleBorderVisibility(selected != 0);
editor->toggleBorderVisibility(visible);
}
void MainWindow::on_checkBox_MirrorConnections_stateChanged(int selected)
void MainWindow::setMirrorConnectionsEnabled(bool enabled)
{
porymapConfig.mirrorConnectingMaps = (selected == Qt::Checked);
porymapConfig.mirrorConnectingMaps = enabled;
}
void MainWindow::on_actionTileset_Editor_triggered()

View File

@ -276,7 +276,12 @@ void MapView::addTileImage(int x, int y, int tileId, bool xflip, bool yflip, int
this->editor->layout->tileset_primary,
this->editor->layout->tileset_secondary,
paletteId)
#if (QT_VERSION >= QT_VERSION_CHECK(6, 9, 0))
.flipped(Util::getOrientation(xflip, yflip));
#else
.mirrored(xflip, yflip);
#endif
if (setTransparency)
image.setColor(0, qRgba(0, 0, 0, 0));
if (this->getOverlay(layer)->addImage(x, y, image))

View File

@ -105,7 +105,7 @@ void CustomScriptsEditor::displayScript(const QString &filepath, bool enabled) {
connect(widget->ui->b_Choose, &QAbstractButton::clicked, [this, item](bool) { this->replaceScript(item); });
connect(widget->ui->b_Edit, &QAbstractButton::clicked, [this, item](bool) { this->openScript(item); });
connect(widget->ui->b_Delete, &QAbstractButton::clicked, [this, item](bool) { this->removeScript(item); });
connect(widget->ui->checkBox_Enable, &QCheckBox::stateChanged, this, &CustomScriptsEditor::markEdited);
connect(widget->ui->checkBox_Enable, &QCheckBox::toggled, this, &CustomScriptsEditor::markEdited);
connect(widget->ui->lineEdit_filepath, &QLineEdit::textEdited, this, &CustomScriptsEditor::markEdited);
// Per the Qt manual, for performance reasons QListWidget::setItemWidget shouldn't be used with non-static items.

View File

@ -843,8 +843,8 @@ void HiddenItemFrame::connectSignals(MainWindow *window) {
// underfoot
this->check_itemfinder->disconnect();
connect(this->check_itemfinder, &QCheckBox::stateChanged, [=](int state) {
this->hiddenItem->setUnderfoot(state == Qt::Checked);
connect(this->check_itemfinder, &QCheckBox::toggled, [=](bool checked) {
this->hiddenItem->setUnderfoot(checked);
this->hiddenItem->modify();
});
}

View File

@ -127,7 +127,12 @@ QImage getMetatileImage(
color.setAlpha(0);
tile_image.setColor(0, color.rgba());
metatile_painter.drawImage(origin, tile_image.mirrored(tile.xflip, tile.yflip));
#if (QT_VERSION >= QT_VERSION_CHECK(6, 9, 0))
tile_image.flip(Util::getOrientation(tile.xflip, tile.yflip));
#else
tile_image = tile_image.mirrored(tile.xflip, tile.yflip);
#endif
metatile_painter.drawImage(origin, tile_image);
}
metatile_painter.end();

View File

@ -20,12 +20,11 @@ MapHeaderForm::MapHeaderForm(QWidget *parent)
connect(ui->comboBox_Weather, &QComboBox::currentTextChanged, this, &MapHeaderForm::onWeatherChanged);
connect(ui->comboBox_Type, &QComboBox::currentTextChanged, this, &MapHeaderForm::onTypeChanged);
connect(ui->comboBox_BattleScene, &QComboBox::currentTextChanged, this, &MapHeaderForm::onBattleSceneChanged);
connect(ui->checkBox_RequiresFlash, &QCheckBox::stateChanged, this, &MapHeaderForm::onRequiresFlashChanged);
connect(ui->checkBox_ShowLocationName, &QCheckBox::stateChanged, this, &MapHeaderForm::onShowLocationNameChanged);
connect(ui->checkBox_AllowRunning, &QCheckBox::stateChanged, this, &MapHeaderForm::onAllowRunningChanged);
connect(ui->checkBox_AllowBiking, &QCheckBox::stateChanged, this, &MapHeaderForm::onAllowBikingChanged);
connect(ui->checkBox_AllowEscaping, &QCheckBox::stateChanged, this, &MapHeaderForm::onAllowEscapingChanged);
connect(ui->checkBox_RequiresFlash, &QCheckBox::toggled, this, &MapHeaderForm::onRequiresFlashChanged);
connect(ui->checkBox_ShowLocationName, &QCheckBox::toggled, this, &MapHeaderForm::onShowLocationNameChanged);
connect(ui->checkBox_AllowRunning, &QCheckBox::toggled, this, &MapHeaderForm::onAllowRunningChanged);
connect(ui->checkBox_AllowBiking, &QCheckBox::toggled, this, &MapHeaderForm::onAllowBikingChanged);
connect(ui->checkBox_AllowEscaping, &QCheckBox::toggled, this, &MapHeaderForm::onAllowEscapingChanged);
connect(ui->spinBox_FloorNumber, QOverload<int>::of(&QSpinBox::valueChanged), this, &MapHeaderForm::onFloorNumberChanged);
@ -207,11 +206,11 @@ void MapHeaderForm::onSongUpdated(const QString &song) { if (m_hea
void MapHeaderForm::onWeatherChanged(const QString &weather) { if (m_header) m_header->setWeather(weather); }
void MapHeaderForm::onTypeChanged(const QString &type) { if (m_header) m_header->setType(type); }
void MapHeaderForm::onBattleSceneChanged(const QString &battleScene) { if (m_header) m_header->setBattleScene(battleScene); }
void MapHeaderForm::onRequiresFlashChanged(int selected) { if (m_header) m_header->setRequiresFlash(selected == Qt::Checked); }
void MapHeaderForm::onShowLocationNameChanged(int selected) { if (m_header) m_header->setShowsLocationName(selected == Qt::Checked); }
void MapHeaderForm::onAllowRunningChanged(int selected) { if (m_header) m_header->setAllowsRunning(selected == Qt::Checked); }
void MapHeaderForm::onAllowBikingChanged(int selected) { if (m_header) m_header->setAllowsBiking(selected == Qt::Checked); }
void MapHeaderForm::onAllowEscapingChanged(int selected) { if (m_header) m_header->setAllowsEscaping(selected == Qt::Checked); }
void MapHeaderForm::onRequiresFlashChanged(bool enabled) { if (m_header) m_header->setRequiresFlash(enabled); }
void MapHeaderForm::onShowLocationNameChanged(bool enabled) { if (m_header) m_header->setShowsLocationName(enabled); }
void MapHeaderForm::onAllowRunningChanged(bool enabled) { if (m_header) m_header->setAllowsRunning(enabled); }
void MapHeaderForm::onAllowBikingChanged(bool enabled) { if (m_header) m_header->setAllowsBiking(enabled); }
void MapHeaderForm::onAllowEscapingChanged(bool enabled) { if (m_header) m_header->setAllowsEscaping(enabled); }
void MapHeaderForm::onFloorNumberChanged(int offset) { if (m_header) m_header->setFloorNumber(offset); }
void MapHeaderForm::onLocationChanged(const QString &location) {
if (m_header) m_header->setLocation(location);

View File

@ -60,6 +60,23 @@ MapImageExporter::MapImageExporter(QWidget *parent, Project *project, Map *map,
connect(ui->comboBox_MapSelection, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MapImageExporter::updateMapSelection);
connect(ui->comboBox_MapSelection->lineEdit(), &QLineEdit::editingFinished, this, &MapImageExporter::updateMapSelection);
connect(ui->checkBox_Objects, &QCheckBox::toggled, this, &MapImageExporter::setShowObjects);
connect(ui->checkBox_Warps, &QCheckBox::toggled, this, &MapImageExporter::setShowWarps);
connect(ui->checkBox_BGs, &QCheckBox::toggled, this, &MapImageExporter::setShowBgs);
connect(ui->checkBox_Triggers, &QCheckBox::toggled, this, &MapImageExporter::setShowTriggers);
connect(ui->checkBox_HealLocations, &QCheckBox::toggled, this, &MapImageExporter::setShowHealLocations);
connect(ui->checkBox_AllEvents, &QCheckBox::toggled, this, &MapImageExporter::setShowAllEvents);
connect(ui->checkBox_ConnectionUp, &QCheckBox::toggled, this, &MapImageExporter::setShowConnectionUp);
connect(ui->checkBox_ConnectionDown, &QCheckBox::toggled, this, &MapImageExporter::setShowConnectionDown);
connect(ui->checkBox_ConnectionLeft, &QCheckBox::toggled, this, &MapImageExporter::setShowConnectionLeft);
connect(ui->checkBox_ConnectionRight, &QCheckBox::toggled, this, &MapImageExporter::setShowConnectionRight);
connect(ui->checkBox_AllConnections, &QCheckBox::toggled, this, &MapImageExporter::setShowAllConnections);
connect(ui->checkBox_Collision, &QCheckBox::toggled, this, &MapImageExporter::setShowCollision);
connect(ui->checkBox_Grid, &QCheckBox::toggled, this, &MapImageExporter::setShowGrid);
connect(ui->checkBox_Border, &QCheckBox::toggled, this, &MapImageExporter::setShowBorder);
connect(ui->checkBox_DisablePreviewScaling, &QCheckBox::toggled, this, &MapImageExporter::setDisablePreviewScaling);
connect(ui->checkBox_DisablePreviewUpdates, &QCheckBox::toggled, this, &MapImageExporter::setDisablePreviewUpdates);
ui->graphicsView_Preview->setFocus();
}
@ -719,127 +736,123 @@ void MapImageExporter::setConnectionDirectionEnabled(const QString &dir, bool en
}
}
void MapImageExporter::on_checkBox_Collision_stateChanged(int state) {
m_settings.showCollision = (state == Qt::Checked);
void MapImageExporter::setShowCollision(bool checked) {
m_settings.showCollision = checked;
updatePreview();
}
void MapImageExporter::on_checkBox_Grid_stateChanged(int state) {
m_settings.showGrid = (state == Qt::Checked);
void MapImageExporter::setShowGrid(bool checked) {
m_settings.showGrid = checked;
updatePreview();
}
void MapImageExporter::on_checkBox_Border_stateChanged(int state) {
m_settings.showBorder = (state == Qt::Checked);
void MapImageExporter::setShowBorder(bool checked) {
m_settings.showBorder = checked;
updatePreview();
}
void MapImageExporter::on_checkBox_Objects_stateChanged(int state) {
setEventGroupEnabled(Event::Group::Object, state == Qt::Checked);
void MapImageExporter::setShowObjects(bool checked) {
setEventGroupEnabled(Event::Group::Object, checked);
updatePreview();
}
void MapImageExporter::on_checkBox_Warps_stateChanged(int state) {
setEventGroupEnabled(Event::Group::Warp, state == Qt::Checked);
void MapImageExporter::setShowWarps(bool checked) {
setEventGroupEnabled(Event::Group::Warp, checked);
updatePreview();
}
void MapImageExporter::on_checkBox_BGs_stateChanged(int state) {
setEventGroupEnabled(Event::Group::Bg, state == Qt::Checked);
void MapImageExporter::setShowBgs(bool checked) {
setEventGroupEnabled(Event::Group::Bg, checked);
updatePreview();
}
void MapImageExporter::on_checkBox_Triggers_stateChanged(int state) {
setEventGroupEnabled(Event::Group::Coord, state == Qt::Checked);
void MapImageExporter::setShowTriggers(bool checked) {
setEventGroupEnabled(Event::Group::Coord, checked);
updatePreview();
}
void MapImageExporter::on_checkBox_HealLocations_stateChanged(int state) {
setEventGroupEnabled(Event::Group::Heal, state == Qt::Checked);
void MapImageExporter::setShowHealLocations(bool checked) {
setEventGroupEnabled(Event::Group::Heal, checked);
updatePreview();
}
// Shortcut setting for enabling all events
void MapImageExporter::on_checkBox_AllEvents_stateChanged(int state) {
bool on = (state == Qt::Checked);
void MapImageExporter::setShowAllEvents(bool checked) {
const QSignalBlocker b_Objects(ui->checkBox_Objects);
ui->checkBox_Objects->setChecked(on);
ui->checkBox_Objects->setDisabled(on);
setEventGroupEnabled(Event::Group::Object, on);
ui->checkBox_Objects->setChecked(checked);
ui->checkBox_Objects->setDisabled(checked);
setEventGroupEnabled(Event::Group::Object, checked);
const QSignalBlocker b_Warps(ui->checkBox_Warps);
ui->checkBox_Warps->setChecked(on);
ui->checkBox_Warps->setDisabled(on);
setEventGroupEnabled(Event::Group::Warp, on);
ui->checkBox_Warps->setChecked(checked);
ui->checkBox_Warps->setDisabled(checked);
setEventGroupEnabled(Event::Group::Warp, checked);
const QSignalBlocker b_BGs(ui->checkBox_BGs);
ui->checkBox_BGs->setChecked(on);
ui->checkBox_BGs->setDisabled(on);
setEventGroupEnabled(Event::Group::Bg, on);
ui->checkBox_BGs->setChecked(checked);
ui->checkBox_BGs->setDisabled(checked);
setEventGroupEnabled(Event::Group::Bg, checked);
const QSignalBlocker b_Triggers(ui->checkBox_Triggers);
ui->checkBox_Triggers->setChecked(on);
ui->checkBox_Triggers->setDisabled(on);
setEventGroupEnabled(Event::Group::Coord, on);
ui->checkBox_Triggers->setChecked(checked);
ui->checkBox_Triggers->setDisabled(checked);
setEventGroupEnabled(Event::Group::Coord, checked);
const QSignalBlocker b_HealLocations(ui->checkBox_HealLocations);
ui->checkBox_HealLocations->setChecked(on);
ui->checkBox_HealLocations->setDisabled(on);
setEventGroupEnabled(Event::Group::Heal, on);
ui->checkBox_HealLocations->setChecked(checked);
ui->checkBox_HealLocations->setDisabled(checked);
setEventGroupEnabled(Event::Group::Heal, checked);
updatePreview();
}
void MapImageExporter::on_checkBox_ConnectionUp_stateChanged(int state) {
setConnectionDirectionEnabled("up", state == Qt::Checked);
void MapImageExporter::setShowConnectionUp(bool checked) {
setConnectionDirectionEnabled("up", checked);
updatePreview();
}
void MapImageExporter::on_checkBox_ConnectionDown_stateChanged(int state) {
setConnectionDirectionEnabled("down", state == Qt::Checked);
void MapImageExporter::setShowConnectionDown(bool checked) {
setConnectionDirectionEnabled("down", checked);
updatePreview();
}
void MapImageExporter::on_checkBox_ConnectionLeft_stateChanged(int state) {
setConnectionDirectionEnabled("left", state == Qt::Checked);
void MapImageExporter::setShowConnectionLeft(bool checked) {
setConnectionDirectionEnabled("left", checked);
updatePreview();
}
void MapImageExporter::on_checkBox_ConnectionRight_stateChanged(int state) {
setConnectionDirectionEnabled("right", state == Qt::Checked);
void MapImageExporter::setShowConnectionRight(bool checked) {
setConnectionDirectionEnabled("right", checked);
updatePreview();
}
// Shortcut setting for enabling all connection directions
void MapImageExporter::on_checkBox_AllConnections_stateChanged(int state) {
bool on = (state == Qt::Checked);
void MapImageExporter::setShowAllConnections(bool checked) {
const QSignalBlocker b_Up(ui->checkBox_ConnectionUp);
ui->checkBox_ConnectionUp->setChecked(on);
ui->checkBox_ConnectionUp->setDisabled(on);
setConnectionDirectionEnabled("up", on);
ui->checkBox_ConnectionUp->setChecked(checked);
ui->checkBox_ConnectionUp->setDisabled(checked);
setConnectionDirectionEnabled("up", checked);
const QSignalBlocker b_Down(ui->checkBox_ConnectionDown);
ui->checkBox_ConnectionDown->setChecked(on);
ui->checkBox_ConnectionDown->setDisabled(on);
setConnectionDirectionEnabled("down", on);
ui->checkBox_ConnectionDown->setChecked(checked);
ui->checkBox_ConnectionDown->setDisabled(checked);
setConnectionDirectionEnabled("down", checked);
const QSignalBlocker b_Left(ui->checkBox_ConnectionLeft);
ui->checkBox_ConnectionLeft->setChecked(on);
ui->checkBox_ConnectionLeft->setDisabled(on);
setConnectionDirectionEnabled("left", on);
ui->checkBox_ConnectionLeft->setChecked(checked);
ui->checkBox_ConnectionLeft->setDisabled(checked);
setConnectionDirectionEnabled("left", checked);
const QSignalBlocker b_Right(ui->checkBox_ConnectionRight);
ui->checkBox_ConnectionRight->setChecked(on);
ui->checkBox_ConnectionRight->setDisabled(on);
setConnectionDirectionEnabled("right", on);
ui->checkBox_ConnectionRight->setChecked(checked);
ui->checkBox_ConnectionRight->setDisabled(checked);
setConnectionDirectionEnabled("right", checked);
updatePreview();
}
void MapImageExporter::on_checkBox_DisablePreviewScaling_stateChanged(int state) {
m_settings.disablePreviewScaling = (state == Qt::Checked);
void MapImageExporter::setDisablePreviewScaling(bool checked) {
m_settings.disablePreviewScaling = checked;
if (m_settings.disablePreviewScaling) {
ui->graphicsView_Preview->resetTransform();
} else {
@ -847,8 +860,8 @@ void MapImageExporter::on_checkBox_DisablePreviewScaling_stateChanged(int state)
}
}
void MapImageExporter::on_checkBox_DisablePreviewUpdates_stateChanged(int state) {
m_settings.disablePreviewUpdates = (state == Qt::Checked);
void MapImageExporter::setDisablePreviewUpdates(bool checked) {
m_settings.disablePreviewUpdates = checked;
if (m_settings.disablePreviewUpdates) {
if (m_timelapseMovie) {
m_timelapseMovie->stop();

View File

@ -1,6 +1,7 @@
#include "config.h"
#include "metatilelayersitem.h"
#include "imageproviders.h"
#include "utility.h"
#include <QPainter>
static const QList<QPoint> tilePositions = {
@ -28,7 +29,11 @@ void MetatileLayersItem::draw() {
for (int i = 0; i < numTiles; i++) {
Tile tile = this->metatile->tiles.at(i);
QImage tileImage = getPalettedTileImage(tile.tileId, this->primaryTileset, this->secondaryTileset, tile.palette, true)
#if (QT_VERSION >= QT_VERSION_CHECK(6, 9, 0))
.flipped(Util::getOrientation(tile.xflip, tile.yflip))
#else
.mirrored(tile.xflip, tile.yflip)
#endif
.scaled(16, 16);
painter.drawImage(tilePositions.at(i) * 16, tileImage);
}

View File

@ -45,12 +45,11 @@ void ProjectSettingsEditor::connectSignals() {
connect(ui->comboBox_BaseGameVersion, &QComboBox::currentTextChanged, this, &ProjectSettingsEditor::promptRestoreDefaults);
connect(ui->comboBox_AttributesSize, &QComboBox::currentTextChanged, this, &ProjectSettingsEditor::updateAttributeLimits);
connect(ui->comboBox_IconSpecies, &QComboBox::currentTextChanged, this, &ProjectSettingsEditor::updatePokemonIconPath);
connect(ui->checkBox_EnableCustomBorderSize, &QCheckBox::stateChanged, [this](int state) {
bool customSize = (state == Qt::Checked);
connect(ui->checkBox_EnableCustomBorderSize, &QCheckBox::toggled, [this](bool enabled) {
// When switching between the spin boxes or line edit for border metatiles we set
// the newly-shown UI using the values from the hidden UI.
this->setBorderMetatileIds(customSize, this->getBorderMetatileIds(!customSize));
this->setBorderMetatilesUi(customSize);
this->setBorderMetatileIds(enabled, this->getBorderMetatileIds(!enabled));
this->setBorderMetatilesUi(enabled);
});
connect(ui->button_AddWarpBehavior, &QAbstractButton::clicked, [this](bool) { this->updateWarpBehaviorsList(true); });
connect(ui->button_RemoveWarpBehavior, &QAbstractButton::clicked, [this](bool) { this->updateWarpBehaviorsList(false); });
@ -82,8 +81,8 @@ void ProjectSettingsEditor::connectSignals() {
connect(combo, &QComboBox::currentTextChanged, this, &ProjectSettingsEditor::markEdited);
}
for (auto checkBox : ui->centralwidget->findChildren<QCheckBox *>())
connect(checkBox, &QCheckBox::stateChanged, this, &ProjectSettingsEditor::markEdited);
for (auto radioButton : ui->centralwidget->findChildren<QRadioButton *>())
connect(checkBox, &QCheckBox::toggled, this, &ProjectSettingsEditor::markEdited);
for (auto radioButton : ui->centralwidget->findChildren<QRadioButton *>())
connect(radioButton, &QRadioButton::toggled, this, &ProjectSettingsEditor::markEdited);
for (auto lineEdit : ui->centralwidget->findChildren<QLineEdit *>())
connect(lineEdit, &QLineEdit::textEdited, this, &ProjectSettingsEditor::markEdited);

View File

@ -27,6 +27,10 @@ RegionMapEditor::RegionMapEditor(QWidget *parent, Project *project) :
this->ui->setupUi(this);
this->project = project;
connect(this->project, &Project::mapSectionIdNamesChanged, this, &RegionMapEditor::setLocations);
connect(ui->checkBox_tileHFlip, &QCheckBox::toggled, this, &RegionMapEditor::setTileHFlip);
connect(ui->checkBox_tileVFlip, &QCheckBox::toggled, this, &RegionMapEditor::setTileVFlip);
this->configFilepath = QString("%1/%2").arg(this->project->root).arg(projectConfig.getFilePath(ProjectFilePath::json_region_porymap_cfg));
this->initShortcuts();
this->restoreWindowState();
@ -1030,15 +1034,18 @@ void RegionMapEditor::on_pushButton_RM_Options_delete_clicked() {
}
void RegionMapEditor::on_spinBox_tilePalette_valueChanged(int value) {
this->mapsquare_selector_item->selectPalette(value);
if (this->mapsquare_selector_item)
this->mapsquare_selector_item->selectPalette(value);
}
void RegionMapEditor::on_checkBox_tileHFlip_stateChanged(int state) {
this->mapsquare_selector_item->selectHFlip(state == Qt::Checked);
void RegionMapEditor::setTileHFlip(bool enabled) {
if (this->mapsquare_selector_item)
this->mapsquare_selector_item->selectHFlip(enabled);
}
void RegionMapEditor::on_checkBox_tileVFlip_stateChanged(int state) {
this->mapsquare_selector_item->selectVFlip(state == Qt::Checked);
void RegionMapEditor::setTileVFlip(bool enabled) {
if (this->mapsquare_selector_item)
this->mapsquare_selector_item->selectVFlip(enabled);
}
void RegionMapEditor::on_action_RegionMap_Resize_triggered() {

View File

@ -123,21 +123,10 @@ bool Shortcut::autoRepeat() const {
return sc_vec.first()->autoRepeat();
}
int Shortcut::id() const {
return sc_vec.first()->id();
}
QList<int> Shortcut::ids() const {
QList<int> id_list;
for (auto *sc : sc_vec)
id_list.append(sc->id());
return id_list;
}
bool Shortcut::event(QEvent *e) {
if (isEnabled() && e->type() == QEvent::Shortcut) {
auto se = static_cast<QShortcutEvent *>(e);
if (ids().contains(se->shortcutId()) && keys().contains(se->key())) {
if (keys().contains(se->key())) {
if (QWhatsThis::inWhatsThisMode()) {
QWhatsThis::showText(QCursor::pos(), whatsThis());
} else {

View File

@ -93,7 +93,11 @@ QImage TilemapTileSelector::tileImg(shared_ptr<TilemapTile> tile) {
// take a tile from the tileset
QImage img = tilesetImage.copy(pos.x() * 8, pos.y() * 8, 8, 8);
#if (QT_VERSION >= QT_VERSION_CHECK(6, 9, 0))
img.flip(Util::getOrientation(tile->hFlip(), tile->vFlip()));
#else
img = img.mirrored(tile->hFlip(), tile->vFlip());
#endif
return img;
}

View File

@ -26,6 +26,8 @@ TilesetEditor::TilesetEditor(Project *project, Layout *layout, QWidget *parent)
setAttribute(Qt::WA_DeleteOnClose);
setTilesets(this->layout->tileset_primary_label, this->layout->tileset_secondary_label);
ui->setupUi(this);
connect(ui->checkBox_xFlip, &QCheckBox::toggled, this, &TilesetEditor::setXFlip);
connect(ui->checkBox_yFlip, &QCheckBox::toggled, this, &TilesetEditor::setYFlip);
this->tileXFlip = ui->checkBox_xFlip->isChecked();
this->tileYFlip = ui->checkBox_yFlip->isChecked();
@ -388,8 +390,13 @@ void TilesetEditor::drawSelectedTiles() {
int tileIndex = 0;
for (int j = 0; j < dimensions.y(); j++) {
for (int i = 0; i < dimensions.x(); i++) {
QImage tileImage = getPalettedTileImage(tiles.at(tileIndex).tileId, this->primaryTileset, this->secondaryTileset, tiles.at(tileIndex).palette, true)
.mirrored(tiles.at(tileIndex).xflip, tiles.at(tileIndex).yflip)
auto tile = tiles.at(tileIndex);
QImage tileImage = getPalettedTileImage(tile.tileId, this->primaryTileset, this->secondaryTileset, tile.palette, true)
#if (QT_VERSION >= QT_VERSION_CHECK(6, 9, 0))
.flipped(Util::getOrientation(tile.xflip, tile.yflip))
#else
.mirrored(tile.xflip, tile.yflip)
#endif
.scaled(16, 16);
tileIndex++;
painter.drawImage(i * 16, j * 16, tileImage);
@ -540,17 +547,17 @@ void TilesetEditor::on_spinBox_paletteSelector_valueChanged(int paletteId)
this->metatileLayersItem->clearLastModifiedCoords();
}
void TilesetEditor::on_checkBox_xFlip_stateChanged(int checked)
void TilesetEditor::setXFlip(bool enabled)
{
this->tileXFlip = checked;
this->tileXFlip = enabled;
this->tileSelector->setTileFlips(this->tileXFlip, this->tileYFlip);
this->drawSelectedTiles();
this->metatileLayersItem->clearLastModifiedCoords();
}
void TilesetEditor::on_checkBox_yFlip_stateChanged(int checked)
void TilesetEditor::setYFlip(bool enabled)
{
this->tileYFlip = checked;
this->tileYFlip = enabled;
this->tileSelector->setTileFlips(this->tileXFlip, this->tileYFlip);
this->drawSelectedTiles();
this->metatileLayersItem->clearLastModifiedCoords();

View File

@ -19,8 +19,8 @@ UpdatePromoter::UpdatePromoter(QWidget *parent, NetworkAccessManager *manager)
// Set up "Do not alert me" check box
this->updatePreferences();
ui->checkBox_StopAlerts->setVisible(false);
connect(ui->checkBox_StopAlerts, &QCheckBox::stateChanged, [this](int state) {
porymapConfig.checkForUpdates = (state != Qt::Checked);
connect(ui->checkBox_StopAlerts, &QCheckBox::toggled, [this](bool stopAlerts) {
porymapConfig.checkForUpdates = !stopAlerts;
emit this->changedPreferences();
});