mirror of
https://invent.kde.org/system/dolphin
synced 2024-10-28 03:21:56 +00:00
Don't force the context menu to be valid only for DolphinView instances, make it possible to have it also inside the treeview sidebar.
svn path=/trunk/KDE/kdebase/apps/; revision=642953
This commit is contained in:
parent
242bda1ead
commit
1cdb64a12b
|
@ -45,37 +45,38 @@
|
||||||
|
|
||||||
#include <QDir>
|
#include <QDir>
|
||||||
|
|
||||||
DolphinContextMenu::DolphinContextMenu(DolphinView* parent,
|
DolphinContextMenu::DolphinContextMenu(DolphinMainWindow* parent,
|
||||||
KFileItem* fileInfo) :
|
KFileItem* fileInfo,
|
||||||
m_dolphinView(parent),
|
const KUrl& baseUrl,
|
||||||
m_fileInfo(fileInfo),
|
KFileItemList selectedItems) :
|
||||||
m_context(NoContext)
|
m_mainWindow(parent),
|
||||||
|
m_fileInfo(fileInfo),
|
||||||
|
m_baseUrl(baseUrl),
|
||||||
|
m_selectedItems(selectedItems),
|
||||||
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DolphinContextMenu::open()
|
void DolphinContextMenu::open()
|
||||||
{
|
{
|
||||||
// get the context information
|
// get the context information
|
||||||
const KUrl& url = m_dolphinView->url();
|
if (m_baseUrl.protocol() == "trash") {
|
||||||
if (url.protocol() == "trash") {
|
|
||||||
m_context |= TrashContext;
|
m_context |= TrashContext;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (m_fileInfo != 0) {
|
if (m_fileInfo != 0) {
|
||||||
m_context |= ItemContext;
|
m_context |= ItemContext;
|
||||||
|
|
||||||
// TODO: handle other use cases like devices + desktop files
|
// TODO: handle other use cases like devices + desktop files
|
||||||
/*
|
}
|
||||||
const KUrl::List urls = m_dolphinView->selectedUrls();
|
|
||||||
|
|
||||||
KUrl::List::const_iterator it = urls.begin();
|
|
||||||
KUrl::List::const_iterator end = urls.end();
|
|
||||||
while (it != end) {
|
|
||||||
const KUrl& url = *it;
|
|
||||||
|
|
||||||
++it;
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
// open the corresponding popup for the context
|
// open the corresponding popup for the context
|
||||||
if (m_context & TrashContext) {
|
if (m_context & TrashContext) {
|
||||||
|
@ -103,26 +104,25 @@ void DolphinContextMenu::openTrashContextMenu()
|
||||||
{
|
{
|
||||||
Q_ASSERT(m_context & TrashContext);
|
Q_ASSERT(m_context & TrashContext);
|
||||||
|
|
||||||
KMenu* popup = new KMenu(m_dolphinView);
|
KMenu* popup = new KMenu(m_mainWindow);
|
||||||
|
|
||||||
QAction* emptyTrashAction = new QAction(KIcon("user-trash"), i18n("Emtpy Trash"), popup);
|
QAction* emptyTrashAction = new QAction(KIcon("user-trash"), i18n("Emtpy Trash"), popup);
|
||||||
KConfig trashConfig("trashrc", KConfig::OnlyLocal);
|
KConfig trashConfig("trashrc", KConfig::OnlyLocal);
|
||||||
emptyTrashAction->setEnabled(!trashConfig.group("Status").readEntry("Empty", true));
|
emptyTrashAction->setEnabled(!trashConfig.group("Status").readEntry("Empty", true));
|
||||||
popup->addAction(emptyTrashAction);
|
popup->addAction(emptyTrashAction);
|
||||||
|
|
||||||
DolphinMainWindow* mainWindow = m_dolphinView->mainWindow();
|
QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
|
||||||
QAction* propertiesAction = mainWindow->actionCollection()->action("properties");
|
|
||||||
popup->addAction(propertiesAction);
|
popup->addAction(propertiesAction);
|
||||||
|
|
||||||
if (popup->exec(QCursor::pos()) == emptyTrashAction) {
|
if (popup->exec(QCursor::pos()) == emptyTrashAction) {
|
||||||
const QString text(i18n("Do you really want to empty the Trash? All items will get deleted."));
|
const QString text(i18n("Do you really want to empty the Trash? All items will get deleted."));
|
||||||
const bool del = KMessageBox::warningContinueCancel(mainWindow,
|
const bool del = KMessageBox::warningContinueCancel(m_mainWindow,
|
||||||
text,
|
text,
|
||||||
QString(),
|
QString(),
|
||||||
KGuiItem(i18n("Empty Trash"), KIcon("user-trash"))
|
KGuiItem(i18n("Empty Trash"), KIcon("user-trash"))
|
||||||
) == KMessageBox::Continue;
|
) == KMessageBox::Continue;
|
||||||
if (del) {
|
if (del) {
|
||||||
KonqOperations::emptyTrash(m_dolphinView);
|
KonqOperations::emptyTrash(m_mainWindow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,21 +134,19 @@ void DolphinContextMenu::openTrashItemContextMenu()
|
||||||
Q_ASSERT(m_context & TrashContext);
|
Q_ASSERT(m_context & TrashContext);
|
||||||
Q_ASSERT(m_context & ItemContext);
|
Q_ASSERT(m_context & ItemContext);
|
||||||
|
|
||||||
KMenu* popup = new KMenu(m_dolphinView);
|
KMenu* popup = new KMenu(m_mainWindow);
|
||||||
|
|
||||||
DolphinMainWindow* mainWindow = m_dolphinView->mainWindow();
|
QAction* restoreAction = new QAction(i18n("Restore"), m_mainWindow);
|
||||||
QAction* restoreAction = new QAction(i18n("Restore"), m_dolphinView);
|
|
||||||
popup->addAction(restoreAction);
|
popup->addAction(restoreAction);
|
||||||
|
|
||||||
QAction* deleteAction = mainWindow->actionCollection()->action("delete");
|
QAction* deleteAction = m_mainWindow->actionCollection()->action("delete");
|
||||||
popup->addAction(deleteAction);
|
popup->addAction(deleteAction);
|
||||||
|
|
||||||
QAction* propertiesAction = mainWindow->actionCollection()->action("properties");
|
QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
|
||||||
popup->addAction(propertiesAction);
|
popup->addAction(propertiesAction);
|
||||||
|
|
||||||
if (popup->exec(QCursor::pos()) == restoreAction) {
|
if (popup->exec(QCursor::pos()) == restoreAction) {
|
||||||
const KUrl::List urls = m_dolphinView->selectedUrls();
|
KonqOperations::restoreTrashedItems(m_selectedUrls, m_mainWindow);
|
||||||
KonqOperations::restoreTrashedItems(urls, m_dolphinView);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
popup->deleteLater();
|
popup->deleteLater();
|
||||||
|
@ -158,15 +156,12 @@ void DolphinContextMenu::openItemContextMenu()
|
||||||
{
|
{
|
||||||
Q_ASSERT(m_fileInfo != 0);
|
Q_ASSERT(m_fileInfo != 0);
|
||||||
|
|
||||||
KMenu* popup = new KMenu(m_dolphinView);
|
KMenu* popup = new KMenu(m_mainWindow);
|
||||||
insertDefaultItemActions(popup);
|
insertDefaultItemActions(popup);
|
||||||
|
|
||||||
DolphinMainWindow* mainWindow = m_dolphinView->mainWindow();
|
|
||||||
const KUrl::List urls = m_dolphinView->selectedUrls();
|
|
||||||
|
|
||||||
// insert 'Bookmark this folder' entry if exactly one item is selected
|
// insert 'Bookmark this folder' entry if exactly one item is selected
|
||||||
QAction* bookmarkAction = 0;
|
QAction* bookmarkAction = 0;
|
||||||
if (m_fileInfo->isDir() && (urls.count() == 1)) {
|
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 this folder"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -180,7 +175,7 @@ void DolphinContextMenu::openItemContextMenu()
|
||||||
popup->addSeparator();
|
popup->addSeparator();
|
||||||
|
|
||||||
// insert 'Properties...' entry
|
// insert 'Properties...' entry
|
||||||
QAction* propertiesAction = mainWindow->actionCollection()->action("properties");
|
QAction* propertiesAction = m_mainWindow->actionCollection()->action("properties");
|
||||||
popup->addAction(propertiesAction);
|
popup->addAction(propertiesAction);
|
||||||
|
|
||||||
QAction* activatedAction = popup->exec(QCursor::pos());
|
QAction* activatedAction = popup->exec(QCursor::pos());
|
||||||
|
@ -201,18 +196,18 @@ void DolphinContextMenu::openItemContextMenu()
|
||||||
else if (serviceActions.contains(activatedAction)) {
|
else if (serviceActions.contains(activatedAction)) {
|
||||||
// one of the 'Actions' items has been selected
|
// one of the 'Actions' items has been selected
|
||||||
int id = serviceActions.indexOf(activatedAction);
|
int id = serviceActions.indexOf(activatedAction);
|
||||||
KDEDesktopMimeType::executeService(urls, actionsVector[id]);
|
KDEDesktopMimeType::executeService(m_selectedUrls, actionsVector[id]);
|
||||||
}
|
}
|
||||||
else if (openWithActions.contains(activatedAction)) {
|
else if (openWithActions.contains(activatedAction)) {
|
||||||
// one of the 'Open With' items has been selected
|
// one of the 'Open With' items has been selected
|
||||||
if (openWithActions.last() == activatedAction) {
|
if (openWithActions.last() == activatedAction) {
|
||||||
// the item 'Other...' has been selected
|
// the item 'Other...' has been selected
|
||||||
KRun::displayOpenWithDialog(urls, m_dolphinView);
|
KRun::displayOpenWithDialog(m_selectedUrls, m_mainWindow);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
int id = openWithActions.indexOf(activatedAction);
|
int id = openWithActions.indexOf(activatedAction);
|
||||||
KService::Ptr servicePtr = openWithVector[id];
|
KService::Ptr servicePtr = openWithVector[id];
|
||||||
KRun::run(*servicePtr, urls, m_dolphinView);
|
KRun::run(*servicePtr, m_selectedUrls, m_mainWindow);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -224,29 +219,28 @@ void DolphinContextMenu::openItemContextMenu()
|
||||||
void DolphinContextMenu::openViewportContextMenu()
|
void DolphinContextMenu::openViewportContextMenu()
|
||||||
{
|
{
|
||||||
Q_ASSERT(m_fileInfo == 0);
|
Q_ASSERT(m_fileInfo == 0);
|
||||||
DolphinMainWindow* mainWindow = m_dolphinView->mainWindow();
|
KMenu* popup = new KMenu(m_mainWindow);
|
||||||
KMenu* popup = new KMenu(m_dolphinView);
|
|
||||||
|
|
||||||
// setup 'Create New' menu
|
// setup 'Create New' menu
|
||||||
KNewMenu* newMenu = mainWindow->newMenu();
|
KNewMenu* newMenu = m_mainWindow->newMenu();
|
||||||
newMenu->slotCheckUpToDate();
|
newMenu->slotCheckUpToDate();
|
||||||
newMenu->setPopupFiles(m_dolphinView->url());
|
newMenu->setPopupFiles(m_baseUrl);
|
||||||
popup->addMenu(newMenu->menu());
|
popup->addMenu(newMenu->menu());
|
||||||
popup->addSeparator();
|
popup->addSeparator();
|
||||||
|
|
||||||
QAction* pasteAction = mainWindow->actionCollection()->action(KStandardAction::stdName(KStandardAction::Paste));
|
QAction* pasteAction = m_mainWindow->actionCollection()->action(KStandardAction::stdName(KStandardAction::Paste));
|
||||||
popup->addAction(pasteAction);
|
popup->addAction(pasteAction);
|
||||||
|
|
||||||
// setup 'View Mode' menu
|
// setup 'View Mode' menu
|
||||||
KMenu* viewModeMenu = new KMenu(i18n("View Mode"));
|
KMenu* viewModeMenu = new KMenu(i18n("View Mode"));
|
||||||
|
|
||||||
QAction* iconsMode = mainWindow->actionCollection()->action("icons");
|
QAction* iconsMode = m_mainWindow->actionCollection()->action("icons");
|
||||||
viewModeMenu->addAction(iconsMode);
|
viewModeMenu->addAction(iconsMode);
|
||||||
|
|
||||||
QAction* detailsMode = mainWindow->actionCollection()->action("details");
|
QAction* detailsMode = m_mainWindow->actionCollection()->action("details");
|
||||||
viewModeMenu->addAction(detailsMode);
|
viewModeMenu->addAction(detailsMode);
|
||||||
|
|
||||||
QAction* previewsMode = mainWindow->actionCollection()->action("previews");
|
QAction* previewsMode = m_mainWindow->actionCollection()->action("previews");
|
||||||
viewModeMenu->addAction(previewsMode);
|
viewModeMenu->addAction(previewsMode);
|
||||||
|
|
||||||
popup->addMenu(viewModeMenu);
|
popup->addMenu(viewModeMenu);
|
||||||
|
@ -259,10 +253,10 @@ void DolphinContextMenu::openViewportContextMenu()
|
||||||
|
|
||||||
QAction* activatedAction = popup->exec(QCursor::pos());
|
QAction* activatedAction = popup->exec(QCursor::pos());
|
||||||
if (activatedAction == propertiesAction) {
|
if (activatedAction == propertiesAction) {
|
||||||
new KPropertiesDialog(mainWindow->activeView()->url());
|
new KPropertiesDialog(m_mainWindow->activeView()->url());
|
||||||
}
|
}
|
||||||
else if (activatedAction == bookmarkAction) {
|
else if (activatedAction == bookmarkAction) {
|
||||||
const KUrl& url = mainWindow->activeView()->url();
|
const KUrl& url = m_mainWindow->activeView()->url();
|
||||||
KBookmark bookmark = EditBookmarkDialog::getBookmark(i18n("Add folder as bookmark"),
|
KBookmark bookmark = EditBookmarkDialog::getBookmark(i18n("Add folder as bookmark"),
|
||||||
url.fileName(),
|
url.fileName(),
|
||||||
url,
|
url,
|
||||||
|
@ -282,9 +276,6 @@ void DolphinContextMenu::insertDefaultItemActions(KMenu* popup)
|
||||||
{
|
{
|
||||||
Q_ASSERT(popup != 0);
|
Q_ASSERT(popup != 0);
|
||||||
|
|
||||||
DolphinMainWindow* mainWindow = m_dolphinView->mainWindow();
|
|
||||||
const KUrl::List urls = m_dolphinView->selectedUrls();
|
|
||||||
|
|
||||||
// insert 'Cut', 'Copy' and 'Paste'
|
// insert 'Cut', 'Copy' and 'Paste'
|
||||||
const KStandardAction::StandardAction actionNames[] = {
|
const KStandardAction::StandardAction actionNames[] = {
|
||||||
KStandardAction::Cut,
|
KStandardAction::Cut,
|
||||||
|
@ -294,7 +285,7 @@ void DolphinContextMenu::insertDefaultItemActions(KMenu* popup)
|
||||||
|
|
||||||
const int count = sizeof(actionNames) / sizeof(KStandardAction::StandardAction);
|
const int count = sizeof(actionNames) / sizeof(KStandardAction::StandardAction);
|
||||||
for (int i = 0; i < count; ++i) {
|
for (int i = 0; i < count; ++i) {
|
||||||
QAction* action = mainWindow->actionCollection()->action(KStandardAction::stdName(actionNames[i]));
|
QAction* action = m_mainWindow->actionCollection()->action(KStandardAction::stdName(actionNames[i]));
|
||||||
if (action != 0) {
|
if (action != 0) {
|
||||||
popup->addAction(action);
|
popup->addAction(action);
|
||||||
}
|
}
|
||||||
|
@ -302,16 +293,16 @@ void DolphinContextMenu::insertDefaultItemActions(KMenu* popup)
|
||||||
popup->addSeparator();
|
popup->addSeparator();
|
||||||
|
|
||||||
// insert 'Rename'
|
// insert 'Rename'
|
||||||
QAction* renameAction = mainWindow->actionCollection()->action("rename");
|
QAction* renameAction = m_mainWindow->actionCollection()->action("rename");
|
||||||
popup->addAction(renameAction);
|
popup->addAction(renameAction);
|
||||||
|
|
||||||
// insert 'Move to Trash' and (optionally) 'Delete'
|
// insert 'Move to Trash' and (optionally) 'Delete'
|
||||||
const KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig("kdeglobals", KConfig::NoGlobals);
|
const KSharedConfig::Ptr globalConfig = KSharedConfig::openConfig("kdeglobals", KConfig::NoGlobals);
|
||||||
const KConfigGroup kdeConfig(globalConfig, "KDE");
|
const KConfigGroup kdeConfig(globalConfig, "KDE");
|
||||||
bool showDeleteCommand = kdeConfig.readEntry("ShowDeleteCommand", false);
|
bool showDeleteCommand = kdeConfig.readEntry("ShowDeleteCommand", false);
|
||||||
const KUrl& url = mainWindow->activeView()->url();
|
const KUrl& url = m_mainWindow->activeView()->url();
|
||||||
if (url.isLocalFile()) {
|
if (url.isLocalFile()) {
|
||||||
QAction* moveToTrashAction = mainWindow->actionCollection()->action("move_to_trash");
|
QAction* moveToTrashAction = m_mainWindow->actionCollection()->action("move_to_trash");
|
||||||
popup->addAction(moveToTrashAction);
|
popup->addAction(moveToTrashAction);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
@ -319,7 +310,7 @@ void DolphinContextMenu::insertDefaultItemActions(KMenu* popup)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showDeleteCommand) {
|
if (showDeleteCommand) {
|
||||||
QAction* deleteAction = mainWindow->actionCollection()->action("delete");
|
QAction* deleteAction = m_mainWindow->actionCollection()->action("delete");
|
||||||
popup->addAction(deleteAction);
|
popup->addAction(deleteAction);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -336,12 +327,10 @@ QList<QAction*> DolphinContextMenu::insertOpenWithItems(KMenu* popup,
|
||||||
// are listed which are registered to open the item. As last entry "Other..." will be
|
// are listed which are registered to open the item. As last entry "Other..." will be
|
||||||
// attached which allows to select a custom application. If no applications are registered
|
// attached which allows to select a custom application. If no applications are registered
|
||||||
// no sub menu is created at all, only "Open With..." will be offered.
|
// no sub menu is created at all, only "Open With..." will be offered.
|
||||||
const KFileItemList list = m_dolphinView->selectedItems();
|
|
||||||
|
|
||||||
bool insertOpenWithItems = true;
|
bool insertOpenWithItems = true;
|
||||||
const QString contextMimeType(m_fileInfo->mimetype());
|
const QString contextMimeType(m_fileInfo->mimetype());
|
||||||
|
|
||||||
QListIterator<KFileItem*> mimeIt(list);
|
QListIterator<KFileItem*> mimeIt(m_selectedItems);
|
||||||
while (insertOpenWithItems && mimeIt.hasNext()) {
|
while (insertOpenWithItems && mimeIt.hasNext()) {
|
||||||
KFileItem* item = mimeIt.next();
|
KFileItem* item = mimeIt.next();
|
||||||
insertOpenWithItems = (contextMimeType == item->mimetype());
|
insertOpenWithItems = (contextMimeType == item->mimetype());
|
||||||
|
@ -433,9 +422,7 @@ QList<QAction*> DolphinContextMenu::insertActionItems(KMenu* popup,
|
||||||
if ((*it) == "all/allfiles") {
|
if ((*it) == "all/allfiles") {
|
||||||
// The service type is valid for all files, but not for directories.
|
// The service type is valid for all files, but not for directories.
|
||||||
// Check whether the selected items only consist of files...
|
// Check whether the selected items only consist of files...
|
||||||
const KFileItemList list = m_dolphinView->selectedItems();
|
QListIterator<KFileItem*> mimeIt(m_selectedItems);
|
||||||
|
|
||||||
QListIterator<KFileItem*> mimeIt(list);
|
|
||||||
insert = true;
|
insert = true;
|
||||||
while (insert && mimeIt.hasNext()) {
|
while (insert && mimeIt.hasNext()) {
|
||||||
KFileItem* item = mimeIt.next();
|
KFileItem* item = mimeIt.next();
|
||||||
|
@ -447,9 +434,7 @@ QList<QAction*> DolphinContextMenu::insertActionItems(KMenu* popup,
|
||||||
// Check whether the MIME types of all selected files match
|
// Check whether the MIME types of all selected files match
|
||||||
// to the mimetype of the service action. As soon as one MIME
|
// to the mimetype of the service action. As soon as one MIME
|
||||||
// type does not match, no service menu is shown at all.
|
// type does not match, no service menu is shown at all.
|
||||||
const KFileItemList list = m_dolphinView->selectedItems();
|
QListIterator<KFileItem*> mimeIt(m_selectedItems);
|
||||||
|
|
||||||
QListIterator<KFileItem*> mimeIt(list);
|
|
||||||
insert = true;
|
insert = true;
|
||||||
while (insert && mimeIt.hasNext()) {
|
while (insert && mimeIt.hasNext()) {
|
||||||
KFileItem* item = mimeIt.next();
|
KFileItem* item = mimeIt.next();
|
||||||
|
|
|
@ -1,6 +1,5 @@
|
||||||
/***************************************************************************
|
/***************************************************************************
|
||||||
* Copyright (C) 2006 by Peter Penz *
|
* Copyright (C) 2006 by Peter Penz <peter.penz@gmx.at> *
|
||||||
* peter.penz@gmx.at *
|
|
||||||
* *
|
* *
|
||||||
* This program is free software; you can redistribute it and/or modify *
|
* 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 *
|
* it under the terms of the GNU General Public License as published by *
|
||||||
|
@ -21,22 +20,22 @@
|
||||||
#ifndef DOLPHINCONTEXTMENU_H
|
#ifndef DOLPHINCONTEXTMENU_H
|
||||||
#define DOLPHINCONTEXTMENU_H
|
#define DOLPHINCONTEXTMENU_H
|
||||||
|
|
||||||
|
#include <kdedesktopmimetype.h>
|
||||||
|
#include <kfileitem.h>
|
||||||
|
#include <kservice.h>
|
||||||
|
#include <kurl.h>
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QVector>
|
#include <QVector>
|
||||||
|
|
||||||
#include <kservice.h>
|
|
||||||
#include <kpropertiesdialog.h>
|
|
||||||
#include <kdedesktopmimetype.h>
|
|
||||||
|
|
||||||
class KMenu;
|
class KMenu;
|
||||||
class KFileItem;
|
class KFileItem;
|
||||||
class QPoint;
|
class QAction;
|
||||||
class QWidget;
|
class DolphinMainWindow;
|
||||||
class DolphinView;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Represents the context menu which appears when doing a right
|
* @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
|
* Beside static menu entries (e. g. 'Paste' or 'Properties') two
|
||||||
* dynamic sub menus are shown when opening a context menu above
|
* dynamic sub menus are shown when opening a context menu above
|
||||||
|
@ -45,21 +44,25 @@ class DolphinView;
|
||||||
* open items of the given MIME type.
|
* open items of the given MIME type.
|
||||||
* - 'Actions': Contains all actions which can be applied to the
|
* - 'Actions': Contains all actions which can be applied to the
|
||||||
* given item.
|
* given item.
|
||||||
*
|
|
||||||
* @author Peter Penz <peter.penz@gmx.at>
|
|
||||||
*/
|
*/
|
||||||
class DolphinContextMenu
|
class DolphinContextMenu
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
/**
|
/**
|
||||||
* @parent Pointer to the dolphin view the context menu
|
* @parent Pointer to the main window the context menu
|
||||||
* belongs to.
|
* belongs to.
|
||||||
* @fileInfo Pointer to the file item the context menu
|
* @fileInfo Pointer to the file item the context menu
|
||||||
* is applied. If 0 is passed, the context menu
|
* is applied. If 0 is passed, the context menu
|
||||||
* is above the viewport.
|
* 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.
|
||||||
*/
|
*/
|
||||||
DolphinContextMenu(DolphinView* parent,
|
DolphinContextMenu(DolphinMainWindow* parent,
|
||||||
KFileItem* fileInfo);
|
KFileItem* fileInfo,
|
||||||
|
const KUrl& baseUrl,
|
||||||
|
KFileItemList selectedItems);
|
||||||
|
|
||||||
virtual ~DolphinContextMenu();
|
virtual ~DolphinContextMenu();
|
||||||
|
|
||||||
|
@ -120,8 +123,11 @@ private:
|
||||||
TrashContext = 2
|
TrashContext = 2
|
||||||
};
|
};
|
||||||
|
|
||||||
DolphinView* m_dolphinView;
|
DolphinMainWindow* m_mainWindow;
|
||||||
KFileItem* m_fileInfo;
|
KFileItem* m_fileInfo;
|
||||||
|
KUrl m_baseUrl;
|
||||||
|
KFileItemList m_selectedItems;
|
||||||
|
KUrl::List m_selectedUrls;
|
||||||
int m_context;
|
int m_context;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -973,7 +973,10 @@ void DolphinView::openContextMenu(const QPoint& pos)
|
||||||
item = fileItem(index);
|
item = fileItem(index);
|
||||||
}
|
}
|
||||||
|
|
||||||
DolphinContextMenu contextMenu(this, item);
|
DolphinContextMenu contextMenu(m_mainWindow,
|
||||||
|
item,
|
||||||
|
url(),
|
||||||
|
selectedItems());
|
||||||
contextMenu.open();
|
contextMenu.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "treeviewsidebarpage.h"
|
#include "treeviewsidebarpage.h"
|
||||||
|
|
||||||
#include "bookmarkselector.h"
|
#include "bookmarkselector.h"
|
||||||
|
#include "dolphincontextmenu.h"
|
||||||
#include "dolphinmainwindow.h"
|
#include "dolphinmainwindow.h"
|
||||||
#include "dolphinsortfilterproxymodel.h"
|
#include "dolphinsortfilterproxymodel.h"
|
||||||
#include "dolphinview.h"
|
#include "dolphinview.h"
|
||||||
|
@ -103,6 +104,56 @@ void TreeViewSidebarPage::showEvent(QShowEvent* event)
|
||||||
connectToActiveView();
|
connectToActiveView();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TreeViewSidebarPage::contextMenuEvent(QContextMenuEvent* 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
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
#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());
|
||||||
|
#else
|
||||||
|
const QItemSelection selection = m_treeView->selectionModel()->selection();
|
||||||
|
#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);
|
||||||
|
contextMenu.open();
|
||||||
|
}
|
||||||
|
|
||||||
void TreeViewSidebarPage::updateSelection(const KUrl& url)
|
void TreeViewSidebarPage::updateSelection(const KUrl& url)
|
||||||
{
|
{
|
||||||
if (!url.isValid() || (url == m_selectedUrl)) {
|
if (!url.isValid() || (url == m_selectedUrl)) {
|
||||||
|
|
|
@ -52,6 +52,9 @@ protected:
|
||||||
/** @see QWidget::showEvent() */
|
/** @see QWidget::showEvent() */
|
||||||
virtual void showEvent(QShowEvent* event);
|
virtual void showEvent(QShowEvent* event);
|
||||||
|
|
||||||
|
/** @see QWidget::contextMenuEvent() */
|
||||||
|
virtual void contextMenuEvent(QContextMenuEvent* event);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
/**
|
/**
|
||||||
* Updates the current selection inside the tree to
|
* Updates the current selection inside the tree to
|
||||||
|
|
Loading…
Reference in a new issue