clean window restore config settings

This commit is contained in:
garak 2019-01-06 10:15:03 -05:00
parent 30a2507d74
commit 8ccf036c6d
4 changed files with 40 additions and 58 deletions

View file

@ -32,19 +32,17 @@ public:
this->recentMap = ""; this->recentMap = "";
this->mapSortOrder = MapSortOrder::Group; this->mapSortOrder = MapSortOrder::Group;
this->prettyCursors = true; this->prettyCursors = true;
this->restoreGeometry = false;
} }
void setRecentProject(QString project); void setRecentProject(QString project);
void setRecentMap(QString map); void setRecentMap(QString map);
void setMapSortOrder(MapSortOrder order); void setMapSortOrder(MapSortOrder order);
void setPrettyCursors(bool enabled); void setPrettyCursors(bool enabled);
void setGeometry(QByteArrayList);// void setGeometry(QByteArray, QByteArray, QByteArray, QByteArray, QByteArray);
QString getRecentProject(); QString getRecentProject();
QString getRecentMap(); QString getRecentMap();
MapSortOrder getMapSortOrder(); MapSortOrder getMapSortOrder();
bool getPrettyCursors(); bool getPrettyCursors();
bool getRestoreWindowGeometry(); QMap<QString, QByteArray> getGeometry();
QByteArrayList getGeometry();
protected: protected:
QString getConfigFilepath(); QString getConfigFilepath();
void parseConfigKeyValue(QString key, QString value); void parseConfigKeyValue(QString key, QString value);
@ -53,12 +51,10 @@ protected:
private: private:
QString recentProject; QString recentProject;
QString recentMap; QString recentMap;
QString unicodeByteArray(QByteArray); QString stringFromByteArray(QByteArray);
QByteArray bytesFromString(QString); QByteArray bytesFromString(QString);
MapSortOrder mapSortOrder; MapSortOrder mapSortOrder;
bool prettyCursors; bool prettyCursors;
//
bool restoreGeometry;
QByteArray windowGeometry; QByteArray windowGeometry;
QByteArray windowState; QByteArray windowState;
QByteArray mapSplitterState; QByteArray mapSplitterState;

View file

