fix crash when creating new map from unloaded layout
This commit is contained in:
parent
772ca7c957
commit
bc75cff5c6
4 changed files with 25 additions and 16 deletions
|
@ -788,11 +788,13 @@ void MainWindow::onNewMapCreated() {
|
||||||
groupItem->appendRow(newMapItem);
|
groupItem->appendRow(newMapItem);
|
||||||
mapListIndexes.insert(newMapName, newMapItem->index());
|
mapListIndexes.insert(newMapName, newMapItem->index());
|
||||||
|
|
||||||
|
sortMapList();
|
||||||
setMap(newMapName, true);
|
setMap(newMapName, true);
|
||||||
|
|
||||||
if (newMap->isFlyable == "TRUE") {
|
if (newMap->isFlyable == "TRUE") {
|
||||||
addNewEvent("event_heal_location");
|
addNewEvent("event_heal_location");
|
||||||
editor->project->saveHealLocationStruct(newMap);
|
editor->project->saveHealLocationStruct(newMap);
|
||||||
|
editor->save();// required
|
||||||
}
|
}
|
||||||
|
|
||||||
disconnect(this->newmapprompt, SIGNAL(applied()), this, SLOT(onNewMapCreated()));
|
disconnect(this->newmapprompt, SIGNAL(applied()), this, SLOT(onNewMapCreated()));
|
||||||
|
|
|
@ -1248,31 +1248,36 @@ Map* Project::addNewMapToGroup(QString mapName, int groupNum, Map *newMap, bool
|
||||||
|
|
||||||
map->isPersistedToFile = false;
|
map->isPersistedToFile = false;
|
||||||
map->setName(mapName);
|
map->setName(mapName);
|
||||||
|
|
||||||
mapConstantsToMapNames->insert(map->constantName, map->name);
|
mapConstantsToMapNames->insert(map->constantName, map->name);
|
||||||
mapNamesToMapConstants->insert(map->name, map->constantName);
|
mapNamesToMapConstants->insert(map->name, map->constantName);
|
||||||
map->layout_label = QString("%1_Layout").arg(map->name);
|
|
||||||
map->events_label = QString("%1_MapEvents").arg(map->name);;
|
map->events_label = QString("%1_MapEvents").arg(map->name);;
|
||||||
map->scripts_label = QString("%1_MapScripts").arg(map->name);;
|
map->scripts_label = QString("%1_MapScripts").arg(map->name);;
|
||||||
map->connections_label = "0x0";
|
map->connections_label = "0x0";
|
||||||
map->song = "MUS_DAN02";
|
map->song = "MUS_DAN02";
|
||||||
map->layout_id = QString("%1").arg(mapLayoutsTable.size() + 1);
|
|
||||||
map->requiresFlash = "FALSE";
|
map->requiresFlash = "FALSE";
|
||||||
map->weather = "WEATHER_SUNNY";
|
map->weather = "WEATHER_SUNNY";
|
||||||
map->unknown = "0";
|
map->unknown = "0";
|
||||||
map->show_location = "TRUE";
|
map->show_location = "TRUE";
|
||||||
map->battle_scene = "MAP_BATTLE_SCENE_NORMAL";
|
map->battle_scene = "MAP_BATTLE_SCENE_NORMAL";
|
||||||
|
|
||||||
|
if (!updateLayout) {
|
||||||
|
map->layout_id = QString("%1").arg(mapLayoutsTable.size() + 1);
|
||||||
mapLayouts.insert(map->layout->label, map->layout);
|
mapLayouts.insert(map->layout->label, map->layout);
|
||||||
mapLayoutsTable.append(map->layout->label);
|
mapLayoutsTable.append(map->layout->label);
|
||||||
loadMapTilesets(map);
|
|
||||||
if (!updateLayout) {
|
|
||||||
setNewMapBlockdata(map);
|
setNewMapBlockdata(map);
|
||||||
setNewMapBorder(map);
|
setNewMapBorder(map);
|
||||||
|
} else {
|
||||||
|
map->layout_id = QString("%1").arg(mapLayoutsTable.indexOf(map->layout->label) + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
loadMapTilesets(map);
|
||||||
setNewMapEvents(map);
|
setNewMapEvents(map);
|
||||||
setNewMapConnections(map);
|
setNewMapConnections(map);
|
||||||
|
|
||||||
map->commit();
|
map->commit();
|
||||||
map->metatileHistory.save();
|
map->metatileHistory.save();
|
||||||
map_cache->insert(mapName, map);
|
|
||||||
|
|
||||||
return map;
|
return map;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
#include "connectionpixmapitem.h"
|
#include "connectionpixmapitem.h"
|
||||||
#include <cmath>
|
|
||||||
|
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
|
|
||||||
|
|
|
@ -43,12 +43,8 @@ void NewMapPopup::init(int type, int group, QString sec, QString layout) {
|
||||||
void NewMapPopup::useLayout(QString mapName) {
|
void NewMapPopup::useLayout(QString mapName) {
|
||||||
this->changeLayout = true;
|
this->changeLayout = true;
|
||||||
this->layoutName = mapName;
|
this->layoutName = mapName;
|
||||||
qDebug() << "will use layout of map" << layoutName;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// check for null QStrings
|
|
||||||
// TODO: if layout, set height and width then dont allow editing
|
|
||||||
// project->map_cache->mapname? ->layouot->{width, height, }
|
|
||||||
void NewMapPopup::setDefaultValues(int groupNum, QString mapSec) {
|
void NewMapPopup::setDefaultValues(int groupNum, QString mapSec) {
|
||||||
ui->lineEdit_NewMap_Name->setText(project->getNewMapName());
|
ui->lineEdit_NewMap_Name->setText(project->getNewMapName());
|
||||||
|
|
||||||
|
@ -130,16 +126,21 @@ void NewMapPopup::on_pushButton_NewMap_Accept_clicked() {
|
||||||
layout->height = QString::number(this->ui->spinBox_NewMap_Height->value());
|
layout->height = QString::number(this->ui->spinBox_NewMap_Height->value());
|
||||||
layout->tileset_primary_label = this->ui->comboBox_NewMap_Primary_Tileset->currentText();
|
layout->tileset_primary_label = this->ui->comboBox_NewMap_Primary_Tileset->currentText();
|
||||||
layout->tileset_secondary_label = this->ui->comboBox_NewMap_Secondary_Tileset->currentText();
|
layout->tileset_secondary_label = this->ui->comboBox_NewMap_Secondary_Tileset->currentText();
|
||||||
layout->label = QString("%1_Layout").arg(newMap->name);
|
|
||||||
layout->name = MapLayout::getNameFromLabel(layout->label);
|
|
||||||
layout->border_label = QString("%1_MapBorder").arg(newMap->name);
|
layout->border_label = QString("%1_MapBorder").arg(newMap->name);
|
||||||
layout->border_path = QString("data/layouts/%1/border.bin").arg(newMap->name);
|
layout->border_path = QString("data/layouts/%1/border.bin").arg(newMap->name);
|
||||||
layout->blockdata_label = QString("%1_MapBlockdata").arg(newMap->name);
|
layout->blockdata_label = QString("%1_MapBlockdata").arg(newMap->name);
|
||||||
layout->blockdata_path = QString("data/layouts/%1/map.bin").arg(newMap->name);
|
layout->blockdata_path = QString("data/layouts/%1/map.bin").arg(newMap->name);
|
||||||
|
|
||||||
if (changeLayout) {
|
if (changeLayout) {
|
||||||
layout->blockdata = project->mapLayouts.value(layoutName)->blockdata;
|
layout->label = layoutName;
|
||||||
layout->border = project->mapLayouts.value(layoutName)->border;
|
layout->name = MapLayout::getNameFromLabel(layout->label);
|
||||||
|
QString block_path = QString("%1/data/layout/%2/map.bin").arg(project->root).arg(MapLayout::getNameFromLabel(layoutName));
|
||||||
|
QString border_path = QString("%1/data/layout/%2/border.bin").arg(project->root).arg(MapLayout::getNameFromLabel(layoutName));
|
||||||
|
layout->blockdata = project->readBlockdata(block_path);
|
||||||
|
layout->border = project->readBlockdata(border_path);
|
||||||
|
} else {
|
||||||
|
layout->label = QString("%1_Layout").arg(newMap->name);
|
||||||
|
layout->name = MapLayout::getNameFromLabel(layout->label);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this->ui->checkBox_NewMap_Flyable->isChecked()) {
|
if (this->ui->checkBox_NewMap_Flyable->isChecked()) {
|
||||||
|
@ -152,11 +153,13 @@ void NewMapPopup::on_pushButton_NewMap_Accept_clicked() {
|
||||||
newMap->allowEscapeRope = this->ui->checkBox_NewMap_Allow_Escape_Rope->isChecked() ? "1" : "0";
|
newMap->allowEscapeRope = this->ui->checkBox_NewMap_Allow_Escape_Rope->isChecked() ? "1" : "0";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
group = this->ui->comboBox_NewMap_Group->currentText().remove("gMapGroup").toInt();
|
||||||
|
|
||||||
newMap->layout = layout;
|
newMap->layout = layout;
|
||||||
newMap->layout_label = layout->label;
|
newMap->layout_label = layout->label;
|
||||||
|
newMap->group_num = QString::number(group);
|
||||||
|
|
||||||
map = newMap;
|
map = newMap;
|
||||||
group = this->ui->comboBox_NewMap_Group->currentText().remove("gMapGroup").toInt();
|
|
||||||
|
|
||||||
emit applied();
|
emit applied();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue