File indexing completed on 2024-05-05 17:33:03

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 class DiscoverObject : public QObject
0022 {
0023     Q_OBJECT
0024     Q_PROPERTY(CompactMode compactMode READ compactMode WRITE setCompactMode NOTIFY compactModeChanged)
0025     Q_PROPERTY(bool isRoot READ isRoot CONSTANT)
0026     Q_PROPERTY(QRect initialGeometry READ initialGeometry CONSTANT)
0027 
0028 public:
0029     enum CompactMode {
0030         Auto,
0031         Compact,
0032         Full,
0033     };
0034     Q_ENUM(CompactMode)
0035 
0036     explicit DiscoverObject(CompactMode mode, const QVariantMap &initialProperties);
0037     ~DiscoverObject() override;
0038 
0039     QStringList modes() const;
0040 
0041     CompactMode compactMode() const
0042     {
0043         return m_mode;
0044     }
0045     void setCompactMode(CompactMode mode);
0046 
0047     bool eventFilter(QObject *object, QEvent *event) override;
0048 
0049     Q_SCRIPTABLE static QString iconName(const QIcon &icon);
0050 
0051     void loadTest(const QUrl &url);
0052 
0053     static bool isRoot();
0054     QQuickWindow *rootObject() const;
0055     void showError(const QString &msg);
0056     Q_INVOKABLE void copyTextToClipboard(const QString text);
0057     QRect initialGeometry() const;
0058 
0059     QString describeSources() const;
0060     Q_SCRIPTABLE void restore();
0061 
0062 public Q_SLOTS:
0063     void openApplication(const QUrl &app);
0064     void openMimeType(const QString &mime);
0065     void openCategory(const QString &category);
0066     void openMode(const QString &mode);
0067     void openLocalPackage(const QUrl &localfile);
0068 
0069     void reboot();
0070     void rebootNow();
0071 
0072 private Q_SLOTS:
0073     void switchApplicationLanguage();
0074 
0075 Q_SIGNALS:
0076     void openSearch(const QString &search);
0077     void openApplicationInternal(AbstractResource *app);
0078     void listMimeInternal(const QString &mime);
0079     void listCategoryInternal(Category *cat);
0080 
0081     void compactModeChanged(DiscoverObject::CompactMode compactMode);
0082     void unableToFind(const QString &resid);
0083     void openErrorPage(const QString &errorMessage, const QString &errorExplanation, const QString &buttonText, const QString &buttonIcon, const QString &buttonURL);
0084 
0085 private:
0086     void showLoadingPage();
0087     void integrateObject(QObject *object);
0088     bool quitWhenIdle();
0089     void reconsiderQuit();
0090     QQmlApplicationEngine *engine() const
0091     {
0092         return m_engine;
0093     }
0094 
0095     QQmlApplicationEngine *const m_engine;
0096 
0097     CompactMode m_mode;
0098     QScopedPointer<CachedNetworkAccessManagerFactory> m_networkAccessManagerFactory;
0099     KStatusNotifierItem *m_sni = nullptr;
0100 };