]> cloud.milkyroute.net Git - dolphin.git/commitdiff
Let's keep it simple: only offer a basic context menu for the treeview sidebar.
authorPeter Penz <peter.penz19@gmail.com>
Fri, 16 Mar 2007 00:24:56 +0000 (00:24 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Fri, 16 Mar 2007 00:24:56 +0000 (00:24 +0000)
svn path=/trunk/KDE/kdebase/apps/; revision=642982

src/dolphincontextmenu.cpp
src/dolphincontextmenu.h
src/dolphinview.cpp
src/treeviewsidebarpage.cpp

index 915f7e3e1be5c8dfc2a144ac2b879bc793b85c43..2475c68bcf19ed93d2996663bbf4e34d8100c4ea 100644 (file)
 DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
                                        KFileItem* fileInfo,
                                        const KUrl& baseUrl,
 DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
                                        KFileItem* fileInfo,
                                        const KUrl& baseUrl,
-                                       KFileItemList selectedItems) :
+                                       ViewType viewType) :
     m_mainWindow(parent),
     m_fileInfo(fileInfo),
     m_baseUrl(baseUrl),
     m_mainWindow(parent),
     m_fileInfo(fileInfo),
     m_baseUrl(baseUrl),
-    m_selectedItems(selectedItems),
+    m_viewType(viewType),
     m_context(NoContext)
 {
     m_context(NoContext)
 {
-    // The context menu either accesses the URLs of the selected items
-    // or the items itself. To increase the performance the URLs are cached.
-    KFileItemList::const_iterator it = selectedItems.begin();
-    const KFileItemList::const_iterator end = selectedItems.end();
-    while (it != end) {
-        KFileItem* item = *it;
-        m_selectedUrls.append(item->url());
-        ++it;
+    if (viewType == ItemsView) {
+        // The context menu either accesses the URLs of the selected items
+        // or the items itself. To increase the performance both lists are cached.
+        DolphinView* view = m_mainWindow->activeView();
+        m_selectedUrls = view->selectedUrls();
+        m_selectedItems = view->selectedItems();
+    }
+    else if (fileInfo != 0) {
+        m_selectedUrls.append(fileInfo->url());
+        m_selectedItems.append(fileInfo);
     }
 }
 
     }
 }
 
@@ -157,12 +159,16 @@ void DolphinContextMenu::openItemContextMenu()
     Q_ASSERT(m_fileInfo != 0);
 
     KMenu* popup = new KMenu(m_mainWindow);
     Q_ASSERT(m_fileInfo != 0);
 
     KMenu* popup = new KMenu(m_mainWindow);
-    insertDefaultItemActions(popup);
+    if (m_viewType == ItemsView) {
+        insertDefaultItemActions(popup);
+    }
+
+    popup->addSeparator();
 
     // insert 'Bookmark this folder' entry if exactly one item is selected
     QAction* bookmarkAction = 0;
     if (m_fileInfo->isDir() && (m_selectedUrls.count() == 1)) {
 
     // insert 'Bookmark this folder' entry if exactly one item is selected
     QAction* bookmarkAction = 0;
     if (m_fileInfo->isDir() && (m_selectedUrls.count() == 1)) {
-        bookmarkAction = popup->addAction(KIcon("bookmark-folder"), i18n("Bookmark this folder"));
+        bookmarkAction = popup->addAction(KIcon("bookmark-folder"), i18n("Bookmark folder"));
     }
 
     // Insert 'Open With...' sub menu
     }
 
     // Insert 'Open With...' sub menu
@@ -174,9 +180,11 @@ void DolphinContextMenu::openItemContextMenu()
     const QList<QAction*> serviceActions = insertActionItems(popup, actionsVector);
     popup->addSeparator();
 
     const QList<QAction*> serviceActions = insertActionItems(popup, actionsVector);
     popup->addSeparator();
 
-    // insert 'Properties...' entry
-    QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
-    popup->addAction(propertiesAction);
+    if (m_viewType == ItemsView) {
+        // insert 'Properties...' entry
+        QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
+        popup->addAction(propertiesAction);
+    }
 
     QAction* activatedAction = popup->exec(QCursor::pos());
 
 
     QAction* activatedAction = popup->exec(QCursor::pos());
 
