use new config for window state

This commit is contained in:
garak 2019-01-06 01:19:27 -05:00
parent 7cc2e74acb
commit 30a2507d74
4 changed files with 99 additions and 17 deletions

View file

@ -3,6 +3,7 @@
#include <QString>
#include <QObject>
#include <QByteArrayList>
enum MapSortOrder {
Group = 0,
@ -31,15 +32,19 @@ public:
this->recentMap = "";
this->mapSortOrder = MapSortOrder::Group;
this->prettyCursors = true;
this->restoreGeometry = false;
}
void setRecentProject(QString project);
void setRecentMap(QString map);
void setMapSortOrder(MapSortOrder order);
void setPrettyCursors(bool enabled);
void setGeometry(QByteArrayList);//
QString getRecentProject();
QString getRecentMap();
MapSortOrder getMapSortOrder();
bool getPrettyCursors();
bool getRestoreWindowGeometry();
QByteArrayList getGeometry();
protected:
QString getConfigFilepath();
void parseConfigKeyValue(QString key, QString value);
@ -48,8 +53,17 @@ protected:
private:
QString recentProject;
QString recentMap;
QString unicodeByteArray(QByteArray);
QByteArray bytesFromString(QString);
MapSortOrder mapSortOrder;
bool prettyCursors;
//
bool restoreGeometry;
QByteArray windowGeometry;
QByteArray windowState;
QByteArray mapSplitterState;
QByteArray eventsSlpitterState;
QByteArray mainSplitterState;
};
extern PorymapConfig porymapConfig;

View file

@ -205,7 +205,6 @@ private:
void setProjectSpecificUIVisibility();
void loadUserSettings();
void restoreWindowState();
void openRecentProject();
bool openRecentProject();
void updateTilesetEditor();
QString getEventGroupFromTabWidget(QWidget *tab);

View file

