Switch some dirty hacking to using real infrastructure. A Chatline now contains three...
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 13 May 2008 23:41:45 +0000 (23:41 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 13 May 2008 23:41:45 +0000 (23:41 +0000)
which are each coupled to a QPersistentModelIndex. Thus, we won't need to store much more data
in the items themselves than that index. The actual data is contained in ChatlineModelItems.

src/client/messagemodel.cpp
src/client/messagemodel.h
src/qtui/chatitem.cpp
src/qtui/chatitem.h
src/qtui/chatline.cpp
src/qtui/chatline.h
src/qtui/chatlinemodelitem.cpp
src/qtui/chatscene.cpp

index 17e9049..6784c4f 100644 (file)
@@ -95,7 +95,7 @@ MessageModelItem::~MessageModelItem() {
 }
 
 QVariant MessageModelItem::data(int column, int role) const {
 }
 
 QVariant MessageModelItem::data(int column, int role) const {
-  if(column < MessageModel::TimestampColumn || column > MessageModel::TextColumn) return QVariant();
+  if(column < MessageModel::TimestampColumn || column > MessageModel::ContentsColumn) return QVariant();
   switch(role) {
     case MessageModel::MsgIdRole: return QVariant::fromValue<MsgId>(_msgId);
     case MessageModel::BufferIdRole: return QVariant::fromValue<BufferId>(_bufferId);
   switch(role) {
     case MessageModel::MsgIdRole: return QVariant::fromValue<MsgId>(_msgId);
     case MessageModel::BufferIdRole: return QVariant::fromValue<BufferId>(_bufferId);
index d37100c..5b2786a 100644 (file)
@@ -46,7 +46,7 @@ class MessageModel : public QAbstractItemModel {
     };
 
     enum ColumnType {
     };
 
     enum ColumnType {
-      TimestampColumn, SenderColumn, TextColumn, UserColumnType
+      TimestampColumn, SenderColumn, ContentsColumn, UserColumnType
     };
 
     MessageModel(QObject *parent);
     };
 
     MessageModel(QObject *parent);
index a677e10..7c0cc9a 100644 (file)
@@ -31,6 +31,7 @@ ChatItem::ChatItem(const QPersistentModelIndex &index_, QGraphicsItem *parent) :
   //if(_wrapMode == WordWrap) {
   //  setFlags(QGraphicsItem::ItemClipsToShape, true);
   //}
   //if(_wrapMode == WordWrap) {
   //  setFlags(QGraphicsItem::ItemClipsToShape, true);
   //}
+  
 }
 
 ChatItem::~ChatItem() {
 }
 
 ChatItem::~ChatItem() {
index 2b7ac8a..b58dc03 100644 (file)
 #define _CHATITEM_H_
 
 #include <QGraphicsItem>
 #define _CHATITEM_H_
 
 #include <QGraphicsItem>
-#include <QPersistentModelIndex>
 #include <QTextLayout>
 #include <QTextOption>
 
 #include <QTextLayout>
 #include <QTextOption>
 
-#include "messagemodel.h"
+#include "chatline.h"
+#include "chatlinemodel.h"
 #include "uistyle.h"
 
 #include "uistyle.h"
 
-class QGraphicsSceneMouseEvent;
-
 class ChatItem : public QGraphicsItem {
 
   public:
 class ChatItem : public QGraphicsItem {
 
   public:
-    ChatItem(const QPersistentModelIndex &index, QGraphicsItem *parent = 0);
+    ChatItem(const QPersistentModelIndex &index, QGraphicsItem *parent);
     virtual ~ChatItem();
 
     virtual ~ChatItem();
 
+    inline QPersistentModelIndex index() const { return _index; }
+    inline const MessageModel *model() const { return _index.isValid() ? qobject_cast<const MessageModel *>(_index.model()) : 0; }
+    inline int row() const { return _index.isValid() ? _index.row() : 0; }
+
     virtual QRectF boundingRect() const;
     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
 
     virtual QRectF boundingRect() const;
     virtual void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
 
-    inline QPersistentModelIndex persistentIndex() const { return _index; }
-    inline const MessageModel *model() const { return _index.isValid() ? qobject_cast<const MessageModel *>(_index.model()) : 0; }
-    inline int row() const { return _index.isValid() ? _index.row() : 0; }
     virtual QVariant data(int role) const;
     //QString text() const;
     //void setText(const UiStyle::StyledText &text);
     virtual QVariant data(int role) const;
     //QString text() const;
     //void setText(const UiStyle::StyledText &text);
index e0f6d6a..1abfcfb 100644 (file)
 #include "chatline.h"
 #include "qtui.h"
 
 #include "chatline.h"
 #include "qtui.h"
 
-ChatLine::ChatLine(const QPersistentModelIndex &index_, QGraphicsItem *parent) : QGraphicsItem(parent), _index(index_) {
+Chatline::Chatline(const QModelIndex &index, QGraphicsItem *parent) : QGraphicsItem(parent) {
+  _timestampItem = new ChatItem(QPersistentModelIndex(index.sibling(index.row(), ChatlineModel::TimestampColumn)), this);
+  _senderItem = new ChatItem(QPersistentModelIndex(index.sibling(index.row(), ChatlineModel::SenderColumn)), this);
+  _contentsItem = new ChatItem(QPersistentModelIndex(index.sibling(index.row(), ChatlineModel::ContentsColumn)), this);
 
 
+  _senderItem->setPos(80, 0);
+  _contentsItem->setPos(160, 0);
 }
 
 }
 
-ChatLine::~ChatLine() {
+Chatline::~Chatline() {
 
 }
 
 
 }
 
-QRectF ChatLine::boundingRect () const {
+QRectF Chatline::boundingRect () const {
   return childrenBoundingRect();
 }
 
   return childrenBoundingRect();
 }
 
-void ChatLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
+void Chatline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) {
 
 }
 
 
 }
 
index 792563e..6ca0e8f 100644 (file)
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
-#ifndef _CHATLINE_H_
-#define _CHATLINE_H_
+#ifndef CHATLINE_H_
+#define CHATLINE_H_
 
 #include <QGraphicsItem>
 
 
 #include <QGraphicsItem>
 
-#include "message.h"
+#include "messagemodel.h"
 
 
-class ChatLine : public QGraphicsItem {
+class ChatItem;
+
+class Chatline : public QGraphicsItem {
 
   public:
 
   public:
-    ChatLine(const QPersistentModelIndex &, QGraphicsItem *parent = 0);
-    virtual ~ChatLine();
+    Chatline(const QModelIndex &tempIndex, QGraphicsItem *parent = 0);
+    virtual ~Chatline();
 
     virtual QRectF boundingRect () const;
     virtual void paint (QPainter * painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
 
     virtual QRectF boundingRect () const;
     virtual void paint (QPainter * painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
@@ -43,7 +45,7 @@ class ChatLine : public QGraphicsItem {
     //bool sceneEvent ( QEvent * event );
 
   private:
     //bool sceneEvent ( QEvent * event );
 
   private:
-    QPersistentModelIndex _index;
+    ChatItem *_timestampItem, *_senderItem, *_contentsItem;
 };
 
 #endif
 };
 
 #endif
index 009d535..4e1eb47 100644 (file)
@@ -43,7 +43,7 @@ QVariant ChatlineModelItem::data(int column, int role) const {
   switch(column) {
     case ChatlineModel::TimestampColumn: part = &_timestamp; break;
     case ChatlineModel::SenderColumn:    part = &_sender; break;
   switch(column) {
     case ChatlineModel::TimestampColumn: part = &_timestamp; break;
     case ChatlineModel::SenderColumn:    part = &_sender; break;
-    case ChatlineModel::TextColumn:      part = &_contents; break;
+    case ChatlineModel::ContentsColumn:      part = &_contents; break;
     default: return MessageModelItem::data(column, role);
   }
 
     default: return MessageModelItem::data(column, role);
   }
 
index a78c2ba..872ea92 100644 (file)
@@ -30,9 +30,9 @@
 ChatScene::ChatScene(MessageModel *model, QObject *parent) : QGraphicsScene(parent), _model(model) {
   connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(rowsInserted(const QModelIndex &, int, int)));
   for(int i = 0; i < model->rowCount(); i++) {
 ChatScene::ChatScene(MessageModel *model, QObject *parent) : QGraphicsScene(parent), _model(model) {
   connect(model, SIGNAL(rowsInserted(const QModelIndex &, int, int)), this, SLOT(rowsInserted(const QModelIndex &, int, int)));
   for(int i = 0; i < model->rowCount(); i++) {
-    ChatItem *item = new ChatItem(QPersistentModelIndex(model->index(i, 2)));
-    addItem(item);
-    item->setPos(30, i*item->boundingRect().height());
+    Chatline *line = new Chatline(model->index(i, 0));
+    addItem(line);
+    line->setPos(30, i*line->boundingRect().height());
   }
 
   
   }