File indexing completed on 2024-05-12 17:08:41

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 
0035 public:
0036     explicit IconApplet(QObject *parent, const KPluginMetaData &data, const QVariantList &args);
0037     ~IconApplet() override;
0038 
0039     void init() override;
0040     void configChanged() override;
0041 
0042     QUrl url() const;
0043     void setUrl(const QUrl &url);
0044 
0045     QString name() const;
0046     QString iconName() const;
0047     QString genericName() const;
0048     bool isValid() const;
0049 
0050     QList<QAction *> contextualActions() override;
0051 
0052     Q_INVOKABLE void run();
0053     Q_INVOKABLE void processDrop(QObject *dropEvent);
0054     Q_INVOKABLE void configure();
0055 
0056     Q_INVOKABLE bool isAcceptableDrag(QObject *dropEvent);
0057 
0058 Q_SIGNALS:
0059     void urlChanged(const QUrl &url);
0060 
0061     void nameChanged(const QString &name);
0062     void iconNameChanged(const QString &iconName);
0063     void genericNameChanged(const QString &genericName);
0064     void isValidChanged();
0065     void jumpListActionsChanged(const QVariantList &jumpListActions);
0066 
0067 private:
0068     void setIconName(const QString &iconName);
0069 
0070     static QList<QUrl> urlsFromDrop(QObject *dropEvent);
0071     static bool isExecutable(const QMimeType &mimeType);
0072 
0073     void populate();
0074     void populateFromDesktopFile(const QString &path);
0075 
0076     QString localPath() const;
0077     void setLocalPath(const QString &localPath);
0078 
0079     QUrl m_url;
0080     QString m_localPath;
0081 
0082     QString m_name;
0083     QString m_iconName;
0084     QString m_genericName;
0085 
0086     QList<QAction *> m_jumpListActions;
0087     QAction *m_separatorAction = nullptr;
0088     QList<QAction *> m_openWithActions;
0089 
0090     QAction *m_openContainingFolderAction = nullptr;
0091 
0092     KFileItemActions *m_fileItemActions = nullptr;
0093     std::unique_ptr<QMenu> m_openWithMenu;
0094 
0095     QPointer<KPropertiesDialog> m_configDialog;
0096 
0097     TaskManager::StartupTasksModel *m_startupTasksModel = nullptr;
0098 };