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
This commit is contained in:
Steffen Baranowsky
2017-02-20 17:44:21 +01:00
committed by Tres Finocchiaro
parent 2c8e9a0957
commit 5863752988
2 changed files with 46 additions and 15 deletions

View File

@@ -44,6 +44,7 @@ public:
public slots:
void rename();
void renameFinished();
void nameChanged();
protected:
@@ -53,6 +54,7 @@ protected:
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 @@ private:
QString m_iconName;
QLineEdit * m_renameLineEdit;
QRect m_buttonRect;
QString elideName( const QString &name );
} ;

View File

@@ -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() )
{
setText( " " );
setToolTip( m_trackView->getTrack()->displayName() );
}
else
{
setText( m_trackView->getTrack()->displayName() );
}
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 )
{
setToolTip( m_trackView->getTrack()->displayName() );
return QString( " " );
}
setToolTip( "" );
QFontMetrics metrics( font() );
QString elidedName = metrics.elidedText( name, Qt::ElideRight, maxTextWidth );
return elidedName;
}