From: Manuel Nickschas Date: Tue, 8 Sep 2009 21:52:10 +0000 (+0200) Subject: Allow configuring the resizing mode for StyledLabel X-Git-Tag: 0.5-rc2~82 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=67a12e19088282f2218b602463cae3de5bb5baad Allow configuring the resizing mode for StyledLabel We now allow either no auto-resize (e.g., always one line with tooltip), always adjust to contents, or resize only on mouse hover. --- diff --git a/src/uisupport/styledlabel.cpp b/src/uisupport/styledlabel.cpp index 372b9bbe..a87aa8ce 100644 --- a/src/uisupport/styledlabel.cpp +++ b/src/uisupport/styledlabel.cpp @@ -30,7 +30,8 @@ StyledLabel::StyledLabel(QWidget *parent) : QFrame(parent), _wrapMode(QTextOption::NoWrap), _alignment(Qt::AlignVCenter|Qt::AlignLeft), - _toolTipEnabled(true) + _toolTipEnabled(true), + _resizeMode(NoResize) { setMouseTracking(true); @@ -40,6 +41,12 @@ StyledLabel::StyledLabel(QWidget *parent) _layout.setTextOption(opt); } +void StyledLabel::setCustomFont(const QFont &font) { + setFont(font); + _layout.setFont(font); + setText(_layout.text()); +} + void StyledLabel::setWrapMode(QTextOption::WrapMode mode) { if(_wrapMode == mode) return; @@ -64,6 +71,17 @@ void StyledLabel::setAlignment(Qt::Alignment alignment) { layout(); } +void StyledLabel::setResizeMode(ResizeMode mode) { + if(_resizeMode == mode) + return; + + _resizeMode = mode; + if(mode == DynamicResize) + setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); + else + setWrapMode(QTextOption::NoWrap); +} + void StyledLabel::resizeEvent(QResizeEvent *event) { QFrame::resizeEvent(event); @@ -175,8 +193,15 @@ void StyledLabel::mouseMoveEvent(QMouseEvent *event) { } } +void StyledLabel::enterEvent(QEvent *) { + if(resizeMode() == ResizeOnHover) + setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); +} + void StyledLabel::leaveEvent(QEvent *) { endHoverMode(); + if(resizeMode() == ResizeOnHover) + setWrapMode(QTextOption::NoWrap); } void StyledLabel::mousePressEvent(QMouseEvent *event) { diff --git a/src/uisupport/styledlabel.h b/src/uisupport/styledlabel.h index de412a87..ef9bad25 100644 --- a/src/uisupport/styledlabel.h +++ b/src/uisupport/styledlabel.h @@ -30,9 +30,16 @@ class StyledLabel : public QFrame { Q_OBJECT public: + enum ResizeMode { + NoResize, + DynamicResize, + ResizeOnHover + }; + StyledLabel(QWidget *parent = 0); void setText(const QString &text); + void setCustomFont(const QFont &font); virtual QSize sizeHint() const; //virtual QSize minimumSizeHint() const; @@ -46,12 +53,16 @@ public: inline bool toolTipEnabled() const { return _toolTipEnabled; } void setToolTipEnabled(bool); + inline ResizeMode resizeMode() const { return _resizeMode; } + void setResizeMode(ResizeMode); + signals: void clickableActivated(const Clickable &click); protected: virtual void paintEvent(QPaintEvent *event); virtual void resizeEvent(QResizeEvent *event); + virtual void enterEvent(QEvent *); virtual void leaveEvent(QEvent *); virtual void mouseMoveEvent(QMouseEvent *event); virtual void mousePressEvent(QMouseEvent *event); @@ -65,6 +76,7 @@ private: QTextLayout _layout; ClickableList _clickables; bool _toolTipEnabled; + ResizeMode _resizeMode; QList _layoutList; QVector _extraLayoutList;