Allow configuring the resizing mode for StyledLabel
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 8 Sep 2009 21:52:10 +0000 (23:52 +0200)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 8 Sep 2009 22:02:25 +0000 (00:02 +0200)
We now allow either no auto-resize (e.g., always one line with tooltip), always adjust
to contents, or resize only on mouse hover.

src/uisupport/styledlabel.cpp
src/uisupport/styledlabel.h

index 372b9bb..a87aa8c 100644 (file)
@@ -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) {
index de412a8..ef9bad2 100644 (file)
@@ -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<QTextLayout::FormatRange> _layoutList;
   QVector<QTextLayout::FormatRange> _extraLayoutList;