File indexing completed on 2024-05-26 05:27:12

0001 /*
0002    SPDX-FileCopyrightText: 2015-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "pimdataexporterconfiguredialog.h"
0008 #include "gui/widgets/pimdataexporterconfigurewidget.h"
0009 #include <KConfigGroup>
0010 #include <KLocalizedString>
0011 #include <KSharedConfig>
0012 #include <QDialogButtonBox>
0013 #include <QPushButton>
0014 #include <QVBoxLayout>
0015 
0016 #ifdef WITH_KUSERFEEDBACK
0017 #include "userfeedback/userfeedbackmanager.h"
0018 #include <KUserFeedback/FeedbackConfigWidget>
0019 #include <KUserFeedback/Provider>
0020 #endif
0021 
0022 #include <KWindowConfig>
0023 #include <QWindow>
0024 
0025 namespace
0026 {
0027 static const char myPimDataExporterConfigureDialogGroupName[] = "PimDataExporterConfigureDialog";
0028 }
0029 PimDataExporterConfigureDialog::PimDataExporterConfigureDialog(QWidget *parent)
0030     : KPageDialog(parent)
0031     , mConfigureWidget(new PimDataExporterConfigureWidget(this))
0032 {
0033     setFaceType(KPageDialog::List);
0034     setWindowTitle(i18nc("@title:window", "Configure PimDataExporter"));
0035 
0036     // General page
0037     auto generalConfigureWiget = new QWidget(this);
0038     auto layout = new QVBoxLayout(generalConfigureWiget);
0039     mConfigureWidget->setObjectName(QLatin1StringView("configurewidget"));
0040 
0041     layout->addWidget(mConfigureWidget);
0042 
0043     auto generalPageWidgetPage = new KPageWidgetItem(mConfigureWidget, i18n("General"));
0044     generalPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("network-workgroup")));
0045     addPage(generalPageWidgetPage);
0046 
0047 #ifdef WITH_KUSERFEEDBACK
0048     auto userFeedBackWidget = new QWidget;
0049     userFeedBackWidget->setObjectName(QLatin1StringView("userFeedBackWidget"));
0050 
0051     mUserFeedbackWidget = new KUserFeedback::FeedbackConfigWidget(this);
0052 
0053     auto userFeedBackLayout = new QHBoxLayout(userFeedBackWidget);
0054     userFeedBackLayout->setContentsMargins(0, 0, 0, 0);
0055     userFeedBackLayout->addWidget(mUserFeedbackWidget);
0056 
0057     mUserFeedbackWidget->setFeedbackProvider(UserFeedBackManager::self()->userFeedbackProvider());
0058     auto userFeedBackPageWidgetPage = new KPageWidgetItem(userFeedBackWidget, i18n("User Feedback"));
0059     userFeedBackPageWidgetPage->setIcon(QIcon::fromTheme(QStringLiteral("preferences-other")));
0060     addPage(userFeedBackPageWidgetPage);
0061 #endif
0062 
0063     buttonBox()->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
0064 
0065     connect(buttonBox(), &QDialogButtonBox::accepted, this, &PimDataExporterConfigureDialog::accept);
0066     connect(buttonBox(), &QDialogButtonBox::rejected, this, &PimDataExporterConfigureDialog::reject);
0067     readConfig();
0068 }
0069 
0070 PimDataExporterConfigureDialog::~PimDataExporterConfigureDialog()
0071 {
0072     writeConfig();
0073 }
0074 
0075 void PimDataExporterConfigureDialog::slotAccepted()
0076 {
0077     mConfigureWidget->save();
0078 #ifdef WITH_KUSERFEEDBACK
0079     // set current active mode + write back the config for future starts
0080     UserFeedBackManager::self()->userFeedbackProvider()->setTelemetryMode(mUserFeedbackWidget->telemetryMode());
0081     UserFeedBackManager::self()->userFeedbackProvider()->setSurveyInterval(mUserFeedbackWidget->surveyInterval());
0082 #endif
0083     accept();
0084 }
0085 
0086 void PimDataExporterConfigureDialog::readConfig()
0087 {
0088     create(); // ensure a window is created
0089     windowHandle()->resize(QSize(600, 400));
0090     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myPimDataExporterConfigureDialogGroupName));
0091     KWindowConfig::restoreWindowSize(windowHandle(), group);
0092     resize(windowHandle()->size()); // workaround for QTBUG-40584
0093 }
0094 
0095 void PimDataExporterConfigureDialog::writeConfig()
0096 {
0097     KConfigGroup group(KSharedConfig::openStateConfig(), QLatin1StringView(myPimDataExporterConfigureDialogGroupName));
0098     KWindowConfig::saveWindowSize(windowHandle(), group);
0099     group.sync();
0100 }
0101 
0102 #include "moc_pimdataexporterconfiguredialog.cpp"