File indexing completed on 2024-05-19 05:14:00

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