m_ignoreScrollTo(false),
m_controller(controller),
m_selectionManager(0),
+ m_autoScroller(0),
m_font(),
m_decorationSize(),
m_band()
setEditTriggers(QAbstractItemView::NoEditTriggers);
setMouseTracking(true);
- new DolphinViewAutoScroller(this);
+ m_autoScroller = new DolphinViewAutoScroller(this);
const ViewProperties props(controller->url());
setSortIndicatorSection(props.sorting());
setState(QAbstractItemView::DraggingState);
} else {
m_expandingTogglePressed = true;
- kDebug() << "m_expandingTogglePressed " << m_expandingTogglePressed;
}
}
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();
}
void DolphinDetailsView::currentChanged(const QModelIndex& current, const QModelIndex& previous)
{
QTreeView::currentChanged(current, previous);
- if (current.isValid()) {
+ if (current.isValid() && !m_autoScroller->isActive()) {
scrollTo(current);
}
QTreeView::setSelection(rect, command);
m_useDefaultIndexAt = false;
} else {
-
// Use our own elastic band selection algorithm
updateElasticBandSelection();
}
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)
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);
}
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();
}
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;