File indexing completed on 2024-05-12 05:25:40

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "sieveeditorconfiguredialog.h"
0008 #include "sieveeditorconfigureserverwidget.h"
0009 #include "sieveeditorglobalconfig.h"
0010 #include <PimCommon/ConfigureImmutableWidgetUtils>
0011 
0012 #ifdef WITH_KUSERFEEDBACK
0013 #include "userfeedback/userfeedbackmanager.h"
0014 #include <KUserFeedback/FeedbackConfigWidget>
0015 #include <KUserFeedback/Provider>
0016 #endif
0017 
0018 #include <KLocalizedString>
0019 #include <KSharedConfig>
0020 
0021 #include <KConfigGroup>
0022 #include <KWindowConfig>
0023 #include <QCheckBox>
0024 #include <QDialogButtonBox>
0025 #include <QPushButton>
0026 #include <QVBoxLayout>
0027 #include <QWindow>
0028 
0029 namespace
0030 {
0031 static const char mySieveEditorConfigureDialog[] = "SieveEditorConfigureDialog";
0032 }
0033 
0034 SieveEditorConfigureDialog::SieveEditorConfigureDialog(QWidget *parent)
0035     : KPageDialog(parent)
0036 {
0037     setWindowTitle(i18nc("@title:window", "Configure"));
0038     setFaceType(KPageDialog::List);
0039 
0040     buttonBox()->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0041 
0042     connect(buttonBox(), &QDialogButtonBox::accepted, this, &SieveEditorConfigureDialog::accept);
0043     connect(buttonBox(), &QDialogButtonBox::rejected, this, &SieveEditorConfigureDialog::reject);
0044 
0045     // Server page
0046     auto serverConfigureWiget = new QWidget;
0047     auto layout = new QVBoxLayout(serverConfigureWiget);
0048     mServerWidget = new SieveEditorConfigureServerWidget;
0049     layout->addWidget(mServerWidget);
0050 
0051     auto serverPageWidgetPage = new KPageWidgetItem(serverConfigureWiget, i18n("Sieve Server"));
0052     serverPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("network-workgroup")));
0053     addPage(serverPageWidgetPage);
0054 
0055     // Editor page
0056     auto editorWidget = new QWidget;
0057     editorWidget->setObjectName(QLatin1StringView("editorwidget"));
0058 
0059     layout = new QVBoxLayout(editorWidget);
0060     mWrapText = new QCheckBox(i18n("Wrap Text"));
0061     mWrapText->setObjectName(QLatin1StringView("wraptext"));
0062     layout->addWidget(mWrapText);
0063     layout->addStretch(100);
0064 
0065     auto editorPageWidgetPage = new KPageWidgetItem(editorWidget, i18n("Editor"));
0066     editorPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("accessories-text-editor")));
0067     addPage(editorPageWidgetPage);
0068 
0069     // UserFeedBack config
0070 #ifdef WITH_KUSERFEEDBACK
0071     auto userFeedBackWidget = new QWidget;
0072     userFeedBackWidget->setObjectName(QLatin1StringView("userFeedBackWidget"));
0073 
0074     mUserFeedbackWidget = new KUserFeedback::FeedbackConfigWidget(this);
0075 
0076     auto userFeedBackLayout = new QHBoxLayout(userFeedBackWidget);
0077     userFeedBackLayout->setContentsMargins({});
0078     userFeedBackLayout->addWidget(mUserFeedbackWidget);
0079 
0080     mUserFeedbackWidget->setFeedbackProvider(UserFeedBackManager::self()->userFeedbackProvider());
0081     auto userFeedBackPageWidgetPage = new KPageWidgetItem(userFeedBackWidget, i18n("User Feedback"));
0082     userFeedBackPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("preferences-other")));
0083     addPage(userFeedBackPageWidgetPage);
0084 #endif
0085 
0086     loadServerSieveConfig();
0087     readConfig();
0088 }
0089 
0090 SieveEditorConfigureDialog::~SieveEditorConfigureDialog()
0091 {
0092     writeConfig();
0093 }
0094 
0095 void SieveEditorConfigureDialog::loadServerSieveConfig()
0096 {
0097     mServerWidget->readConfig();
0098     PimCommon::ConfigureImmutableWidgetUtils::loadWidget(mWrapText, SieveEditorGlobalConfig::self()->wrapTextItem());
0099 }
0100 
0101 void SieveEditorConfigureDialog::saveServerSieveConfig()
0102 {
0103     mServerWidget->writeConfig();
0104     PimCommon::ConfigureImmutableWidgetUtils::saveCheckBox(mWrapText, SieveEditorGlobalConfig::self()->wrapTextItem());
0105     SieveEditorGlobalConfig::self()->save();
0106 #ifdef WITH_KUSERFEEDBACK
0107     // set current active mode + write back the config for future starts
0108     UserFeedBackManager::self()->userFeedbackProvider()->setTelemetryMode(mUserFeedbackWidget->telemetryMode());
0109     UserFeedBackManager::self()->userFeedbackProvider()->setSurveyInterval(mUserFeedbackWidget->surveyInterval());
0110 #endif
0111 }
0112 
0113 void SieveEditorConfigureDialog::readConfig()
0114 {
0115     create(); // ensure a window is created
0116     windowHandle()->resize(QSize(600, 400));
0117     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(mySieveEditorConfigureDialog));
0118     KWindowConfig::restoreWindowSize(windowHandle(), group);
0119     resize(windowHandle()->size()); // workaround for QTBUG-40584
0120 }
0121 
0122 void SieveEditorConfigureDialog::writeConfig()
0123 {
0124     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(mySieveEditorConfigureDialog));
0125     KWindowConfig::saveWindowSize(windowHandle(), group);
0126     group.sync();
0127 }
0128 
0129 #include "moc_sieveeditorconfiguredialog.cpp"