File indexing completed on 2024-05-12 05:37:01

0001 /*
0002     SPDX-FileCopyrightText: 2016 Kai Uwe Broulik <kde@privat.broulik.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006 
0007 #pragma once
0008 
0009 #include <Plasma/Applet>
0010 
0011 #include <QPointer>
0012 
0013 #include <KPropertiesDialog>
0014 
0015 class KFileItemActions;
0016 
0017 class QMenu;
0018 
0019 namespace TaskManager
0020 {
0021 class StartupTasksModel;
0022 }
0023 
0024 class IconApplet : public Plasma::Applet
0025 {
0026     Q_OBJECT
0027 
0028     Q_PROPERTY(QUrl url READ url WRITE setUrl NOTIFY urlChanged)
0029 
0030     Q_PROPERTY(QString name READ name NOTIFY nameChanged)
0031     Q_PROPERTY(QString iconName READ iconName NOTIFY iconNameChanged)
0032     Q_PROPERTY(QString genericName READ genericName NOTIFY genericNameChanged)
0033     Q_PROPERTY(bool valid READ isValid NOTIFY isValidChanged)
0034     Q_PROPERTY(QList<QAction *> extraActions READ extraActions NOTIFY isValidChanged)
0035 
0036 public:
0037     explicit IconApplet(QObject *parent, const KPluginMetaData &data, const QVariantList &args);
0038     ~IconApplet() override;
0039 
0040     void init() override;
0041     void configChanged() override;
0042 
0043     QUrl url() const;
0044     void setUrl(const QUrl &url);
0045 
0046     QString name() const;
0047     QString iconName() const;
0048     QString genericName() const;
0049     bool isValid() const;
0050 
0051     QList<QAction *> extraActions();
0052 
0053     Q_INVOKABLE void run();
0054     Q_INVOKABLE void processDrop(QObject *dropEvent);
0055     Q_INVOKABLE void configure();
0056 
0057     Q_INVOKABLE bool isAcceptableDrag(QObject *dropEvent);
0058 
0059 Q_SIGNALS:
0060     void urlChanged(const QUrl &url);
0061 
0062     void nameChanged(const QString &name);
0063     void iconNameChanged(const QString &iconName);
0064     void genericNameChanged(const QString &genericName);
0065     void isValidChanged();
0066     void jumpListActionsChanged(const QVariantList &jumpListActions);
0067 
0068 private:
0069     void setIconName(const QString &iconName);
0070 
0071     static QList<QUrl> urlsFromDrop(QObject *dropEvent);
0072     static bool isExecutable(const QMimeType &mimeType);
0073 
0074     void populate();
0075     void populateFromDesktopFile(const QString &path);
0076 
0077     QString localPath() const;
0078     void setLocalPath(const QString &localPath);
0079 
0080     QUrl m_url;
0081     QString m_localPath;
0082 
0083     QString m_name;
0084     QString m_iconName;
0085     QString m_genericName;
0086 
0087     QList<QAction *> m_jumpListActions;
0088     QAction *m_separatorAction = nullptr;
0089     QList<QAction *> m_openWithActions;
0090 
0091     QAction *m_openContainingFolderAction = nullptr;
0092 
0093     KFileItemActions *m_fileItemActions = nullptr;
0094     std::unique_ptr<QMenu> m_openWithMenu;
0095 
0096     QPointer<KPropertiesDialog> m_configDialog;
0097 
0098     TaskManager::StartupTasksModel *m_startupTasksModel = nullptr;
0099 };