diff --git a/plugins/projectmanagerview/projectmanagerview.cpp b/plugins/projectmanagerview/projectmanagerview.cpp --- a/plugins/projectmanagerview/projectmanagerview.cpp +++ b/plugins/projectmanagerview/projectmanagerview.cpp @@ -140,6 +140,7 @@ // Need to set this to get horizontal scrollbar. Also needs to be done after // the setModel call m_ui->projectTreeView->header()->setSectionResizeMode( QHeaderView::ResizeToContents ); + m_ui->projectTreeView->header()->setStretchLastSection(false); } bool ProjectManagerView::eventFilter(QObject* obj, QEvent* event) diff --git a/plugins/projectmanagerview/projectmanagerview.ui b/plugins/projectmanagerview/projectmanagerview.ui --- a/plugins/projectmanagerview/projectmanagerview.ui +++ b/plugins/projectmanagerview/projectmanagerview.ui @@ -17,7 +17,16 @@ Project Manager - + + 0 + + + 0 + + + 0 + + 0 @@ -38,6 +47,12 @@ Project Overview + + QAbstractScrollArea::AdjustToContents + + + Qt::ElideNone + false diff --git a/plugins/projectmanagerview/projectmodelitemdelegate.cpp b/plugins/projectmanagerview/projectmodelitemdelegate.cpp --- a/plugins/projectmanagerview/projectmodelitemdelegate.cpp +++ b/plugins/projectmanagerview/projectmodelitemdelegate.cpp @@ -113,7 +113,7 @@ void ProjectModelItemDelegate::drawBranchName(QPainter* painter, const QStyleOptionViewItem& option, const QRect& rect, const QString& branchName) const { - QString text = option.fontMetrics.elidedText(branchName, Qt::ElideRight, rect.width()); + QString text = option.fontMetrics.elidedText(branchName, Qt::ElideNone, rect.width()); bool selected = option.state & QStyle::State_Selected; QPalette::ColorGroup colorGroup = selected ? QPalette::Active : QPalette::Disabled; @@ -156,5 +156,5 @@ } QFontMetrics fm(painter->fontMetrics()); - painter->drawText(rect, fm.elidedText(text, Qt::ElideRight, rect.width())); + painter->drawText(rect, fm.elidedText(text, Qt::ElideNone, rect.width())); } diff --git a/plugins/projectmanagerview/projecttreeview.h b/plugins/projectmanagerview/projecttreeview.h --- a/plugins/projectmanagerview/projecttreeview.h +++ b/plugins/projectmanagerview/projecttreeview.h @@ -69,7 +69,9 @@ protected: void keyPressEvent(QKeyEvent *event) override; + void resizeEvent(QResizeEvent *event) override; void dropEvent(QDropEvent* event) override; + void wheelEvent(QWheelEvent *event) override; void drawBranches(QPainter* painter, const QRect& rect, const QModelIndex& index) const override; private: @@ -81,6 +83,7 @@ QPointer m_previousSelection; QPointer m_tooltip; QPersistentModelIndex m_idx; + bool m_isCocoa; }; #endif // KDEVPLATFORM_PLUGIN_PROJECTTREEVIEW_H diff --git a/plugins/projectmanagerview/projecttreeview.cpp b/plugins/projectmanagerview/projecttreeview.cpp --- a/plugins/projectmanagerview/projecttreeview.cpp +++ b/plugins/projectmanagerview/projecttreeview.cpp @@ -114,6 +114,9 @@ ProjectTreeView::ProjectTreeView( QWidget *parent ) : QTreeView( parent ), m_previousSelection ( nullptr ) +#ifdef Q_OS_MACOS + , m_isCocoa(QGuiApplication::platformName() == QStringLiteral("cocoa")) +#endif { header()->hide(); @@ -130,6 +133,8 @@ setAutoExpandDelay(300); setItemDelegate(new ProjectModelItemDelegate(this)); + setTextElideMode(Qt::ElideNone); + connect( this, &ProjectTreeView::customContextMenuRequested, this, &ProjectTreeView::popupContextMenu ); connect( this, &ProjectTreeView::activated, this, &ProjectTreeView::slotActivated ); @@ -511,6 +516,36 @@ QTreeView::keyPressEvent(event); } +void ProjectTreeView::resizeEvent(QResizeEvent *event) +{ + header()->setMinimumSectionSize(viewport()->width()); + QTreeView::resizeEvent(event); +} + +void ProjectTreeView::wheelEvent(QWheelEvent *e) +{ + if ((e->pixelDelta().x() !=0 || e->angleDelta().x()!= 0 + || e->orientation() == Qt::Orientation::Horizontal) +#ifdef Q_OS_MACOS + // Cocoa: allow horizontal scrolling controlled by a physical mouse wheel + && (!m_isCocoa || e->source() != Qt::MouseEventNotSynthesized) +#endif + ){ + QPoint pixelDelta(e->pixelDelta()), angleDelta(e->angleDelta()); + pixelDelta.setX(0); + angleDelta.setX(0); + // discard the original event + e->ignore(); + if (!pixelDelta.isNull() || !angleDelta.isNull()) { + QWheelEvent filtered(e->posF(), e->globalPosF(), pixelDelta, angleDelta, + e->delta(), Qt::Orientation::Vertical, e->buttons(), + e->modifiers(), e->phase(), Qt::MouseEventSynthesizedByApplication, e->inverted()); + QCoreApplication::sendEvent(this, &filtered); + } + } + QTreeView::wheelEvent(e); +} + void ProjectTreeView::drawBranches(QPainter* painter, const QRect& rect, const QModelIndex& index) const { if (WidgetColorizer::colorizeByProject()) {