1 /*
2    SPDX-FileCopyrightText: 2013-2021 Laurent Montel <montel@kde.org>
3 
4    SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "sieveeditorconfiguredialog.h"
8 #include "serversievelistwidget.h"
9 #include "sieveeditorconfigureserverwidget.h"
10 #include "sieveeditorglobalconfig.h"
11 #include <PimCommon/ConfigureImmutableWidgetUtils>
12 
13 #ifdef WITH_KUSERFEEDBACK
14 #include "userfeedback/userfeedbackmanager.h"
15 #include <KUserFeedback/FeedbackConfigWidget>
16 #include <KUserFeedback/Provider>
17 #endif
18 
19 #include <KLocalizedString>
20 #include <KSharedConfig>
21 
22 #include <KConfigGroup>
23 #include <QCheckBox>
24 #include <QDialogButtonBox>
25 #include <QPushButton>
26 #include <QVBoxLayout>
27 
SieveEditorConfigureDialog(QWidget * parent)28 SieveEditorConfigureDialog::SieveEditorConfigureDialog(QWidget *parent)
29     : KPageDialog(parent)
30 {
31     setWindowTitle(i18nc("@title:window", "Configure"));
32     setFaceType(KPageDialog::List);
33 
34     buttonBox()->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
35 
36     connect(buttonBox(), &QDialogButtonBox::accepted, this, &SieveEditorConfigureDialog::accept);
37     connect(buttonBox(), &QDialogButtonBox::rejected, this, &SieveEditorConfigureDialog::reject);
38 
39     // Server page
40     auto serverConfigureWiget = new QWidget;
41     auto layout = new QVBoxLayout(serverConfigureWiget);
42     mServerWidget = new SieveEditorConfigureServerWidget;
43     layout->addWidget(mServerWidget);
44 
45     auto serverPageWidgetPage = new KPageWidgetItem(serverConfigureWiget, i18n("Sieve Server"));
46     serverPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("network-workgroup")));
47     addPage(serverPageWidgetPage);
48 
49     // Editor page
50     auto editorWidget = new QWidget;
51     editorWidget->setObjectName(QStringLiteral("editorwidget"));
52 
53     layout = new QVBoxLayout(editorWidget);
54     mWrapText = new QCheckBox(i18n("Wrap Text"));
55     mWrapText->setObjectName(QStringLiteral("wraptext"));
56     layout->addWidget(mWrapText);
57     layout->addStretch(100);
58 
59     auto editorPageWidgetPage = new KPageWidgetItem(editorWidget, i18n("Editor"));
60     editorPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("accessories-text-editor")));
61     addPage(editorPageWidgetPage);
62 
63     // UserFeedBack config
64 #ifdef WITH_KUSERFEEDBACK
65     auto userFeedBackWidget = new QWidget;
66     userFeedBackWidget->setObjectName(QStringLiteral("userFeedBackWidget"));
67 
68     mUserFeedbackWidget = new KUserFeedback::FeedbackConfigWidget(this);
69 
70     auto userFeedBackLayout = new QHBoxLayout(userFeedBackWidget);
71     userFeedBackLayout->setContentsMargins({});
72     userFeedBackLayout->addWidget(mUserFeedbackWidget);
73 
74     mUserFeedbackWidget->setFeedbackProvider(UserFeedBackManager::self()->userFeedbackProvider());
75     auto userFeedBackPageWidgetPage = new KPageWidgetItem(userFeedBackWidget, i18n("User Feedback"));
76     userFeedBackPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("preferences-other")));
77     addPage(userFeedBackPageWidgetPage);
78 #endif
79 
80     loadServerSieveConfig();
81     readConfig();
82 }
83 
~SieveEditorConfigureDialog()84 SieveEditorConfigureDialog::~SieveEditorConfigureDialog()
85 {
86     writeConfig();
87 }
88 
loadServerSieveConfig()89 void SieveEditorConfigureDialog::loadServerSieveConfig()
90 {
91     mServerWidget->readConfig();
92     PimCommon::ConfigureImmutableWidgetUtils::loadWidget(mWrapText, SieveEditorGlobalConfig::self()->wrapTextItem());
93 }
94 
saveServerSieveConfig()95 void SieveEditorConfigureDialog::saveServerSieveConfig()
96 {
97     mServerWidget->writeConfig();
98     PimCommon::ConfigureImmutableWidgetUtils::saveCheckBox(mWrapText, SieveEditorGlobalConfig::self()->wrapTextItem());
99     SieveEditorGlobalConfig::self()->save();
100 #ifdef WITH_KUSERFEEDBACK
101     // set current active mode + write back the config for future starts
102     UserFeedBackManager::self()->userFeedbackProvider()->setTelemetryMode(mUserFeedbackWidget->telemetryMode());
103     UserFeedBackManager::self()->userFeedbackProvider()->setSurveyInterval(mUserFeedbackWidget->surveyInterval());
104 #endif
105 }
106 
readConfig()107 void SieveEditorConfigureDialog::readConfig()
108 {
109     KConfigGroup group(KSharedConfig::openStateConfig(), "SieveEditorConfigureDialog");
110     const QSize size = group.readEntry("Size", QSize(600, 400));
111     if (size.isValid()) {
112         resize(size);
113     }
114 }
115 
writeConfig()116 void SieveEditorConfigureDialog::writeConfig()
117 {
118     KConfigGroup group(KSharedConfig::openStateConfig(), "SieveEditorConfigureDialog");
119     group.writeEntry("Size", size());
120     group.sync();
121 }
122