┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/dolphincolumnview.cpp27
-rw-r--r--src/dolphincolumnview.h22
-rw-r--r--src/dolphincolumnwidget.cpp34
-rw-r--r--src/dolphincolumnwidget.h8
-rw-r--r--src/dolphincontextmenu.cpp3
-rw-r--r--src/dolphinview.cpp22
-rw-r--r--src/dolphinview.h5
7 files changed, 100 insertions, 21 deletions
diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp
index 1ed8b6b82..957b2064f 100644
--- a/src/dolphincolumnview.cpp
+++ b/src/dolphincolumnview.cpp
@@ -92,9 +92,7 @@ DolphinColumnView::~DolphinColumnView()
QModelIndex DolphinColumnView::indexAt(const QPoint& point) const
{
foreach (DolphinColumnWidget* column, m_columns) {
- const QPoint topLeft = column->frameGeometry().topLeft();
- const QPoint adjustedPoint(point.x() - topLeft.x(), point.y() - topLeft.y());
- const QModelIndex index = column->indexAt(adjustedPoint);
+ const QModelIndex index = column->indexAt(columnPosition(column, point));
if (index.isValid()) {
return index;
}
@@ -103,6 +101,18 @@ QModelIndex DolphinColumnView::indexAt(const QPoint& point) const
return QModelIndex();
}
+KFileItem DolphinColumnView::itemAt(const QPoint& point) const
+{
+ foreach (DolphinColumnWidget* column, m_columns) {
+ KFileItem item = column->itemAt(columnPosition(column, point));
+ if (!item.isNull()) {
+ return item;
+ }
+ }
+
+ return KFileItem();
+}
+
void DolphinColumnView::scrollTo(const QModelIndex& index, ScrollHint hint)
{
activeColumn()->scrollTo(index, hint);
@@ -254,6 +264,11 @@ void DolphinColumnView::editItem(const KFileItem& item)
activeColumn()->editItem(item);
}
+KFileItemList DolphinColumnView::selectedItems() const
+{
+ return activeColumn()->selectedItems();
+}
+
void DolphinColumnView::selectAll()
{
activeColumn()->selectAll();
@@ -587,4 +602,10 @@ void DolphinColumnView::removeAllColumns()
assureVisibleActiveColumn();
}
+QPoint DolphinColumnView::columnPosition(DolphinColumnWidget* column, const QPoint& point) const
+{
+ const QPoint topLeft = column->frameGeometry().topLeft();
+ return QPoint(point.x() - topLeft.x(), point.y() - topLeft.y());
+}
+
#include "dolphincolumnview.moc"
diff --git a/src/dolphincolumnview.h b/src/dolphincolumnview.h
index 2ab4d2d5d..62569a082 100644
--- a/src/dolphincolumnview.h
+++ b/src/dolphincolumnview.h
@@ -50,8 +50,19 @@ public:
explicit DolphinColumnView(QWidget* parent, DolphinController* controller);
virtual ~DolphinColumnView();
+ /** @see QAbstractItemView::indexAt() */
virtual QModelIndex indexAt(const QPoint& point) const;
+
+ /**
+ * Returns the item on the position \a pos. The KFileItem instance
+ * is null if no item is below the position.
+ */
+ KFileItem itemAt(const QPoint& point) const;
+
+ /** @see QAbstractItemView::scrollTo() */
virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible);
+
+ /** @see QAbstractItemView::visualRect() */
virtual QRect visualRect(const QModelIndex& index) const;
/** Inverts the selection of the currently active column. */
@@ -97,6 +108,11 @@ public:
*/
void editItem(const KFileItem& item);
+ /**
+ * Returns the selected items of the active column.
+ */
+ KFileItemList selectedItems() const;
+
public slots:
/** @see QAbstractItemView::selectAll() */
virtual void selectAll();
@@ -175,6 +191,12 @@ private:
/** Removes all columns except of the root column. */
void removeAllColumns();
+ /**
+ * Returns the position of the point \a point relative to the column
+ * \a column.
+ */
+ QPoint columnPosition(DolphinColumnWidget* column, const QPoint& point) const;
+
private:
DolphinController* m_controller;
bool m_active;
diff --git a/src/dolphincolumnwidget.cpp b/src/dolphincolumnwidget.cpp
index 8f3b253aa..6d983f71f 100644
--- a/src/dolphincolumnwidget.cpp
+++ b/src/dolphincolumnwidget.cpp
@@ -28,6 +28,7 @@
#include "dolphin_columnmodesettings.h"
#include "dolphin_generalsettings.h"
#include "draganddrophelper.h"
+#include "iconmanager.h"
#include "selectionmanager.h"
#include "tooltipmanager.h"
@@ -39,8 +40,6 @@
#include <kjob.h>
#include <konqmimedata.h>
-#include "iconmanager.h"
-
#include <QApplication>
#include <QClipboard>
#include <QPainter>
@@ -246,6 +245,33 @@ void DolphinColumnWidget::editItem(const KFileItem& item)
}
}
+KFileItem DolphinColumnWidget::itemAt(const QPoint& pos) const
+{
+ KFileItem item;
+ const QModelIndex index = indexAt(pos);
+ if (index.isValid() && (index.column() == DolphinModel::Name)) {
+ const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index);
+ item = m_dolphinModel->itemForIndex(dolphinModelIndex);
+ }
+ return item;
+}
+
+KFileItemList DolphinColumnWidget::selectedItems() const
+{
+ const QItemSelection selection = m_proxyModel->mapSelectionToSource(selectionModel()->selection());
+ KFileItemList itemList;
+
+ const QModelIndexList indexList = selection.indexes();
+ foreach (const QModelIndex &index, indexList) {
+ KFileItem item = m_dolphinModel->itemForIndex(index);
+ if (!item.isNull()) {
+ itemList.append(item);
+ }
+ }
+
+ return itemList;
+}
+
QStyleOptionViewItem DolphinColumnWidget::viewOptions() const
{
QStyleOptionViewItem viewOptions = QListView::viewOptions();
@@ -364,6 +390,10 @@ void DolphinColumnWidget::contextMenuEvent(QContextMenuEvent* event)
QListView::contextMenuEvent(event);
const QModelIndex index = indexAt(event->pos());
+ if (!index.isValid()) {
+ clearSelection();
+ }
+
if (index.isValid() || m_active) {
// Only open a context menu above an item or if the mouse is above
// the active column.
diff --git a/src/dolphincolumnwidget.h b/src/dolphincolumnwidget.h
index ada7d637a..72028da7c 100644
--- a/src/dolphincolumnwidget.h
+++ b/src/dolphincolumnwidget.h
@@ -104,6 +104,14 @@ public:
*/
void editItem(const KFileItem& item);
+ /**
+ * Returns the item on the position \a pos. The KFileItem instance
+ * is null if no item is below the position.
+ */
+ KFileItem itemAt(const QPoint& pos) const;
+
+ KFileItemList selectedItems() const;
+
protected:
virtual QStyleOptionViewItem viewOptions() const;
virtual void startDrag(Qt::DropActions supportedActions);
diff --git a/src/dolphincontextmenu.cpp b/src/dolphincontextmenu.cpp
index b2ec59e15..1af74b2e3 100644
--- a/src/dolphincontextmenu.cpp
+++ b/src/dolphincontextmenu.cpp
@@ -337,7 +337,8 @@ QString DolphinContextMenu::placesName(const KUrl& url) const
QAction* DolphinContextMenu::createPasteAction()
{
QAction* action = 0;
- if ((m_selectedItems.count() == 1) && m_fileInfo.isDir()) {
+ const bool isDir = !m_fileInfo.isNull() && m_fileInfo.isDir();
+ if (isDir && (m_selectedItems.count() == 1)) {
action = new QAction(KIcon("edit-paste"), i18nc("@action:inmenu", "Paste Into Folder"), this);
const QMimeData* mimeData = QApplication::clipboard()->mimeData();
const KUrl::List pasteData = KUrl::List::fromMimeData(mimeData);
diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp
index 573abf85a..221d20376 100644
--- a/src/dolphinview.cpp
+++ b/src/dolphinview.cpp
@@ -295,6 +295,10 @@ void DolphinView::clearSelection()
KFileItemList DolphinView::selectedItems() const
{
+ if (isColumnViewActive()) {
+ return m_columnView->selectedItems();
+ }
+
const QAbstractItemView* view = itemView();
// Our view has a selection, we will map them back to the DolphinModel
@@ -325,12 +329,6 @@ KUrl::List DolphinView::selectedUrls() const
return urls;
}
-KFileItem DolphinView::fileItem(const QModelIndex& index) const
-{
- const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index);
- return m_dolphinModel->itemForIndex(dolphinModelIndex);
-}
-
void DolphinView::setContentsPosition(int x, int y)
{
QAbstractItemView* view = itemView();
@@ -774,10 +772,14 @@ void DolphinView::emitSelectionChangedSignal()
void DolphinView::openContextMenu(const QPoint& pos)
{
KFileItem item;
-
- const QModelIndex index = itemView()->indexAt(pos);
- if (index.isValid() && (index.column() == DolphinModel::Name)) {
- item = fileItem(index);
+ if (isColumnViewActive()) {
+ item = m_columnView->itemAt(pos);
+ } else {
+ const QModelIndex index = itemView()->indexAt(pos);
+ if (index.isValid() && (index.column() == DolphinModel::Name)) {
+ const QModelIndex dolphinModelIndex = m_proxyModel->mapToSource(index);
+ item = m_dolphinModel->itemForIndex(dolphinModelIndex);
+ }
}
if (m_toolTipManager != 0) {
diff --git a/src/dolphinview.h b/src/dolphinview.h
index 0936b06a3..d9c273d38 100644
--- a/src/dolphinview.h
+++ b/src/dolphinview.h
@@ -219,11 +219,6 @@ public:
KUrl::List selectedUrls() const;
/**
- * Returns the file item for the given model index \a index.
- */
- KFileItem fileItem(const QModelIndex& index) const;
-
- /**
* Sets the upper left position of the view content
* to (x,y). The content of the view might be larger than the visible area
* and hence a scrolling must be done.