X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchatlinemodelitem.h;h=56c31f8e7f48dfc1de2a40d69156aa733c3b8cda;hp=a2ef9b9aec879f13d096c15f40b747f4696636e7;hb=673ded0d543cbdc2cf6e746b6bee7c1d21af8f90;hpb=547fa73991ebf14d6a33bae3d955ebce6b8d74f2 diff --git a/src/qtui/chatlinemodelitem.h b/src/qtui/chatlinemodelitem.h index a2ef9b9a..56c31f8e 100644 --- a/src/qtui/chatlinemodelitem.h +++ b/src/qtui/chatlinemodelitem.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-2020 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -15,37 +15,55 @@ * 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. * + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * ***************************************************************************/ -#ifndef CHATLINEMODELITEM_H_ -#define CHATLINEMODELITEM_H_ +#pragma once -#include - -#include "chatlinemodel.h" +#include "messagemodel.h" #include "uistyle.h" -class ChatLineModelItem : public MessageModelItem { +class ChatLineModelItem : public MessageModelItem +{ public: - ChatLineModelItem(const Message &); + ChatLineModelItem(const Message&); + + QVariant data(int column, int role) const override; + bool setData(int column, const QVariant& value, int role) override; + + inline const Message& message() const override { return _styledMsg; } + inline const QDateTime& timestamp() const override { return _styledMsg.timestamp(); } + inline const MsgId& msgId() const override { return _styledMsg.msgId(); } + inline const BufferId& bufferId() const override { return _styledMsg.bufferId(); } + inline void setBufferId(BufferId bufferId) override { _styledMsg.setBufferId(bufferId); } + inline Message::Type msgType() const override { return _styledMsg.type(); } + inline Message::Flags msgFlags() const override { return _styledMsg.flags(); } - virtual QVariant data(int column, int role) const; - virtual inline bool setData(int column, const QVariant &value, int role) { return false; } + virtual inline void invalidateWrapList() { _wrapList.clear(); } + + /// Used to store information about words to be used for wrapping + struct Word + { + quint16 start; + qreal endX; + qreal width; + qreal trailing; + }; + using WrapList = QVector; private: - void computeWrapList(); + QVariant timestampData(int role) const; + QVariant senderData(int role) const; + QVariant contentsData(int role) const; - struct ChatLinePart { - QString plainText; - UiStyle::FormatList formatList; - }; - ChatLinePart _timestamp, _sender, _contents; + QVariant backgroundBrush(UiStyle::FormatType subelement, bool selected = false) const; + UiStyle::MessageLabel messageLabel() const; - ChatLineModel::WrapList _wrapList; + void computeWrapList() const; - static unsigned char *TextBoundaryFinderBuffer; - static int TextBoundaryFinderBufferSize; -}; + mutable WrapList _wrapList; + UiStyle::StyledMessage _styledMsg; -#endif + static unsigned char* TextBoundaryFinderBuffer; + static int TextBoundaryFinderBufferSize; +};