DolphinTreeView::DolphinTreeView(QWidget* parent) :
QTreeView(parent),
- m_updateCurrentIndex(false),
m_expandingTogglePressed(false),
m_useDefaultIndexAt(true),
m_ignoreScrollTo(false),
{
}
+void DolphinTreeView::keyboardSearch(const QString & search)
+{
+ const QModelIndex oldCurrent = currentIndex();
+ QTreeView::keyboardSearch(search);
+ if (currentIndex() != oldCurrent) {
+ // The current index has changed, but it is not selected yet.
+ // To select it, we call setCurrentIndex(...).
+ setCurrentIndex(currentIndex());
+ }
+}
+
QRegion DolphinTreeView::visualRegionForSelection(const QItemSelection& selection) const
{
// We have to make sure that the visualRect of each model index is inside the region.
case QEvent::Polish:
m_useDefaultIndexAt = false;
break;
- case QEvent::FocusOut:
- // If a key-press triggers an action that e. g. opens a dialog, the
- // widget gets no key-release event. Assure that the pressed state
- // is reset to prevent accidently setting the current index during a selection.
- m_updateCurrentIndex = false;
- break;
default:
break;
}
}
}
-void DolphinTreeView::keyPressEvent(QKeyEvent* event)
-{
- // See DolphinTreeView::currentChanged() for more information about m_updateCurrentIndex
- m_updateCurrentIndex = (event->modifiers() == Qt::NoModifier);
- QTreeView::keyPressEvent(event);
-}
-
-void DolphinTreeView::keyReleaseEvent(QKeyEvent* event)
-{
- QTreeView::keyReleaseEvent(event);
- m_updateCurrentIndex = false;
-}
-
-void DolphinTreeView::currentChanged(const QModelIndex& current, const QModelIndex& previous)
-{
- QTreeView::currentChanged(current, previous);
-
- // Stay consistent with QListView: When changing the current index by key presses
- // without modifiers, also change the selection.
- if (m_updateCurrentIndex) {
- setCurrentIndex(current);
- }
-}
-
QModelIndex DolphinTreeView::indexAt(const QPoint& point) const
{
// The blank portion of the name column counts as empty space
virtual ~DolphinTreeView();
virtual QModelIndex indexAt (const QPoint& point) const;
+ virtual void keyboardSearch(const QString & search);
virtual QRegion visualRegionForSelection(const QItemSelection& selection) const;
protected:
virtual void dragMoveEvent(QDragMoveEvent* event);
virtual void dragLeaveEvent(QDragLeaveEvent* event);
virtual void paintEvent(QPaintEvent* event);
- virtual void keyPressEvent(QKeyEvent* event);
- virtual void keyReleaseEvent(QKeyEvent* event);
- virtual void currentChanged(const QModelIndex& current, const QModelIndex& previous);
virtual void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags command);
virtual void scrollTo(const QModelIndex& index, ScrollHint hint = EnsureVisible);
bool isAboveExpandingToggle(const QPoint& pos) const;
private:
- bool m_updateCurrentIndex;
bool m_expandingTogglePressed;
bool m_useDefaultIndexAt; // true, if QTreeView::indexAt() should be used
bool m_ignoreScrollTo; // true if calls to scrollTo(...) should do nothing.