1 /*
2 SPDX-FileCopyrightText: 2015-2021 Laurent Montel <montel@kde.org>
3
4 SPDX-License-Identifier: GPL-2.0-or-later
5 */
6
7 #include "contactprintthemeconfiguredialog.h"
8 #include "contactprintthemeeditorutil.h"
9 #include <KPIMTextEdit/PlainTextEditorWidget>
10
11 #include "configurewidget.h"
12
13 #include <Akonadi/Contact/ContactEditor>
14
15 #include <KContacts/VCardConverter>
16
17 #include <KConfig>
18 #include <KLocalizedString>
19
20 #include <KConfigGroup>
21
22 #include <KSharedConfig>
23 #include <QDialogButtonBox>
24 #include <QLabel>
25 #include <QPushButton>
26 #include <QTabWidget>
27 #include <QVBoxLayout>
28
ContactPrintThemeConfigureDialog(QWidget * parent)29 ContactPrintThemeConfigureDialog::ContactPrintThemeConfigureDialog(QWidget *parent)
30 : QDialog(parent)
31 {
32 setWindowTitle(i18nc("@title:window", "Configure"));
33
34 QTabWidget *tab = new QTabWidget;
35
36 QWidget *w = new QWidget;
37 QVBoxLayout *lay = new QVBoxLayout();
38 w->setLayout(lay);
39
40 mConfigureWidget = new GrantleeThemeEditor::ConfigureWidget;
41 lay->addWidget(mConfigureWidget);
42
43 QLabel *lab = new QLabel(i18n("Default contact:"));
44 lay->addWidget(lab);
45
46 mDefaultContact = new Akonadi::AkonadiContactEditor(Akonadi::AkonadiContactEditor::CreateMode, Akonadi::AkonadiContactEditor::VCardMode);
47 lay->addWidget(mDefaultContact);
48
49 tab->addTab(w, i18n("General"));
50
51 mDefaultTemplate = new KPIMTextEdit::PlainTextEditorWidget;
52 tab->addTab(mDefaultTemplate, i18n("Default Template"));
53
54 QVBoxLayout *mainLayout = new QVBoxLayout(this);
55 mainLayout->addWidget(tab);
56 QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::RestoreDefaults, this);
57 QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
58 okButton->setDefault(true);
59 okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
60 connect(buttonBox, &QDialogButtonBox::rejected, this, &ContactPrintThemeConfigureDialog::reject);
61 mainLayout->addWidget(buttonBox);
62 okButton->setFocus();
63
64 connect(buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this, &ContactPrintThemeConfigureDialog::slotDefaultClicked);
65 connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &ContactPrintThemeConfigureDialog::slotOkClicked);
66 readConfig();
67 }
68
~ContactPrintThemeConfigureDialog()69 ContactPrintThemeConfigureDialog::~ContactPrintThemeConfigureDialog()
70 {
71 KSharedConfig::Ptr config = KSharedConfig::openConfig();
72
73 KConfigGroup group = config->group(QStringLiteral("ContactPrintThemeConfigureDialog"));
74 group.writeEntry("Size", size());
75 }
76
slotDefaultClicked()77 void ContactPrintThemeConfigureDialog::slotDefaultClicked()
78 {
79 mConfigureWidget->setDefault();
80
81 ContactPrintThemeEditorutil contactUtil;
82 if (!contactUtil.defaultContact().isEmpty()) {
83 KContacts::VCardConverter converter;
84 KContacts::Addressee addr = converter.parseVCard(contactUtil.defaultContact().toUtf8());
85 mDefaultContact->setContactTemplate(addr);
86 } else {
87 mDefaultContact->setContactTemplate(KContacts::Addressee());
88 }
89 mDefaultTemplate->setPlainText(contactUtil.defaultTemplate());
90 }
91
slotOkClicked()92 void ContactPrintThemeConfigureDialog::slotOkClicked()
93 {
94 writeConfig();
95 accept();
96 }
97
readConfig()98 void ContactPrintThemeConfigureDialog::readConfig()
99 {
100 KSharedConfig::Ptr config = KSharedConfig::openConfig();
101
102 ContactPrintThemeEditorutil contactUtil;
103 if (config->hasGroup(QStringLiteral("Global"))) {
104 KConfigGroup group = config->group(QStringLiteral("Global"));
105
106 const QString defaultContact = group.readEntry("defaultContact", contactUtil.defaultContact());
107 if (!defaultContact.isEmpty()) {
108 KContacts::VCardConverter converter;
109 KContacts::Addressee addr = converter.parseVCard(defaultContact.toUtf8());
110 mDefaultContact->setContactTemplate(addr);
111 } else {
112 mDefaultContact->setContactTemplate(KContacts::Addressee());
113 }
114 mDefaultTemplate->setPlainText(group.readEntry("defaultTemplate", contactUtil.defaultTemplate()));
115 } else {
116 if (!contactUtil.defaultContact().isEmpty()) {
117 KContacts::VCardConverter converter;
118 KContacts::Addressee addr = converter.parseVCard(contactUtil.defaultContact().toUtf8());
119 mDefaultContact->setContactTemplate(addr);
120 } else {
121 mDefaultContact->setContactTemplate(KContacts::Addressee());
122 }
123 mDefaultTemplate->setPlainText(contactUtil.defaultTemplate());
124 }
125
126 mConfigureWidget->readConfig();
127
128 KConfigGroup group = KConfigGroup(config, "ContactPrintThemeConfigureDialog");
129 const QSize sizeDialog = group.readEntry("Size", QSize(600, 400));
130 if (sizeDialog.isValid()) {
131 resize(sizeDialog);
132 }
133 }
134
writeConfig()135 void ContactPrintThemeConfigureDialog::writeConfig()
136 {
137 KSharedConfig::Ptr config = KSharedConfig::openConfig();
138 KConfigGroup group = config->group(QStringLiteral("Global"));
139 const KContacts::Addressee addr = mDefaultContact->contact();
140 KContacts::VCardConverter converter;
141 const QByteArray data = converter.exportVCard(addr, KContacts::VCardConverter::v3_0);
142 group.writeEntry("defaultContact", data);
143
144 group.writeEntry("defaultTemplate", mDefaultTemplate->toPlainText());
145 mConfigureWidget->writeConfig();
146 }
147