From: Manuel Nickschas Date: Tue, 13 May 2008 23:41:45 +0000 (+0000) Subject: Switch some dirty hacking to using real infrastructure. A Chatline now contains three... X-Git-Tag: 0.3.0~420 X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=commitdiff_plain;h=0b9f74984780aacbe85ca04c44ec6304c86557c2 Switch some dirty hacking to using real infrastructure. A Chatline now contains three ChatItems, 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. --- diff --git a/src/client/messagemodel.cpp b/src/client/messagemodel.cpp index 17e90495..6784c4fe 100644 --- a/src/client/messagemodel.cpp +++ b/src/client/messagemodel.cpp @@ -95,7 +95,7 @@ MessageModelItem::~MessageModelItem() { } 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); case MessageModel::BufferIdRole: return QVariant::fromValue(_bufferId); diff --git a/src/client/messagemodel.h b/src/client/messagemodel.h index d37100cd..5b2786aa 100644 --- a/src/client/messagemodel.h +++ b/src/client/messagemodel.h @@ -46,7 +46,7 @@ class MessageModel : public QAbstractItemModel { }; enum ColumnType { - TimestampColumn, SenderColumn, TextColumn, UserColumnType + TimestampColumn, SenderColumn, ContentsColumn, UserColumnType }; MessageModel(QObject *parent); diff --git a/src/qtui/chatitem.cpp b/src/qtui/chatitem.cpp index a677e105..7c0cc9a6 100644 --- a/src/qtui/chatitem.cpp +++ b/src/qtui/chatitem.cpp @@ -31,6 +31,7 @@ ChatItem::ChatItem(const QPersistentModelIndex &index_, QGraphicsItem *parent) : //if(_wrapMode == WordWrap) { // setFlags(QGraphicsItem::ItemClipsToShape, true); //} + } ChatItem::~ChatItem() { diff --git a/src/qtui/chatitem.h b/src/qtui/chatitem.h index 2b7ac8a3..b58dc032 100644 --- a/src/qtui/chatitem.h +++ b/src/qtui/chatitem.h @@ -22,27 +22,26 @@ #define _CHATITEM_H_ #include -#include #include #include -#include "messagemodel.h" +#include "chatline.h" +#include "chatlinemodel.h" #include "uistyle.h" -class QGraphicsSceneMouseEvent; - class ChatItem : public QGraphicsItem { public: - ChatItem(const QPersistentModelIndex &index, QGraphicsItem *parent = 0); + ChatItem(const QPersistentModelIndex &index, QGraphicsItem *parent); virtual ~ChatItem(); + inline QPersistentModelIndex index() const { return _index; } + inline const MessageModel *model() const { return _index.isValid() ? qobject_cast(_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); - inline QPersistentModelIndex persistentIndex() const { return _index; } - inline const MessageModel *model() const { return _index.isValid() ? qobject_cast(_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); diff --git a/src/qtui/chatline.cpp b/src/qtui/chatline.cpp index e0f6d6a9..1abfcfb2 100644 --- a/src/qtui/chatline.cpp +++ b/src/qtui/chatline.cpp @@ -27,19 +27,24 @@ #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(); } -void ChatLine::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { +void Chatline::paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) { } diff --git a/src/qtui/chatline.h b/src/qtui/chatline.h index 792563e1..6ca0e8f3 100644 --- a/src/qtui/chatline.h +++ b/src/qtui/chatline.h @@ -18,18 +18,20 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _CHATLINE_H_ -#define _CHATLINE_H_ +#ifndef CHATLINE_H_ +#define CHATLINE_H_ #include -#include "message.h" +#include "messagemodel.h" -class ChatLine : public QGraphicsItem { +class ChatItem; + +class Chatline : public QGraphicsItem { 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); @@ -43,7 +45,7 @@ class ChatLine : public QGraphicsItem { //bool sceneEvent ( QEvent * event ); private: - QPersistentModelIndex _index; + ChatItem *_timestampItem, *_senderItem, *_contentsItem; }; #endif diff --git a/src/qtui/chatlinemodelitem.cpp b/src/qtui/chatlinemodelitem.cpp index 009d535a..4e1eb476 100644 --- a/src/qtui/chatlinemodelitem.cpp +++ b/src/qtui/chatlinemodelitem.cpp @@ -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; - case ChatlineModel::TextColumn: part = &_contents; break; + case ChatlineModel::ContentsColumn: part = &_contents; break; default: return MessageModelItem::data(column, role); } diff --git a/src/qtui/chatscene.cpp b/src/qtui/chatscene.cpp index a78c2ba8..872ea922 100644 --- a/src/qtui/chatscene.cpp +++ b/src/qtui/chatscene.cpp @@ -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++) { - 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()); }