@ -119,12 +119,6 @@ void PorymapConfig::parseConfigKeyValue(QString key, QString value) {
this->mapSortOrder = MapSortOrder::Group; this->mapSortOrder = MapSortOrder::Group;
logWarn(QString("Invalid config value for map_sort_order: '%1'. Must be 'group', 'area', or 'layout'.").arg(value)); logWarn(QString("Invalid config value for map_sort_order: '%1'. Must be 'group', 'area', or 'layout'.").arg(value));
} }
} else if (key == "restore_geometry") {
bool ok;
this->restoreGeometry = value.toInt(&ok);
if (!ok) {
logWarn(QString("Invalid config value for restore_geometry: '%1'. Must be 0 or 1.").arg(value));
}
} else if (key == "window_geometry") { } else if (key == "window_geometry") {
this->windowGeometry = bytesFromString(value); this->windowGeometry = bytesFromString(value);
} else if (key == "window_state") { } else if (key == "window_state") {
@ -146,16 +140,15 @@ QMap<QString, QString> PorymapConfig::getKeyValueMap() {
map.insert("recent_map", this->recentMap); map.insert("recent_map", this->recentMap);
map.insert("pretty_cursors", this->prettyCursors ? "1" : "0"); map.insert("pretty_cursors", this->prettyCursors ? "1" : "0");
map.insert("map_sort_order", mapSortOrderMap.value(this->mapSortOrder)); map.insert("map_sort_order", mapSortOrderMap.value(this->mapSortOrder));
map.insert("restore_geometry", this->restoreGeometry ? "1" : "0"); map.insert("window_geometry", stringFromByteArray(this->windowGeometry));
map.insert("window_geometry", unicodeByteArray(this->windowGeometry)); map.insert("window_state", stringFromByteArray(this->windowState));
map.insert("window_state", unicodeByteArray(this->windowState)); map.insert("map_splitter_state", stringFromByteArray(this->mapSplitterState));
map.insert("map_splitter_state", unicodeByteArray(this->mapSplitterState)); map.insert("events_splitter_state", stringFromByteArray(this->eventsSlpitterState));
map.insert("events_splitter_state", unicodeByteArray(this->eventsSlpitterState)); map.insert("main_splitter_state", stringFromByteArray(this->mainSplitterState));
map.insert("main_splitter_state", unicodeByteArray(this->mainSplitterState));
return map; return map;
} }
QString PorymapConfig::unicodeByteArray(QByteArray bytearray) { QString PorymapConfig::stringFromByteArray(QByteArray bytearray) {
QString ret; QString ret;
for (auto ch : bytearray) { for (auto ch : bytearray) {
ret += QString::number(static_cast<int>(ch)) + ":"; ret += QString::number(static_cast<int>(ch)) + ":";
@ -192,13 +185,13 @@ void PorymapConfig::setPrettyCursors(bool enabled) {
this->save(); this->save();
} }
void PorymapConfig::setGeometry(QByteArrayList geometry) { void PorymapConfig::setGeometry(QByteArray windowGeometry_, QByteArray windowState_, QByteArray mapSplitterState_,
this->restoreGeometry = true; QByteArray eventsSlpitterState_, QByteArray mainSplitterState_) {
this->windowGeometry = geometry[0]; this->windowGeometry = windowGeometry_;
this->windowState = geometry[1]; this->windowState = windowState_;
this->mapSplitterState = geometry[2]; this->mapSplitterState = mapSplitterState_;
this->eventsSlpitterState = geometry[3]; this->eventsSlpitterState = eventsSlpitterState_;
this->mainSplitterState = geometry[4]; this->mainSplitterState = mainSplitterState_;
this->save(); this->save();
} }
@ -218,18 +211,14 @@ bool PorymapConfig::getPrettyCursors() {
return this->prettyCursors; return this->prettyCursors;
} }
bool PorymapConfig::getRestoreWindowGeometry() { QMap<QString, QByteArray> PorymapConfig::getGeometry() {
return this->restoreGeometry; QMap<QString, QByteArray> geometry;
}
QByteArrayList PorymapConfig::getGeometry() { geometry.insert("window_geometry", this->windowGeometry);
QByteArrayList geometry; geometry.insert("window_state", this->windowState);
geometry.insert("map_splitter_state", this->mapSplitterState);
geometry.append(this->windowGeometry); geometry.insert("events_splitter_state", this->eventsSlpitterState);
geometry.append(this->windowState); geometry.insert("main_splitter_state", this->mainSplitterState);
geometry.append(this->mapSplitterState);
geometry.append(this->eventsSlpitterState);
geometry.append(this->mainSplitterState);
return geometry; return geometry;
} }

View file

@ -208,14 +208,13 @@ void MainWindow::loadUserSettings() {
} }
void MainWindow::restoreWindowState() { void MainWindow::restoreWindowState() {
if (porymapConfig.getRestoreWindowGeometry()) { logInfo("Restoring window geometry from previous session.");
logInfo("Restoring window geometry from previous session."); QMap<QString, QByteArray> geometry = porymapConfig.getGeometry();
this->restoreGeometry(porymapConfig.getGeometry()[0]); this->restoreGeometry(geometry.value("window_geometry"));
this->restoreState(porymapConfig.getGeometry()[1]); this->restoreState(geometry.value("window_state"));
this->ui->splitter_map->restoreState(porymapConfig.getGeometry()[2]); this->ui->splitter_map->restoreState(geometry.value("map_splitter_state"));
this->ui->splitter_events->restoreState(porymapConfig.getGeometry()[3]); this->ui->splitter_events->restoreState(geometry.value("events_splitter_state"));
this->ui->splitter_main->restoreState(porymapConfig.getGeometry()[4]); this->ui->splitter_main->restoreState(geometry.value("main_splitter_state"));
}
} }
bool MainWindow::openRecentProject() { bool MainWindow::openRecentProject() {
@ -753,7 +752,7 @@ void MainWindow::onNewMapCreated() {
Map *newMap = editor->project->addNewMapToGroup(newMapName, newMapGroup, newMap_); Map *newMap = editor->project->addNewMapToGroup(newMapName, newMapGroup, newMap_);
qDebug() << "Created a new map named" << newMapName; logInfo(QString("Created a new map named %1.").arg(newMapName));
editor->project->saveMap(newMap); editor->project->saveMap(newMap);
editor->project->saveAllDataStructures(); editor->project->saveAllDataStructures();
@ -1804,15 +1803,13 @@ void MainWindow::on_actionTileset_Editor_triggered()
} }
void MainWindow::closeEvent(QCloseEvent *event) { void MainWindow::closeEvent(QCloseEvent *event) {
QByteArrayList geometry; porymapConfig.setGeometry(
this->saveGeometry(),
geometry.append(this->saveGeometry()); this->saveState(),
geometry.append(this->saveState()); this->ui->splitter_map->saveState(),
geometry.append(this->ui->splitter_map->saveState()); this->ui->splitter_events->saveState(),
geometry.append(this->ui->splitter_events->saveState()); this->ui->splitter_main->saveState()
geometry.append(this->ui->splitter_main->saveState()); );
porymapConfig.setGeometry(geometry);
QMainWindow::closeEvent(event); QMainWindow::closeEvent(event);
} }

View file

@ -61,8 +61,8 @@ void NewMapPopup::on_pushButton_NewMap_Accept_clicked() {
Map *newMap = new Map; Map *newMap = new Map;
MapLayout *layout = new MapLayout; MapLayout *layout = new MapLayout;
// If map name is not unique, use default value. Also replace spaces with underscores. // If map name is not unique, use default value. Also use only valid characters.
QString newMapName = this->ui->lineEdit_NewMap_Name->text().replace(" ","_"); QString newMapName = this->ui->lineEdit_NewMap_Name->text().remove(QRegularExpression("[^a-zA-Z0-9_]+"));
if (project->mapNames->contains(newMapName) || newMapName.isEmpty()) { if (project->mapNames->contains(newMapName) || newMapName.isEmpty()) {
newMapName = project->getNewMapName(); newMapName = project->getNewMapName();
} }