use new config for window state
This commit is contained in:
parent
7cc2e74acb
commit
30a2507d74
4 changed files with 99 additions and 17 deletions
|
@ -3,6 +3,7 @@
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
#include <QByteArrayList>
|
||||||
|
|
||||||
enum MapSortOrder {
|
enum MapSortOrder {
|
||||||
Group = 0,
|
Group = 0,
|
||||||
|
@ -31,15 +32,19 @@ 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);//
|
||||||
QString getRecentProject();
|
QString getRecentProject();
|
||||||
QString getRecentMap();
|
QString getRecentMap();
|
||||||
MapSortOrder getMapSortOrder();
|
MapSortOrder getMapSortOrder();
|
||||||
bool getPrettyCursors();
|
bool getPrettyCursors();
|
||||||
|
bool getRestoreWindowGeometry();
|
||||||
|
QByteArrayList getGeometry();
|
||||||
protected:
|
protected:
|
||||||
QString getConfigFilepath();
|
QString getConfigFilepath();
|
||||||
void parseConfigKeyValue(QString key, QString value);
|
void parseConfigKeyValue(QString key, QString value);
|
||||||
|
@ -48,8 +53,17 @@ protected:
|
||||||
private:
|
private:
|
||||||
QString recentProject;
|
QString recentProject;
|
||||||
QString recentMap;
|
QString recentMap;
|
||||||
|
QString unicodeByteArray(QByteArray);
|
||||||
|
QByteArray bytesFromString(QString);
|
||||||
MapSortOrder mapSortOrder;
|
MapSortOrder mapSortOrder;
|
||||||
bool prettyCursors;
|
bool prettyCursors;
|
||||||
|
//
|
||||||
|
bool restoreGeometry;
|
||||||
|
QByteArray windowGeometry;
|
||||||
|
QByteArray windowState;
|
||||||
|
QByteArray mapSplitterState;
|
||||||
|
QByteArray eventsSlpitterState;
|
||||||
|
QByteArray mainSplitterState;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern PorymapConfig porymapConfig;
|
extern PorymapConfig porymapConfig;
|
||||||
|
|
|
@ -205,7 +205,6 @@ private:
|
||||||
void setProjectSpecificUIVisibility();
|
void setProjectSpecificUIVisibility();
|
||||||
void loadUserSettings();
|
void loadUserSettings();
|
||||||
void restoreWindowState();
|
void restoreWindowState();
|
||||||
void openRecentProject();
|
|
||||||
bool openRecentProject();
|
bool openRecentProject();
|
||||||
void updateTilesetEditor();
|
void updateTilesetEditor();
|
||||||
QString getEventGroupFromTabWidget(QWidget *tab);
|
QString getEventGroupFromTabWidget(QWidget *tab);
|
||||||
|
|
|
@ -119,6 +119,22 @@ 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") {
|
||||||
|
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 {
|
} else {
|
||||||
logWarn(QString("Invalid config key found in config file %1: '%2'").arg(this->getConfigFilepath()).arg(key));
|
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("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", 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;
|
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) {
|
void PorymapConfig::setRecentProject(QString project) {
|
||||||
this->recentProject = project;
|
this->recentProject = project;
|
||||||
this->save();
|
this->save();
|
||||||
|
@ -153,6 +192,16 @@ void PorymapConfig::setPrettyCursors(bool enabled) {
|
||||||
this->save();
|
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() {
|
QString PorymapConfig::getRecentProject() {
|
||||||
return this->recentProject;
|
return this->recentProject;
|
||||||
}
|
}
|
||||||
|
@ -169,6 +218,22 @@ bool PorymapConfig::getPrettyCursors() {
|
||||||
return this->prettyCursors;
|
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 = {
|
const QMap<BaseGameVersion, QString> baseGameVersionMap = {
|
||||||
{BaseGameVersion::pokeruby, "pokeruby"},
|
{BaseGameVersion::pokeruby, "pokeruby"},
|
||||||
{BaseGameVersion::pokeemerald, "pokeemerald"},
|
{BaseGameVersion::pokeemerald, "pokeemerald"},
|
||||||
|
|
|
@ -53,7 +53,6 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||||
MainWindow::~MainWindow()
|
MainWindow::~MainWindow()
|
||||||
{
|
{
|
||||||
delete ui;
|
delete ui;
|
||||||
delete newmapprompt;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::initWindow() {
|
void MainWindow::initWindow() {
|
||||||
|
@ -64,6 +63,7 @@ void MainWindow::initWindow() {
|
||||||
this->initEditor();
|
this->initEditor();
|
||||||
this->initMiscHeapObjects();
|
this->initMiscHeapObjects();
|
||||||
this->initMapSortOrder();
|
this->initMapSortOrder();
|
||||||
|
this->restoreWindowState();
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::initExtraShortcuts() {
|
void MainWindow::initExtraShortcuts() {
|
||||||
|
@ -208,14 +208,13 @@ void MainWindow::loadUserSettings() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::restoreWindowState() {
|
void MainWindow::restoreWindowState() {
|
||||||
QSettings settings;
|
if (porymapConfig.getRestoreWindowGeometry()) {
|
||||||
|
logInfo("Restoring window geometry from previous session.");
|
||||||
if (settings.contains("saved_widget_geometry")) {
|
this->restoreGeometry(porymapConfig.getGeometry()[0]);
|
||||||
this->restoreGeometry(settings.value("window_geometry").toByteArray());
|
this->restoreState(porymapConfig.getGeometry()[1]);
|
||||||
this->restoreState(settings.value("window_state").toByteArray());
|
this->ui->splitter_map->restoreState(porymapConfig.getGeometry()[2]);
|
||||||
this->ui->splitter_map->restoreState(settings.value("map_splitter_state").toByteArray());
|
this->ui->splitter_events->restoreState(porymapConfig.getGeometry()[3]);
|
||||||
this->ui->splitter_events->restoreState(settings.value("events_splitter_state").toByteArray());
|
this->ui->splitter_main->restoreState(porymapConfig.getGeometry()[4]);
|
||||||
this->ui->splitter_main->restoreState(settings.value("main_splitter_state").toByteArray());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -788,6 +787,8 @@ void MainWindow::openNewMapPopupWindow(int groupNum) {
|
||||||
}
|
}
|
||||||
this->newmapprompt->init(groupNum);
|
this->newmapprompt->init(groupNum);
|
||||||
connect(this->newmapprompt, SIGNAL(applied()), this, SLOT(onNewMapCreated()));
|
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() {
|
void MainWindow::on_action_NewMap_triggered() {
|
||||||
|
@ -1803,12 +1804,15 @@ void MainWindow::on_actionTileset_Editor_triggered()
|
||||||
}
|
}
|
||||||
|
|
||||||
void MainWindow::closeEvent(QCloseEvent *event) {
|
void MainWindow::closeEvent(QCloseEvent *event) {
|
||||||
QSettings settings;
|
QByteArrayList geometry;
|
||||||
settings.setValue("saved_widget_geometry", "true");
|
|
||||||
settings.setValue("window_geometry", this->saveGeometry());
|
geometry.append(this->saveGeometry());
|
||||||
settings.setValue("window_state", this->saveState());
|
geometry.append(this->saveState());
|
||||||
settings.setValue("map_splitter_state", this->ui->splitter_map->saveState());
|
geometry.append(this->ui->splitter_map->saveState());
|
||||||
settings.setValue("events_splitter_state", this->ui->splitter_events->saveState());
|
geometry.append(this->ui->splitter_events->saveState());
|
||||||
settings.setValue("main_splitter_state", this->ui->splitter_main->saveState());
|
geometry.append(this->ui->splitter_main->saveState());
|
||||||
|
|
||||||
|
porymapConfig.setGeometry(geometry);
|
||||||
|
|
||||||
QMainWindow::closeEvent(event);
|
QMainWindow::closeEvent(event);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue