]> cloud.milkyroute.net Git - dolphin.git/commitdiff
reanimated the context menu
authorPeter Penz <peter.penz19@gmail.com>
Sat, 2 Dec 2006 21:51:36 +0000 (21:51 +0000)
committerPeter Penz <peter.penz19@gmail.com>
Sat, 2 Dec 2006 21:51:36 +0000 (21:51 +0000)
svn path=/trunk/playground/utils/dolphin/; revision=609962

src/dolphincontextmenu.cpp
src/dolphiniconsview.cpp
src/dolphiniconsview.h
src/dolphinmainwindow.cpp
src/dolphinview.cpp
src/dolphinview.h
src/infosidebarpage.cpp

index 1da2443dbe7336e8d5e9aa0d4c2e9182831efe63..53bc095581f6ec89135819410c5bee14b0cd1623 100644 (file)
@@ -273,12 +273,11 @@ QList<QAction*> 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<KFileItem*> mimeIt(*list);
+    QListIterator<KFileItem*> mimeIt(list);
     while (insertOpenWithItems && mimeIt.hasNext()) {
         KFileItem* item = mimeIt.next();
         insertOpenWithItems = (contextMimeType == item->mimetype());
@@ -359,10 +358,9 @@ QList<QAction*> 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<KFileItem*> mimeIt(*list);
+                        QListIterator<KFileItem*> mimeIt(list);
                         insert = true;
                         while (insert && mimeIt.hasNext()) {
                             KFileItem* item = mimeIt.next();
@@ -374,10 +372,9 @@ QList<QAction*> 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<KFileItem*> mimeIt(*list);
+                        QListIterator<KFileItem*> mimeIt(list);
                         insert = true;
                         while (insert && mimeIt.hasNext()) {
                             KFileItem* item = mimeIt.next();
index 9372ae9e0443ecba360d524d37c065eb12439323..4cd4bdddc9a39951d1d44c61a5b73f7b0391ea72 100644 (file)
@@ -21,6 +21,9 @@
 #include "dolphiniconsview.h"
 #include "dolphinview.h"
 
+#include <kdirmodel.h>
+#include <kfileitem.h>
+
 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<KDirModel*>(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();
 }
 
index 885ff6b0bc2fe80bc9c4ca919edf48e0adf13c4d..1f4f5d70b57f6e95be63c65e512a1eb9c6c0f711 100644 (file)
@@ -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;
+    DolphinViewm_parentView;
 };
 
 #endif
index 938d41cbc5248c365d15038d754747b5655026e5..c1a68fad5df57e42ab2671c04dbd76f0351fe9c8 100644 (file)
@@ -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();
index e60f6f655a7b52321b8c899dfd60691132d52df3..6a9a68ddf01e6621ff630836bc50945807507bc3 100644 (file)
@@ -20,8 +20,9 @@
 
 #include "dolphinview.h"
 
-#include <kdirmodel.h>
+#include <QItemSelectionModel>
 
+#include <kdirmodel.h>
 
 #include <qlayout.h>
 //Added by qt3to4:
@@ -480,29 +481,42 @@ const Q3ValueList<UrlNavigator::HistoryElem> 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<KDirModel*>(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()) {
index 69b0022d8f71d9862929b2f956f48236cece331a..4231599520533e37dc5e81e451ed406116a8e110 100644 (file)
@@ -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
index d076d5a3284344f57f64e9d21f4544fa73dfc60c..e584bfa8d2004efd381c667575b8896d2bf1053b 100644 (file)
@@ -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<KFileItem*> mimeIt(*itemList);
+                        QListIterator<KFileItem*> 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<KFileItem*> mimeIt(*itemList);
+                        QListIterator<KFileItem*> mimeIt(itemList);
                         insert = true;
                         while (insert && mimeIt.hasNext()) {
                             KFileItem* item = mimeIt.next();