diff --git a/forms/mapimageexporter.ui b/forms/mapimageexporter.ui index d97099a7..933aab67 100644 --- a/forms/mapimageexporter.ui +++ b/forms/mapimageexporter.ui @@ -6,8 +6,8 @@ 0 0 - 696 - 396 + 817 + 535 @@ -16,15 +16,313 @@ true - - - + + + + + + 0 + 0 + + + + + + + + + Map + + + + + + + QComboBox::SizeAdjustPolicy::AdjustToContents + + + + + + + + + Events + + + + + + + + Triggers + + + + + + + Objects + + + + + + + Heal Locations + + + + + + + Warps + + + + + + + All + + + + + + + BGs + + + + + + + + + + + + Connections + + + + + + + + Left + + + + + + + Up + + + + + + + Right + + + + + + + Down + + + + + + + All + + + + + + + + + + + + Miscellaneous + + + + + + + + Grid + + + + + + + Collision + + + + + + + Border + + + + + + + + + + + + Timelapse + + + + + + + + + ms + + + 1 + + + 2000 + + + 200 + + + + + + + Frame Delay + + + + + + + + + + 1 + + + 999 + + + + + + + Edit Frame Skip + + + + + + + + + + Qt::Orientation::Vertical + + + + 20 + 40 + + + + + + + + Preview actual size + + + + + + + + + Reset + + + + + + + Qt::Orientation::Horizontal + + + + 40 + 20 + + + + + + + + Cancel + + + + + + + Save + + + + + + + + + + + + + 0 + 0 + + Preview + + 6 + + + 6 + + + 6 + + + 6 + - + true @@ -33,12 +331,24 @@ 0 0 - 403 - 343 + 469 + 464 - + + 0 + + + 0 + + + 0 + + + 0 + + @@ -53,65 +363,13 @@ false - QAbstractScrollArea::AdjustIgnored + QAbstractScrollArea::SizeAdjustPolicy::AdjustIgnored - QGraphicsView::NoDrag + QGraphicsView::DragMode::NoDrag - - - - Qt::Vertical - - - - 10 - 100 - - - - - - - - Qt::Vertical - - - - 10 - 100 - - - - - - - - Qt::Horizontal - - - - 100 - 10 - - - - - - - - Qt::Horizontal - - - - 100 - 10 - - - - @@ -119,256 +377,18 @@ - - - - - - - - Map - - - - - - - QComboBox::AdjustToContents - - - - - - - - - Events - - - - - - - - Warps - - - - - - - Objects - - - - - - - BGs - - - - - - - Triggers - - - - - - - Heal Spots - - - - - - - - - - - - Connections - - - - - - - - Up - - - - - - - Down - - - - - - - Left - - - - - - - Right - - - - - - - - - - - - Miscellaneous - - - - - - - - Grid - - - - - - - Collision - - - - - - - Border - - - - - - - - - - - - Timelapse - - - - - - - - - ms - - - 1 - - - 2000 - - - 200 - - - - - - - Frame Delay - - - - - - - - - - 1 - - - 999 - - - - - - - Edit Frame Skip - - - - - - - - - - Qt::Vertical - - - - 20 - 40 - - - - - - - - - - Reset - - - - - - - Qt::Horizontal - - - - 40 - 20 - - - - - - - - Cancel - - - - - - - Save - - - - - - + + + + + + + Qt::AlignmentFlag::AlignCenter + + + true + + diff --git a/include/ui/mapimageexporter.h b/include/ui/mapimageexporter.h index b9cc20bd..82dae443 100644 --- a/include/ui/mapimageexporter.h +++ b/include/ui/mapimageexporter.h @@ -16,6 +16,24 @@ enum ImageExporterMode { Timelapse, }; +struct ImageExporterSettings { + bool showObjects = false; + bool showWarps = false; + bool showBGs = false; + bool showTriggers = false; + bool showHealLocations = false; + bool showUpConnections = false; + bool showDownConnections = false; + bool showLeftConnections = false; + bool showRightConnections = false; + bool showGrid = false; + bool showBorder = false; + bool showCollision = false; + bool previewActualSize = false; + int timelapseSkipAmount = 1; + int timelapseDelayMs = 200; +}; + class MapImageExporter : public QDialog { Q_OBJECT @@ -33,50 +51,44 @@ class MapImageExporter : public QDialog QPixmap preview; - bool showObjects = false; - bool showWarps = false; - bool showBGs = false; - bool showTriggers = false; - bool showHealSpots = false; - bool showUpConnections = false; - bool showDownConnections = false; - bool showLeftConnections = false; - bool showRightConnections = false; - bool showGrid = false; - bool showBorder = false; - bool showCollision = false; - int timelapseSkipAmount = 1; - int timelapseDelayMs = 200; + ImageExporterSettings settings; ImageExporterMode mode = ImageExporterMode::Normal; void updatePreview(); + void scalePreview(); void updateShowBorderState(); void saveImage(); QPixmap getStitchedImage(QProgressDialog *progress, bool includeBorder); QPixmap getFormattedMapPixmap(Map *map, bool ignoreBorder = false); bool historyItemAppliesToFrame(const QUndoCommand *command); +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_HealSpots_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_Elevation_stateChanged(int state); void on_checkBox_Grid_stateChanged(int state); void on_checkBox_Border_stateChanged(int state); - void on_pushButton_Save_pressed(); void on_pushButton_Reset_pressed(); - void on_pushButton_Cancel_pressed(); void on_spinBox_TimelapseDelay_valueChanged(int delayMs); void on_spinBox_FrameSkip_valueChanged(int skip); + + void on_checkBox_ActualSize_stateChanged(int state); }; #endif // MAPIMAGEEXPORTER_H diff --git a/src/ui/mapimageexporter.cpp b/src/ui/mapimageexporter.cpp index 10194b8b..c812c5f8 100644 --- a/src/ui/mapimageexporter.cpp +++ b/src/ui/mapimageexporter.cpp @@ -23,6 +23,19 @@ QString getTitle(ImageExporterMode mode) { return ""; } +QString getDescription(ImageExporterMode mode) { + switch (mode) + { + case ImageExporterMode::Normal: + return "Exports an image of the selected map."; + case ImageExporterMode::Stitch: + return "Exports a combined image of all the maps connected to the selected map."; + case ImageExporterMode::Timelapse: + return "Exports a GIF of the edit history for the selected map."; + } + return ""; +} + MapImageExporter::MapImageExporter(QWidget *parent_, Editor *editor_, ImageExporterMode mode) : QDialog(parent_), ui(new Ui::MapImageExporter) @@ -33,6 +46,7 @@ MapImageExporter::MapImageExporter(QWidget *parent_, Editor *editor_, ImageExpor this->editor = editor_; this->mode = mode; this->setWindowTitle(getTitle(this->mode)); + this->ui->label_Description->setText(getDescription(this->mode)); this->ui->groupBox_Connections->setVisible(this->mode != ImageExporterMode::Stitch); this->ui->groupBox_Timelapse->setVisible(this->mode == ImageExporterMode::Timelapse); @@ -40,7 +54,8 @@ MapImageExporter::MapImageExporter(QWidget *parent_, Editor *editor_, ImageExpor this->ui->comboBox_MapSelection->setCurrentText(map->name); this->ui->comboBox_MapSelection->setEnabled(false);// TODO: allow selecting map from drop-down - updatePreview(); + connect(ui->pushButton_Save, &QPushButton::pressed, this, &MapImageExporter::saveImage); + connect(ui->pushButton_Cancel, &QPushButton::pressed, this, &MapImageExporter::close); } MapImageExporter::~MapImageExporter() { @@ -48,7 +63,25 @@ MapImageExporter::~MapImageExporter() { delete ui; } +// Allow the window to open before displaying the preview. +void MapImageExporter::showEvent(QShowEvent *event) { + QWidget::showEvent(event); + if (!event->spontaneous()) + QTimer::singleShot(0, this, &MapImageExporter::updatePreview); +} + +void MapImageExporter::resizeEvent(QResizeEvent *event) { + QDialog::resizeEvent(event); + scalePreview(); +} + void MapImageExporter::saveImage() { + // Make sure preview is up-to-date before we save. + if (this->preview.isNull()) + updatePreview(); + if (this->preview.isNull()) + return; + QString title = getTitle(this->mode); QString defaultFilename; switch (this->mode) @@ -74,22 +107,10 @@ void MapImageExporter::saveImage() { editor->project->setImportExportPath(filepath); switch (this->mode) { case ImageExporterMode::Normal: + case ImageExporterMode::Stitch: + // Normal and Stitch modes already have the image ready to go in the preview. this->preview.save(filepath); break; - case ImageExporterMode::Stitch: { - QProgressDialog progress("Building map stitch...", "Cancel", 0, 1, this); - progress.setAutoClose(true); - progress.setWindowModality(Qt::WindowModal); - progress.setModal(true); - QPixmap pixmap = this->getStitchedImage(&progress, this->showBorder); - if (progress.wasCanceled()) { - progress.close(); - return; - } - pixmap.save(filepath); - progress.close(); - break; - } case ImageExporterMode::Timelapse: QProgressDialog progress("Building map timelapse...", "Cancel", 0, 1, this); progress.setAutoClose(true); @@ -100,7 +121,7 @@ void MapImageExporter::saveImage() { int maxWidth = this->map->getWidth() * 16; int maxHeight = this->map->getHeight() * 16; - if (showBorder) { + if (this->settings.showBorder) { maxWidth += 2 * STITCH_MODE_BORDER_DISTANCE * 16; maxHeight += 2 * STITCH_MODE_BORDER_DISTANCE * 16; } @@ -111,7 +132,7 @@ void MapImageExporter::saveImage() { this->map->editHistory.undo(); int width = this->map->getWidth() * 16; int height = this->map->getHeight() * 16; - if (showBorder) { + if (this->settings.showBorder) { width += 2 * STITCH_MODE_BORDER_DISTANCE * 16; height += 2 * STITCH_MODE_BORDER_DISTANCE * 16; } @@ -124,7 +145,7 @@ void MapImageExporter::saveImage() { i++; } QGifImage timelapseImg(QSize(maxWidth, maxHeight)); - timelapseImg.setDefaultDelay(timelapseDelayMs); + timelapseImg.setDefaultDelay(this->settings.timelapseDelayMs); timelapseImg.setDefaultTransparentColor(QColor(0, 0, 0)); // Draw each frame, skpping the specified number of map edits in // the undo history. @@ -154,7 +175,7 @@ void MapImageExporter::saveImage() { pixmap = pixmap2; } timelapseImg.addFrame(pixmap.toImage()); - for (int j = 0; j < timelapseSkipAmount; j++) { + for (int j = 0; j < this->settings.timelapseSkipAmount; j++) { if (i > 0) { i--; this->map->editHistory.redo(); @@ -192,26 +213,26 @@ bool MapImageExporter::historyItemAppliesToFrame(const QUndoCommand *command) { case CommandId::ID_PaintCollision: case CommandId::ID_BucketFillCollision: case CommandId::ID_MagicFillCollision: - return this->showCollision; + return this->settings.showCollision; case CommandId::ID_PaintBorder: - return this->showBorder; + return this->settings.showBorder; case CommandId::ID_MapConnectionMove: case CommandId::ID_MapConnectionChangeDirection: case CommandId::ID_MapConnectionChangeMap: case CommandId::ID_MapConnectionAdd: case CommandId::ID_MapConnectionRemove: - return this->showUpConnections || this->showDownConnections || this->showLeftConnections || this->showRightConnections; + return this->settings.showUpConnections || this->settings.showDownConnections || this->settings.showLeftConnections || this->settings.showRightConnections; case CommandId::ID_EventMove: case CommandId::ID_EventShift: case CommandId::ID_EventCreate: case CommandId::ID_EventDelete: case CommandId::ID_EventDuplicate: { bool eventTypeIsApplicable = - (this->showObjects && (command->id() & IDMask_EventType_Object) != 0) - || (this->showWarps && (command->id() & IDMask_EventType_Warp) != 0) - || (this->showBGs && (command->id() & IDMask_EventType_BG) != 0) - || (this->showTriggers && (command->id() & IDMask_EventType_Trigger) != 0) - || (this->showHealSpots && (command->id() & IDMask_EventType_Heal) != 0); + (this->settings.showObjects && (command->id() & IDMask_EventType_Object) != 0) + || (this->settings.showWarps && (command->id() & IDMask_EventType_Warp) != 0) + || (this->settings.showBGs && (command->id() & IDMask_EventType_BG) != 0) + || (this->settings.showTriggers && (command->id() & IDMask_EventType_Trigger) != 0) + || (this->settings.showHealLocations && (command->id() & IDMask_EventType_Heal) != 0); return eventTypeIsApplicable; } default: @@ -354,19 +375,33 @@ QPixmap MapImageExporter::getStitchedImage(QProgressDialog *progress, bool inclu } void MapImageExporter::updatePreview() { - if (scene) { - delete scene; - scene = nullptr; + if (this->scene) { + delete this->scene; + this->scene = nullptr; } + this->scene = new QGraphicsScene; + + if (this->mode == ImageExporterMode::Stitch) { + QProgressDialog progress("Building map stitch...", "Cancel", 0, 1, this); + progress.setAutoClose(true); + progress.setWindowModality(Qt::WindowModal); + progress.setModal(true); + progress.setMinimumDuration(1000); + this->preview = getStitchedImage(&progress, this->settings.showBorder); + progress.close(); + } else { + // Timelapse mode doesn't currently have a real preview. It just displays the current map as in Normal mode. + this->preview = getFormattedMapPixmap(this->map); + } + this->scene->addPixmap(this->preview); + ui->graphicsView_Preview->setScene(scene); + scalePreview(); +} - preview = getFormattedMapPixmap(this->map); - scene = new QGraphicsScene; - scene->addPixmap(preview); - this->scene->setSceneRect(this->scene->itemsBoundingRect()); - - this->ui->graphicsView_Preview->setScene(scene); - this->ui->graphicsView_Preview->setFixedSize(scene->itemsBoundingRect().width() + 2, - scene->itemsBoundingRect().height() + 2); +void MapImageExporter::scalePreview() { + if (this->scene && !this->settings.previewActualSize){ + ui->graphicsView_Preview->fitInView(this->scene->sceneRect(), Qt::KeepAspectRatioByExpanding); + } } QPixmap MapImageExporter::getFormattedMapPixmap(Map *map, bool ignoreBorder) { @@ -376,7 +411,7 @@ QPixmap MapImageExporter::getFormattedMapPixmap(Map *map, bool ignoreBorder) { map->render(true); pixmap = map->pixmap; - if (showCollision) { + if (this->settings.showCollision) { QPainter collisionPainter(&pixmap); map->renderCollision(true); collisionPainter.setOpacity(editor->collisionOpacity); @@ -387,7 +422,7 @@ QPixmap MapImageExporter::getFormattedMapPixmap(Map *map, bool ignoreBorder) { // draw map border // note: this will break when allowing map to be selected from drop down maybe int borderHeight = 0, borderWidth = 0; - if (!ignoreBorder && this->showBorder) { + if (!ignoreBorder && this->settings.showBorder) { int borderDistance = this->mode ? STITCH_MODE_BORDER_DISTANCE : BORDER_DISTANCE; map->renderBorder(); int borderHorzDist = editor->getBorderDrawDistance(map->getBorderWidth()); @@ -406,15 +441,16 @@ QPixmap MapImageExporter::getFormattedMapPixmap(Map *map, bool ignoreBorder) { pixmap = newPixmap; } - if (!ignoreBorder && (this->showUpConnections || this->showDownConnections || this->showLeftConnections || this->showRightConnections)) { + if (!ignoreBorder && (this->settings.showUpConnections || this->settings.showDownConnections || this->settings.showLeftConnections || this->settings.showRightConnections)) { // if showing connections, draw on outside of image QPainter connectionPainter(&pixmap); + // TODO: Reading the connections from the editor and not 'map' is incorrect. for (auto connectionItem : editor->connection_items) { const QString direction = connectionItem->connection->direction(); - if ((showUpConnections && direction == "up") - || (showDownConnections && direction == "down") - || (showLeftConnections && direction == "left") - || (showRightConnections && direction == "right")) + if ((this->settings.showUpConnections && direction == "up") + || (this->settings.showDownConnections && direction == "down") + || (this->settings.showLeftConnections && direction == "left") + || (this->settings.showRightConnections && direction == "right")) connectionPainter.drawImage(connectionItem->x() + borderWidth, connectionItem->y() + borderHeight, connectionItem->connection->getPixmap().toImage()); } @@ -422,27 +458,30 @@ QPixmap MapImageExporter::getFormattedMapPixmap(Map *map, bool ignoreBorder) { } // draw events - QPainter eventPainter(&pixmap); - QList events = map->getAllEvents(); - int pixelOffset = 0; - if (!ignoreBorder && this->showBorder) { - pixelOffset = this->mode == ImageExporterMode::Normal ? BORDER_DISTANCE * 16 : STITCH_MODE_BORDER_DISTANCE * 16; - } - for (Event *event : events) { - editor->project->setEventPixmap(event); - Event::Group group = event->getEventGroup(); - if ((showObjects && group == Event::Group::Object) - || (showWarps && group == Event::Group::Warp) - || (showBGs && group == Event::Group::Bg) - || (showTriggers && group == Event::Group::Coord) - || (showHealSpots && group == Event::Group::Heal)) - eventPainter.drawImage(QPoint(event->getPixelX() + pixelOffset, event->getPixelY() + pixelOffset), event->getPixmap().toImage()); + if (this->settings.showObjects || this->settings.showWarps || this->settings.showBGs || this->settings.showTriggers || this->settings.showHealLocations) { + QPainter eventPainter(&pixmap); + int pixelOffset = 0; + if (!ignoreBorder && this->settings.showBorder) { + pixelOffset = this->mode == ImageExporterMode::Normal ? BORDER_DISTANCE * 16 : STITCH_MODE_BORDER_DISTANCE * 16; + } + const QList events = map->getAllEvents(); + for (const auto &event : events) { + Event::Group group = event->getEventGroup(); + if ((this->settings.showObjects && group == Event::Group::Object) + || (this->settings.showWarps && group == Event::Group::Warp) + || (this->settings.showBGs && group == Event::Group::Bg) + || (this->settings.showTriggers && group == Event::Group::Coord) + || (this->settings.showHealLocations && group == Event::Group::Heal)) { + editor->project->setEventPixmap(event); + eventPainter.drawImage(QPoint(event->getPixelX() + pixelOffset, event->getPixelY() + pixelOffset), event->getPixmap().toImage()); + } + } + eventPainter.end(); } - eventPainter.end(); // draw grid directly onto the pixmap // since the last grid lines are outside of the pixmap, add a pixel to the bottom and right - if (showGrid) { + if (this->settings.showGrid) { int addX = 1, addY = 1; if (borderHeight) addY = 0; if (borderWidth) addX = 0; @@ -465,97 +504,161 @@ QPixmap MapImageExporter::getFormattedMapPixmap(Map *map, bool ignoreBorder) { void MapImageExporter::updateShowBorderState() { // If any of the Connections settings are enabled then this setting is locked (it's implicitly enabled) + bool on = (this->settings.showUpConnections || this->settings.showDownConnections || this->settings.showLeftConnections || this->settings.showRightConnections); const QSignalBlocker blocker(ui->checkBox_Border); - if (showUpConnections || showDownConnections || showLeftConnections || showRightConnections) { - ui->checkBox_Border->setChecked(true); - ui->checkBox_Border->setDisabled(true); - showBorder = true; - } else { - ui->checkBox_Border->setDisabled(false); - } + ui->checkBox_Border->setChecked(on); + ui->checkBox_Border->setDisabled(on); + this->settings.showBorder = on; } void MapImageExporter::on_checkBox_Elevation_stateChanged(int state) { - showCollision = (state == Qt::Checked); + this->settings.showCollision = (state == Qt::Checked); updatePreview(); } void MapImageExporter::on_checkBox_Grid_stateChanged(int state) { - showGrid = (state == Qt::Checked); + this->settings.showGrid = (state == Qt::Checked); updatePreview(); } void MapImageExporter::on_checkBox_Border_stateChanged(int state) { - showBorder = (state == Qt::Checked); + this->settings.showBorder = (state == Qt::Checked); updatePreview(); } void MapImageExporter::on_checkBox_Objects_stateChanged(int state) { - showObjects = (state == Qt::Checked); + this->settings.showObjects = (state == Qt::Checked); updatePreview(); } void MapImageExporter::on_checkBox_Warps_stateChanged(int state) { - showWarps = (state == Qt::Checked); + this->settings.showWarps = (state == Qt::Checked); updatePreview(); } void MapImageExporter::on_checkBox_BGs_stateChanged(int state) { - showBGs = (state == Qt::Checked); + this->settings.showBGs = (state == Qt::Checked); updatePreview(); } void MapImageExporter::on_checkBox_Triggers_stateChanged(int state) { - showTriggers = (state == Qt::Checked); + this->settings.showTriggers = (state == Qt::Checked); + updatePreview(); +} + +void MapImageExporter::on_checkBox_HealLocations_stateChanged(int state) { + this->settings.showHealLocations = (state == Qt::Checked); updatePreview(); } -void MapImageExporter::on_checkBox_HealSpots_stateChanged(int state) { - showHealSpots = (state == Qt::Checked); +// Shortcut setting for enabling all events +void MapImageExporter::on_checkBox_AllEvents_stateChanged(int state) { + bool on = (state == Qt::Checked); + + const QSignalBlocker b_Objects(ui->checkBox_Objects); + ui->checkBox_Objects->setChecked(on); + ui->checkBox_Objects->setDisabled(on); + this->settings.showObjects = on; + + const QSignalBlocker b_Warps(ui->checkBox_Warps); + ui->checkBox_Warps->setChecked(on); + ui->checkBox_Warps->setDisabled(on); + this->settings.showWarps = on; + + const QSignalBlocker b_BGs(ui->checkBox_BGs); + ui->checkBox_BGs->setChecked(on); + ui->checkBox_BGs->setDisabled(on); + this->settings.showBGs = on; + + const QSignalBlocker b_Triggers(ui->checkBox_Triggers); + ui->checkBox_Triggers->setChecked(on); + ui->checkBox_Triggers->setDisabled(on); + this->settings.showTriggers = on; + + const QSignalBlocker b_HealLocations(ui->checkBox_HealLocations); + ui->checkBox_HealLocations->setChecked(on); + ui->checkBox_HealLocations->setDisabled(on); + this->settings.showHealLocations = on; + updatePreview(); } void MapImageExporter::on_checkBox_ConnectionUp_stateChanged(int state) { - showUpConnections = (state == Qt::Checked); + this->settings.showUpConnections = (state == Qt::Checked); updateShowBorderState(); updatePreview(); } void MapImageExporter::on_checkBox_ConnectionDown_stateChanged(int state) { - showDownConnections = (state == Qt::Checked); + this->settings.showDownConnections = (state == Qt::Checked); updateShowBorderState(); updatePreview(); } void MapImageExporter::on_checkBox_ConnectionLeft_stateChanged(int state) { - showLeftConnections = (state == Qt::Checked); + this->settings.showLeftConnections = (state == Qt::Checked); updateShowBorderState(); updatePreview(); } void MapImageExporter::on_checkBox_ConnectionRight_stateChanged(int state) { - showRightConnections = (state == Qt::Checked); + this->settings.showRightConnections = (state == Qt::Checked); + updateShowBorderState(); + updatePreview(); +} + +// Shortcut setting for enabling all connection directions +void MapImageExporter::on_checkBox_AllConnections_stateChanged(int state) { + bool on = (state == Qt::Checked); + + const QSignalBlocker b_Up(ui->checkBox_ConnectionUp); + ui->checkBox_ConnectionUp->setChecked(on); + ui->checkBox_ConnectionUp->setDisabled(on); + this->settings.showUpConnections = on; + + const QSignalBlocker b_Down(ui->checkBox_ConnectionDown); + ui->checkBox_ConnectionDown->setChecked(on); + ui->checkBox_ConnectionDown->setDisabled(on); + this->settings.showDownConnections = on; + + const QSignalBlocker b_Left(ui->checkBox_ConnectionLeft); + ui->checkBox_ConnectionLeft->setChecked(on); + ui->checkBox_ConnectionLeft->setDisabled(on); + this->settings.showLeftConnections = on; + + const QSignalBlocker b_Right(ui->checkBox_ConnectionRight); + ui->checkBox_ConnectionRight->setChecked(on); + ui->checkBox_ConnectionRight->setDisabled(on); + this->settings.showRightConnections = on; + updateShowBorderState(); updatePreview(); } -void MapImageExporter::on_pushButton_Save_pressed() { - saveImage(); +void MapImageExporter::on_checkBox_ActualSize_stateChanged(int state) { + this->settings.previewActualSize = (state == Qt::Checked); + if (this->settings.previewActualSize) { + ui->graphicsView_Preview->resetTransform(); + } else { + scalePreview(); + } } void MapImageExporter::on_pushButton_Reset_pressed() { - for (auto widget : this->findChildren()) + this->settings = {}; + for (auto widget : this->findChildren()) { + const QSignalBlocker b(widget); // Prevent calls to updatePreview widget->setChecked(false); -} - -void MapImageExporter::on_pushButton_Cancel_pressed() { - this->close(); + } + ui->spinBox_TimelapseDelay->setValue(this->settings.timelapseDelayMs); + ui->spinBox_FrameSkip->setValue(this->settings.timelapseSkipAmount); + updatePreview(); } void MapImageExporter::on_spinBox_TimelapseDelay_valueChanged(int delayMs) { - timelapseDelayMs = delayMs; + this->settings.timelapseDelayMs = delayMs; } void MapImageExporter::on_spinBox_FrameSkip_valueChanged(int skip) { - timelapseSkipAmount = skip; + this->settings.timelapseSkipAmount = skip; }