From 3cf7ab9f042e50fc19748e1e09eb5af355f451ca Mon Sep 17 00:00:00 2001 From: Konstantinos Sideris Date: Wed, 23 May 2018 16:33:30 +0300 Subject: Fix line break issue on timeline with long words fixes #193 --- include/timeline/TimelineItem.h | 47 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'include') diff --git a/include/timeline/TimelineItem.h b/include/timeline/TimelineItem.h index 064dead4..6011dd44 100644 --- a/include/timeline/TimelineItem.h +++ b/include/timeline/TimelineItem.h @@ -17,6 +17,7 @@ #pragma once +#include #include #include #include @@ -24,6 +25,8 @@ #include #include #include +#include +#include #include "AvatarProvider.h" #include "RoomInfoListItem.h" @@ -39,6 +42,48 @@ class VideoItem; class FileItem; class Avatar; +class TextLabel : public QTextBrowser +{ + Q_OBJECT + +public: + TextLabel(const QString &text, QWidget *parent = 0) + : QTextBrowser(parent) + { + setText(text); + setOpenExternalLinks(true); + + // Make it look and feel like an ordinary label. + setReadOnly(true); + setFrameStyle(QFrame::NoFrame); + QPalette pal = palette(); + pal.setColor(QPalette::Base, Qt::transparent); + setPalette(pal); + + // Wrap anywhere but prefer words, adjust minimum height on the fly. + setLineWrapMode(QTextEdit::WidgetWidth); + setWordWrapMode(QTextOption::WrapAtWordBoundaryOrAnywhere); + connect(document()->documentLayout(), + &QAbstractTextDocumentLayout::documentSizeChanged, + this, + &TextLabel::adjustHeight); + document()->setDocumentMargin(0); + + setFixedHeight(document()->size().height()); + } + + QSize sizeHint() const override + { + ensurePolished(); + return document()->size().toSize(); + } + + void wheelEvent(QWheelEvent *event) override { event->ignore(); } + +private slots: + void adjustHeight(const QSizeF &size) { setFixedHeight(size.height()); } +}; + class TimelineItem : public QWidget { Q_OBJECT @@ -174,7 +219,7 @@ private: QLabel *timestamp_; QLabel *checkmark_; QLabel *userName_; - QLabel *body_; + TextLabel *body_; }; template -- cgit 1.5.1