diff --git a/.gitignore b/.gitignore index 2f4277ab..eedbba91 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,5 @@ preferences compile_commands.json .vs/ .vscode/ +.cache +.gdb_history diff --git a/cockatrice/src/dlg_manage_sets.cpp b/cockatrice/src/dlg_manage_sets.cpp index 81542c75..1f163e9d 100644 --- a/cockatrice/src/dlg_manage_sets.cpp +++ b/cockatrice/src/dlg_manage_sets.cpp @@ -4,6 +4,7 @@ #include "main.h" #include "pictureloader.h" #include "setsmodel.h" +#include "settingscache.h" #include #include @@ -84,7 +85,6 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) displayModel->setDynamicSortFilter(false); view = new QTreeView; view->setModel(displayModel); - view->setMinimumSize(QSize(500, 250)); view->setAlternatingRowColors(true); view->setUniformRowHeights(true); @@ -98,10 +98,6 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) view->setDropIndicatorShown(true); view->setDragDropMode(QAbstractItemView::InternalMove); - view->header()->setSectionResizeMode(QHeaderView::Stretch); - view->header()->setSectionResizeMode(SetsModel::EnabledCol, QHeaderView::ResizeToContents); - view->header()->setSectionResizeMode(SetsModel::LongNameCol, QHeaderView::ResizeToContents); - view->sortByColumn(SetsModel::SortKeyCol, Qt::AscendingOrder); view->setColumnHidden(SetsModel::SortKeyCol, true); view->setColumnHidden(SetsModel::IsKnownCol, true); @@ -170,7 +166,7 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) mainLayout = new QGridLayout; mainLayout->addLayout(filterBox, 0, 1, 1, 2); - mainLayout->addWidget(setsEditToolBar, 1, 0, 2, 1); + mainLayout->addWidget(setsEditToolBar, 1, 0, 4, 1); mainLayout->addWidget(view, 1, 1, 1, 2); mainLayout->addWidget(enableAllButton, 2, 1); mainLayout->addWidget(disableAllButton, 2, 2); @@ -190,13 +186,35 @@ WndSets::WndSets(QWidget *parent) : QMainWindow(parent) setCentralWidget(centralWidget); setWindowTitle(tr("Manage sets")); - resize(800, 500); + setMinimumSize(800, 500); + auto &geometry = SettingsCache::instance().getSetsDialogGeometry(); + if (!geometry.isEmpty()) { + restoreGeometry(geometry); + } + auto &headerState = SettingsCache::instance().layouts().getSetsDialogHeaderState(); + if (!headerState.isEmpty()) { + view->header()->restoreState(headerState); + view->header()->setSortIndicator(SORT_RESET, Qt::DescendingOrder); + } else { + view->header()->resizeSections(QHeaderView::ResizeToContents); + } + connect(view->header(), &QHeaderView::geometriesChanged, this, &WndSets::saveHeaderState); } WndSets::~WndSets() { } +void WndSets::closeEvent(QCloseEvent * /*ev*/) +{ + SettingsCache::instance().setSetsDialogGeometry(saveGeometry()); +} + +void WndSets::saveHeaderState() +{ + SettingsCache::instance().layouts().setSetsDialogHeaderState(view->header()->saveState()); +} + void WndSets::rebuildMainLayout(int actionToTake) { if (mainLayout == nullptr) diff --git a/cockatrice/src/dlg_manage_sets.h b/cockatrice/src/dlg_manage_sets.h index 6e932b30..079057bf 100644 --- a/cockatrice/src/dlg_manage_sets.h +++ b/cockatrice/src/dlg_manage_sets.h @@ -40,6 +40,8 @@ private: QHBoxLayout *filterBox; int sortIndex; Qt::SortOrder sortOrder; + void closeEvent(QCloseEvent *ev) override; + void saveHeaderState(); void rebuildMainLayout(int actionToTake); bool setOrderIsSorted; enum diff --git a/cockatrice/src/settings/layoutssettings.cpp b/cockatrice/src/settings/layoutssettings.cpp index fc5aeed0..0f481419 100644 --- a/cockatrice/src/settings/layoutssettings.cpp +++ b/cockatrice/src/settings/layoutssettings.cpp @@ -68,6 +68,16 @@ void LayoutsSettings::setDeckEditorDbHeaderState(const QByteArray &value) setValue(value, "layouts/deckEditorDbHeader_state"); } +const QByteArray LayoutsSettings::getSetsDialogHeaderState() +{ + return getValue("layouts/setsDialogHeader_state").toByteArray(); +} + +void LayoutsSettings::setSetsDialogHeaderState(const QByteArray &value) +{ + setValue(value, "layouts/setsDialogHeader_state"); +} + void LayoutsSettings::setGamePlayAreaGeometry(const QByteArray &value) { setValue(value, "layouts/gameplayarea_geometry"); @@ -183,4 +193,4 @@ const QSize LayoutsSettings::getReplayReplaySize() void LayoutsSettings::setReplayReplaySize(const QSize &value) { setValue(value, "layouts/replayplayarea_ReplaySize"); -} \ No newline at end of file +} diff --git a/cockatrice/src/settings/layoutssettings.h b/cockatrice/src/settings/layoutssettings.h index 3bd5813a..467f76ee 100644 --- a/cockatrice/src/settings/layoutssettings.h +++ b/cockatrice/src/settings/layoutssettings.h @@ -17,6 +17,7 @@ public: void setDeckEditorDeckSize(const QSize &value); void setDeckEditorFilterSize(const QSize &value); void setDeckEditorDbHeaderState(const QByteArray &value); + void setSetsDialogHeaderState(const QByteArray &value); void setGamePlayAreaGeometry(const QByteArray &value); void setGamePlayAreaState(const QByteArray &value); @@ -37,6 +38,7 @@ public: const QSize getDeckEditorDeckSize(); const QSize getDeckEditorFilterSize(); const QByteArray getDeckEditorDbHeaderState(); + const QByteArray getSetsDialogHeaderState(); const QByteArray getGamePlayAreaLayoutState(); const QByteArray getGamePlayAreaGeometry(); diff --git a/cockatrice/src/settingscache.cpp b/cockatrice/src/settingscache.cpp index 696cc7b7..f880b541 100644 --- a/cockatrice/src/settingscache.cpp +++ b/cockatrice/src/settingscache.cpp @@ -225,6 +225,7 @@ SettingsCache::SettingsCache() mainWindowGeometry = settings->value("interface/main_window_geometry").toByteArray(); tokenDialogGeometry = settings->value("interface/token_dialog_geometry").toByteArray(); + setsDialogGeometry = settings->value("interface/sets_dialog_geometry").toByteArray(); notificationsEnabled = settings->value("interface/notificationsenabled", true).toBool(); spectatorNotificationsEnabled = settings->value("interface/specnotificationsenabled", false).toBool(); buddyConnectNotificationsEnabled = settings->value("interface/buddyconnectnotificationsenabled", true).toBool(); @@ -617,6 +618,12 @@ void SettingsCache::setTokenDialogGeometry(const QByteArray &_tokenDialogGeometr settings->setValue("interface/token_dialog_geometry", tokenDialogGeometry); } +void SettingsCache::setSetsDialogGeometry(const QByteArray &_setsDialogGeometry) +{ + setsDialogGeometry = _setsDialogGeometry; + settings->setValue("interface/sets_dialog_geometry", setsDialogGeometry); +} + void SettingsCache::setPixmapCacheSize(const int _pixmapCacheSize) { pixmapCacheSize = _pixmapCacheSize; diff --git a/cockatrice/src/settingscache.h b/cockatrice/src/settingscache.h index 01d6aafc..6f45a0a1 100644 --- a/cockatrice/src/settingscache.h +++ b/cockatrice/src/settingscache.h @@ -70,6 +70,7 @@ private: QByteArray mainWindowGeometry; QByteArray tokenDialogGeometry; + QByteArray setsDialogGeometry; QString lang; QString deckPath, replaysPath, picsPath, customPicsPath, cardDatabasePath, customCardDatabasePath, themesPath, spoilerDatabasePath, tokenDatabasePath, themeName; @@ -154,6 +155,10 @@ public: { return tokenDialogGeometry; } + const QByteArray &getSetsDialogGeometry() const + { + return setsDialogGeometry; + } QString getLang() const { return lang; @@ -493,6 +498,7 @@ public slots: void setMainWindowGeometry(const QByteArray &_mainWindowGeometry); void setTokenDialogGeometry(const QByteArray &_tokenDialog); + void setSetsDialogGeometry(const QByteArray &_setsDialog); void setLang(const QString &_lang); void setShowTipsOnStartup(bool _showTipsOnStartup); void setSeenTips(const QList &_seenTips); diff --git a/dbconverter/src/mocks.cpp b/dbconverter/src/mocks.cpp index 867a406c..fbf65e15 100644 --- a/dbconverter/src/mocks.cpp +++ b/dbconverter/src/mocks.cpp @@ -199,6 +199,9 @@ void SettingsCache::setMainWindowGeometry(const QByteArray & /* _mainWindowGeome void SettingsCache::setTokenDialogGeometry(const QByteArray & /* _tokenDialogGeometry */) { } +void SettingsCache::setSetsDialogGeometry(const QByteArray & /* _setsDialogGeometry */) +{ +} void SettingsCache::setPixmapCacheSize(const int /* _pixmapCacheSize */) { } diff --git a/tests/carddatabase/mocks.cpp b/tests/carddatabase/mocks.cpp index b78a17b3..5fc6104f 100644 --- a/tests/carddatabase/mocks.cpp +++ b/tests/carddatabase/mocks.cpp @@ -203,6 +203,9 @@ void SettingsCache::setMainWindowGeometry(const QByteArray & /* _mainWindowGeome void SettingsCache::setTokenDialogGeometry(const QByteArray & /* _tokenDialogGeometry */) { } +void SettingsCache::setSetsDialogGeometry(const QByteArray & /* _setsDialogGeometry */) +{ +} void SettingsCache::setPixmapCacheSize(const int /* _pixmapCacheSize */) { }