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 };