@@ -277,19 +285,12 @@ void DolphinContextMenu::insertDefaultItemActions(KMenu* popup)
     Q_ASSERT(popup != 0);
 
     // insert 'Cut', 'Copy' and 'Paste'
     Q_ASSERT(popup != 0);
 
     // insert 'Cut', 'Copy' and 'Paste'
-    const KStandardAction::StandardAction actionNames[] = {
-        KStandardAction::Cut,
-        KStandardAction::Copy,
-        KStandardAction::Paste
-    };
-
-    const int count = sizeof(actionNames) / sizeof(KStandardAction::StandardAction);
-    for (int i = 0; i < count; ++i) {
-        QAction* action = m_mainWindow->actionCollection()->action(KStandardAction::stdName(actionNames[i]));
-        if (action != 0) {
-            popup->addAction(action);
-        }
-    }
+    QAction* cutAction   = m_mainWindow->actionCollection()->action(KStandardAction::stdName(KStandardAction::Cut));
+    QAction* copyAction  = m_mainWindow->actionCollection()->action(KStandardAction::stdName(KStandardAction::Copy));
+    QAction* pasteAction = m_mainWindow->actionCollection()->action(KStandardAction::stdName(KStandardAction::Paste));
+    popup->addAction(cutAction);
+    popup->addAction(copyAction);
+    popup->addAction(pasteAction);
     popup->addSeparator();
 
     // insert 'Rename'
     popup->addSeparator();
 
     // insert 'Rename'
@@ -354,7 +355,7 @@ QList<QAction*> DolphinContextMenu::insertOpenWithItems(KMenu* popup,
                 const QString appName((*it)->name());
                 if (!containsEntry(openWithMenu, appName)) {
                     const KIcon icon((*it)->icon());
                 const QString appName((*it)->name());
                 if (!containsEntry(openWithMenu, appName)) {
                     const KIcon icon((*it)->icon());
-                    QAction *action = openWithMenu->addAction(icon, appName);
+                    QActionaction = openWithMenu->addAction(icon, appName);
                     openWithVector.append(*it);
                     openWithActions << action;
                 }
                     openWithVector.append(*it);
                     openWithActions << action;
                 }
@@ -364,7 +365,6 @@ QList<QAction*> DolphinContextMenu::insertOpenWithItems(KMenu* popup,
             QAction* action = openWithMenu->addAction(i18n("&Other..."));
 
             openWithActions << action;
             QAction* action = openWithMenu->addAction(i18n("&Other..."));
 
             openWithActions << action;
-            popup->addSeparator();
             popup->addMenu(openWithMenu);
         }
         else {
             popup->addMenu(openWithMenu);
         }
         else {
@@ -378,7 +378,6 @@ QList<QAction*> DolphinContextMenu::insertOpenWithItems(KMenu* popup,
     else {
         // At least one of the selected items has a different MIME type. In this case
         // just show a disabled "Open With..." entry.
     else {
         // At least one of the selected items has a different MIME type. In this case
         // just show a disabled "Open With..." entry.
-        popup->addSeparator();
         QAction* action = popup->addAction(i18n("Open With..."));
         action->setEnabled(false);
     }
         QAction* action = popup->addAction(i18n("Open With..."));
         action->setEnabled(false);
     }
index 7e3476a4c9bfb7dc00aee32a2715f320e3ac4ad5..09288c6026630eb60b72cfb2d09f368c63172330 100644 (file)
@@ -48,6 +48,12 @@ class DolphinMainWindow;
 class DolphinContextMenu
 {
 public:
 class DolphinContextMenu
 {
 public:
+    enum ViewType
+    {
+        ItemsView,
+        SidebarView
+    };
+
     /**
      * @parent        Pointer to the main window the context menu
      *                belongs to.
     /**
      * @parent        Pointer to the main window the context menu
      *                belongs to.
@@ -56,13 +62,12 @@ public:
      *                is above the viewport.
      * @baseUrl       Base URL of the viewport where the context menu
      *                should be opened.
      *                is above the viewport.
      * @baseUrl       Base URL of the viewport where the context menu
      *                should be opened.
-     * @selectedItems Selected items where the actions of the context menu
-     *                are applied.
+     * @viewType      On which view type is the context menu shown.
      */
     DolphinContextMenu(DolphinMainWindow* parent,
                        KFileItem* fileInfo,
                        const KUrl& baseUrl,
      */
     DolphinContextMenu(DolphinMainWindow* parent,
                        KFileItem* fileInfo,
                        const KUrl& baseUrl,
-                       KFileItemList selectedItems);
+                       ViewType viewType = ItemsView);
 
     virtual ~DolphinContextMenu();
 
 
     virtual ~DolphinContextMenu();
 
@@ -128,6 +133,7 @@ private:
     KUrl m_baseUrl;
     KFileItemList m_selectedItems;
     KUrl::List m_selectedUrls;
     KUrl m_baseUrl;
     KFileItemList m_selectedItems;
     KUrl::List m_selectedUrls;
+    ViewType m_viewType;
     int m_context;
 };
 
     int m_context;
 };
 
index 8f06d3dc84224b9be6af51a5bc47fa4b52e08e6e..994f03b6e86280b4456cca1fe13a4da4edc27721 100644 (file)
@@ -973,10 +973,7 @@ void DolphinView::openContextMenu(const QPoint& pos)
         item = fileItem(index);
     }
 
         item = fileItem(index);
     }
 
-    DolphinContextMenu contextMenu(m_mainWindow,
-                                   item,
-                                   url(),
-                                   selectedItems());
+    DolphinContextMenu contextMenu(m_mainWindow, item, url());
     contextMenu.open();
 }
 
     contextMenu.open();
 }
 
