diff --git a/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp b/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp index 36c04a2dd..65ac1564b 100644 --- a/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp +++ b/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp @@ -23,6 +23,7 @@ #include "dynamic/GeneratorInterface.h" #include "dynamic/DynamicControl.h" #include "utils/tomahawkutils.h" +#include "utils/elidedlabel.h" #include <QLabel> #include <QStackedLayout> @@ -85,7 +86,7 @@ CollapsibleControls::init() m_summaryLayout->setMargin( 0 ); m_summaryWidget->setContentsMargins( 3, 0, 0, 0 ); - m_summary = new QLabel( m_summaryWidget ); + m_summary = new ElidedLabel( m_summaryWidget ); QFont f = m_summary->font(); f.setPointSize( f.pointSize() + 1 ); f.setBold( true ); diff --git a/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.h b/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.h index 36818b2dc..a242769d0 100644 --- a/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.h +++ b/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.h @@ -27,7 +27,7 @@ class QPaintEvent; class QHBoxLayout; class QTimeLine; class QToolButton; -class QLabel; +class ElidedLabel; class QStackedLayout; namespace Tomahawk { @@ -67,7 +67,7 @@ private: QWidget* m_summaryWidget; QHBoxLayout* m_summaryLayout; - QLabel* m_summary; + ElidedLabel* m_summary; QStackedLayout* m_expandL; QToolButton* m_summaryExpand; diff --git a/src/libtomahawk/playlist/infobar/infobar.cpp b/src/libtomahawk/playlist/infobar/infobar.cpp index c1c3a6e12..569c8a247 100644 --- a/src/libtomahawk/playlist/infobar/infobar.cpp +++ b/src/libtomahawk/playlist/infobar/infobar.cpp @@ -43,7 +43,7 @@ InfoBar::InfoBar( QWidget* parent ) boldFont.setPixelSize( 12 ); ui->descriptionLabel->setFont( boldFont ); - ui->descriptionLabel->setMargin( 2 ); + ui->descriptionLabel->setMargin( 10 ); QPalette whitePal = ui->captionLabel->palette(); whitePal.setColor( QPalette::Foreground, Qt::white ); @@ -52,6 +52,8 @@ InfoBar::InfoBar( QWidget* parent ) ui->descriptionLabel->setPalette( whitePal ); ui->captionLabel->setText( QString() ); + ui->captionLabel->setMargin( 6 ); + ui->descriptionLabel->setText( QString() ); ui->imageLabel->setText( QString() ); diff --git a/src/libtomahawk/playlist/infobar/infobar.ui b/src/libtomahawk/playlist/infobar/infobar.ui index 043b8f5d7..764fd040a 100644 --- a/src/libtomahawk/playlist/infobar/infobar.ui +++ b/src/libtomahawk/playlist/infobar/infobar.ui @@ -74,7 +74,7 @@ <item> <layout class="QVBoxLayout" name="verticalLayout"> <item> - <widget class="QLabel" name="captionLabel"> + <widget class="ElidedLabel" name="captionLabel"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> @@ -87,7 +87,7 @@ </widget> </item> <item> - <widget class="QLabel" name="descriptionLabel"> + <widget class="ElidedLabel" name="descriptionLabel"> <property name="sizePolicy"> <sizepolicy hsizetype="Expanding" vsizetype="Preferred"> <horstretch>0</horstretch> @@ -119,6 +119,13 @@ </item> </layout> </widget> + <customwidgets> + <customwidget> + <class>ElidedLabel</class> + <extends>QLabel</extends> + <header>utils/elidedlabel.h</header> + </customwidget> + </customwidgets> <resources/> <connections/> </ui> diff --git a/src/libtomahawk/utils/elidedlabel.cpp b/src/libtomahawk/utils/elidedlabel.cpp index c490c7c85..9b4343383 100644 --- a/src/libtomahawk/utils/elidedlabel.cpp +++ b/src/libtomahawk/utils/elidedlabel.cpp @@ -22,6 +22,7 @@ #include <QPainter> #include <QFontMetrics> #include <QApplication> +#include <QRect> ElidedLabel::ElidedLabel( QWidget* parent, Qt::WindowFlags flags ) @@ -65,16 +66,16 @@ ElidedLabel::setText( const QString& text ) Qt::Alignment ElidedLabel::alignment() const { - return align; + return m_align; } void ElidedLabel::setAlignment( Qt::Alignment alignment ) { - if ( this->align != alignment ) + if ( m_align != alignment ) { - this->align = alignment; + m_align = alignment; update(); // no geometry change, repaint is sufficient } } @@ -83,27 +84,40 @@ ElidedLabel::setAlignment( Qt::Alignment alignment ) Qt::TextElideMode ElidedLabel::elideMode() const { - return mode; + return m_mode; } void ElidedLabel::setElideMode( Qt::TextElideMode mode ) { - if ( this->mode != mode ) + if ( m_mode != mode ) { - this->mode = mode; + m_mode = mode; updateLabel(); } } +void +ElidedLabel::setMargin( int margin ) +{ + m_margin = margin; +} + +int +ElidedLabel::margin() const +{ + return m_margin; +} + void ElidedLabel::init( const QString& txt ) { m_text = txt; - align = Qt::AlignLeft; - mode = Qt::ElideMiddle; + m_align = Qt::AlignLeft; + m_mode = Qt::ElideMiddle; + m_margin = 0; setContentsMargins( 0, 0, 0, 0 ); } @@ -128,7 +142,7 @@ ElidedLabel::sizeHint() const QSize ElidedLabel::minimumSizeHint() const { - switch ( mode ) + switch ( m_mode ) { case Qt::ElideNone: return sizeHint(); @@ -149,8 +163,10 @@ ElidedLabel::paintEvent( QPaintEvent* event ) QFrame::paintEvent( event ); QPainter p( this ); QRect r = contentsRect(); - const QString elidedText = fontMetrics().elidedText( m_text, mode, r.width() ); - p.drawText( r, align, elidedText ); + r.adjust( m_margin, m_margin, -m_margin, -m_margin ); + + const QString elidedText = fontMetrics().elidedText( m_text, m_mode, r.width() ); + p.drawText( r, m_align, elidedText ); } @@ -176,7 +192,7 @@ void ElidedLabel::mousePressEvent( QMouseEvent* event ) { QFrame::mousePressEvent( event ); - time.start(); + m_time.start(); } @@ -184,6 +200,6 @@ void ElidedLabel::mouseReleaseEvent( QMouseEvent* event ) { QFrame::mouseReleaseEvent( event ); - if ( time.elapsed() < qApp->doubleClickInterval() ) + if ( m_time.elapsed() < qApp->doubleClickInterval() ) emit clicked(); } diff --git a/src/libtomahawk/utils/elidedlabel.h b/src/libtomahawk/utils/elidedlabel.h index e78355ec0..2f45e1c97 100644 --- a/src/libtomahawk/utils/elidedlabel.h +++ b/src/libtomahawk/utils/elidedlabel.h @@ -44,6 +44,9 @@ public: Qt::TextElideMode elideMode() const; void setElideMode( Qt::TextElideMode mode ); + void setMargin( int margin ); + int margin() const; + virtual QSize sizeHint() const; virtual QSize minimumSizeHint() const; @@ -64,10 +67,11 @@ protected: virtual void paintEvent( QPaintEvent* event ); private: - QTime time; + QTime m_time; QString m_text; - Qt::Alignment align; - Qt::TextElideMode mode; + Qt::Alignment m_align; + Qt::TextElideMode m_mode; + int m_margin; }; #endif // ELIDEDLABEL_H