Allow the TabCompleter to complete channel names as well.
[quassel.git] / src / uisupport / styledlabel.cpp
index 372b9bb..38250ea 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);
 
@@ -127,7 +145,7 @@ void StyledLabel::updateToolTip() {
 
 void StyledLabel::layout() {
   qreal h = 0;
-  qreal w = frameRect().width() - 2*frameWidth();
+  qreal w = contentsRect().width();
 
   _layout.beginLayout();
   forever {
@@ -145,11 +163,12 @@ void StyledLabel::layout() {
   update();
 }
 
-void StyledLabel::paintEvent(QPaintEvent *) {
+void StyledLabel::paintEvent(QPaintEvent *e) {
+  QFrame::paintEvent(e);
   QPainter painter(this);
 
-  qreal y = (frameRect().height() - _layout.boundingRect().height()) / 2;
-  _layout.draw(&painter, QPointF(0, y), _extraLayoutList);
+  qreal y = contentsRect().y() + (contentsRect().height() - _layout.boundingRect().height()) / 2;
+  _layout.draw(&painter, QPointF(contentsRect().x(), y), _extraLayoutList);
 }
 
 int StyledLabel::posToCursor(const QPointF &pos) {
@@ -175,8 +194,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) {