#include <KFileCopyToMenu>
#include <KFileItem>
+#include <KFileItemActions>
#include <QMenu>
#include <QUrl>
class QAction;
class DolphinMainWindow;
-class KFileItemActions;
class KFileItemListProperties;
class DolphinRemoveAction;
Q_OBJECT
public:
- enum Command
- {
- None,
- OpenParentFolder,
- OpenParentFolderInNewWindow,
- OpenParentFolderInNewTab
- };
-
/**
* @parent Pointer to the main window the context menu
* belongs to.
- * @pos Position in screen coordinates.
* @fileInfo Pointer to the file item the context menu
* is applied. If 0 is passed, the context menu
* is above the viewport.
+ * @selectedItems The selected items for which the context menu
+ * is opened. This list generally includes \a fileInfo.
* @baseUrl Base URL of the viewport where the context menu
* should be opened.
*/
- DolphinContextMenu(DolphinMainWindow* parent,
- const QPoint& pos,
- const KFileItem& fileInfo,
- const QUrl& baseUrl);
+ DolphinContextMenu(DolphinMainWindow *parent,
+ const KFileItem &fileInfo,
+ const KFileItemList &selectedItems,
+ const QUrl &baseUrl,
+ KFileItemActions *fileItemActions);
~DolphinContextMenu() override;
- void setCustomActions(const QList<QAction*>& actions);
-
- /**
- * Opens the context menu model and returns the requested
- * command, that should be triggered by the caller. If
- * Command::None has been returned, either the context-menu
- * had been closed without executing an action or an
- * already available action from the main-window has been
- * executed.
- */
- Command open();
-
protected:
- void keyPressEvent(QKeyEvent *ev) override;
- void keyReleaseEvent(QKeyEvent *ev) override;
+ bool eventFilter(QObject *object, QEvent *event) override;
private:
- void openTrashContextMenu();
- void openTrashItemContextMenu();
- void openItemContextMenu();
- void openViewportContextMenu();
-
- void insertDefaultItemActions(const KFileItemListProperties&);
-
/**
- * Adds the "Show menubar" action to the menu if the
- * menubar is hidden.
+ * Adds all the actions and menus to this menu based on all given information.
+ * This method calls the other helper methods for adding actions
+ * based on the context given in the constructor.
*/
- void addShowMenuBarAction();
+ void addAllActions();
- bool placeExists(const QUrl& url) const;
+ void addTrashContextMenu();
+ void addTrashItemContextMenu();
+ void addItemContextMenu();
+ void addViewportContextMenu();
- QAction* createPasteAction();
+ void insertDefaultItemActions(const KFileItemListProperties &);
- KFileItemListProperties& selectedItemsProperties() const;
+ bool placeExists(const QUrl &url) const;
+
+ QAction *createPasteAction();
+
+ KFileItemListProperties &selectedItemsProperties() const;
/**
* Returns the file item for m_baseUrl.
/**
* Adds "Open With" actions
*/
- void addOpenWithActions(KFileItemActions& fileItemActions);
-
- /**
- * Adds actions that are provided by a KVersionControlPlugin.
- */
- void addVersionControlPluginActions();
+ void addOpenWithActions();
/**
- * Adds custom actions e.g. like the "[x] Expandable Folders"-action
- * provided in the details view.
+ * Add services, custom actions, plugins and version control items to the menu
*/
- void addCustomActions();
+ void addAdditionalActions(const KFileItemListProperties &props);
private:
- struct Entry
- {
+ void addDirectoryItemContextMenu();
+ void addOpenParentFolderActions();
+
+ struct Entry {
int type;
QString name;
- QString filePath; // empty for separator
+ QString filePath; // empty for separator
QString templatePath; // same as filePath for template
QString icon;
QString comment;
};
- enum ContextType
- {
+ enum ContextType {
NoContext = 0,
ItemContext = 1,
TrashContext = 2,
TimelineContext = 4,
SearchContext = 8,
+ RecentlyUsedContext = 16,
};
- QPoint m_pos;
- DolphinMainWindow* m_mainWindow;
+ DolphinMainWindow *m_mainWindow;
KFileItem m_fileInfo;
QUrl m_baseUrl;
- KFileItem* m_baseFileItem; /// File item for m_baseUrl
+ KFileItem *m_baseFileItem; /// File item for m_baseUrl
KFileItemList m_selectedItems;
- mutable KFileItemListProperties* m_selectedItemsProperties;
+ mutable KFileItemListProperties *m_selectedItemsProperties;
int m_context;
KFileCopyToMenu m_copyToMenu;
- QList<QAction*> m_customActions;
-
- Command m_command;
-
- DolphinRemoveAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
- void addDirectoryItemContextMenu(KFileItemActions &fileItemActions);
+ DolphinRemoveAction *m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
+ KFileItemActions *m_fileItemActions;
};
#endif