File indexing completed on 2024-05-05 05:21:07

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 #include "notesagentsettingsdialog.h"
0007 
0008 #include "knotes-version.h"
0009 #include <KAboutData>
0010 #include <KHelpMenu>
0011 #include <KLocalizedString>
0012 #include <KNotifyConfigWidget>
0013 #include <QIcon>
0014 #include <QMenu>
0015 
0016 #include <KConfigGroup>
0017 #include <KSharedConfig>
0018 #include <KWindowConfig>
0019 #include <QApplication>
0020 #include <QDialogButtonBox>
0021 #include <QPushButton>
0022 #include <QTabWidget>
0023 #include <QVBoxLayout>
0024 #include <QWindow>
0025 
0026 #include "config/notenetworkconfig.h"
0027 
0028 NotesAgentSettingsDialog::NotesAgentSettingsDialog(QWidget *parent)
0029     : QDialog(parent)
0030     , mNotify(new KNotifyConfigWidget(this))
0031     , mNetworkConfig(new NoteShared::NoteNetworkConfigWidget(this))
0032 {
0033     setWindowTitle(i18nc("@title:window", "Configure Notes Agent"));
0034     setWindowIcon(QIcon::fromTheme(QStringLiteral("knotes")));
0035     auto mainLayout = new QVBoxLayout(this);
0036     setModal(true);
0037 
0038     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::Help, this);
0039     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0040     okButton->setDefault(true);
0041     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0042     connect(buttonBox, &QDialogButtonBox::rejected, this, &NotesAgentSettingsDialog::reject);
0043     connect(okButton, &QPushButton::clicked, this, &NotesAgentSettingsDialog::slotOkClicked);
0044 
0045     auto tab = new QTabWidget(this);
0046 
0047     mNotify->setApplication(QStringLiteral("akonadi_notes_agent"));
0048     tab->addTab(mNotify, i18n("Notify"));
0049 
0050     tab->addTab(mNetworkConfig, i18n("Network"));
0051     mNetworkConfig->load();
0052 
0053     mainLayout->addWidget(tab);
0054     mainLayout->addWidget(buttonBox);
0055     readConfig();
0056 
0057     KAboutData aboutData = KAboutData(QStringLiteral("notesagent"),
0058                                       i18n("Notes Agent"),
0059                                       QStringLiteral(KNOTES_VERSION),
0060                                       i18n("Notes Agent."),
0061                                       KAboutLicense::GPL_V2,
0062                                       i18n("Copyright (C) 2013-%1 Laurent Montel", QStringLiteral("2024")));
0063 
0064     aboutData.addAuthor(i18n("Laurent Montel"), i18n("Maintainer"), QStringLiteral("montel@kde.org"));
0065 
0066     QApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("knotes")));
0067     aboutData.setTranslator(i18nc("NAME OF TRANSLATORS", "Your names"), i18nc("EMAIL OF TRANSLATORS", "Your emails"));
0068 
0069     auto helpMenu = new KHelpMenu(this, aboutData, true);
0070     // Initialize menu
0071     QMenu *menu = helpMenu->menu();
0072     helpMenu->action(KHelpMenu::menuAboutApp)->setIcon(QIcon::fromTheme(QStringLiteral("knotes")));
0073     buttonBox->button(QDialogButtonBox::Help)->setMenu(menu);
0074 }
0075 
0076 NotesAgentSettingsDialog::~NotesAgentSettingsDialog()
0077 {
0078     writeConfig();
0079 }
0080 
0081 static const char myConfigGroupName[] = "NotesAgentSettingsDialog";
0082 void NotesAgentSettingsDialog::readConfig()
0083 {
0084     create(); // ensure a window is created
0085     windowHandle()->resize(QSize(500, 300));
0086     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myConfigGroupName));
0087     KWindowConfig::restoreWindowSize(windowHandle(), group);
0088     resize(windowHandle()->size()); // workaround for QTBUG-40584
0089 }
0090 
0091 void NotesAgentSettingsDialog::writeConfig()
0092 {
0093     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myConfigGroupName));
0094     KWindowConfig::saveWindowSize(windowHandle(), group);
0095     group.sync();
0096 }
0097 
0098 void NotesAgentSettingsDialog::slotOkClicked()
0099 {
0100     mNotify->save();
0101     mNetworkConfig->save();
0102     accept();
0103 }
0104 
0105 #include "moc_notesagentsettingsdialog.cpp"