summaryrefslogtreecommitdiffstats
path: root/src/widgets/itemviews/qlistview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/widgets/itemviews/qlistview.cpp')
-rw-r--r--src/widgets/itemviews/qlistview.cpp62
1 files changed, 24 insertions, 38 deletions
diff --git a/src/widgets/itemviews/qlistview.cpp b/src/widgets/itemviews/qlistview.cpp
index e5a8647f87..616a832b88 100644
--- a/src/widgets/itemviews/qlistview.cpp
+++ b/src/widgets/itemviews/qlistview.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2013 Samuel Gaist <samuel.gaist@deltech.ch>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtWidgets module of the Qt Toolkit.
@@ -900,20 +901,14 @@ void QListView::startDrag(Qt::DropActions supportedActions)
QStyleOptionViewItem QListView::viewOptions() const
{
Q_D(const QListView);
- return d->viewOptions();
-}
-
-QStyleOptionViewItem QListViewPrivate::viewOptions() const
-{
- Q_Q(const QListView);
- QStyleOptionViewItem option = QAbstractItemViewPrivate::viewOptions();
- if (!iconSize.isValid()) { // otherwise it was already set in abstractitemview
- int pm = (viewMode == QListView::ListMode
- ? q->style()->pixelMetric(QStyle::PM_ListViewIconSize, 0, q)
- : q->style()->pixelMetric(QStyle::PM_IconViewIconSize, 0, q));
+ QStyleOptionViewItem option = QAbstractItemView::viewOptions();
+ if (!d->iconSize.isValid()) { // otherwise it was already set in abstractitemview
+ int pm = (d->viewMode == QListView::ListMode
+ ? style()->pixelMetric(QStyle::PM_ListViewIconSize, 0, this)
+ : style()->pixelMetric(QStyle::PM_IconViewIconSize, 0, this));
option.decorationSize = QSize(pm, pm);
}
- if (viewMode == QListView::IconMode) {
+ if (d->viewMode == QListView::IconMode) {
option.showDecorationSelected = false;
option.decorationPosition = QStyleOptionViewItem::Top;
option.displayAlignment = Qt::AlignCenter;
@@ -932,7 +927,7 @@ void QListView::paintEvent(QPaintEvent *e)
Q_D(QListView);
if (!d->itemDelegate)
return;
- QStyleOptionViewItem option = d->viewOptions();
+ QStyleOptionViewItem option = d->viewOptionsV1();
QPainter painter(d->viewport);
const QVector<QModelIndex> toBeRendered = d->intersectingSet(e->rect().translated(horizontalOffset(), verticalOffset()), false);
@@ -1461,7 +1456,7 @@ void QListView::updateGeometries()
verticalScrollBar()->setRange(0, 0);
} else {
QModelIndex index = d->model->index(0, d->column, d->root);
- QStyleOptionViewItem option = d->viewOptions();
+ QStyleOptionViewItem option = d->viewOptionsV1();
QSize step = d->itemSize(option, index);
d->commonListView->updateHorizontalScrollBar(step);
d->commonListView->updateVerticalScrollBar(step);
@@ -1833,6 +1828,15 @@ void QCommonListViewBase::removeHiddenRow(int row)
dd->hiddenRows.remove(dd->model->index(row, 0, qq->rootIndex()));
}
+#ifndef QT_NO_DRAGANDDROP
+void QCommonListViewBase::paintDragDrop(QPainter *painter)
+{
+ // FIXME: Until the we can provide a proper drop indicator
+ // in IconMode, it makes no sense to show it
+ dd->paintDropIndicator(painter);
+}
+#endif
+
void QCommonListViewBase::updateHorizontalScrollBar(const QSize & /*step*/)
{
horizontalScrollBar()->setPageStep(viewport()->width());
@@ -1902,13 +1906,6 @@ int QCommonListViewBase::horizontalScrollToValue(const int /*index*/, QListView:
*/
#ifndef QT_NO_DRAGANDDROP
-void QListModeViewBase::paintDragDrop(QPainter *painter)
-{
- // FIXME: Until the we can provide a proper drop indicator
- // in IconMode, it makes no sense to show it
- dd->paintDropIndicator(painter);
-}
-
QAbstractItemView::DropIndicatorPosition QListModeViewBase::position(const QPoint &pos, const QRect &rect, const QModelIndex &index) const
{
QAbstractItemView::DropIndicatorPosition r = QAbstractItemView::OnViewport;
@@ -2651,23 +2648,6 @@ void QIconModeViewBase::removeHiddenRow(int row)
}
#ifndef QT_NO_DRAGANDDROP
-void QIconModeViewBase::paintDragDrop(QPainter *painter)
-{
- if (!draggedItems.isEmpty() && viewport()->rect().contains(draggedItemsPos)) {
- //we need to draw the items that arre dragged
- painter->translate(draggedItemsDelta());
- QStyleOptionViewItem option = viewOptions();
- option.state &= ~QStyle::State_MouseOver;
- QVector<QModelIndex>::const_iterator it = draggedItems.constBegin();
- QListViewItem item = indexToListViewItem(*it);
- for (; it != draggedItems.constEnd(); ++it) {
- item = indexToListViewItem(*it);
- option.rect = viewItemRect(item);
- delegate(*it)->paint(painter, option, *it);
- }
- }
-}
-
bool QIconModeViewBase::filterStartDrag(Qt::DropActions supportedActions)
{
// This function does the same thing as in QAbstractItemView::startDrag(),
@@ -2682,8 +2662,14 @@ bool QIconModeViewBase::filterStartDrag(Qt::DropActions supportedActions)
&& (*it).column() == dd->column)
draggedItems.push_back(*it);
}
+
+ QRect rect;
+ QPixmap pixmap = dd->renderToPixmap(indexes, &rect);
+ rect.adjust(horizontalOffset(), verticalOffset(), 0, 0);
QDrag *drag = new QDrag(qq);
drag->setMimeData(dd->model->mimeData(indexes));
+ drag->setPixmap(pixmap);
+ drag->setHotSpot(dd->pressedPosition - rect.topLeft());
Qt::DropAction action = drag->exec(supportedActions, Qt::CopyAction);
draggedItems.clear();
if (action == Qt::MoveAction)