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

0001 /*
0002    SPDX-FileCopyrightText: 2013-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "contactpreviewwidget.h"
0008 #include "contacteditorutil.h"
0009 
0010 #include <KContacts/VCardConverter>
0011 
0012 #include <Akonadi/ContactGroupViewer>
0013 #include <Akonadi/ContactViewer>
0014 #include <Akonadi/GrantleeContactFormatter>
0015 #include <Akonadi/GrantleeContactGroupFormatter>
0016 #include <Akonadi/Item>
0017 #include <KLocalizedString>
0018 
0019 #include <KConfigGroup>
0020 #include <KSharedConfig>
0021 
0022 #include <QHBoxLayout>
0023 #include <QPainter>
0024 #include <QTabWidget>
0025 
0026 ContactPreviewWidget::ContactPreviewWidget(const QString &projectDirectory, QWidget *parent)
0027     : QWidget(parent)
0028 {
0029     auto lay = new QHBoxLayout(this);
0030     lay->setContentsMargins(0, 0, 0, 0);
0031     mTabWidget = new QTabWidget;
0032 
0033     mContactViewer = new Akonadi::ContactViewer;
0034     mTabWidget->addTab(mContactViewer, i18n("Contact"));
0035 
0036     mGroupViewer = new Akonadi::ContactGroupViewer;
0037     mTabWidget->addTab(mGroupViewer, i18n("Group"));
0038 
0039     lay->addWidget(mTabWidget);
0040 
0041     mFormatter = new KAddressBookGrantlee::GrantleeContactFormatter;
0042 
0043     mContactViewer->setContactFormatter(mFormatter);
0044 
0045     mGroupFormatter = new KAddressBookGrantlee::GrantleeContactGroupFormatter;
0046 
0047     mGroupViewer->setContactGroupFormatter(mGroupFormatter);
0048 
0049     loadConfig();
0050     if (!projectDirectory.isEmpty()) {
0051         mGroupFormatter->setAbsoluteThemePath(projectDirectory);
0052         mFormatter->setAbsoluteThemePath(projectDirectory);
0053     }
0054 }
0055 
0056 ContactPreviewWidget::~ContactPreviewWidget()
0057 {
0058     delete mFormatter;
0059     delete mGroupFormatter;
0060 }
0061 
0062 void ContactPreviewWidget::updateViewer()
0063 {
0064     mContactViewer->setRawContact(mContact);
0065     // mGroupViewer->setContactGroup();
0066     // TODO
0067 }
0068 
0069 void ContactPreviewWidget::createScreenShot(const QStringList &fileName)
0070 {
0071     for (int i = 0; i < fileName.count(); ++i) {
0072         if (i == 0) {
0073             QImage image(mContactViewer->size(), QImage::Format_ARGB32_Premultiplied);
0074             image.fill(Qt::transparent);
0075 
0076             QPainter painter(&image);
0077             painter.setRenderHint(QPainter::Antialiasing, true);
0078             painter.setRenderHint(QPainter::TextAntialiasing, true);
0079             painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
0080             mContactViewer->render(&painter);
0081             painter.end();
0082             image.save(fileName.at(i));
0083         } else if (i == 1) {
0084             QImage image(mContactViewer->size(), QImage::Format_ARGB32_Premultiplied);
0085             image.fill(Qt::transparent);
0086 
0087             QPainter painter(&image);
0088             painter.setRenderHint(QPainter::Antialiasing, true);
0089             painter.setRenderHint(QPainter::TextAntialiasing, true);
0090             painter.setRenderHint(QPainter::SmoothPixmapTransform, true);
0091             mGroupViewer->render(&painter);
0092             painter.end();
0093             image.save(fileName.at(i));
0094         }
0095     }
0096 }
0097 
0098 void ContactPreviewWidget::loadConfig()
0099 {
0100     KSharedConfig::Ptr config = KSharedConfig::openConfig();
0101 
0102     ContactEditorUtil contactUtil;
0103     if (config->hasGroup(QStringLiteral("Global"))) {
0104         KConfigGroup group = config->group(QStringLiteral("Global"));
0105         const QString defaultContact = group.readEntry("defaultContact", contactUtil.defaultContact());
0106         if (!defaultContact.isEmpty()) {
0107             KContacts::VCardConverter converter;
0108             mContact = converter.parseVCard(defaultContact.toUtf8());
0109         } else {
0110             mContact = KContacts::Addressee();
0111         }
0112     } else {
0113         if (!contactUtil.defaultContact().isEmpty()) {
0114             KContacts::VCardConverter converter;
0115             mContact = converter.parseVCard(contactUtil.defaultContact().toUtf8());
0116         } else {
0117             mContact = KContacts::Addressee();
0118         }
0119     }
0120 }
0121 
0122 void ContactPreviewWidget::setThemePath(const QString &projectDirectory)
0123 {
0124     mGroupFormatter->setAbsoluteThemePath(projectDirectory);
0125     mFormatter->setAbsoluteThemePath(projectDirectory);
0126 }
0127 
0128 #include "moc_contactpreviewwidget.cpp"