diff --git a/src/libtomahawk/CMakeLists.txt b/src/libtomahawk/CMakeLists.txt index 118eff7d3..057526ed4 100644 --- a/src/libtomahawk/CMakeLists.txt +++ b/src/libtomahawk/CMakeLists.txt @@ -171,7 +171,6 @@ set( libSources utils/tomahawkutils.cpp utils/querylabel.cpp - utils/elidedlabel.cpp utils/imagebutton.cpp utils/logger.cpp utils/proxystyle.cpp @@ -185,6 +184,7 @@ set( libSources utils/shortenedlinkparser.cpp utils/stylehelper.cpp + widgets/elidedlabel.cpp widgets/newplaylistwidget.cpp widgets/searchwidget.cpp widgets/SeekSlider.cpp @@ -371,7 +371,6 @@ set( libHeaders playlist/dynamic/database/DatabaseGenerator.h utils/querylabel.h - utils/elidedlabel.h utils/animatedcounterlabel.h utils/imagebutton.h utils/widgetdragfilter.h @@ -384,6 +383,7 @@ set( libHeaders utils/shortenedlinkparser.h utils/stylehelper.h + widgets/elidedlabel.h widgets/newplaylistwidget.h widgets/searchwidget.h widgets/SeekSlider.h diff --git a/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp b/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp index 17f63d244..fb464a43e 100644 --- a/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp +++ b/src/libtomahawk/playlist/dynamic/widgets/CollapsibleControls.cpp @@ -23,7 +23,7 @@ #include "dynamic/GeneratorInterface.h" #include "dynamic/DynamicControl.h" #include "utils/tomahawkutils.h" -#include "utils/elidedlabel.h" +#include "widgets/elidedlabel.h" #include #include diff --git a/src/libtomahawk/playlist/infobar/infobar.ui b/src/libtomahawk/playlist/infobar/infobar.ui index 70fd1c7c5..7379ef909 100644 --- a/src/libtomahawk/playlist/infobar/infobar.ui +++ b/src/libtomahawk/playlist/infobar/infobar.ui @@ -121,7 +121,7 @@ QLayout::SetMaximumSize - + 0 @@ -174,7 +174,7 @@ ElidedLabel QLabel -
utils/elidedlabel.h
+
widgets/elidedlabel.h
diff --git a/src/libtomahawk/utils/elidedlabel.cpp b/src/libtomahawk/widgets/elidedlabel.cpp similarity index 78% rename from src/libtomahawk/utils/elidedlabel.cpp rename to src/libtomahawk/widgets/elidedlabel.cpp index 66fe1f037..e829f06de 100644 --- a/src/libtomahawk/utils/elidedlabel.cpp +++ b/src/libtomahawk/widgets/elidedlabel.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include "utils/logger.h" @@ -37,7 +38,7 @@ ElidedLabel::ElidedLabel( QWidget* parent, Qt::WindowFlags flags ) ElidedLabel::ElidedLabel( const QString& text, QWidget* parent, Qt::WindowFlags flags ) : QFrame( parent, flags ) { - init(text); + init( text ); } @@ -130,6 +131,8 @@ ElidedLabel::init( const QString& txt ) m_align = Qt::AlignLeft; m_mode = Qt::ElideMiddle; m_margin = 0; + m_multiLine = false; + setContentsMargins( 0, 0, 0, 0 ); } @@ -176,8 +179,35 @@ ElidedLabel::paintEvent( QPaintEvent* event ) QRect r = contentsRect(); 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 ); + if ( m_multiLine ) + { + QTextLayout textLayout( m_text ); + textLayout.setFont( p.font() ); + int widthUsed = 0; + int lineCount = 0; + int lineLimit = r.height() / fontMetrics().height(); + + textLayout.beginLayout(); + while ( ++lineCount < lineLimit ) + { + QTextLine line = textLayout.createLine(); + if ( !line.isValid() ) + break; + + line.setLineWidth( r.width() ); + widthUsed += line.naturalTextWidth(); + } + textLayout.endLayout(); + widthUsed += r.width(); + + const QString elidedText = fontMetrics().elidedText( m_text, Qt::ElideRight, widthUsed ); + p.drawText( r, Qt::AlignLeft | Qt::AlignTop | Qt::TextWordWrap, elidedText ); + } + else + { + const QString elidedText = fontMetrics().elidedText( m_text, m_mode, r.width() ); + p.drawText( r, m_align, elidedText ); + } } diff --git a/src/libtomahawk/utils/elidedlabel.h b/src/libtomahawk/widgets/elidedlabel.h similarity index 96% rename from src/libtomahawk/utils/elidedlabel.h rename to src/libtomahawk/widgets/elidedlabel.h index 00198d888..d825b503b 100644 --- a/src/libtomahawk/utils/elidedlabel.h +++ b/src/libtomahawk/widgets/elidedlabel.h @@ -57,6 +57,7 @@ public: public slots: void setText( const QString& text ); + void setWordWrap( bool b ) { m_multiLine = b; } signals: void clicked(); @@ -74,6 +75,7 @@ private: Qt::Alignment m_align; Qt::TextElideMode m_mode; int m_margin; + bool m_multiLine; }; #endif // ELIDEDLABEL_H