1 /* 2 This file is part of the KDE project 3 SPDX-FileCopyrightText: 1998-2009 David Faure <faure@kde.org> 4 5 SPDX-License-Identifier: LGPL-2.0-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 6 */ 7 8 #ifndef KFILEITEMACTIONS_P_H 9 #define KFILEITEMACTIONS_P_H 10 11 #include "kabstractfileitemactionplugin.h" 12 #include <KConfig> 13 #include <KService> 14 #include <KServiceAction> 15 #include <kfileitem.h> 16 #include <kfileitemlistproperties.h> 17 18 #include <QActionGroup> 19 #include <QObject> 20 21 class KFileItemActions; 22 23 typedef QList<KServiceAction> ServiceList; 24 25 class KFileItemActionsPrivate : public QObject 26 { 27 Q_OBJECT 28 friend class KFileItemActions; 29 30 public: 31 explicit KFileItemActionsPrivate(KFileItemActions *qq); 32 ~KFileItemActionsPrivate() override; 33 34 int insertServicesSubmenus(const QMap<QString, ServiceList> &list, QMenu *menu, bool isBuiltin); 35 int insertServices(const ServiceList &list, QMenu *menu, bool isBuiltin); 36 37 // For "open with" 38 KService::List associatedApplications(const QString &traderConstraint); 39 QAction *createAppAction(const KService::Ptr &service, bool singleOffer); 40 41 struct ServiceRank { 42 int score; 43 KService::Ptr service; 44 }; 45 46 // Inline function for sorting lists of ServiceRank lessRank(const ServiceRank & id1,const ServiceRank & id2)47 static bool lessRank(const ServiceRank &id1, const ServiceRank &id2) 48 { 49 return id1.score < id2.score; 50 } 51 52 QStringList listMimeTypes(const KFileItemList &items); 53 QStringList listPreferredServiceIds(const QStringList &mimeTypeList, const QStringList &excludedDesktopEntryNames, const QString &traderConstraint); 54 55 QPair<int, QMenu *> addServiceActionsTo(QMenu *mainMenu, const QList<QAction *> &additionalActions, const QStringList &excludeList); 56 int addPluginActionsTo(QMenu *mainMenu, QMenu *actionsMenu, const QStringList &excludeList); 57 void insertOpenWithActionsTo(QAction *before, QMenu *topMenu, const QStringList &excludedDesktopEntryNames, const QString &traderConstraint); 58 static KService::List 59 associatedApplications(const QStringList &mimeTypeList, const QString &traderConstraint, const QStringList &excludedDesktopEntryNames); 60 61 QStringList serviceMenuFilePaths(); 62 63 public Q_SLOTS: 64 void slotRunPreferredApplications(); 65 66 private: 67 void openWithByMime(const KFileItemList &fileItems); 68 69 // Utility function which returns true if the service menu should be displayed 70 bool shouldDisplayServiceMenu(const KConfigGroup &cfg, const QString &protocol) const; 71 // Utility functions which returns true if the types for the service are set and the exclude types are not contained 72 bool checkTypesMatch(const KConfigGroup &cfg) const; 73 74 private Q_SLOTS: 75 // For servicemenus 76 void slotExecuteService(QAction *act); 77 // For "open with" applications 78 void slotRunApplication(QAction *act); 79 void slotOpenWithDialog(); 80 81 public: 82 KFileItemActions *const q; 83 KFileItemListProperties m_props; 84 QStringList m_mimeTypeList; 85 QString m_traderConstraint; 86 KFileItemList m_fileOpenList; 87 QActionGroup m_executeServiceActionGroup; 88 QActionGroup m_runApplicationActionGroup; 89 QWidget *m_parentWidget; 90 KConfig m_config; 91 QHash<QString, KAbstractFileItemActionPlugin *> m_loadedPlugins; 92 }; 93 94 Q_DECLARE_METATYPE(KService::Ptr) 95 Q_DECLARE_METATYPE(KServiceAction) 96 97 #endif /* KFILEITEMACTIONS_P_H */ 98