Replace deprecated additionalFormats with formats
[quassel.git] / src / uisupport / styledlabel.cpp
index cf38229..f54bea8 100644 (file)
@@ -1,37 +1,35 @@
 /***************************************************************************
-*   Copyright (C) 2005-09 by the Quassel Project                          *
-*   devel@quassel-irc.org                                                 *
-*                                                                         *
-*   This program is free software; you can redistribute it and/or modify  *
-*   it under the terms of the GNU General Public License as published by  *
-*   the Free Software Foundation; either version 2 of the License, or     *
-*   (at your option) version 3.                                           *
-*                                                                         *
-*   This program is distributed in the hope that it will be useful,       *
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
-*   GNU General Public License for more details.                          *
-*                                                                         *
-*   You should have received a copy of the GNU General Public License     *
-*   along with this program; if not, write to the                         *
-*   Free Software Foundation, Inc.,                                       *
-*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
-***************************************************************************/
+ *   Copyright (C) 2005-2019 by the Quassel Project                        *
+ *   devel@quassel-irc.org                                                 *
+ *                                                                         *
+ *   This program is free software; you can redistribute it and/or modify  *
+ *   it under the terms of the GNU General Public License as published by  *
+ *   the Free Software Foundation; either version 2 of the License, or     *
+ *   (at your option) version 3.                                           *
+ *                                                                         *
+ *   This program is distributed in the hope that it will be useful,       *
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
+ *   GNU General Public License for more details.                          *
+ *                                                                         *
+ *   You should have received a copy of the GNU General Public License     *
+ *   along with this program; if not, write to the                         *
+ *   Free Software Foundation, Inc.,                                       *
+ *   51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.         *
+ ***************************************************************************/
+
+#include "styledlabel.h"
 
 #include <QPainter>
 #include <QTextDocument>
 #include <QTextLayout>
 
 #include "graphicalui.h"
-#include "styledlabel.h"
 #include "uistyle.h"
 
-StyledLabel::StyledLabel(QWidget *parent)
-    : QFrame(parent),
-    _wrapMode(QTextOption::NoWrap),
-    _alignment(Qt::AlignVCenter|Qt::AlignLeft),
-    _toolTipEnabled(true),
-    _resizeMode(NoResize)
+StyledLabel::StyledLabel(QWidget* parent)
+    : QFrame(parent)
+    , _alignment(Qt::AlignVCenter | Qt::AlignLeft)
 {
     setMouseTracking(true);
 
@@ -41,15 +39,13 @@ StyledLabel::StyledLabel(QWidget *parent)
     _layout.setTextOption(opt);
 }
 
-
-void StyledLabel::setCustomFont(const QFont &font)
+void StyledLabel::setCustomFont(const QFont& font)
 {
     setFont(font);
     _layout.setFont(font);
     setText(_layout.text());
 }
 
-
 void StyledLabel::setWrapMode(QTextOption::WrapMode mode)
 {
     if (_wrapMode == mode)
@@ -63,7 +59,6 @@ void StyledLabel::setWrapMode(QTextOption::WrapMode mode)
     layout();
 }
 
-
 void StyledLabel::setAlignment(Qt::Alignment alignment)
 {
     if (_alignment == alignment)
@@ -77,7 +72,6 @@ void StyledLabel::setAlignment(Qt::Alignment alignment)
     layout();
 }
 
-
 void StyledLabel::setResizeMode(ResizeMode mode)
 {
     if (_resizeMode == mode)
@@ -90,21 +84,18 @@ void StyledLabel::setResizeMode(ResizeMode mode)
         setWrapMode(QTextOption::NoWrap);
 }
 
-
-void StyledLabel::resizeEvent(QResizeEvent *event)
+void StyledLabel::resizeEvent(QResizeEvent* event)
 {
     QFrame::resizeEvent(event);
 
     layout();
 }
 
-
 QSize StyledLabel::sizeHint() const
 {
     return _sizeHint;
 }
 
-
 void StyledLabel::updateSizeHint()
 {
     QSize sh;
@@ -117,13 +108,10 @@ void StyledLabel::updateSizeHint()
     }
 }
 
