blob: f041b119ebc7c1abf5295c461fe2bb4c48945e17 [file] [log] [blame]
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -07001#ifndef DIGESTTREESCENE_H
2#define DIGESTTREESCENE_H
3
4#include <QtGui/QGraphicsScene>
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -07005#include <sync-seq-no.h>
6#include <sync-logic.h>
7#include <ctime>
8#include <QMap>
9#include <vector>
10#include <tr1/memory>
Zhenkai Zhud13acd02012-06-04 15:25:20 -070011#include <QColor>
Zhenkai Zhu21d75f92012-06-04 21:23:34 -070012#include "treelayout.h"
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070013
14class QGraphicsTextItem;
15
16class User;
17class DisplayUser;
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070018
19class DigestTreeScene : public QGraphicsScene
20{
21 Q_OBJECT
22
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070023typedef std::tr1::shared_ptr<DisplayUser> DisplayUserPtr;
24typedef QMap<QString, DisplayUserPtr> Roster;
25typedef QMap<QString, DisplayUserPtr>::iterator Roster_iterator;
26typedef QMapIterator<QString, DisplayUserPtr> RosterIterator;
Zhenkai Zhud13acd02012-06-04 15:25:20 -070027static DisplayUserPtr DisplayUserNullPtr;
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070028
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070029public:
30 DigestTreeScene(QWidget *parent = 0);
Zhenkai Zhu82a62752012-06-04 17:11:04 -070031 void processUpdate(const std::vector<Sync::MissingDataInfo> &v, QString digest);
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070032 void msgReceived(QString prefix, QString nick);
Zhenkai Zhu82a62752012-06-04 17:11:04 -070033 void clearAll();
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070034 void plot(QString digest);
Zhenkai Zhu82a62752012-06-04 17:11:04 -070035private:
Zhenkai Zhu21d75f92012-06-04 21:23:34 -070036 void plotEdge(const std::vector<TreeLayout::Coordinate> &v, int nodeSize);
37 void plotNode(const std::vector<TreeLayout::Coordinate> &v, QString digest, int nodeSize);
Zhenkai Zhud13acd02012-06-04 15:25:20 -070038 void reDrawNode(DisplayUserPtr p, QColor rimColor);
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070039private:
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070040 Roster m_roster;
41 QGraphicsTextItem *m_rootDigest;
Zhenkai Zhud13acd02012-06-04 15:25:20 -070042 DisplayUserPtr previouslyUpdatedUser;
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070043
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070044};
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070045
46class User
47{
48public:
49 User():m_received(time(NULL)) {}
50 User(QString n, QString p, QString c): m_nick(n), m_prefix(p), m_chatroom(c), m_received(time(NULL)) {}
51 void setNick(QString nick) {m_nick = nick;}
52 void setPrefix(QString prefix) {m_prefix = prefix;}
53 void setChatroom(QString chatroom) {m_chatroom = chatroom;}
54 void setSeq(Sync::SeqNo seq) {m_seq = seq;}
55 void setReceived() {m_received = time(NULL);}
56 QString getNick() { return m_nick;}
57 QString getPrefix() { return m_prefix;}
58 QString getChatroom() { return m_chatroom;}
59 Sync::SeqNo getSeqNo() { return m_seq;}
60 time_t getReceived() { return m_received;}
61private:
62 QString m_nick;
63 QString m_prefix;
64 QString m_chatroom;
65 Sync::SeqNo m_seq;
66 time_t m_received;
67};
68
69class DisplayUser : public User
70{
71public:
72 DisplayUser():m_seqTextItem(NULL), m_nickTextItem(NULL), m_rimRectItem(NULL) {}
73 DisplayUser(QString n, QString p , QString c): User(n, p, c), m_seqTextItem(NULL), m_nickTextItem(NULL), m_rimRectItem(NULL) {}
74 QGraphicsTextItem *getSeqTextItem() {return m_seqTextItem;}
75 QGraphicsTextItem *getNickTextItem() {return m_nickTextItem;}
76 QGraphicsRectItem *getRimRectItem() {return m_rimRectItem;}
Zhenkai Zhud13acd02012-06-04 15:25:20 -070077 QGraphicsRectItem *getInnerRectItem() {return m_innerRectItem;}
78 QGraphicsRectItem *getNickRectItem() {return m_nickRectItem;}
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070079 void setSeqTextItem(QGraphicsTextItem *item) { m_seqTextItem = item;}
80 void setNickTextItem(QGraphicsTextItem *item) { m_nickTextItem = item;}
81 void setRimRectItem(QGraphicsRectItem *item) {m_rimRectItem = item;}
Zhenkai Zhud13acd02012-06-04 15:25:20 -070082 void setInnerRectItem(QGraphicsRectItem *item) {m_innerRectItem = item;}
83 void setNickRectItem(QGraphicsRectItem *item) {m_nickRectItem = item;}
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070084private:
85 QGraphicsTextItem *m_seqTextItem;
86 QGraphicsTextItem *m_nickTextItem;
87 QGraphicsRectItem *m_rimRectItem;
Zhenkai Zhud13acd02012-06-04 15:25:20 -070088 QGraphicsRectItem *m_innerRectItem;
89 QGraphicsRectItem *m_nickRectItem;
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070090};
91
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070092#endif