diff --git a/forms/regionmapeditor.ui b/forms/regionmapeditor.ui
index 1d521a36..3eda7dcd 100644
--- a/forms/regionmapeditor.ui
+++ b/forms/regionmapeditor.ui
@@ -61,7 +61,7 @@
0
0
- 348
+ 350
225
@@ -182,7 +182,7 @@
0
0
- 348
+ 350
225
@@ -651,7 +651,7 @@
0
0
- 440
+ 441
230
@@ -787,7 +787,7 @@
8
0
- 254
+ 255
274
@@ -906,16 +906,19 @@
Qt::StrongFocus
- 1
+ 10
- 4
+ 100
+
+
+ 30
Qt::Vertical
- QSlider::TicksAbove
+ QSlider::NoTicks
1
@@ -953,16 +956,19 @@
Qt::StrongFocus
- 1
+ 10
- 4
+ 100
+
+
+ 30
Qt::Vertical
- QSlider::TicksAbove
+ QSlider::NoTicks
1
@@ -991,16 +997,19 @@
Qt::StrongFocus
- 1
+ 10
- 4
+ 100
+
+
+ 30
Qt::Vertical
- QSlider::TicksBelow
+ QSlider::NoTicks
1
@@ -1038,16 +1047,19 @@
Qt::StrongFocus
- 1
+ 10
- 4
+ 100
+
+
+ 30
Qt::Vertical
- QSlider::TicksBelow
+ QSlider::NoTicks
1
@@ -1080,6 +1092,7 @@
+
diff --git a/include/core/regionmap.h b/include/core/regionmap.h
index 7e7733e3..e9bf94bc 100644
--- a/include/core/regionmap.h
+++ b/include/core/regionmap.h
@@ -48,7 +48,7 @@ public:
~RegionMap() {};
- Project *project;
+ Project *project = nullptr;
QVector map_squares;
History history;
@@ -70,6 +70,7 @@ public:
void resize(int width, int height);
void resetSquare(int index);
+ void replaceSectionId(unsigned oldId, unsigned newId);
int width();
int height();
diff --git a/include/ui/regionmapeditor.h b/include/ui/regionmapeditor.h
index b9af6fd4..de2a8cfc 100644
--- a/include/ui/regionmapeditor.h
+++ b/include/ui/regionmapeditor.h
@@ -59,12 +59,7 @@ private:
bool regionMapFirstDraw = true;
double scaleUpFactor = 2.0;
- double scaleDownFactor = 1.0 / scaleUpFactor;
-
- int scaleRegionMapTiles = 1;
- int scaleRegionMapImage = 1;
- int scaleCityMapTiles = 1;
- int scaleCityMapImage = 1;
+ double initialScale = 30.0;
QGraphicsScene *scene_region_map_image = nullptr;
QGraphicsScene *scene_city_map_image = nullptr;
@@ -97,6 +92,7 @@ private slots:
void on_action_RegionMap_Undo_triggered();
void on_action_RegionMap_Redo_triggered();
void on_action_RegionMap_Resize_triggered();
+ void on_action_Swap_triggered();
void on_action_RegionMap_Generate_triggered();
void on_tabWidget_Region_Map_currentChanged(int);
void on_pushButton_RM_Options_delete_clicked();
diff --git a/src/core/regionmap.cpp b/src/core/regionmap.cpp
index 3720e03d..ab8609de 100644
--- a/src/core/regionmap.cpp
+++ b/src/core/regionmap.cpp
@@ -198,6 +198,19 @@ void RegionMap::resetSquare(int index) {
logInfo(QString("Reset map square at (%1, %2).").arg(this->map_squares[index].x).arg(this->map_squares[index].y));
}
+void RegionMap::replaceSectionId(unsigned oldId, unsigned newId) {
+ for (auto &square : map_squares) {
+ if (square.secid == oldId) {
+ square.has_map = false;
+ square.secid = newId;
+ QString secname = (*(project->regionMapSections))[newId];
+ if (secname != "MAPSEC_NONE") square.has_map = true;
+ square.mapsec = secname;
+ square.map_name = sMapNamesMap.value(mapSecToMapEntry.value(secname).name);
+ }
+ }
+}
+
void RegionMap::resize(int newWidth, int newHeight) {
QVector new_squares;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index 0c3d3304..382e6399 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -1980,9 +1980,7 @@ void MainWindow::on_horizontalSlider_MetatileZoom_valueChanged(int value) {
}
void MainWindow::on_pushButton_RM_Options_save_clicked() {
- //
this->editor->region_map->saveOptions(
- //
this->editor->region_map_layout_item->selectedTile,
this->ui->comboBox_RM_ConnectedMap->currentText(),
this->ui->lineEdit_RM_MapName->text(),
diff --git a/src/ui/regionmapeditor.cpp b/src/ui/regionmapeditor.cpp
index 42fff3ef..793a00bf 100644
--- a/src/ui/regionmapeditor.cpp
+++ b/src/ui/regionmapeditor.cpp
@@ -11,6 +11,7 @@
#include
#include
#include
+#include
RegionMapEditor::RegionMapEditor(QWidget *parent, Project *project_) :
QMainWindow(parent),
@@ -103,10 +104,9 @@ void RegionMapEditor::displayRegionMapImage() {
this->scene_region_map_image->setSceneRect(this->scene_region_map_image->itemsBoundingRect());
this->ui->graphicsView_Region_Map_BkgImg->setScene(this->scene_region_map_image);
- this->ui->graphicsView_Region_Map_BkgImg->setFixedSize(this->region_map->imgSize().width() * scaleRegionMapImage + 2,
- this->region_map->imgSize().height() * scaleRegionMapImage + 2);
if (regionMapFirstDraw) {
+ on_verticalSlider_Zoom_Map_Image_valueChanged(initialScale);
RegionMapHistoryItem *commit = new RegionMapHistoryItem(
RegionMapEditorBox::BackgroundImage, this->region_map->getTiles(), this->region_map->width(), this->region_map->height()
);
@@ -140,8 +140,6 @@ void RegionMapEditor::displayRegionMapLayout() {
this->scene_region_map_layout->setSceneRect(this->scene_region_map_layout->itemsBoundingRect());
this->ui->graphicsView_Region_Map_Layout->setScene(this->scene_region_map_layout);
- this->ui->graphicsView_Region_Map_Layout->setFixedSize(this->region_map->imgSize().width() * scaleRegionMapImage + 2,
- this->region_map->imgSize().height() * scaleRegionMapImage + 2);
}
void RegionMapEditor::displayRegionMapLayoutOptions() {
@@ -199,8 +197,7 @@ void RegionMapEditor::displayRegionMapTileSelector() {
this, &RegionMapEditor::onRegionMapTileSelectorHoveredTileCleared);
this->ui->graphicsView_RegionMap_Tiles->setScene(this->scene_region_map_tiles);
- this->ui->graphicsView_RegionMap_Tiles->setFixedSize(this->mapsquare_selector_item->pixelWidth * scaleRegionMapTiles + 2,
- this->mapsquare_selector_item->pixelHeight * scaleRegionMapTiles + 2);
+ on_verticalSlider_Zoom_Image_Tiles_valueChanged(initialScale);
this->mapsquare_selector_item->select(this->selectedImageTile);
}
@@ -223,8 +220,7 @@ void RegionMapEditor::displayCityMapTileSelector() {
this, &RegionMapEditor::onCityMapTileSelectorSelectedTileChanged);
this->ui->graphicsView_City_Map_Tiles->setScene(this->scene_city_map_tiles);
- this->ui->graphicsView_City_Map_Tiles->setFixedSize(this->city_map_selector_item->pixelWidth * scaleCityMapTiles + 2,
- this->city_map_selector_item->pixelHeight * scaleCityMapTiles + 2);
+ on_verticalSlider_Zoom_City_Tiles_valueChanged(initialScale);
this->city_map_selector_item->select(this->selectedCityTile);
}
@@ -250,8 +246,7 @@ void RegionMapEditor::displayCityMap(QString f) {
scene_city_map_image->setSceneRect(this->scene_city_map_image->sceneRect());
this->ui->graphicsView_City_Map->setScene(scene_city_map_image);
- this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width() * scaleCityMapImage + 2,
- 8 * city_map_item->height() * scaleCityMapImage + 2);
+ on_verticalSlider_Zoom_City_Map_valueChanged(initialScale);
}
bool RegionMapEditor::createCityMap(QString name) {
@@ -564,6 +559,45 @@ void RegionMapEditor::resize(int w, int h) {
displayRegionMapLayoutOptions();
}
+void RegionMapEditor::on_action_Swap_triggered() {
+ QDialog popup(this, Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
+ popup.setWindowTitle("New City Map");
+ popup.setWindowModality(Qt::NonModal);
+
+ QFormLayout form(&popup);
+
+ QComboBox *oldSecBox = new QComboBox();
+ oldSecBox->addItems(*(this->project->regionMapSections));
+ form.addRow(new QLabel("Old Map Section:"), oldSecBox);
+ QComboBox *newSecBox = new QComboBox();
+ newSecBox->addItems(*(this->project->regionMapSections));
+ form.addRow(new QLabel("New Map Section:"), newSecBox);
+
+ QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &popup);
+ form.addRow(&buttonBox);
+
+ QString beforeSection, afterSection;
+ uint8_t oldId, newId;
+ connect(&buttonBox, SIGNAL(rejected()), &popup, SLOT(reject()));
+ connect(&buttonBox, &QDialogButtonBox::accepted, [this, &popup, &oldSecBox, &newSecBox,
+ &beforeSection, &afterSection, &oldId, &newId](){
+ beforeSection = oldSecBox->currentText();
+ afterSection = newSecBox->currentText();
+ if (!beforeSection.isEmpty() && !afterSection.isEmpty()) {
+ oldId = static_cast(project->regionMapSections->indexOf(beforeSection));
+ newId = static_cast(project->regionMapSections->indexOf(afterSection));
+ popup.accept();
+ }
+ });
+
+ if (popup.exec() == QDialog::Accepted) {
+ this->region_map->replaceSectionId(oldId, newId);
+ this->region_map_layout_item->draw();
+ this->region_map_layout_item->select(this->region_map_layout_item->selectedTile);
+ this->hasUnsavedChanges = true;
+ }
+}
+
void RegionMapEditor::on_comboBox_CityMap_picker_currentTextChanged(const QString &file) {
this->displayCityMap(file);
this->cityMapFirstDraw = true;
@@ -593,64 +627,58 @@ void RegionMapEditor::closeEvent(QCloseEvent *event)
}
void RegionMapEditor::on_verticalSlider_Zoom_Map_Image_valueChanged(int val) {
- bool zoom_in = val > scaleRegionMapImage ? true : false;
- scaleRegionMapImage = val;
+ double scale = pow(scaleUpFactor, static_cast(val - initialScale) / initialScale);
- this->ui->graphicsView_Region_Map_BkgImg->setFixedSize(this->region_map->imgSize().width() * pow(scaleUpFactor, scaleRegionMapImage - 1) + 2,
- this->region_map->imgSize().height() * pow(scaleUpFactor, scaleRegionMapImage - 1) + 2);
- this->ui->graphicsView_Region_Map_Layout->setFixedSize(this->region_map->imgSize().width() * pow(scaleUpFactor, scaleRegionMapImage - 1) + 2,
- this->region_map->imgSize().height() * pow(scaleUpFactor, scaleRegionMapImage - 1) + 2);
+ QMatrix matrix;
+ matrix.scale(scale, scale);
+ int width = ceil(static_cast(this->region_map->imgSize().width()) * scale);
+ int height = ceil(static_cast(this->region_map->imgSize().height()) * scale);
- if (zoom_in) {
- this->ui->graphicsView_Region_Map_BkgImg->scale(scaleUpFactor, scaleUpFactor);
- this->ui->graphicsView_Region_Map_Layout->scale(scaleUpFactor, scaleUpFactor);
- } else {
- //
- this->ui->graphicsView_Region_Map_BkgImg->scale(scaleDownFactor, scaleDownFactor);
- this->ui->graphicsView_Region_Map_Layout->scale(scaleDownFactor, scaleDownFactor);
- }
+ ui->graphicsView_Region_Map_BkgImg->setResizeAnchor(QGraphicsView::NoAnchor);
+ ui->graphicsView_Region_Map_BkgImg->setMatrix(matrix);
+ ui->graphicsView_Region_Map_BkgImg->setFixedSize(width + 2, height + 2);
+ ui->graphicsView_Region_Map_Layout->setResizeAnchor(QGraphicsView::NoAnchor);
+ ui->graphicsView_Region_Map_Layout->setMatrix(matrix);
+ ui->graphicsView_Region_Map_Layout->setFixedSize(width + 2, height + 2);
}
void RegionMapEditor::on_verticalSlider_Zoom_Image_Tiles_valueChanged(int val) {
- bool zoom_in = val > scaleRegionMapTiles ? true : false;
- scaleRegionMapTiles = val;
+ double scale = pow(scaleUpFactor, static_cast(val - initialScale) / initialScale);
- this->ui->graphicsView_RegionMap_Tiles->setFixedSize(this->mapsquare_selector_item->pixelWidth * pow(scaleUpFactor, scaleRegionMapTiles - 1) + 2,
- this->mapsquare_selector_item->pixelHeight * pow(scaleUpFactor, scaleRegionMapTiles - 1) + 2);
-
- if (zoom_in) {
- this->ui->graphicsView_RegionMap_Tiles->scale(scaleUpFactor, scaleUpFactor);
- } else {
- this->ui->graphicsView_RegionMap_Tiles->scale(scaleDownFactor, scaleDownFactor);
- }
+ QMatrix matrix;
+ matrix.scale(scale, scale);
+ int width = ceil(static_cast(this->mapsquare_selector_item->pixelWidth) * scale);
+ int height = ceil(static_cast(this->mapsquare_selector_item->pixelHeight) * scale);
+
+ ui->graphicsView_RegionMap_Tiles->setResizeAnchor(QGraphicsView::NoAnchor);
+ ui->graphicsView_RegionMap_Tiles->setMatrix(matrix);
+ ui->graphicsView_RegionMap_Tiles->setFixedSize(width + 2, height + 2);
}
void RegionMapEditor::on_verticalSlider_Zoom_City_Map_valueChanged(int val) {
- bool zoom_in = val > scaleCityMapImage ? true : false;
- scaleCityMapImage = val;
+ double scale = pow(scaleUpFactor, static_cast(val - initialScale) / initialScale);
- this->ui->graphicsView_City_Map->setFixedSize(8 * city_map_item->width() * pow(scaleUpFactor, scaleCityMapImage - 1) + 2,
- 8 * city_map_item->height() * pow(scaleUpFactor, scaleCityMapImage - 1) + 2);
+ QMatrix matrix;
+ matrix.scale(scale, scale);
+ int width = ceil(static_cast(8 * city_map_item->width()) * scale);
+ int height = ceil(static_cast(8 * city_map_item->height()) * scale);
- if (zoom_in) {
- this->ui->graphicsView_City_Map->scale(scaleUpFactor, scaleUpFactor);
- } else {
- this->ui->graphicsView_City_Map->scale(scaleDownFactor, scaleDownFactor);
- }
+ ui->graphicsView_City_Map->setResizeAnchor(QGraphicsView::NoAnchor);
+ ui->graphicsView_City_Map->setMatrix(matrix);
+ ui->graphicsView_City_Map->setFixedSize(width + 2, height + 2);
}
void RegionMapEditor::on_verticalSlider_Zoom_City_Tiles_valueChanged(int val) {
- bool zoom_in = val > scaleCityMapTiles ? true : false;
- scaleCityMapTiles = val;
+ double scale = pow(scaleUpFactor, static_cast(val - initialScale) / initialScale);
- this->ui->graphicsView_City_Map_Tiles->setFixedSize(this->city_map_selector_item->pixelWidth * pow(scaleUpFactor, scaleCityMapTiles - 1) + 2,
- this->city_map_selector_item->pixelHeight * pow(scaleUpFactor, scaleCityMapTiles - 1) + 2);
+ QMatrix matrix;
+ matrix.scale(scale, scale);
+ int width = ceil(static_cast(this->city_map_selector_item->pixelWidth) * scale);
+ int height = ceil(static_cast(this->city_map_selector_item->pixelHeight) * scale);
- if (zoom_in) {
- this->ui->graphicsView_City_Map_Tiles->scale(scaleUpFactor, scaleUpFactor);
- } else {
- this->ui->graphicsView_City_Map_Tiles->scale(scaleDownFactor, scaleDownFactor);
- }
+ ui->graphicsView_City_Map_Tiles->setResizeAnchor(QGraphicsView::NoAnchor);
+ ui->graphicsView_City_Map_Tiles->setMatrix(matrix);
+ ui->graphicsView_City_Map_Tiles->setFixedSize(width + 2, height + 2);
}
void RegionMapEditor::on_action_RegionMap_Generate_triggered() {
diff --git a/src/ui/tilemaptileselector.cpp b/src/ui/tilemaptileselector.cpp
index 770b20b5..a18185ab 100644
--- a/src/ui/tilemaptileselector.cpp
+++ b/src/ui/tilemaptileselector.cpp
@@ -12,6 +12,7 @@ void TilemapTileSelector::draw() {
this->numTilesWide = width_ / 8;
this->numTiles = ntiles_;
+ this->setPixmap(tilemap);
this->drawSelection();
}