DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
KFileItem* fileInfo,
const KUrl& baseUrl,
- KFileItemList selectedItems) :
+ ViewType viewType) :
m_mainWindow(parent),
m_fileInfo(fileInfo),
m_baseUrl(baseUrl),
- m_selectedItems(selectedItems),
+ m_viewType(viewType),
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);
}
}
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)) {
- bookmarkAction = popup->addAction(KIcon("bookmark-folder"), i18n("Bookmark this folder"));
+ bookmarkAction = popup->addAction(KIcon("bookmark-folder"), i18n("Bookmark folder"));
}
// Insert 'Open With...' sub menu
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());
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'
const QString appName((*it)->name());
if (!containsEntry(openWithMenu, appName)) {
const KIcon icon((*it)->icon());
- QAction *action = openWithMenu->addAction(icon, appName);
+ QAction* action = openWithMenu->addAction(icon, appName);
openWithVector.append(*it);
openWithActions << action;
}
QAction* action = openWithMenu->addAction(i18n("&Other..."));
openWithActions << action;
- popup->addSeparator();
popup->addMenu(openWithMenu);
}
else {
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);
}
{
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
#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
- const QItemSelection selection = m_treeView->selectionModel()->selection();
+ KFileItem* item = m_dirModel->itemForIndex(index);
#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(),
- selectedItems);
+ DolphinContextMenu::SidebarView);
contextMenu.open();
}