From: Peter Penz Date: Sat, 2 Dec 2006 21:51:36 +0000 (+0000) Subject: reanimated the context menu X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/commitdiff_plain/c94276725b1452d9f899dec192a8e66ecb9a516d?ds=inline reanimated the context menu svn path=/trunk/playground/utils/dolphin/; revision=609962 --- diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp index 1da2443db..53bc09558 100644 --- a/src/dolphincontextmenu.cpp +++ b/src/dolphincontextmenu.cpp @@ -273,12 +273,11 @@ QList DolphinContextMenu::insertOpenWithItems(KMenu* popup, // 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 // no sub menu is created at all, only "Open With..." will be offered. - const KFileItemList* list = m_dolphinView->selectedItems(); - assert(list != 0); + const KFileItemList list = m_dolphinView->selectedItems(); bool insertOpenWithItems = true; const QString contextMimeType(m_fileInfo->mimetype()); - QListIterator mimeIt(*list); + QListIterator mimeIt(list); while (insertOpenWithItems && mimeIt.hasNext()) { KFileItem* item = mimeIt.next(); insertOpenWithItems = (contextMimeType == item->mimetype()); @@ -359,10 +358,9 @@ QList DolphinContextMenu::insertActionItems(KMenu* popup, if ((*it) == "all/allfiles") { // The service type is valid for all files, but not for directories. // Check whether the selected items only consist of files... - const KFileItemList* list = m_dolphinView->selectedItems(); - assert(list != 0); + const KFileItemList list = m_dolphinView->selectedItems(); - QListIterator mimeIt(*list); + QListIterator mimeIt(list); insert = true; while (insert && mimeIt.hasNext()) { KFileItem* item = mimeIt.next(); @@ -374,10 +372,9 @@ QList DolphinContextMenu::insertActionItems(KMenu* popup, // Check whether the MIME types of all selected files match // to the mimetype of the service action. As soon as one MIME // type does not match, no service menu is shown at all. - const KFileItemList* list = m_dolphinView->selectedItems(); - assert(list != 0); + const KFileItemList list = m_dolphinView->selectedItems(); - QListIterator mimeIt(*list); + QListIterator mimeIt(list); insert = true; while (insert && mimeIt.hasNext()) { KFileItem* item = mimeIt.next(); diff --git a/src/dolphiniconsview.cpp b/src/dolphiniconsview.cpp index 9372ae9e0..4cd4bdddc 100644 --- a/src/dolphiniconsview.cpp +++ b/src/dolphiniconsview.cpp @@ -21,6 +21,9 @@ #include "dolphiniconsview.h" #include "dolphinview.h" +#include +#include + DolphinIconsView::DolphinIconsView(DolphinView* parent) : QListView(parent), m_parentView( parent ) @@ -32,9 +35,28 @@ DolphinIconsView::~DolphinIconsView() { } -void DolphinIconsView::mouseReleaseEvent(QMouseEvent *e) +void DolphinIconsView::mousePressEvent(QMouseEvent* event) +{ + QListView::mousePressEvent(event); + + if (event->button() != Qt::RightButton) { + return; + } + + KFileItem* item = 0; + + const QModelIndex index = indexAt(event->pos()); + if (index.isValid()) { + KDirModel* dirModel = static_cast(model()); + item = dirModel->itemForIndex(index); + } + + m_parentView->openContextMenu(item, event->globalPos()); +} + +void DolphinIconsView::mouseReleaseEvent(QMouseEvent* event) { - QListView::mouseReleaseEvent(e); + QListView::mouseReleaseEvent(event); m_parentView->declareViewActive(); } diff --git a/src/dolphiniconsview.h b/src/dolphiniconsview.h index 885ff6b0b..1f4f5d70b 100644 --- a/src/dolphiniconsview.h +++ b/src/dolphiniconsview.h @@ -42,10 +42,11 @@ public: virtual ~DolphinIconsView(); protected: - void mouseReleaseEvent(QMouseEvent* event); + virtual void mousePressEvent(QMouseEvent* event); + virtual void mouseReleaseEvent(QMouseEvent* event); private: - DolphinView *m_parentView; + DolphinView* m_parentView; }; #endif diff --git a/src/dolphinmainwindow.cpp b/src/dolphinmainwindow.cpp index 938d41cbc..c1a68fad5 100644 --- a/src/dolphinmainwindow.cpp +++ b/src/dolphinmainwindow.cpp @@ -589,20 +589,7 @@ void DolphinMainWindow::deleteItems() void DolphinMainWindow::properties() { - const KFileItemList* sourceList = m_activeView->selectedItems(); - if (sourceList == 0) { - return; - } - - KFileItemList list; - KFileItemList::const_iterator it = sourceList->begin(); - const KFileItemList::const_iterator end = sourceList->end(); - KFileItem* item = 0; - while (it != end) { - list.append(item); - ++it; - } - + const KFileItemList list = m_activeView->selectedItems(); new KPropertiesDialog(list, this); } @@ -1461,8 +1448,8 @@ void DolphinMainWindow::updateHistory() void DolphinMainWindow::updateEditActions() { - const KFileItemList* list = m_activeView->selectedItems(); - if ((list == 0) || (*list).isEmpty()) { + const KFileItemList list = m_activeView->selectedItems(); + if (list.isEmpty()) { stateChanged("has_no_selection"); } else { @@ -1470,13 +1457,13 @@ void DolphinMainWindow::updateEditActions() KAction* renameAction = actionCollection()->action("rename"); if (renameAction != 0) { - renameAction->setEnabled(list->count() >= 1); + renameAction->setEnabled(list.count() >= 1); } bool enableMoveToTrash = true; - KFileItemList::const_iterator it = list->begin(); - const KFileItemList::const_iterator end = list->end(); + KFileItemList::const_iterator it = list.begin(); + const KFileItemList::const_iterator end = list.end(); while (it != end) { KFileItem* item = *it; const KUrl& url = item->url(); diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index e60f6f655..6a9a68ddf 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -20,8 +20,9 @@ #include "dolphinview.h" -#include +#include +#include #include //Added by qt3to4: @@ -480,29 +481,42 @@ const Q3ValueList DolphinView::urlHistory(int& index) bool DolphinView::hasSelection() const { - const KFileItemList* list = selectedItems(); - return (list != 0) && !list->isEmpty(); + return m_iconsView->selectionModel()->hasSelection(); } -const KFileItemList* DolphinView::selectedItems() const +KFileItemList DolphinView::selectedItems() const { - return 0; //fileView()->selectedItems(); + QItemSelectionModel* selModel = m_iconsView->selectionModel(); + assert(selModel != 0); + + KFileItemList itemList; + if (selModel->hasSelection()) { + KDirModel* dirModel = static_cast(m_iconsView->model()); + const QModelIndexList indexList = selModel->selectedIndexes(); + + QModelIndexList::const_iterator end = indexList.end(); + for (QModelIndexList::const_iterator it = indexList.begin(); it != end; ++it) { + KFileItem* item = dirModel->itemForIndex(*it); + if (item != 0) { + itemList.append(item); + } + } + } + return itemList; } KUrl::List DolphinView::selectedUrls() const { KUrl::List urls; - /*const KFileItemList* list = fileView()->selectedItems(); - if (list != 0) { - KFileItemList::const_iterator it = list->begin(); - const KFileItemList::const_iterator end = list->end(); - while (it != end) { - KFileItem* item = *it; - urls.append(item->url()); - ++it; - } - }*/ + const KFileItemList list = selectedItems(); + KFileItemList::const_iterator it = list.begin(); + const KFileItemList::const_iterator end = list.end(); + while (it != end) { + KFileItem* item = *it; + urls.append(item->url()); + ++it; + } return urls; } @@ -903,14 +917,18 @@ QString DolphinView::selectionStatusBarText() const // TODO: the following code is not suitable for languages where multiple forms // of plurals are given (e. g. in Poland three forms of plurals exist). QString text; - const KFileItemList* list = selectedItems(); - assert((list != 0) && !list->isEmpty()); + const KFileItemList list = selectedItems(); + if (list.isEmpty()) { + // TODO: assert(!list.isEmpty()) should be used, as this method is only invoked if + // DolphinView::hasSelection() is true. Inconsistent behavior? + return QString(); + } int fileCount = 0; int folderCount = 0; KIO::filesize_t byteSize = 0; - KFileItemList::const_iterator it = list->begin(); - const KFileItemList::const_iterator end = list->end(); + KFileItemList::const_iterator it = list.begin(); + const KFileItemList::const_iterator end = list.end(); while (it != end){ KFileItem* item = *it; if (item->isDir()) { diff --git a/src/dolphinview.h b/src/dolphinview.h index 69b0022d8..423159952 100644 --- a/src/dolphinview.h +++ b/src/dolphinview.h @@ -210,11 +210,11 @@ public: bool hasSelection() const; /** - * Returns the selected items. 0 is returned, if no item - * is selected. + * Returns the selected items. The list is empty if no item has been + * selected. * @see DolphinView::selectedUrls() */ - const KFileItemList* selectedItems() const; + KFileItemList selectedItems() const; /** * Returns a list of Urls for all selected items. An empty list diff --git a/src/infosidebarpage.cpp b/src/infosidebarpage.cpp index d076d5a32..e584bfa8d 100644 --- a/src/infosidebarpage.cpp +++ b/src/infosidebarpage.cpp @@ -154,8 +154,8 @@ void InfoSidebarPage::showItemInfo() // show the preview... DolphinView* view = mainWindow()->activeView(); - const KFileItemList* selectedItems = view->selectedItems(); - if ((selectedItems != 0) && selectedItems->count() > 1) { + const KFileItemList selectedItems = view->selectedItems(); + if (selectedItems.count() > 1) { m_multipleSelection = true; } @@ -165,7 +165,7 @@ void InfoSidebarPage::showItemInfo() K3Icon::NoGroup, K3Icon::SizeEnormous); m_preview->setPixmap(icon); - m_name->setText(i18n("%1 items selected",selectedItems->count())); + m_name->setText(i18n("%1 items selected",selectedItems.count())); } else if (!applyBookmark()) { // try to get a preview pixmap from the item... @@ -429,12 +429,10 @@ void InfoSidebarPage::insertActions() // of KFileItems. If no selection is given, a temporary KFileItem // by the given Url 'url' is created and added to the list. KFileItem fileItem(S_IFDIR, KFileItem::Unknown, m_shownUrl); - KFileItemList localList; - const KFileItemList* itemList = mainWindow()->activeView()->selectedItems(); - if ((itemList == 0) || itemList->isEmpty()) { + KFileItemList itemList = mainWindow()->activeView()->selectedItems(); + if (itemList.isEmpty()) { fileItem.refresh(); - localList.append(&fileItem); - itemList = &localList; + itemList.append(&fileItem); } // 'itemList' contains now all KFileItems, where an item information should be shown. @@ -458,7 +456,7 @@ void InfoSidebarPage::insertActions() if ((*it) == "all/allfiles") { // The service type is valid for all files, but not for directories. // Check whether the selected items only consist of files... - QListIterator mimeIt(*itemList); + QListIterator mimeIt(itemList); insert = true; while (insert && mimeIt.hasNext()) { KFileItem* item = mimeIt.next(); @@ -470,7 +468,7 @@ void InfoSidebarPage::insertActions() // Check whether the MIME types of all selected files match // to the mimetype of the service action. As soon as one MIME // type does not match, no service menu is shown at all. - QListIterator mimeIt(*itemList); + QListIterator mimeIt(itemList); insert = true; while (insert && mimeIt.hasNext()) { KFileItem* item = mimeIt.next();