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

0001 /*
0002  *   SPDX-FileCopyrightText: 2012 Aleix Pol Gonzalez <aleixpol@blue-systems.com>
0003  *
0004  *   SPDX-License-Identifier: LGPL-2.0-or-later
0005  */
0006 
0007 #pragma once
0008 
0009 #include <QUrl>
0010 
0011 #include <QQuickView>
0012 
0013 class AbstractResource;
0014 class Category;
0015 class KStatusNotifierItem;
0016 class QWindow;
0017 class QQmlApplicationEngine;
0018 class CachedNetworkAccessManagerFactory;
0019 class TransactionsJob;
0020 
0021 #define DISCOVER_BASE_URL "qrc:/qt/qml/org/kde/discover/qml"
0022 
0023 class DiscoverObject : public QObject
0024 {
0025     Q_OBJECT
0026     Q_PROPERTY(bool isRoot READ isRoot CONSTANT)
0027     Q_PROPERTY(QRect initialGeometry READ initialGeometry CONSTANT)
0028     Q_PROPERTY(QQuickWindow *mainWindow READ mainWindow CONSTANT)
0029 
0030 public:
0031     explicit DiscoverObject(const QVariantMap &initialProperties);
0032     ~DiscoverObject() override;
0033 
0034     QStringList modes() const;
0035 
0036     bool eventFilter(QObject *object, QEvent *event) override;
0037 
0038     Q_SCRIPTABLE static QString iconName(const QIcon &icon);
0039 
0040     void loadTest(const QUrl &url);
0041 
0042     static bool isRoot();
0043     QQuickWindow *mainWindow() const;
0044     void showError(const QString &msg);
0045     Q_INVOKABLE void copyTextToClipboard(const QString text);
0046     QRect initialGeometry() const;
0047 
0048     QString describeSources() const;
0049     Q_SCRIPTABLE void restore();
0050 
0051 public Q_SLOTS:
0052     void openApplication(const QUrl &app);
0053     void openMimeType(const QString &mime);
0054     void openCategory(const QString &category);
0055     void openMode(const QString &mode);
0056     void openLocalPackage(const QUrl &localfile);
0057 
0058     void reboot();
0059     void rebootNow();
0060 
0061 private Q_SLOTS:
0062     void switchApplicationLanguage();
0063 
0064 Q_SIGNALS:
0065     void openSearch(const QString &search);
0066     void openApplicationInternal(AbstractResource *app);
0067     void listMimeInternal(const QString &mime);
0068     void listCategoryInternal(Category *cat);
0069 
0070     void unableToFind(const QString &resid);
0071     void openErrorPage(const QString &errorMessage, const QString &errorExplanation, const QString &buttonText, const QString &buttonIcon, const QString &buttonURL);
0072 
0073 private:
0074     void showLoadingPage();
0075     void initMainWindow(QQuickWindow *mainWindow);
0076     bool quitWhenIdle();
0077     void reconsiderQuit();
0078     QQmlApplicationEngine *engine() const
0079     {
0080         return m_engine;
0081     }
0082 
0083     QQmlApplicationEngine *const m_engine;
0084     std::unique_ptr<QQuickWindow> m_mainWindow;
0085 
0086     QScopedPointer<CachedNetworkAccessManagerFactory> m_networkAccessManagerFactory;
0087     KStatusNotifierItem *m_sni = nullptr;
0088 };