fix config update crash, add real swap & rename old swap to replace
This commit is contained in:
parent
04ef5c5b7c
commit
13603901e2
5 changed files with 69 additions and 7 deletions
|
@ -1100,6 +1100,7 @@
|
|||
</property>
|
||||
<addaction name="action_RegionMap_Resize"/>
|
||||
<addaction name="action_Swap"/>
|
||||
<addaction name="action_Replace"/>
|
||||
<addaction name="separator"/>
|
||||
<addaction name="action_RegionMap_ClearImage"/>
|
||||
<addaction name="action_RegionMap_ClearLayout"/>
|
||||
|
@ -1138,7 +1139,7 @@
|
|||
</action>
|
||||
<action name="action_Swap">
|
||||
<property name="text">
|
||||
<string>Swap...</string>
|
||||
<string>Swap Layout Sections...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_RegionMap_ClearImage">
|
||||
|
@ -1176,6 +1177,11 @@
|
|||
<string>Update Config...</string>
|
||||
</property>
|
||||
</action>
|
||||
<action name="action_Replace">
|
||||
<property name="text">
|
||||
<string>Replace Layout Section...</string>
|
||||
</property>
|
||||
</action>
|
||||
</widget>
|
||||
<customwidgets>
|
||||
<customwidget>
|
||||
|
|
|
@ -70,6 +70,7 @@ public:
|
|||
void clearLayout();
|
||||
void clearImage();
|
||||
void replaceSection(QString oldSection, QString newSection);
|
||||
void swapSections(QString secA, QString secB);
|
||||
|
||||
unsigned getTileId(int index);
|
||||
shared_ptr<TilemapTile> getTile(int index);
|
||||
|
|
|
@ -126,6 +126,7 @@ private slots:
|
|||
void on_action_RegionMap_ClearLayout_triggered();
|
||||
void on_action_RegionMap_ClearEntries_triggered();
|
||||
void on_action_Swap_triggered();
|
||||
void on_action_Replace_triggered();
|
||||
void on_action_Configure_triggered();
|
||||
void on_tabWidget_Region_Map_currentChanged(int);
|
||||
void on_pushButton_RM_Options_delete_clicked();
|
||||
|
|
|
@ -415,6 +415,19 @@ void RegionMap::replaceSection(QString oldSection, QString newSection) {
|
|||
}
|
||||
}
|
||||
|
||||
void RegionMap::swapSections(QString secA, QString secB) {
|
||||
for (auto &square : this->layouts[this->current_layer]) {
|
||||
if (square.map_section == secA) {
|
||||
square.map_section = secB;
|
||||
square.has_map = (square.map_section != "MAPSEC_NONE");
|
||||
}
|
||||
else if (square.map_section == secB) {
|
||||
square.map_section = secA;
|
||||
square.has_map = (square.map_section != "MAPSEC_NONE");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void RegionMap::resizeTilemap(int newWidth, int newHeight, bool update) {
|
||||
auto tilemapCopy = this->tilemap;
|
||||
int oldWidth = this->tilemap_width;
|
||||
|
|
|
@ -83,6 +83,10 @@ void RegionMapEditor::initShortcuts() {
|
|||
shortcutsConfig.load();
|
||||
shortcutsConfig.setDefaultShortcuts(shortcutableObjects());
|
||||
applyUserShortcuts();
|
||||
|
||||
connect(&(this->history), &QUndoGroup::indexChanged, [this](int) {
|
||||
on_tabWidget_Region_Map_currentChanged(this->ui->tabWidget_Region_Map->currentIndex());
|
||||
});
|
||||
}
|
||||
|
||||
QObjectList RegionMapEditor::shortcutableObjects() const {
|
||||
|
@ -421,9 +425,11 @@ void RegionMapEditor::clear() {
|
|||
// except the config json
|
||||
|
||||
auto stacks = this->history.stacks();
|
||||
this->history.blockSignals(true);
|
||||
for (auto *stack : stacks) {
|
||||
this->history.removeStack(stack);
|
||||
}
|
||||
this->history.blockSignals(false);
|
||||
for (auto p : this->region_maps) {
|
||||
delete p.second;
|
||||
}
|
||||
|
@ -497,10 +503,6 @@ bool RegionMapEditor::setup() {
|
|||
setRegionMap(region_maps.begin()->second);
|
||||
}
|
||||
|
||||
connect(&(this->history), &QUndoGroup::indexChanged, [this](int) {
|
||||
on_tabWidget_Region_Map_currentChanged(this->ui->tabWidget_Region_Map->currentIndex());
|
||||
});
|
||||
|
||||
this->show();
|
||||
this->setWindowState(Qt::WindowState::WindowActive);
|
||||
this->activateWindow();
|
||||
|
@ -555,7 +557,6 @@ bool RegionMapEditor::load() {
|
|||
void RegionMapEditor::setRegionMap(RegionMap *map) {
|
||||
this->region_map = map;
|
||||
this->currIndex = this->region_map->firstLayoutIndex();
|
||||
this->region_map->editHistory.setActive();
|
||||
|
||||
if (this->region_map->layoutEnabled()) {
|
||||
this->ui->tabWidget_Region_Map->setTabEnabled(1, true);
|
||||
|
@ -567,6 +568,7 @@ void RegionMapEditor::setRegionMap(RegionMap *map) {
|
|||
}
|
||||
|
||||
displayRegionMap();
|
||||
this->region_map->editHistory.setActive();
|
||||
}
|
||||
|
||||
bool RegionMapEditor::saveRegionMap(RegionMap *map) {
|
||||
|
@ -1215,6 +1217,45 @@ void RegionMapEditor::on_action_Swap_triggered() {
|
|||
|
||||
QFormLayout form(&popup);
|
||||
|
||||
QComboBox *oldSecBox = new QComboBox();
|
||||
oldSecBox->addItems(this->project->mapSectionValueToName.values());
|
||||
form.addRow(new QLabel("Map Section 1:"), oldSecBox);
|
||||
QComboBox *newSecBox = new QComboBox();
|
||||
newSecBox->addItems(this->project->mapSectionValueToName.values());
|
||||
form.addRow(new QLabel("Map Section 2:"), newSecBox);
|
||||
|
||||
QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &popup);
|
||||
form.addRow(&buttonBox);
|
||||
|
||||
QString beforeSection, afterSection;
|
||||
connect(&buttonBox, &QDialogButtonBox::rejected, &popup, &QDialog::reject);
|
||||
connect(&buttonBox, &QDialogButtonBox::accepted, [&popup, &oldSecBox, &newSecBox, &beforeSection, &afterSection](){
|
||||
beforeSection = oldSecBox->currentText();
|
||||
afterSection = newSecBox->currentText();
|
||||
if (!beforeSection.isEmpty() && !afterSection.isEmpty()) {
|
||||
popup.accept();
|
||||
}
|
||||
});
|
||||
|
||||
if (popup.exec() == QDialog::Accepted) {
|
||||
QList<LayoutSquare> oldLayout = this->region_map->getLayout(this->region_map->getLayer());
|
||||
this->region_map->swapSections(beforeSection, afterSection);
|
||||
QList<LayoutSquare> newLayout = this->region_map->getLayout(this->region_map->getLayer());
|
||||
EditLayout *commit = new EditLayout(this->region_map, this->region_map->getLayer(), -5, oldLayout, newLayout);
|
||||
commit->setText("Swap Layout Sections " + beforeSection + " <<>> " + afterSection);
|
||||
this->region_map->editHistory.push(commit);
|
||||
displayRegionMapLayout();
|
||||
this->region_map_layout_item->select(this->region_map_layout_item->selectedTile);
|
||||
}
|
||||
}
|
||||
|
||||
void RegionMapEditor::on_action_Replace_triggered() {
|
||||
QDialog popup(this, Qt::WindowTitleHint | Qt::WindowCloseButtonHint);
|
||||
popup.setWindowTitle("Replace Map Section");
|
||||
popup.setWindowModality(Qt::NonModal);
|
||||
|
||||
QFormLayout form(&popup);
|
||||
|
||||
QComboBox *oldSecBox = new QComboBox();
|
||||
oldSecBox->addItems(this->project->mapSectionValueToName.values());
|
||||
form.addRow(new QLabel("Old Map Section:"), oldSecBox);
|
||||
|
@ -1240,7 +1281,7 @@ void RegionMapEditor::on_action_Swap_triggered() {
|
|||
this->region_map->replaceSection(beforeSection, afterSection);
|
||||
QList<LayoutSquare> newLayout = this->region_map->getLayout(this->region_map->getLayer());
|
||||
EditLayout *commit = new EditLayout(this->region_map, this->region_map->getLayer(), -2, oldLayout, newLayout);
|
||||
commit->setText("Swap Layout Sections " + beforeSection + " >> " + afterSection);
|
||||
commit->setText("Replace Layout Section " + beforeSection + " >> " + afterSection);
|
||||
this->region_map->editHistory.push(commit);
|
||||
displayRegionMapLayout();
|
||||
this->region_map_layout_item->select(this->region_map_layout_item->selectedTile);
|
||||
|
|
Loading…
Reference in a new issue