@ -119,6 +119,22 @@ void PorymapConfig::parseConfigKeyValue(QString key, QString value) {
this->mapSortOrder = MapSortOrder::Group;
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") {
this->windowGeometry = bytesFromString(value);
} else if (key == "window_state") {
this->windowState = bytesFromString(value);
} else if (key == "map_splitter_state") {
this->mapSplitterState = bytesFromString(value);
} else if (key == "events_splitter_state") {
this->eventsSlpitterState = bytesFromString(value);
} else if (key == "main_splitter_state") {
this->mainSplitterState = bytesFromString(value);
} else {
logWarn(QString("Invalid config key found in config file %1: '%2'").arg(this->getConfigFilepath()).arg(key));
}
@ -130,9 +146,32 @@ QMap<QString, QString> PorymapConfig::getKeyValueMap() {
map.insert("recent_map", this->recentMap);
map.insert("pretty_cursors", this->prettyCursors ? "1" : "0");
map.insert("map_sort_order", mapSortOrderMap.value(this->mapSortOrder));
map.insert("restore_geometry", this->restoreGeometry ? "1" : "0");
map.insert("window_geometry", unicodeByteArray(this->windowGeometry));
map.insert("window_state", unicodeByteArray(this->windowState));
map.insert("map_splitter_state", unicodeByteArray(this->mapSplitterState));
map.insert("events_splitter_state", unicodeByteArray(this->eventsSlpitterState));
map.insert("main_splitter_state", unicodeByteArray(this->mainSplitterState));
return map;
}
QString PorymapConfig::unicodeByteArray(QByteArray bytearray) {
QString ret;
for (auto ch : bytearray) {
ret += QString::number(static_cast<int>(ch)) + ":";
}
return ret;
}
QByteArray PorymapConfig::bytesFromString(QString in) {
QByteArray ba;
QStringList split = in.split(":");
for (auto ch : split) {
ba.append(static_cast<char>(ch.toInt()));
}
return ba;
}
void PorymapConfig::setRecentProject(QString project) {
this->recentProject = project;
this->save();
@ -153,6 +192,16 @@ void PorymapConfig::setPrettyCursors(bool enabled) {
this->save();
}
void PorymapConfig::setGeometry(QByteArrayList geometry) {
this->restoreGeometry = true;
this->windowGeometry = geometry[0];
this->windowState = geometry[1];
this->mapSplitterState = geometry[2];
this->eventsSlpitterState = geometry[3];
this->mainSplitterState = geometry[4];
this->save();
}
QString PorymapConfig::getRecentProject() {
return this->recentProject;
}
@ -169,6 +218,22 @@ bool PorymapConfig::getPrettyCursors() {
return this->prettyCursors;
}
bool PorymapConfig::getRestoreWindowGeometry() {
return this->restoreGeometry;
}
QByteArrayList PorymapConfig::getGeometry() {
QByteArrayList geometry;
geometry.append(this->windowGeometry);
geometry.append(this->windowState);
geometry.append(this->mapSplitterState);
geometry.append(this->eventsSlpitterState);
geometry.append(this->mainSplitterState);
return geometry;
}
const QMap<BaseGameVersion, QString> baseGameVersionMap = {
{BaseGameVersion::pokeruby, "pokeruby"},
{BaseGameVersion::pokeemerald, "pokeemerald"},

View file

@ -53,7 +53,6 @@ MainWindow::MainWindow(QWidget *parent) :
MainWindow::~MainWindow()
{
delete ui;
delete newmapprompt;
}
void MainWindow::initWindow() {
@ -64,6 +63,7 @@ void MainWindow::initWindow() {
this->initEditor();
this->initMiscHeapObjects();
this->initMapSortOrder();
this->restoreWindowState();
}
void MainWindow::initExtraShortcuts() {
@ -208,14 +208,13 @@ void MainWindow::loadUserSettings() {
}
void MainWindow::restoreWindowState() {
QSettings settings;
if (settings.contains("saved_widget_geometry")) {
this->restoreGeometry(settings.value("window_geometry").toByteArray());
this->restoreState(settings.value("window_state").toByteArray());
this->ui->splitter_map->restoreState(settings.value("map_splitter_state").toByteArray());
this->ui->splitter_events->restoreState(settings.value("events_splitter_state").toByteArray());
this->ui->splitter_main->restoreState(settings.value("main_splitter_state").toByteArray());
if (porymapConfig.getRestoreWindowGeometry()) {
logInfo("Restoring window geometry from previous session.");
this->restoreGeometry(porymapConfig.getGeometry()[0]);
this->restoreState(porymapConfig.getGeometry()[1]);
this->ui->splitter_map->restoreState(porymapConfig.getGeometry()[2]);
this->ui->splitter_events->restoreState(porymapConfig.getGeometry()[3]);
this->ui->splitter_main->restoreState(porymapConfig.getGeometry()[4]);
}
}
@ -788,6 +787,8 @@ void MainWindow::openNewMapPopupWindow(int groupNum) {
}
this->newmapprompt->init(groupNum);
connect(this->newmapprompt, SIGNAL(applied()), this, SLOT(onNewMapCreated()));
connect(this->newmapprompt, &QObject::destroyed, [=](QObject *) { this->newmapprompt = nullptr; });
this->newmapprompt->setAttribute(Qt::WA_DeleteOnClose);
}
void MainWindow::on_action_NewMap_triggered() {
@ -1803,12 +1804,15 @@ void MainWindow::on_actionTileset_Editor_triggered()
}
void MainWindow::closeEvent(QCloseEvent *event) {
QSettings settings;
settings.setValue("saved_widget_geometry", "true");
settings.setValue("window_geometry", this->saveGeometry());
settings.setValue("window_state", this->saveState());
settings.setValue("map_splitter_state", this->ui->splitter_map->saveState());
settings.setValue("events_splitter_state", this->ui->splitter_events->saveState());
settings.setValue("main_splitter_state", this->ui->splitter_main->saveState());
QByteArrayList geometry;
geometry.append(this->saveGeometry());
geometry.append(this->saveState());
geometry.append(this->ui->splitter_map->saveState());
geometry.append(this->ui->splitter_events->saveState());
geometry.append(this->ui->splitter_main->saveState());
porymapConfig.setGeometry(geometry);
QMainWindow::closeEvent(event);
}