index 65b0687e8e619c7ad3da8f7d54f4efeb38dc34f7..b7c1f1f537b619e19c1f8d4e49b98cc4804f9e93 100644 (file)
@@ -108,12 +108,6 @@ void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event)
 {
     SidebarPage::contextMenuEvent(event);
 
 {
     SidebarPage::contextMenuEvent(event);
 
-    // TODO: temporary deactivate the following code, as the wrong
-    // selection of cut/copy/paste actions is very confusing:
-    return;
-
-    KFileItem* item = 0;
-
     const QModelIndex index = m_treeView->indexAt(event->pos());
     if (!index.isValid()) {
         // only open a context menu above a directory item
     const QModelIndex index = m_treeView->indexAt(event->pos());
     if (!index.isValid()) {
         // only open a context menu above a directory item
@@ -122,35 +116,15 @@ void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* event)
 
 #if defined(USE_PROXY_MODEL)
     const QModelIndex dirModelIndex = m_proxyModel->mapToSource(index);
 
 #if defined(USE_PROXY_MODEL)
     const QModelIndex dirModelIndex = m_proxyModel->mapToSource(index);
-    item = m_dirModel->itemForIndex(dirModelIndex);
-#else
-    item = m_dirModel->itemForIndex(index);
-#endif
-
-#if defined(USE_PROXY_MODEL)
-    const QItemSelection selection = m_proxyModel->mapSelectionToSource(
-                                                   m_treeView->selectionModel()->selection());
+    KFileItem* item = m_dirModel->itemForIndex(dirModelIndex);
 #else
 #else
-    const QItemSelection selection = m_treeView->selectionModel()->selection();
+    KFileItem* item = m_dirModel->itemForIndex(index);
 #endif
 
 #endif
 
-    KFileItemList selectedItems;
-
-    const QModelIndexList indexList = selection.indexes();
-    QModelIndexList::const_iterator end = indexList.end();
-    for (QModelIndexList::const_iterator it = indexList.begin(); it != end; ++it) {
-        Q_ASSERT((*it).isValid());
-
-        KFileItem* item = m_dirModel->itemForIndex(*it);
-        if (item != 0) {
-            selectedItems.append(item);
-        }
-    }
-
     DolphinContextMenu contextMenu(mainWindow(),
                                    item,
                                    m_dirLister->url(),
     DolphinContextMenu contextMenu(mainWindow(),
                                    item,
                                    m_dirLister->url(),
-                                   selectedItems);
+                                   DolphinContextMenu::SidebarView);
     contextMenu.open();
 }
 
     contextMenu.open();
 }