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