File indexing completed on 2024-04-14 03:57:07

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2007 Urs Wolfer <uwolfer at kde.org>
0004     SPDX-FileCopyrightText: 2008, 2019 Friedrich W. H. Kossebau <kossebau@kde.org>
0005     SPDX-FileCopyrightText: 2010 Teo Mrnjavac <teo@kde.org>
0006 
0007     Parts of this class have been take from the KAboutApplication class, which was
0008     SPDX-FileCopyrightText: 2000 Waldo Bastian <bastian@kde.org>
0009     SPDX-FileCopyrightText: 2000 Espen Sand <espen@kde.org>
0010 
0011     SPDX-License-Identifier: LGPL-2.0-only
0012 */
0013 
0014 #include "kaboutplugindialog.h"
0015 
0016 #include "kabstractaboutdialog_p.h"
0017 // KF
0018 #include <KAboutData>
0019 #include <KLocalizedString>
0020 #include <KPluginMetaData>
0021 #include <KWidgetItemDelegate>
0022 // Qt
0023 #include <QGuiApplication>
0024 #include <QTabWidget>
0025 
0026 class KAboutPluginDialogPrivate : public KAbstractAboutDialogPrivate
0027 {
0028 public:
0029     KAboutPluginDialogPrivate(const KPluginMetaData &pluginMetaData, KAboutPluginDialog *parent)
0030         : q(parent)
0031         , pluginMetaData(pluginMetaData)
0032         , pluginLicense(KAboutLicense::byKeyword(pluginMetaData.license()))
0033     {
0034     }
0035 
0036     void init(KAboutPluginDialog::Options opt);
0037 
0038 public:
0039     KAboutPluginDialog *const q;
0040 
0041     const KPluginMetaData pluginMetaData;
0042     const KAboutLicense pluginLicense;
0043 };
0044 
0045 KAboutPluginDialog::KAboutPluginDialog(const KPluginMetaData &pluginMetaData, QWidget *parent)
0046     : KAboutPluginDialog(pluginMetaData, NoOptions, parent)
0047 {
0048 }
0049 
0050 KAboutPluginDialog::KAboutPluginDialog(const KPluginMetaData &pluginMetaData, Options opt, QWidget *parent)
0051     : QDialog(parent)
0052     , d(new KAboutPluginDialogPrivate(pluginMetaData, this))
0053 {
0054     d->init(opt);
0055 }
0056 
0057 KAboutPluginDialog::~KAboutPluginDialog()
0058 {
0059     // The delegates want to be deleted before the items it created
0060     qDeleteAll(findChildren<KWidgetItemDelegate *>());
0061 }
0062 
0063 void KAboutPluginDialogPrivate::init(KAboutPluginDialog::Options opt)
0064 {
0065     q->setWindowTitle(i18nc("@title:window", "About %1", pluginMetaData.name()));
0066 
0067     // Set up the title widget...
0068     const QIcon pluginIcon = !pluginMetaData.iconName().isEmpty() ? QIcon::fromTheme(pluginMetaData.iconName()) : qApp->windowIcon();
0069     QWidget *titleWidget = createTitleWidget(pluginIcon, pluginMetaData.name(), pluginMetaData.version(), q);
0070 
0071     // Then the tab bar...
0072     QTabWidget *tabWidget = new QTabWidget;
0073     tabWidget->setUsesScrollButtons(false);
0074 
0075     QString extraInformation;
0076     // Set up the first page...
0077     QWidget *aboutWidget = createAboutWidget(pluginMetaData.description(), //
0078                                              extraInformation,
0079                                              pluginMetaData.copyrightText(),
0080                                              pluginMetaData.website(),
0081                                              {pluginLicense},
0082                                              q);
0083 
0084     tabWidget->addTab(aboutWidget, i18nc("@title:tab", "About"));
0085 
0086     // And here we go, authors page...
0087     const int authorCount = pluginMetaData.authors().count();
0088     if (authorCount) {
0089         // TODO: add bug report address to plugin metadata
0090         QWidget *authorWidget = createAuthorsWidget(pluginMetaData.authors(), false, QString(), QString(), q);
0091 
0092         const QString authorPageTitle = i18ncp("@title:tab", "Author", "Authors", authorCount);
0093         tabWidget->addTab(authorWidget, authorPageTitle);
0094     }
0095 
0096     // And credits page...
0097     if (!pluginMetaData.otherContributors().isEmpty()) {
0098         QWidget *creditWidget = createCreditWidget(pluginMetaData.otherContributors(), q);
0099         tabWidget->addTab(creditWidget, i18nc("@title:tab", "Thanks To"));
0100     }
0101 
0102     // Finally, the optional translators page...
0103     if (!(opt & KAboutPluginDialog::HideTranslators) && !pluginMetaData.translators().isEmpty()) {
0104         QWidget *translatorWidget = createTranslatorsWidget(pluginMetaData.translators(), q);
0105         tabWidget->addTab(translatorWidget, i18nc("@title:tab", "Translation"));
0106     }
0107 
0108     createForm(titleWidget, tabWidget, q);
0109 }
0110 
0111 #include "moc_kaboutplugindialog.cpp"