┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2006-12-02 21:51:36 +0000
committerPeter Penz <[email protected]>2006-12-02 21:51:36 +0000
commitc94276725b1452d9f899dec192a8e66ecb9a516d (patch)
tree3694c3570d7e9c1007cd59f09971275ddb435b7d /src
parent4f951f75e2f21e3c1748e13e1978d5770daabb8c (diff)
reanimated the context menu
svn path=/trunk/playground/utils/dolphin/; revision=609962
Diffstat (limited to 'src')
-rw-r--r--src/dolphincontextmenu.cpp15
-rw-r--r--src/dolphiniconsview.cpp26
-rw-r--r--src/dolphiniconsview.h5
-rw-r--r--src/dolphinmainwindow.cpp25
-rw-r--r--src/dolphinview.cpp56
-rw-r--r--src/dolphinview.h6
-rw-r--r--src/infosidebarpage.cpp18
7 files changed, 87 insertions, 64 deletions
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<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();
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 <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();
}
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 <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()) {
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<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();