From 58637529883e903f51878f2c9d26b3388932f737 Mon Sep 17 00:00:00 2001 From: Steffen Baranowsky Date: Mon, 20 Feb 2017 17:44:21 +0100 Subject: [PATCH] elide the text on track button if it's too lon... (#3328) * Elide the text on track button if it's too long * Remove setText() from paintEvent * Dynamic trackLabelButton width --- include/TrackLabelButton.h | 3 ++ src/gui/widgets/TrackLabelButton.cpp | 54 +++++++++++++++++++++------- 2 files changed, 44 insertions(+), 13 deletions(-) diff --git a/include/TrackLabelButton.h b/include/TrackLabelButton.h index d0b0cbd37d4..5b0e6c4a811 100644 --- a/include/TrackLabelButton.h +++ b/include/TrackLabelButton.h @@ -44,6 +44,7 @@ class TrackLabelButton : public QToolButton public slots: void rename(); void renameFinished(); + void nameChanged(); protected: @@ -53,6 +54,7 @@ public slots: virtual void mouseDoubleClickEvent( QMouseEvent * _me ); virtual void mouseReleaseEvent( QMouseEvent * _me ); virtual void paintEvent( QPaintEvent * _pe ); + virtual void resizeEvent( QResizeEvent * _re ); private: @@ -60,6 +62,7 @@ public slots: QString m_iconName; QLineEdit * m_renameLineEdit; QRect m_buttonRect; + QString elideName( const QString &name ); } ; diff --git a/src/gui/widgets/TrackLabelButton.cpp b/src/gui/widgets/TrackLabelButton.cpp index 5a013ba890f..8f74d29e253 100644 --- a/src/gui/widgets/TrackLabelButton.cpp +++ b/src/gui/widgets/TrackLabelButton.cpp @@ -62,10 +62,9 @@ TrackLabelButton::TrackLabelButton( TrackView * _tv, QWidget * _parent ) : m_renameLineEdit->hide(); connect( m_renameLineEdit, SIGNAL( editingFinished() ), this, SLOT( renameFinished() ) ); } - setIconSize( QSize( 24, 24 ) ); - setText( " " ); connect( m_trackView->getTrack(), SIGNAL( dataChanged() ), this, SLOT( update() ) ); + connect( m_trackView->getTrack(), SIGNAL( nameChanged() ), this, SLOT( nameChanged() ) ); } @@ -109,11 +108,14 @@ void TrackLabelButton::renameFinished() if( !( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) ) { m_renameLineEdit->hide(); - if( m_renameLineEdit->text() != text() ) + if( m_renameLineEdit->text() != "" ) { - setText( m_renameLineEdit->text() ); - m_trackView->getTrack()->setName( m_renameLineEdit->text() ); - Engine::getSong()->setModified(); + if( m_renameLineEdit->text() != m_trackView->getTrack()->name() ) + { + setText( elideName( m_renameLineEdit->text() ) ); + m_trackView->getTrack()->setName( m_renameLineEdit->text() ); + Engine::getSong()->setModified(); + } } } } @@ -121,6 +123,14 @@ void TrackLabelButton::renameFinished() +void TrackLabelButton::nameChanged() +{ + setText( elideName( m_trackView->getTrack()->name() ) ); +} + + + + void TrackLabelButton::dragEnterEvent( QDragEnterEvent * _dee ) { m_trackView->dragEnterEvent( _dee ); @@ -138,6 +148,7 @@ void TrackLabelButton::dropEvent( QDropEvent * _de ) + void TrackLabelButton::mousePressEvent( QMouseEvent * _me ) { if( _me->button() == Qt::RightButton ) @@ -193,14 +204,31 @@ void TrackLabelButton::paintEvent( QPaintEvent * _pe ) } } } - if( ConfigManager::inst()->value( "ui", "compacttrackbuttons" ).toInt() ) + QToolButton::paintEvent( _pe ); +} + + + + +void TrackLabelButton::resizeEvent(QResizeEvent *_re) +{ + setText( elideName( m_trackView->getTrack()->displayName() ) ); +} + + + + +QString TrackLabelButton::elideName( const QString &name ) +{ + const int spacing = 16; + const int maxTextWidth = width() - spacing - iconSize().width(); + if( maxTextWidth < 1 ) { - setText( " " ); setToolTip( m_trackView->getTrack()->displayName() ); + return QString( " " ); } - else - { - setText( m_trackView->getTrack()->displayName() ); - } - QToolButton::paintEvent( _pe ); + setToolTip( "" ); + QFontMetrics metrics( font() ); + QString elidedName = metrics.elidedText( name, Qt::ElideRight, maxTextWidth ); + return elidedName; }