-
-void StyledLabel::setText(const QString &text)
+void StyledLabel::setText(const QString& text)
 {
-    UiStyle *style = GraphicalUi::uiStyle();
-
-    UiStyle::StyledString sstr = style->styleString(style->mircToInternal(text), UiStyle::PlainMsg);
-    QList<QTextLayout::FormatRange> layoutList = style->toTextLayoutList(sstr.formatList, sstr.plainText.length(), 0);
+    UiStyle::StyledString sstr = UiStyle::styleString(UiStyle::mircToInternal(text), UiStyle::FormatType::PlainMsg);
+    UiStyle::FormatContainer layoutList = GraphicalUi::uiStyle()->toTextLayoutList(sstr.formatList, sstr.plainText.length(), UiStyle::MessageLabel::None);
 
     // Use default font rather than the style's
     QTextLayout::FormatRange fmtRange;
@@ -134,7 +122,7 @@ void StyledLabel::setText(const QString &text)
 
     // Mark URLs
     _clickables = ClickableList::fromString(sstr.plainText);
-    foreach(Clickable click, _clickables) {
+    foreach (Clickable click, _clickables) {
         if (click.type() == Clickable::Url) {
             QTextLayout::FormatRange range;
             range.start = click.start();
@@ -145,30 +133,29 @@ void StyledLabel::setText(const QString &text)
     }
 
     _layout.setText(sstr.plainText);
-    _layout.setAdditionalFormats(layoutList);
+    UiStyle::setTextLayoutFormats(_layout, layoutList);
 
     layout();
 
     endHoverMode();
 }
 
-
 void StyledLabel::updateToolTip()
 {
-    if (frameRect().width() - 2*frameWidth() < _layout.minimumWidth())
-        setToolTip(QString("<qt>%1</qt>").arg(Qt::escape(_layout.text())));  // only rich text gets wordwrapped!
+    if (frameRect().width() - 2 * frameWidth() < _layout.minimumWidth())
+        setToolTip(QString("<qt>%1</qt>").arg(_layout.text().toHtmlEscaped()));  // only rich text gets wordwrapped!
     else
         setToolTip(QString());
 }
 
-
 void StyledLabel::layout()
 {
     qreal h = 0;
     qreal w = contentsRect().width();
 
     _layout.beginLayout();
-    forever {
+    forever
+    {
         QTextLine line = _layout.createLine();
         if (!line.isValid())
             break;
@@ -183,8 +170,7 @@ void StyledLabel::layout()
     update();
 }
 
-
-void StyledLabel::paintEvent(QPaintEvent *e)
+void StyledLabel::paintEvent(QPaintEvent* e)
 {
     QFrame::paintEvent(e);
     QPainter painter(this);
@@ -193,8 +179,7 @@ void StyledLabel::paintEvent(QPaintEvent *e)
     _layout.draw(&painter, QPointF(contentsRect().x(), y), _extraLayoutList);
 }
 
-
-int StyledLabel::posToCursor(const QPointF &pos)
+int StyledLabel::posToCursor(const QPointF& pos)
 {
     if (pos.y() < 0 || pos.y() > height())
         return -1;
@@ -208,11 +193,10 @@ int StyledLabel::posToCursor(const QPointF &pos)
     return -1;
 }
 
-
-void StyledLabel::mouseMoveEvent(QMouseEvent *event)
+void StyledLabel::mouseMoveEvent(QMouseEvent* event)
 {
     if (event->buttons() == Qt::NoButton) {
-        Clickable click = _clickables.atCursorPos(posToCursor(event->posF()));
+        Clickable click = _clickables.atCursorPos(posToCursor(event->localPos()));
         if (click.isValid())
             setHoverMode(click.start(), click.length());
         else
@@ -220,32 +204,28 @@ void StyledLabel::mouseMoveEvent(QMouseEvent *event)
     }
 }
 
-
-void StyledLabel::enterEvent(QEvent *)
+void StyledLabel::enterEvent(QEvent*)
 {
     if (resizeMode() == ResizeOnHover)
         setWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere);
 }
 
-
-void StyledLabel::leaveEvent(QEvent *)
+void StyledLabel::leaveEvent(QEvent*)
 {
     endHoverMode();
     if (resizeMode() == ResizeOnHover)
         setWrapMode(QTextOption::NoWrap);
 }
 
-
-void StyledLabel::mousePressEvent(QMouseEvent *event)
+void StyledLabel::mousePressEvent(QMouseEvent* event)
 {
     if (event->button() == Qt::LeftButton) {
-        Clickable click = _clickables.atCursorPos(posToCursor(event->posF()));
+        Clickable click = _clickables.atCursorPos(posToCursor(event->localPos()));
         if (click.isValid())
             emit clickableActivated(click);
     }
 }
 
-
 void StyledLabel::setHoverMode(int start, int length)
 {
     if (_extraLayoutList.count() >= 1 && _extraLayoutList.first().start == start && _extraLayoutList.first().length == length)
@@ -262,7 +242,6 @@ void StyledLabel::setHoverMode(int start, int length)
     update();
 }
 
-
 void StyledLabel::endHoverMode()
 {
     _extraLayoutList.clear();