X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtgui%2Fchatwidget.h;h=f15be23f1cf23fd85388c20ff73d60b0a26f23c3;hp=2fdd89570695d765621380613be2e78d45f1dff6;hb=73edffb5f0f6ecae4118c36a7ca2c0d479b7f8c6;hpb=13b2affbdccd1d52479e49affdb81a77258392a6 diff --git a/src/qtgui/chatwidget.h b/src/qtgui/chatwidget.h index 2fdd8957..f15be23f 100644 --- a/src/qtgui/chatwidget.h +++ b/src/qtgui/chatwidget.h @@ -21,13 +21,14 @@ #ifndef _CHATWIDGET_H_ #define _CHATWIDGET_H_ -#include "style.h" -#include "message.h" -#include "buffer.h" -#include +//#include "style.h" +//#include "message.h" +//#include "buffer.h" +//#include #include class ChatLine; +class AbstractUiMsg; //!\brief Scroll area showing part of the chat messages for a given buffer. /** The contents of the scroll area, i.e. a widget of type ChatWidgetContents, @@ -52,6 +53,10 @@ class ChatWidget : public QAbstractScrollArea { public slots: void clear(); + + void prependMsg(AbstractUiMsg *); + void appendMsg(AbstractUiMsg *); + void prependChatLine(ChatLine *); void appendChatLine(ChatLine *); void prependChatLines(QList); @@ -118,115 +123,4 @@ class ChatWidget : public QAbstractScrollArea { }; -//FIXME: chatline doku -//!\brief Containing the layout and providing the rendering of a single message. -/** A ChatLine takes a Message object, - * formats it (by turning the various message types into a human-readable form and afterwards pumping it through - * our Style engine), and stores it as a number of QTextLayouts representing the three fields of a chat line - * (timestamp, sender and text). These layouts already include any rendering information such as font, - * color, or selected characters. By calling layout(), they can be quickly layouted to fit a given set of field widths. - * Afterwards, they can quickly be painted whenever necessary. - * - * By separating the complex and slow task of interpreting and formatting Message objects (which happens exactly once - * per message) from the actual layouting and painting, we gain a lot of speed compared to the standard Qt rendering - * functions. - */ -class ChatLine : public QObject { - Q_OBJECT - - public: - ChatLine(Message message); - ~ChatLine(); - - qreal layout(qreal tsWidth, qreal nickWidth, qreal textWidth); - qreal height() { return hght; } - int posToCursor(QPointF pos); - void draw(QPainter *p, const QPointF &pos); - - enum SelectionMode { None, Partial, Full }; - void setSelection(SelectionMode, int start = 0, int end = 0); - QDateTime timeStamp(); - QString sender(); - QString text(); - uint msgId(); - BufferId bufferId(); - - bool isUrl(int pos); - QUrl getUrl(int pos); - - public slots: - - private: - qreal hght; - Message msg; - qreal tsWidth, senderWidth, textWidth; - Style::FormattedString tsFormatted, senderFormatted, textFormatted; - - struct FormatRange { - int start; - int length; - int height; - QTextCharFormat format; - }; - struct Word { - int start; - int length; - int trailing; - int height; - }; - struct LineLayout { - int y; - int height; - int start; - int length; - }; - QVector charPos; - QVector charWidths; - QVector charHeights; - QVector charUrlIdx; - QList tsFormat, senderFormat, textFormat; - QList words; - QList lineLayouts; - int minHeight; - - SelectionMode selectionMode; - int selectionStart, selectionEnd; - void formatMsg(Message); - void precomputeLine(); - QList calcFormatRanges(const Style::FormattedString &, QTextLayout::FormatRange additional = QTextLayout::FormatRange()); -}; - -/* -struct LayoutTask { - QList messages; - Buffer *buffer; - QString net, buf; - QList lines; -}; - -Q_DECLARE_METATYPE(LayoutTask); - -class LayoutThread : public QThread { - Q_OBJECT - - public: - LayoutThread(); - virtual ~LayoutThread(); - virtual void run(); - - public: - void processTask(LayoutTask task); - - signals: - void taskProcessed(LayoutTask task); - - private: - QList queue; - QMutex mutex; - QWaitCondition condition; - bool abort; - -}; -*/ - #endif