X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/d0c97573d4cee67974758349ddcfc2fee509785d..fbd7cb02a511ff869d74aa4e758203a1cd340962:/src/dolphindetailsview.cpp diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index f92a28e79..dc9f10956 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -55,6 +55,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr m_ignoreScrollTo(false), m_controller(controller), m_selectionManager(0), + m_autoScroller(0), m_font(), m_decorationSize(), m_band() @@ -76,7 +77,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr setEditTriggers(QAbstractItemView::NoEditTriggers); setMouseTracking(true); - new DolphinViewAutoScroller(this); + m_autoScroller = new DolphinViewAutoScroller(this); const ViewProperties props(controller->url()); setSortIndicatorSection(props.sorting()); @@ -209,7 +210,6 @@ void DolphinDetailsView::mousePressEvent(QMouseEvent* event) setState(QAbstractItemView::DraggingState); } else { m_expandingTogglePressed = true; - kDebug() << "m_expandingTogglePressed " << m_expandingTogglePressed; } } @@ -236,9 +236,8 @@ void DolphinDetailsView::mousePressEvent(QMouseEvent* event) m_band.show = true; // Incremental update data will not be useful - start from scratch. m_band.ignoreOldInfo = true; - const QPoint pos = contentsPos(); const QPoint scrollPos(horizontalScrollBar()->value(), verticalScrollBar()->value()); - m_band.origin = event->pos() + pos + scrollPos; + m_band.origin = event->pos() + scrollPos; m_band.destination = m_band.origin; m_band.originalSelection = selectionModel()->selection(); } @@ -424,7 +423,7 @@ void DolphinDetailsView::wheelEvent(QWheelEvent* event) void DolphinDetailsView::currentChanged(const QModelIndex& current, const QModelIndex& previous) { QTreeView::currentChanged(current, previous); - if (current.isValid()) { + if (current.isValid() && !m_autoScroller->isActive()) { scrollTo(current); } @@ -465,7 +464,6 @@ void DolphinDetailsView::setSelection(const QRect &rect, QItemSelectionModel::Se QTreeView::setSelection(rect, command); m_useDefaultIndexAt = false; } else { - // Use our own elastic band selection algorithm updateElasticBandSelection(); } @@ -473,9 +471,9 @@ void DolphinDetailsView::setSelection(const QRect &rect, QItemSelectionModel::Se void DolphinDetailsView::scrollTo(const QModelIndex & index, ScrollHint hint) { - if (m_ignoreScrollTo) - return; - QTreeView::scrollTo(index, hint); + if (!m_ignoreScrollTo) { + QTreeView::scrollTo(index, hint); + } } void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting) @@ -517,11 +515,12 @@ void DolphinDetailsView::updateElasticBand() m_band.destination = viewport()->mapFromGlobal(QCursor::pos()) + scrollPos; // Going above the (logical) top-left of the view causes complications during selection; // we may as well prevent it. - if (m_band.destination.y() < 0) + if (m_band.destination.y() < 0) { m_band.destination.setY(0); - if (m_band.destination.x() < 0) + } + if (m_band.destination.x() < 0) { m_band.destination.setX(0); - + } dirtyRegion = dirtyRegion.united(elasticBandRect()); setDirtyRegion(dirtyRegion); } @@ -529,11 +528,10 @@ void DolphinDetailsView::updateElasticBand() QRect DolphinDetailsView::elasticBandRect() const { - const QPoint pos(contentsPos()); const QPoint scrollPos(horizontalScrollBar()->value(), verticalScrollBar()->value()); - const QPoint topLeft = m_band.origin - pos - scrollPos; - const QPoint bottomRight = m_band.destination - pos - scrollPos; + const QPoint topLeft = m_band.origin - scrollPos; + const QPoint bottomRight = m_band.destination - scrollPos; return QRect(topLeft, bottomRight).normalized(); } @@ -845,24 +843,6 @@ void DolphinDetailsView::updateDecorationSize(bool showPreview) doItemsLayout(); } -QPoint DolphinDetailsView::contentsPos() const -{ - // implementation note: the horizonal position is ignored currently, as no - // horizontal scrolling is done anyway during a selection - const QScrollBar* scrollbar = verticalScrollBar(); - Q_ASSERT(scrollbar != 0); - - const int maxHeight = maximumViewportSize().height(); - const int height = scrollbar->maximum() - scrollbar->minimum() + 1; - const int visibleHeight = model()->rowCount() + 1 - height; - if (visibleHeight <= 0) { - return QPoint(0, 0); - } - - const int y = scrollbar->sliderPosition() * maxHeight / visibleHeight; - return QPoint(0, y); -} - KFileItemDelegate::Information DolphinDetailsView::infoForColumn(int columnIndex) const { KFileItemDelegate::Information info = KFileItemDelegate::NoInformation;