]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.h
- Add support for file item actions (see http://reviewboard.kde.org/r/5659/)
[dolphin.git] / src / dolphincontextmenu.h
index ae0d1c336a0c432a4c88d0ef6d60b64881353f22..f0eee235f04bee48682ae8aa3ef33358d2d196b6 100644 (file)
@@ -30,6 +30,8 @@
 
 #include <QtCore/QVector>
 
+#include <QScopedPointer>
+
 class KMenu;
 class KFileItem;
 class QAction;
@@ -54,6 +56,13 @@ class DolphinContextMenu : public QObject
     Q_OBJECT
 
 public:
+    enum Command
+    {
+        None,
+        OpenParentFolderInNewWindow,
+        OpenParentFolderInNewTab
+    };
+
     /**
      * @parent        Pointer to the main window the context menu
      *                belongs to.
@@ -71,8 +80,40 @@ public:
 
     void setCustomActions(const QList<QAction*>& actions);
 
-    /** Opens the context menu model. */
-    void open();
+    /**
+     * 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();
+
+    /**
+     * TODO: This method is a workaround for a X11-issue in combination
+     * with KModifierKeyInfo: When constructing KModifierKeyInfo in the
+     * constructor of the context menu, the user interface might freeze.
+     * To bypass this, the KModifierKeyInfo is constructed in DolphinMainWindow
+     * directly after starting the application. Remove this method, if
+     * the X11-issue got fixed (contact the maintainer of KModifierKeyInfo for
+     * more details).
+     */
+    static void initializeModifierKeyInfo();
+
+private slots:
+    /**
+     * Is invoked if a key modifier has been pressed and updates the context
+     * menu to show the 'Delete' action instead of the 'Move To Trash' action
+     * if the shift-key has been pressed.
+     */
+    void slotKeyModifierPressed(Qt::Key key, bool pressed);
+
+    /**
+     * Triggers the 'Delete'-action if the shift-key has been pressed, otherwise
+     * the 'Move to Trash'-action gets triggered.
+     */
+    void slotRemoveActionTriggered();
 
 private:
     void openTrashContextMenu();
@@ -80,13 +121,13 @@ private:
     void openItemContextMenu();
     void openViewportContextMenu();
 
-    void insertDefaultItemActions(KMenu* popup);
+    void insertDefaultItemActions();
 
     /**
      * Adds the "Show menubar" action to the menu if the
      * menubar is hidden.
      */
-    void addShowMenubarAction(KMenu* menu);
+    void addShowMenubarAction();
 
     /**
      * Returns a name for adding the URL \a url to the Places panel.
@@ -97,11 +138,40 @@ private:
 
     QAction* createPasteAction();
 
-private:
-    KFileItemListProperties& capabilities();
-    void addServiceActions(KMenu* menu, KFileItemActions& fileItemActions);
-    void addVersionControlActions(KMenu* menu);
-    void addCustomActions(KMenu* menu);
+    KFileItemListProperties& selectedItemsProperties();
+
+    /**
+     * Returns the file item for m_baseUrl.
+     */
+    KFileItem baseFileItem();
+
+    /**
+     * Adds actions that have been installed as service-menu.
+     * (see http://techbase.kde.org/index.php?title=Development/Tutorials/Creating_Konqueror_Service_Menus)
+     */
+    void addServiceActions(KFileItemActions& fileItemActions);
+
+    /**
+     * Adds actions that are provided by a KFileItemActionPlugin.
+     */
+    void addFileItemPluginActions();
+
+    /**
+     * Adds actions that are provided by a KVersionControlPlugin.
+     */
+    void addVersionControlPluginActions();
+
+    /**
+     * Adds custom actions e.g. like the "[x] Expandable Folders"-action
+     * provided in the details view.
+     */
+    void addCustomActions();
+
+    /**
+     * Updates m_removeAction to represent the 'Delete'-action if the shift-key
+     * has been pressed. Otherwise it represents the 'Move to Trash'-action.
+     */
+    void updateRemoveAction();
 
 private:
     struct Entry
@@ -122,14 +192,24 @@ private:
     };
 
     DolphinMainWindow* m_mainWindow;
-    KFileItemListProperties* m_capabilities;
+
     KFileItem m_fileInfo;
+
     KUrl m_baseUrl;
+    KFileItem* m_baseFileItem;  /// File item for m_baseUrl
+
     KFileItemList m_selectedItems;
-    KUrl::List m_selectedUrls;
+    KFileItemListProperties* m_selectedItemsProperties;
+
     int m_context;
     KonqCopyToMenu m_copyToMenu;
     QList<QAction*> m_customActions;
+    KMenu* m_popup;
+
+    Command m_command;
+
+    bool m_shiftPressed;
+    QAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
 };
 
 #endif