File indexing completed on 2024-05-12 05:13:28

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 "contactprintthemeconfiguredialog.h"
0008 #include "contactprintthemeeditorutil.h"
0009 #include <TextCustomEditor/PlainTextEditorWidget>
0010 
0011 #include "configurewidget.h"
0012 
0013 #include <Akonadi/ContactEditor>
0014 
0015 #include <KContacts/VCardConverter>
0016 
0017 #include <KConfig>
0018 #include <KLocalizedString>
0019 
0020 #include <KConfigGroup>
0021 
0022 #include <KSharedConfig>
0023 #include <QDialogButtonBox>
0024 #include <QLabel>
0025 #include <QPushButton>
0026 #include <QTabWidget>
0027 #include <QVBoxLayout>
0028 
0029 ContactPrintThemeConfigureDialog::ContactPrintThemeConfigureDialog(QWidget *parent)
0030     : QDialog(parent)
0031 {
0032     setWindowTitle(i18nc("@title:window", "Configure"));
0033 
0034     auto tab = new QTabWidget;
0035 
0036     auto w = new QWidget;
0037     auto lay = new QVBoxLayout();
0038     w->setLayout(lay);
0039 
0040     mConfigureWidget = new GrantleeThemeEditor::ConfigureWidget;
0041     lay->addWidget(mConfigureWidget);
0042 
0043     auto lab = new QLabel(i18n("Default contact:"));
0044     lay->addWidget(lab);
0045 
0046     mDefaultContact = new Akonadi::AkonadiContactEditor(Akonadi::AkonadiContactEditor::CreateMode, Akonadi::AkonadiContactEditor::VCardMode);
0047     lay->addWidget(mDefaultContact);
0048 
0049     tab->addTab(w, i18n("General"));
0050 
0051     mDefaultTemplate = new TextCustomEditor::PlainTextEditorWidget;
0052     tab->addTab(mDefaultTemplate, i18n("Default Template"));
0053 
0054     auto mainLayout = new QVBoxLayout(this);
0055     mainLayout->addWidget(tab);
0056     auto buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel | QDialogButtonBox::RestoreDefaults, this);
0057     QPushButton *okButton = buttonBox->button(QDialogButtonBox::Ok);
0058     okButton->setDefault(true);
0059     okButton->setShortcut(Qt::CTRL | Qt::Key_Return);
0060     connect(buttonBox, &QDialogButtonBox::rejected, this, &ContactPrintThemeConfigureDialog::reject);
0061     mainLayout->addWidget(buttonBox);
0062     okButton->setFocus();
0063 
0064     connect(buttonBox->button(QDialogButtonBox::RestoreDefaults), &QPushButton::clicked, this, &ContactPrintThemeConfigureDialog::slotDefaultClicked);
0065     connect(buttonBox->button(QDialogButtonBox::Ok), &QPushButton::clicked, this, &ContactPrintThemeConfigureDialog::slotOkClicked);
0066     readConfig();
0067 }
0068 
0069 ContactPrintThemeConfigureDialog::~ContactPrintThemeConfigureDialog()
0070 {
0071     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0072 
0073     KConfigGroup group = config->group(QStringLiteral("ContactPrintThemeConfigureDialog"));
0074     group.writeEntry("Size", size());
0075 }
0076 
0077 void ContactPrintThemeConfigureDialog::slotDefaultClicked()
0078 {
0079     mConfigureWidget->setDefault();
0080 
0081     ContactPrintThemeEditorutil contactUtil;
0082     if (!contactUtil.defaultContact().isEmpty()) {
0083         KContacts::VCardConverter converter;
0084         KContacts::Addressee addr = converter.parseVCard(contactUtil.defaultContact().toUtf8());
0085         mDefaultContact->setContactTemplate(addr);
0086     } else {
0087         mDefaultContact->setContactTemplate(KContacts::Addressee());
0088     }
0089     mDefaultTemplate->setPlainText(contactUtil.defaultTemplate());
0090 }
0091 
0092 void ContactPrintThemeConfigureDialog::slotOkClicked()
0093 {
0094     writeConfig();
0095     accept();
0096 }
0097 
0098 void ContactPrintThemeConfigureDialog::readConfig()
0099 {
0100     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0101 
0102     ContactPrintThemeEditorutil contactUtil;
0103     if (config->hasGroup(QStringLiteral("Global"))) {
0104         KConfigGroup group = config->group(QStringLiteral("Global"));
0105 
0106         const QString defaultContact = group.readEntry("defaultContact", contactUtil.defaultContact());
0107         if (!defaultContact.isEmpty()) {
0108             KContacts::VCardConverter converter;
0109             KContacts::Addressee addr = converter.parseVCard(defaultContact.toUtf8());
0110             mDefaultContact->setContactTemplate(addr);
0111         } else {
0112             mDefaultContact->setContactTemplate(KContacts::Addressee());
0113         }
0114         mDefaultTemplate->setPlainText(group.readEntry("defaultTemplate", contactUtil.defaultTemplate()));
0115     } else {
0116         if (!contactUtil.defaultContact().isEmpty()) {
0117             KContacts::VCardConverter converter;
0118             KContacts::Addressee addr = converter.parseVCard(contactUtil.defaultContact().toUtf8());
0119             mDefaultContact->setContactTemplate(addr);
0120         } else {
0121             mDefaultContact->setContactTemplate(KContacts::Addressee());
0122         }
0123         mDefaultTemplate->setPlainText(contactUtil.defaultTemplate());
0124     }
0125 
0126     mConfigureWidget->readConfig();
0127 
0128     KConfigGroup group = KConfigGroup(config, QStringLiteral("ContactPrintThemeConfigureDialog"));
0129     const QSize sizeDialog = group.readEntry("Size", QSize(600, 400));
0130     if (sizeDialog.isValid()) {
0131         resize(sizeDialog);
0132     }
0133 }
0134 
0135 void ContactPrintThemeConfigureDialog::writeConfig()
0136 {
0137     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0138     KConfigGroup group = config->group(QStringLiteral("Global"));
0139     const KContacts::Addressee addr = mDefaultContact->contact();
0140     KContacts::VCardConverter converter;
0141     const QByteArray data = converter.exportVCard(addr, KContacts::VCardConverter::v3_0);
0142     group.writeEntry("defaultContact", data);
0143 
0144     group.writeEntry("defaultTemplate", mDefaultTemplate->toPlainText());
0145     mConfigureWidget->writeConfig();
0146 }
0147 
0148 #include "moc_contactprintthemeconfiguredialog.cpp"