diff --git a/include/FileBrowser.h b/include/FileBrowser.h index a10e5452e..11bd612c4 100644 --- a/include/FileBrowser.h +++ b/include/FileBrowser.h @@ -147,6 +147,8 @@ protected: void keyReleaseEvent( QKeyEvent * ke ) override; void hideEvent( QHideEvent * he ) override; void focusOutEvent( QFocusEvent * fe ) override; + void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) override; + void wheelEvent(QWheelEvent * event) override; private: diff --git a/src/gui/FileBrowser.cpp b/src/gui/FileBrowser.cpp index 9106c7215..bd30d22d1 100644 --- a/src/gui/FileBrowser.cpp +++ b/src/gui/FileBrowser.cpp @@ -29,12 +29,14 @@ #include #include #include +#include #include #include #include #include #include #include +#include #include #include #include @@ -461,6 +463,11 @@ FileBrowserTreeWidget::FileBrowserTreeWidget(QWidget * parent ) : m_pressPos(), m_previewPlayHandle( nullptr ) { + setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded); + setHorizontalScrollMode(ScrollPerPixel); + header()->setStretchLastSection(false); + header()->setSectionResizeMode(QHeaderView::ResizeToContents); + setColumnCount( 1 ); headerItem()->setHidden( true ); setSortingEnabled( false ); @@ -500,6 +507,28 @@ QList FileBrowserTreeWidget::expandedDirs( QTreeWidgetItem * item ) con return dirs; } +void FileBrowserTreeWidget::scrollTo(const QModelIndex &index, ScrollHint hint) +{ + // Overide scrollTo to ensure the horizontal scrollbar stay in place + int barPos = horizontalScrollBar()->value(); + QTreeWidget::scrollTo(index, hint); + horizontalScrollBar()->setValue(barPos); +} + +void FileBrowserTreeWidget::wheelEvent(QWheelEvent * event) +{ + // When shift is pressed, scroll horizontally instead of vertically + if (event->modifiers() & Qt::ShiftModifier) + { + horizontalScrollBar()->setValue( + horizontalScrollBar()->value() - event->angleDelta().y()); + event->accept(); + } + else + { + QTreeWidget::wheelEvent(event); + } +} void FileBrowserTreeWidget::keyPressEvent(QKeyEvent * ke ) {