┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Penz <[email protected]>2012-05-26 13:40:48 +0200
committerPeter Penz <[email protected]>2012-05-26 13:41:30 +0200
commit073f8cae13f2637c0bf2f5611295e103418d52ff (patch)
tree08eadfa6f69f036a04945b2c6e512bfb8207e018
parentf7622d323926017b9acc4d42f05abdc4bd5ca456 (diff)
Further preperations for drag & drop support in the places panel
-rw-r--r--src/kitemviews/kitemlistcontroller.cpp19
-rw-r--r--src/kitemviews/kitemlistview.cpp11
-rw-r--r--src/panels/places/placesitemmodel.cpp21
-rw-r--r--src/panels/places/placesitemmodel.h4
-rw-r--r--src/panels/places/placespanel.cpp7
-rw-r--r--src/panels/places/placespanel.h2
-rw-r--r--src/views/dolphinitemlistview.cpp2
7 files changed, 51 insertions, 15 deletions
diff --git a/src/kitemviews/kitemlistcontroller.cpp b/src/kitemviews/kitemlistcontroller.cpp
index 645b2d34a..1b9c53ccf 100644
--- a/src/kitemviews/kitemlistcontroller.cpp
+++ b/src/kitemviews/kitemlistcontroller.cpp
@@ -795,12 +795,10 @@ bool KItemListController::dragMoveEvent(QGraphicsSceneDragDropEvent* event, cons
if (m_model->supportsDropping(index)) {
newHoveredWidget->setHovered(true);
} else if (m_model->sortRole().isEmpty()) {
- // The model supports the inserting of items on
- // the given index as no sort-role has been
- // specified. Assure that a drag-indicator
+ // The model supports inserting of items on
+ // the given index. Assure that a drop-indicator
// is shown by the view.
- const int dropIndex = m_view->showDropIndicator(pos);
- Q_UNUSED(dropIndex); // TODO
+ m_view->showDropIndicator(pos);
}
emit itemHovered(index);
@@ -825,8 +823,15 @@ bool KItemListController::dropEvent(QGraphicsSceneDragDropEvent* event, const QT
m_view->setAutoScroll(false);
const QPointF pos = transform.map(event->pos());
- const int index = m_view->itemAt(pos);
- emit itemDropEvent(index, event);
+ if (m_model->sortRole().isEmpty()) {
+ // The model supports inserting of items on
+ // a given index.
+ const int dropIndex = m_view->showDropIndicator(pos);
+ m_view->hideDropIndicator();
+ emit itemDropEvent(dropIndex, event);
+ } else {
+ emit itemDropEvent(m_view->itemAt(pos), event);
+ }
return true;
}
diff --git a/src/kitemviews/kitemlistview.cpp b/src/kitemviews/kitemlistview.cpp
index 1586c9d96..ee69c8990 100644
--- a/src/kitemviews/kitemlistview.cpp
+++ b/src/kitemviews/kitemlistview.cpp
@@ -2313,15 +2313,20 @@ int KItemListView::showDropIndicator(const QPointF& pos)
const QPointF mappedPos = widget->mapFromItem(this, pos);
const QRectF rect = itemRect(widget->index());
if (mappedPos.y() >= 0 && mappedPos.y() <= rect.height()) {
- const qreal y = (mappedPos.y () < rect.height() / 2) ?
- rect.top() : rect.bottom();
+ const bool isAboveItem = (mappedPos.y () < rect.height() / 2);
+ const qreal y = isAboveItem ? rect.top() : rect.bottom();
const QRectF draggingInsertIndicator(rect.left(), y, rect.width(), 1);
if (m_dropIndicator != draggingInsertIndicator) {
m_dropIndicator = draggingInsertIndicator;
update();
}
- return widget->index();
+
+ int index = widget->index();
+ if (!isAboveItem) {
+ ++index;
+ }
+ return index;
}
}
diff --git a/src/panels/places/placesitemmodel.cpp b/src/panels/places/placesitemmodel.cpp
index 2a3dfa441..6723391db 100644
--- a/src/panels/places/placesitemmodel.cpp
+++ b/src/panels/places/placesitemmodel.cpp
@@ -331,14 +331,21 @@ QMimeData* PlacesItemModel::createMimeData(const QSet<int>& indexes) const
if (!urls.isEmpty()) {
urls.populateMimeData(mimeData);
}
-
- const QString internalMimeType = "application/x-dolphinplacesmodel-" +
- QString::number((qptrdiff)this);
- mimeData->setData(internalMimeType, itemData);
+ mimeData->setData(internalMimeType(), itemData);
return mimeData;
}
+void PlacesItemModel::dropMimeData(int index, const QMimeData* mimeData)
+{
+ Q_UNUSED(index); // TODO
+ if (mimeData->hasFormat(internalMimeType())) {
+ // TODO
+ } else if (mimeData->hasFormat("text/uri-list")) {
+ // TODO
+ }
+}
+
KUrl PlacesItemModel::convertedUrl(const KUrl& url)
{
KUrl newUrl = url;
@@ -879,6 +886,12 @@ void PlacesItemModel::triggerBookmarksSaving()
}
}
+QString PlacesItemModel::internalMimeType() const
+{
+ return "application/x-dolphinplacesmodel-" +
+ QString::number((qptrdiff)this);
+}
+
bool PlacesItemModel::equalBookmarkIdentifiers(const KBookmark& b1, const KBookmark& b2)
{
const QString udi1 = b1.metaDataItem("UDI");
diff --git a/src/panels/places/placesitemmodel.h b/src/panels/places/placesitemmodel.h
index 18264f06a..95a994e76 100644
--- a/src/panels/places/placesitemmodel.h
+++ b/src/panels/places/placesitemmodel.h
@@ -108,6 +108,8 @@ public:
/** @reimp */
virtual QMimeData* createMimeData(const QSet<int>& indexes) const;
+ void dropMimeData(int index, const QMimeData* mimeData);
+
/**
* @return Converts the URL, which contains "virtual" URLs for system-items like
* "search:/documents" into a Nepomuk-Query-URL that will be handled by
@@ -195,6 +197,8 @@ private:
*/
void triggerBookmarksSaving();
+ QString internalMimeType() const;
+
/**
* @return True if the bookmarks have the same identifiers. The identifier
* is the unique "ID"-property in case if no UDI is set, otherwise
diff --git a/src/panels/places/placespanel.cpp b/src/panels/places/placespanel.cpp
index 968c9af45..deef42935 100644
--- a/src/panels/places/placespanel.cpp
+++ b/src/panels/places/placespanel.cpp
@@ -43,6 +43,7 @@
#include "placesitemlistwidget.h"
#include "placesitemmodel.h"
#include <views/draganddrophelper.h>
+#include <QGraphicsSceneDragDropEvent>
#include <QVBoxLayout>
#include <QShowEvent>
@@ -88,6 +89,7 @@ void PlacesPanel::showEvent(QShowEvent* event)
connect(m_controller, SIGNAL(itemMiddleClicked(int)), this, SLOT(slotItemMiddleClicked(int)));
connect(m_controller, SIGNAL(itemContextMenuRequested(int,QPointF)), this, SLOT(slotItemContextMenuRequested(int,QPointF)));
connect(m_controller, SIGNAL(viewContextMenuRequested(QPointF)), this, SLOT(slotViewContextMenuRequested(QPointF)));
+ connect(m_controller, SIGNAL(itemDropEvent(int,QGraphicsSceneDragDropEvent*)), this, SLOT(slotItemDropEvent(int,QGraphicsSceneDragDropEvent*)));
KItemListContainer* container = new KItemListContainer(m_controller, this);
container->setEnabledFrame(false);
@@ -252,6 +254,11 @@ void PlacesPanel::slotViewContextMenuRequested(const QPointF& pos)
selectClosestItem();
}
+void PlacesPanel::slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event)
+{
+ m_model->dropMimeData(index, event->mimeData());
+}
+
void PlacesPanel::slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* parent)
{
Q_UNUSED(parent);
diff --git a/src/panels/places/placespanel.h b/src/panels/places/placespanel.h
index b3f259f56..d78b4ba61 100644
--- a/src/panels/places/placespanel.h
+++ b/src/panels/places/placespanel.h
@@ -28,6 +28,7 @@ class KItemListController;
class PlacesItemEditDialog;
class PlacesItem;
class PlacesItemModel;
+class QGraphicsSceneDragDropEvent;
/**
* @brief Combines bookmarks and mounted devices as list.
@@ -54,6 +55,7 @@ private slots:
void slotItemMiddleClicked(int index);
void slotItemContextMenuRequested(int index, const QPointF& pos);
void slotViewContextMenuRequested(const QPointF& pos);
+ void slotItemDropEvent(int index, QGraphicsSceneDragDropEvent* event);
void slotUrlsDropped(const KUrl& dest, QDropEvent* event, QWidget* parent);
void slotTrashUpdated(KJob* job);
diff --git a/src/views/dolphinitemlistview.cpp b/src/views/dolphinitemlistview.cpp
index 156ca204f..a031b1699 100644
--- a/src/views/dolphinitemlistview.cpp
+++ b/src/views/dolphinitemlistview.cpp
@@ -173,7 +173,7 @@ void DolphinItemListView::updateGridSize()
if (previewsShown()) {
// Optimize the width for previews with a 3:2 aspect ratio instead
// of a 1:1 ratio to avoid wasting too much vertical space when
- // photos.
+ // showing photos.
const int minWidth = iconSize * 3 / 2;
itemWidth = qMax(itemWidth, minWidth);
}