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