]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.h
Reimplement handling of Shift while showing menu without KModifierKeyInfo
[dolphin.git] / src / dolphincontextmenu.h
index d6b99105367aece4bf1b012310ea51623603dbd8..1c65fab138307dac0c848ee42c858d07e6393690 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at>                  *
+ *   Copyright (C) 2006 by Peter Penz <peter.penz19@gmail.com>             *
  *                                                                         *
  *   This program is free software; you can redistribute it and/or modify  *
  *   it under the terms of the GNU General Public License as published by  *
 #ifndef DOLPHINCONTEXTMENU_H
 #define DOLPHINCONTEXTMENU_H
 
-#include <kdesktopfileactions.h>
-#include <kfileitem.h>
-#include <kservice.h>
-#include <kurl.h>
+#include <KFileItem>
+#include <KService>
+#include <KUrl>
 #include <konq_copytomenu.h>
+#include <KMenu>
 
-#include <QtCore/QObject>
+#include <QObject>
 
-#include <QtCore/QVector>
+#include <QVector>
 
 #include <QScopedPointer>
 
-class KMenu;
-class KFileItem;
 class QAction;
 class DolphinMainWindow;
 class KFileItemActions;
@@ -51,7 +49,7 @@ class KFileItemListProperties;
  * - 'Actions':   Contains all actions which can be applied to the
  *                given item.
  */
-class DolphinContextMenu : public QObject
+class DolphinContextMenu : public KMenu
 {
     Q_OBJECT
 
@@ -66,6 +64,7 @@ public:
     /**
      * @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.
@@ -73,6 +72,7 @@ public:
      *                should be opened.
      */
     DolphinContextMenu(DolphinMainWindow* parent,
+                       const QPoint& pos,
                        const KFileItem& fileInfo,
                        const KUrl& baseUrl);
 
@@ -90,25 +90,11 @@ public:
      */
     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();
+protected:
+    virtual void keyPressEvent(QKeyEvent *ev);
+    virtual void keyReleaseEvent(QKeyEvent *ev);
 
 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.
@@ -127,28 +113,55 @@ private:
      * Adds the "Show menubar" action to the menu if the
      * menubar is hidden.
      */
-    void addShowMenubarAction();
-
-    /**
-     * Returns a name for adding the URL \a url to the Places panel.
-     */
-    QString placesName(const KUrl& url) const;
+    void addShowMenuBarAction();
 
     bool placeExists(const KUrl& url) const;
 
     QAction* createPasteAction();
 
-    KFileItemListProperties& capabilities();
+    KFileItemListProperties& selectedItemsProperties() const;
+
+    /**
+     * 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);
-    void addVersionControlActions();
+
+    /**
+     * 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.
+     * has been pressed or the selection is not local. Otherwise it represents
+     * the 'Move to Trash'-action.
      */
     void updateRemoveAction();
 
+    /**
+     * @return True if a moving to the trash should be done instead of
+     *         deleting the selected items.
+     * @see updateRemoveAction(), slotRemoveActionTriggered()
+     */
+    bool moveToTrash() const;
+
 private:
     struct Entry
     {
@@ -167,16 +180,20 @@ private:
         TrashContext = 2
     };
 
+    QPoint m_pos;
     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;
+    mutable KFileItemListProperties* m_selectedItemsProperties;
+
     int m_context;
     KonqCopyToMenu m_copyToMenu;
     QList<QAction*> m_customActions;
-    QScopedPointer<KMenu> m_popup;
 
     Command m_command;