Warning, file /frameworks/knewstuff/src/widgets/button.cpp was not indexed or was modified since last indexation (in which case cross-reference links may be missing, inaccurate or erroneous).

0001 /*
0002     SPDX-FileCopyrightText: 2004 Aaron J. Seigo <aseigo@kde.org>
0003     SPDX-FileCopyrightText: 2021 Alexander Lohnau <alexander.lohnau@gmx.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-or-later
0006 */
0007 
0008 #include "button.h"
0009 
0010 #include "qtquickdialogwrapper.h"
0011 #include "ui/widgetquestionlistener.h"
0012 #include <KAuthorized>
0013 #include <KLocalizedString>
0014 #include <KMessageBox>
0015 
0016 #include <QPointer>
0017 
0018 namespace KNSWidgets
0019 {
0020 class ButtonPrivate
0021 {
0022 public:
0023     explicit ButtonPrivate(Button *qq)
0024         : q(qq)
0025     {
0026     }
0027 
0028     Button *q;
0029     QString configFile;
0030     QPointer<KNS3::QtQuickDialogWrapper> dialog;
0031     void init()
0032     {
0033         const bool authorized = KAuthorized::authorize(KAuthorized::GHNS);
0034         if (!authorized) {
0035             q->setEnabled(false);
0036             q->setVisible(false);
0037         }
0038 
0039         q->setIcon(QIcon::fromTheme(QStringLiteral("get-hot-new-stuff")));
0040         q->connect(q, &QAbstractButton::clicked, q, &Button::showDialog);
0041         KNS3::WidgetQuestionListener::instance();
0042     }
0043 };
0044 
0045 Button::Button(const QString &text, const QString &configFile, QWidget *parent)
0046     : QPushButton(parent)
0047     , d(new ButtonPrivate(this))
0048 {
0049     setText(text);
0050     d->configFile = configFile;
0051     d->init();
0052 }
0053 
0054 Button::Button(QWidget *parent)
0055     : QPushButton(parent)
0056     , d(new ButtonPrivate(this))
0057 {
0058     setText(i18n("Download New Stuff..."));
0059     d->init();
0060 }
0061 
0062 Button::~Button() = default;
0063 
0064 void Button::setConfigFile(const QString &configFile)
0065 {
0066     d->configFile = configFile;
0067 }
0068 QString Button::configFile()
0069 {
0070     return d->configFile;
0071 }
0072 
0073 void Button::showDialog()
0074 {
0075     if (!KAuthorized::authorize(KAuthorized::GHNS)) {
0076         KMessageBox::information(this, QStringLiteral("Get Hot New Stuff is disabled by the administrator"), QStringLiteral("Get Hot New Stuff disabled"));
0077         return;
0078     }
0079     Q_ASSERT_X(!d->configFile.isEmpty(), Q_FUNC_INFO, "The configFile for the KNSWidgets::Button must be explicitly set");
0080     Q_EMIT aboutToShowDialog();
0081 
0082     if (!d->dialog) {
0083         d->dialog = new KNS3::QtQuickDialogWrapper(d->configFile, this);
0084         connect(d->dialog.data(), &KNS3::QtQuickDialogWrapper::closed, this, [this]() {
0085             Q_EMIT dialogFinished(d->dialog->changedEntries());
0086         });
0087     }
0088     d->dialog->open();
0089 }
0090 
0091 }
0092 
0093 #include "moc_button.cpp"