1 /*
2     SPDX-FileCopyrightText: 2009 Tobias Koenig <tokoe@kde.org>
3     SPDX-FileCopyrightText: 2018-2021 Laurent Montel <montel@kde.org>
4 
5     SPDX-License-Identifier: LGPL-2.0-or-later
6 */
7 
8 #include "contactssettingswidget.h"
9 #include "settings.h"
10 
11 #include <KConfigDialogManager>
12 
13 #include <KSharedConfig>
14 #include <QPushButton>
15 #include <QTimer>
16 #include <QUrl>
17 
18 namespace
19 {
20 static const char myConfigGroupName[] = "ContactsSettingsDialog";
21 }
22 
ContactsSettingsWidget(const KSharedConfigPtr & config,QWidget * parent,const QVariantList & args)23 ContactsSettingsWidget::ContactsSettingsWidget(const KSharedConfigPtr &config, QWidget *parent, const QVariantList &args)
24     : Akonadi::AgentConfigurationBase(config, parent, args)
25 {
26     ContactsResourceSettings::instance(config);
27 
28     auto mainWidget = new QWidget(parent);
29 
30     ui.setupUi(mainWidget);
31     parent->layout()->addWidget(mainWidget);
32     ui.kcfg_Path->setMode(KFile::LocalOnly | KFile::Directory);
33 
34     ui.label_3->setMinimumSize(ui.label_3->sizeHint());
35     ui.label_2->setMinimumSize(ui.label_2->sizeHint());
36     mManager = new KConfigDialogManager(mainWidget, ContactsResourceSettings::self());
37 
38     connect(ui.kcfg_Path, &KUrlRequester::textChanged, this, &ContactsSettingsWidget::validate);
39     connect(ui.kcfg_ReadOnly, &QCheckBox::toggled, this, &ContactsSettingsWidget::validate);
40 }
41 
~ContactsSettingsWidget()42 ContactsSettingsWidget::~ContactsSettingsWidget()
43 {
44 }
45 
validate()46 void ContactsSettingsWidget::validate()
47 {
48     const QUrl currentUrl = ui.kcfg_Path->url();
49     if (currentUrl.isEmpty()) {
50         Q_EMIT enableOkButton(false);
51         return;
52     }
53 
54     const QFileInfo file(currentUrl.toLocalFile());
55     if (file.exists() && !file.isWritable()) {
56         ui.kcfg_ReadOnly->setEnabled(false);
57         ui.kcfg_ReadOnly->setChecked(true);
58     } else {
59         ui.kcfg_ReadOnly->setEnabled(true);
60     }
61     Q_EMIT enableOkButton(true);
62 }
63 
load()64 void ContactsSettingsWidget::load()
65 {
66     QTimer::singleShot(0, this, &ContactsSettingsWidget::validate);
67 
68     ui.kcfg_Path->setUrl(QUrl::fromLocalFile(ContactsResourceSettings::self()->path()));
69     mManager->updateWidgets();
70 }
71 
save() const72 bool ContactsSettingsWidget::save() const
73 {
74     mManager->updateSettings();
75     ContactsResourceSettings::self()->setPath(ui.kcfg_Path->url().toLocalFile());
76     ContactsResourceSettings::self()->save();
77     return true;
78 }
79 
restoreDialogSize() const80 QSize ContactsSettingsWidget::restoreDialogSize() const
81 {
82     auto group = config()->group(myConfigGroupName);
83     const QSize size = group.readEntry("Size", QSize(600, 400));
84     return size;
85 }
86 
saveDialogSize(const QSize & size)87 void ContactsSettingsWidget::saveDialogSize(const QSize &size)
88 {
89     auto group = config()->group(myConfigGroupName);
90     group.writeEntry("Size", size);
91 }
92