]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.h
KFileItemListWidget: wrong selection when renamed file ends with a dot
[dolphin.git] / src / dolphincontextmenu.h
index 3d0005d30a21810546dabd754ea166427ada5870..f60be558e8a087274bcd8ade34ad8c8464801774 100644 (file)
@@ -1,42 +1,23 @@
-/***************************************************************************
- *   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  *
- *   the Free Software Foundation; either version 2 of the License, or     *
- *   (at your option) any later version.                                   *
- *                                                                         *
- *   This program is distributed in the hope that it will be useful,       *
- *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
- *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
- *   GNU General Public License for more details.                          *
- *                                                                         *
- *   You should have received a copy of the GNU General Public License     *
- *   along with this program; if not, write to the                         *
- *   Free Software Foundation, Inc.,                                       *
- *   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA            *
- ***************************************************************************/
+/*
+ * SPDX-FileCopyrightText: 2006 Peter Penz <peter.penz19@gmail.com>
+ *
+ * SPDX-License-Identifier: GPL-2.0-or-later
+ */
 
 #ifndef DOLPHINCONTEXTMENU_H
 #define DOLPHINCONTEXTMENU_H
 
+#include <KFileCopyToMenu>
 #include <KFileItem>
-#include <KService>
-#include <KUrl>
-#include <konq_copytomenu.h>
-
-#include <QObject>
+#include <KFileItemActions>
 
-#include <QVector>
+#include <QMenu>
+#include <QUrl>
 
-#include <QScopedPointer>
-
-class KMenu;
-class KFileItem;
 class QAction;
 class DolphinMainWindow;
-class KFileItemActions;
 class KFileItemListProperties;
+class DolphinRemoveAction;
 
 /**
  * @brief Represents the context menu which appears when doing a right
@@ -50,91 +31,53 @@ class KFileItemListProperties;
  * - 'Actions':   Contains all actions which can be applied to the
  *                given item.
  */
-class DolphinContextMenu : public QObject
+class DolphinContextMenu : public QMenu
 {
     Q_OBJECT
 
 public:
-    enum Command
-    {
-        None,
-        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 KUrl& baseUrl);
-
-    virtual ~DolphinContextMenu();
+    DolphinContextMenu(DolphinMainWindow *parent,
+                       const KFileItem &fileInfo,
+                       const KFileItemList &selectedItems,
+                       const QUrl &baseUrl,
+                       KFileItemActions *fileItemActions);
 
-    void setCustomActions(const QList<QAction*>& actions);
+    ~DolphinContextMenu() override;
 
-    /**
-     * 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);
+protected:
+    bool eventFilter(QObject *object, QEvent *event) override;
 
+private:
     /**
-     * Triggers the 'Delete'-action if the shift-key has been pressed, otherwise
-     * the 'Move to Trash'-action gets triggered.
+     * 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 slotRemoveActionTriggered();
-
-private:
-    void openTrashContextMenu();
-    void openTrashItemContextMenu();
-    void openItemContextMenu();
-    void openViewportContextMenu();
+    void addAllActions();
 
-    void insertDefaultItemActions();
+    void addTrashContextMenu();
+    void addTrashItemContextMenu();
+    void addItemContextMenu();
+    void addViewportContextMenu();
 
-    /**
-     * Adds the "Show menubar" action to the menu if the
-     * menubar is hidden.
-     */
-    void addShowMenuBarAction();
+    void insertDefaultItemActions(const KFileItemListProperties &);
 
-    bool placeExists(const KUrl& url) const;
+    bool placeExists(const QUrl &url) const;
 
-    QActioncreatePasteAction();
+    QAction *createPasteAction();
 
-    KFileItemListPropertiesselectedItemsProperties() const;
+    KFileItemListProperties &selectedItemsProperties() const;
 
     /**
      * Returns the file item for m_baseUrl.
@@ -142,79 +85,52 @@ private:
     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.
+     * Adds "Open With" actions
      */
-    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();
-
-    /**
-     * Updates m_removeAction to represent the 'Delete'-action if the shift-key
-     * 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;
+    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
+        TrashContext = 2,
+        TimelineContext = 4,
+        SearchContext = 8,
+        RecentlyUsedContext = 16,
     };
 
-    QPoint m_pos;
-    DolphinMainWindow* m_mainWindow;
+    DolphinMainWindow *m_mainWindow;
 
     KFileItem m_fileInfo;
 
-    KUrl m_baseUrl;
-    KFileItem* m_baseFileItem;  /// File item for m_baseUrl
+    QUrl m_baseUrl;
+    KFileItem *m_baseFileItem; /// File item for m_baseUrl
 
     KFileItemList m_selectedItems;
-    mutable KFileItemListPropertiesm_selectedItemsProperties;
+    mutable KFileItemListProperties *m_selectedItemsProperties;
 
     int m_context;
-    KonqCopyToMenu m_copyToMenu;
-    QList<QAction*> m_customActions;
-    KMenu* m_popup;
-
-    Command m_command;
+    KFileCopyToMenu m_copyToMenu;
 
-    bool m_shiftPressed;
-    QAction* m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
+    DolphinRemoveAction *m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
+    KFileItemActions *m_fileItemActions;
 };
 
 #endif