]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphincontextmenu.h
GIT_SILENT Sync po/docbooks with svn
[dolphin.git] / src / dolphincontextmenu.h
index 3738de1a1b89b4cff13dd5daa755af9aa5bc91a8..f60be558e8a087274bcd8ade34ad8c8464801774 100644 (file)
@@ -1,43 +1,27 @@
-/***************************************************************************
- *   Copyright (C) 2006 by Peter Penz                                      *
- *   peter.penz@gmx.at                                                     *
- *                                                                         *
- *   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.,                                       *
- *   59 Temple Place - Suite 330, Boston, MA  02111-1307, 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 <qpoint.h>
-#include <qstring.h>
-#include <q3valuelist.h>
-#include <q3valuevector.h>
-#include <kservice.h>
-#include <kpropertiesdialog.h>
-#include <kdedesktopmimetype.h>
+#include <KFileCopyToMenu>
+#include <KFileItem>
+#include <KFileItemActions>
+
+#include <QMenu>
+#include <QUrl>
 
-class KMenu;
-class KFileItem;
-class QPoint;
-class QWidget;
-class DolphinView;
+class QAction;
+class DolphinMainWindow;
+class KFileItemListProperties;
+class DolphinRemoveAction;
 
 /**
  * @brief Represents the context menu which appears when doing a right
- * click on an item or the viewport of the file manager.
+ *        click on an item or the viewport of the file manager.
  *
  * Beside static menu entries (e. g. 'Paste' or 'Properties') two
  * dynamic sub menus are shown when opening a context menu above
@@ -46,82 +30,107 @@ class DolphinView;
  *                open items of the given MIME type.
  * - 'Actions':   Contains all actions which can be applied to the
  *                given item.
- *
- *     @author Peter Penz <peter.penz@gmx.at>
  */
-class DolphinContextMenu
+class DolphinContextMenu : public QMenu
 {
+    Q_OBJECT
+
 public:
     /**
-     * @parent    Pointer to the dolphin view the context menu
-     *            belongs to.
-     * @fileInfo  Pointer to the file item the context menu
-     *            is applied. If 0 is passed, the context menu
-     *            is above the viewport.
-     * @pos       Position of the upper left edge of the context menu.
+     * @parent        Pointer to the main window the context menu
+     *                belongs to.
+     * @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(DolphinView* parent,
-                       KFileItem* fileInfo,
-                       const QPoint& pos);
+    DolphinContextMenu(DolphinMainWindow *parent,
+                       const KFileItem &fileInfo,
+                       const KFileItemList &selectedItems,
+                       const QUrl &baseUrl,
+                       KFileItemActions *fileItemActions);
 
-    virtual ~DolphinContextMenu();
+    ~DolphinContextMenu() override;
 
-    /** Opens the context menu modal. */
-    void open();
+protected:
+    bool eventFilter(QObject *object, QEvent *event) override;
 
 private:
-    void openViewportContextMenu();
-    void openItemContextMenu();
+    /**
+     * 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 addAllActions();
+
+    void addTrashContextMenu();
+    void addTrashItemContextMenu();
+    void addItemContextMenu();
+    void addViewportContextMenu();
+
+    void insertDefaultItemActions(const KFileItemListProperties &);
+
+    bool placeExists(const QUrl &url) const;
+
+    QAction *createPasteAction();
+
+    KFileItemListProperties &selectedItemsProperties() const;
 
     /**
-     * Inserts the 'Open With...' submenu to \a popup.
-     * @param popup          Menu where the 'Open With...' sub menu should
-     *                       be added.
-     * @param openWithVector Output parameter which contains all 'Open with...'
-     *                       services.
-     * @return               Identifier of the first 'Open With...' entry.
-     *                       All succeeding identifiers have an increased value of 1
-     *                       to the predecessor.
+     * Returns the file item for m_baseUrl.
      */
-    QList<QAction*> insertOpenWithItems(KMenu* popup,
-                                        Q3ValueVector<KService::Ptr>& openWithVector);
+    KFileItem baseFileItem();
 
     /**
-     * Inserts the 'Actions...' submenu to \a popup.
-     * @param popup          Menu where the 'Actions...' sub menu should
-     *                       be added.
-     * @param openWithVector Output parameter which contains all 'Actions...'
-     *                       services.
+     * Adds "Open With" actions
      */
-    QList<QAction*> insertActionItems(KMenu* popup,
-                                      Q3ValueVector<KDEDesktopMimeType::Service>& actionsVector);
+    void addOpenWithActions();
 
     /**
-     * Returns true, if 'menu' contains already
-     * an entry with the name 'entryName'.
+     * Add services, custom actions, plugins and version control items to the menu
      */
-    bool containsEntry(const KMenu* menu,
-                       const QString& entryName) const;
-
-    enum {
-        submenuID       =   90,
-        bookmarkID      =   91,
-        openWithIDStart =  100,
-        actionsIDStart  = 1000,
-    };
+    void addAdditionalActions(const KFileItemListProperties &props);
 
-    DolphinView* m_dolphinView;
-    KFileItem* m_fileInfo;
-    QPoint m_pos;
+private:
+    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 {
+        NoContext = 0,
+        ItemContext = 1,
+        TrashContext = 2,
+        TimelineContext = 4,
+        SearchContext = 8,
+        RecentlyUsedContext = 16,
+    };
+
+    DolphinMainWindow *m_mainWindow;
+
+    KFileItem m_fileInfo;
+
+    QUrl m_baseUrl;
+    KFileItem *m_baseFileItem; /// File item for m_baseUrl
+
+    KFileItemList m_selectedItems;
+    mutable KFileItemListProperties *m_selectedItemsProperties;
+
+    int m_context;
+    KFileCopyToMenu m_copyToMenu;
+
+    DolphinRemoveAction *m_removeAction; // Action that represents either 'Move To Trash' or 'Delete'
+    KFileItemActions *m_fileItemActions;
 };
 
 #endif