#BR127: user can now set the style of the application in the config menu (behaviour...
[quassel.git] / src / qtui / chatline.h
index cd3e4ae..fca296f 100644 (file)
@@ -1,11 +1,11 @@
 /***************************************************************************
- *   Copyright (C) 2005-07 by the Quassel IRC Team                         *
+ *   Copyright (C) 2005-08 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) any later version.                                   *
+ *   (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        *
 #include "uistyle.h"
 
 class ChatItem;
+class ChatLineData;
+
+/* Concept Ideas
+* Probably makes sense to have ChatLineData be the AbstractUiMsg instead, if it turns out that creating ChatLineData
+is the expensive part... In that case, we could have a QHash<MsgId, ChatLineData*> in the Client, and ChatLine just
+gets a data pointer. This would allow us to share most data between AbstractUiMsgs, and ChatLines themselves could
+be pretty cheap - that'd be a clean solution for having a monitor buffer, highlight buffer etcpp.
+
+* ItemLayoutData
+
+*/
 
 class ChatLine : public QGraphicsItem, public AbstractUiMsg {
 
@@ -53,6 +64,7 @@ class ChatLine : public QGraphicsItem, public AbstractUiMsg {
 
   private:
     UiStyle::StyledText _styledTimestamp, _styledText, _styledSender;
+
     QDateTime _timestamp;
     MsgId _msgId;
 
@@ -60,4 +72,30 @@ class ChatLine : public QGraphicsItem, public AbstractUiMsg {
     int _tsColWidth, _senderColWidth, _textColWidth;
 };
 
+//! This contains the data of a ChatLine, i.e. mainly the styled message contents.
+/** By separating ChatLine and ChatLineData, ChatLine itself is very small and we can reuse the
+ *  same contents in several ChatLine objects without duplicating data.
+ */
+class ChatLineData {
+
+  public:
+    ChatLineData(const Message &msg);
+
+    inline UiStyle::StyledText styledSender() const { return _styledSender; }
+    inline UiStyle::StyledText styledTimestamp() const { return _styledTimestamp; }
+    inline UiStyle::StyledText styledText() const { return _styledText; }
+
+    inline QString sender() const { return _styledSender.text; }
+    inline QString text() const { return _styledText.text; }
+    inline QDateTime timestamp() const { return _timestamp; }
+    inline MsgId msgId() const { return _msgId; }
+
+  private:
+    UiStyle::StyledText _styledSender, _styledText, _styledTimestamp;
+    QDateTime _timestamp;
+    MsgId _msgId;
+
+};
+
+
 #endif