From bb9ddb3dc823b0b8d64a5a1e7a9bbd951a5abac0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Vr=C3=A1til?= Date: Mon, 3 Sep 2018 22:19:40 +0200 Subject: [PATCH] Save and restore dialog sizes from a config file --- agents/unifiedmailboxagent/settingsdialog.cpp | 24 +++++++++++++++--- agents/unifiedmailboxagent/settingsdialog.h | 1 + agents/unifiedmailboxagent/unifiedmailbox.h | 3 ++- .../unifiedmailboxeditor.cpp | 25 +++++++++++++++---- .../unifiedmailboxeditor.h | 6 +++-- .../unifiedmailboxmanager.cpp | 2 +- 6 files changed, 48 insertions(+), 13 deletions(-) diff --git a/agents/unifiedmailboxagent/settingsdialog.cpp b/agents/unifiedmailboxagent/settingsdialog.cpp index e33ffc609..8d99ebd94 100644 --- a/agents/unifiedmailboxagent/settingsdialog.cpp +++ b/agents/unifiedmailboxagent/settingsdialog.cpp @@ -33,16 +33,22 @@ #include #include +#include #include +namespace { + +static constexpr const char *DialogGroup = "__Dialog"; + +} + SettingsDialog::SettingsDialog(KSharedConfigPtr config, UnifiedMailboxManager &boxManager, WId, QWidget *parent) : QDialog(parent) , mBoxManager(boxManager) , mKernel(new MailKernel(config, this)) + , mConfig(config) { - resize(500, 500); - auto l = new QVBoxLayout; setLayout(l); @@ -61,7 +67,7 @@ SettingsDialog::SettingsDialog(KSharedConfigPtr config, UnifiedMailboxManager &b connect(addButton, &QPushButton::clicked, this, [this]() { auto mailbox = std::make_unique(); - auto editor = new UnifiedMailboxEditor(mailbox.get(), this); + auto editor = new UnifiedMailboxEditor(mailbox.get(), mConfig, this); if (editor->exec()) { mailbox->setId(mailbox->name()); // assign ID addBox(mailbox.get()); @@ -77,7 +83,7 @@ SettingsDialog::SettingsDialog(KSharedConfigPtr config, UnifiedMailboxManager &b if (!indexes.isEmpty()) { auto item = mBoxModel->itemFromIndex(indexes[0]); auto mailbox = item->data().value(); - auto editor = new UnifiedMailboxEditor(mailbox, this); + auto editor = new UnifiedMailboxEditor(mailbox, mConfig, this); if (editor->exec()) { item->setText(mailbox->name()); item->setIcon(QIcon::fromTheme(mailbox->icon())); @@ -117,10 +123,20 @@ SettingsDialog::SettingsDialog(KSharedConfigPtr config, UnifiedMailboxManager &b l->addWidget(box); loadBoxes(); + + const auto dlgGroup = config->group(DialogGroup); + if (dlgGroup.hasKey("geometry")) { + restoreGeometry(dlgGroup.readEntry("geometry", QByteArray())); + } else { + resize(500, 500); + } + } SettingsDialog::~SettingsDialog() { + auto dlgGroup = mConfig->group(DialogGroup); + dlgGroup.writeEntry("geometry", saveGeometry()); } void SettingsDialog::accept() diff --git a/agents/unifiedmailboxagent/settingsdialog.h b/agents/unifiedmailboxagent/settingsdialog.h index c6071678c..c4b835c17 100644 --- a/agents/unifiedmailboxagent/settingsdialog.h +++ b/agents/unifiedmailboxagent/settingsdialog.h @@ -48,6 +48,7 @@ private: QStandardItemModel *mBoxModel = nullptr; UnifiedMailboxManager &mBoxManager; MailKernel *mKernel = nullptr; + KSharedConfigPtr mConfig; }; diff --git a/agents/unifiedmailboxagent/unifiedmailbox.h b/agents/unifiedmailboxagent/unifiedmailbox.h index 102e56ce0..f241c90e7 100644 --- a/agents/unifiedmailboxagent/unifiedmailbox.h +++ b/agents/unifiedmailboxagent/unifiedmailbox.h @@ -29,7 +29,8 @@ class KConfigGroup; class UnifiedMailboxManager; -class UnifiedMailbox { +class UnifiedMailbox +{ friend class UnifiedMailboxManager; public: UnifiedMailbox() = default; diff --git a/agents/unifiedmailboxagent/unifiedmailboxeditor.cpp b/agents/unifiedmailboxagent/unifiedmailboxeditor.cpp index dd2ac9dc9..0679b1239 100644 --- a/agents/unifiedmailboxagent/unifiedmailboxeditor.cpp +++ b/agents/unifiedmailboxagent/unifiedmailboxeditor.cpp @@ -32,12 +32,15 @@ #include #include #include +#include #include #include namespace { +static constexpr const char *EditorGroup = "__Editor"; + class SelfFilterProxyModel : public QSortFilterProxyModel { Q_OBJECT @@ -81,17 +84,16 @@ public: } -UnifiedMailboxEditor::UnifiedMailboxEditor(QWidget* parent) - : UnifiedMailboxEditor({}, parent) +UnifiedMailboxEditor::UnifiedMailboxEditor(KSharedConfigPtr config, QWidget* parent) + : UnifiedMailboxEditor({}, config, parent) { } -UnifiedMailboxEditor::UnifiedMailboxEditor(UnifiedMailbox *mailbox, QWidget *parent) +UnifiedMailboxEditor::UnifiedMailboxEditor(UnifiedMailbox *mailbox, KSharedConfigPtr config, QWidget *parent) : QDialog(parent) , mMailbox(mailbox) + , mConfig(config) { - resize(500, 900); - auto l = new QVBoxLayout; setLayout(l); @@ -163,6 +165,19 @@ UnifiedMailboxEditor::UnifiedMailboxEditor(UnifiedMailbox *mailbox, QWidget *par }); box->button(QDialogButtonBox::Ok)->setEnabled(!nameEdit->text().isEmpty()); l->addWidget(box); + + const auto editorGroup = config->group(EditorGroup); + if (editorGroup.hasKey("geometry")) { + restoreGeometry(editorGroup.readEntry("geometry", QByteArray())); + } else { + resize(500, 900); + } +} + +UnifiedMailboxEditor::~UnifiedMailboxEditor() +{ + auto editorGrp = mConfig->group(EditorGroup); + editorGrp.writeEntry("geometry", saveGeometry()); } diff --git a/agents/unifiedmailboxagent/unifiedmailboxeditor.h b/agents/unifiedmailboxagent/unifiedmailboxeditor.h index 3dd17ce70..0b9e629cc 100644 --- a/agents/unifiedmailboxagent/unifiedmailboxeditor.h +++ b/agents/unifiedmailboxagent/unifiedmailboxeditor.h @@ -26,9 +26,11 @@ class UnifiedMailboxEditor : public QDialog { Q_OBJECT public: - explicit UnifiedMailboxEditor(QWidget *parent = nullptr); - explicit UnifiedMailboxEditor(UnifiedMailbox *mailbox, QWidget *parent = nullptr); + explicit UnifiedMailboxEditor(KSharedConfigPtr config, QWidget *parent = nullptr); + explicit UnifiedMailboxEditor(UnifiedMailbox *mailbox, KSharedConfigPtr config, QWidget *parent = nullptr); + ~UnifiedMailboxEditor() override; private: UnifiedMailbox *mMailbox = nullptr; + KSharedConfigPtr mConfig; }; diff --git a/agents/unifiedmailboxagent/unifiedmailboxmanager.cpp b/agents/unifiedmailboxagent/unifiedmailboxmanager.cpp index 2aa8854bf..4f8422e31 100644 --- a/agents/unifiedmailboxagent/unifiedmailboxmanager.cpp +++ b/agents/unifiedmailboxagent/unifiedmailboxmanager.cpp @@ -285,7 +285,7 @@ UnifiedMailbox *UnifiedMailboxManager::unifiedMailboxForSource(qint64 source) co return box->second; } -UnifiedMailbox * UnifiedMailboxManager::unifiedMailboxFromCollection(const Akonadi::Collection &col) const +UnifiedMailbox *UnifiedMailboxManager::unifiedMailboxFromCollection(const Akonadi::Collection &col) const { if (!isUnifiedMailbox(col)) { return nullptr;