blob: 91876e6513fc69a0d6469fcd35b854ee5e3bd7b3 [file] [log] [blame]
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -07001#ifndef DIGESTTREESCENE_H
2#define DIGESTTREESCENE_H
3
4#include <QtGui/QGraphicsScene>
5#include "ogdf/basic/GraphAttributes.h"
6#include "ogdf/basic/Graph.h"
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -07007#include <sync-seq-no.h>
8#include <sync-logic.h>
9#include <ctime>
10#include <QMap>
11#include <vector>
12#include <tr1/memory>
Zhenkai Zhud13acd02012-06-04 15:25:20 -070013#include <QColor>
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070014
15class QGraphicsTextItem;
16
17class User;
18class DisplayUser;
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070019
20class DigestTreeScene : public QGraphicsScene
21{
22 Q_OBJECT
23
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070024typedef std::tr1::shared_ptr<DisplayUser> DisplayUserPtr;
25typedef QMap<QString, DisplayUserPtr> Roster;
26typedef QMap<QString, DisplayUserPtr>::iterator Roster_iterator;
27typedef QMapIterator<QString, DisplayUserPtr> RosterIterator;
Zhenkai Zhud13acd02012-06-04 15:25:20 -070028static DisplayUserPtr DisplayUserNullPtr;
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070029
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070030public:
31 DigestTreeScene(QWidget *parent = 0);
Zhenkai Zhu82a62752012-06-04 17:11:04 -070032 void processUpdate(const std::vector<Sync::MissingDataInfo> &v, QString digest);
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070033 void msgReceived(QString prefix, QString nick);
Zhenkai Zhu82a62752012-06-04 17:11:04 -070034 void clearAll();
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070035 void plot(QString digest);
Zhenkai Zhu82a62752012-06-04 17:11:04 -070036private:
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070037 void plotEdge(ogdf::GraphAttributes &GA);
38 void plotNode(ogdf::GraphAttributes &GA, int rootIndex, QString digest);
Zhenkai Zhud13acd02012-06-04 15:25:20 -070039 void reDrawNode(DisplayUserPtr p, QColor rimColor);
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070040private:
41 ogdf::Graph m_graph;
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070042 Roster m_roster;
43 QGraphicsTextItem *m_rootDigest;
Zhenkai Zhud13acd02012-06-04 15:25:20 -070044 DisplayUserPtr previouslyUpdatedUser;
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070045
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070046};
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070047
48class User
49{
50public:
51 User():m_received(time(NULL)) {}
52 User(QString n, QString p, QString c): m_nick(n), m_prefix(p), m_chatroom(c), m_received(time(NULL)) {}
53 void setNick(QString nick) {m_nick = nick;}
54 void setPrefix(QString prefix) {m_prefix = prefix;}
55 void setChatroom(QString chatroom) {m_chatroom = chatroom;}
56 void setSeq(Sync::SeqNo seq) {m_seq = seq;}
57 void setReceived() {m_received = time(NULL);}
58 QString getNick() { return m_nick;}
59 QString getPrefix() { return m_prefix;}
60 QString getChatroom() { return m_chatroom;}
61 Sync::SeqNo getSeqNo() { return m_seq;}
62 time_t getReceived() { return m_received;}
63private:
64 QString m_nick;
65 QString m_prefix;
66 QString m_chatroom;
67 Sync::SeqNo m_seq;
68 time_t m_received;
69};
70
71class DisplayUser : public User
72{
73public:
74 DisplayUser():m_seqTextItem(NULL), m_nickTextItem(NULL), m_rimRectItem(NULL) {}
75 DisplayUser(QString n, QString p , QString c): User(n, p, c), m_seqTextItem(NULL), m_nickTextItem(NULL), m_rimRectItem(NULL) {}
76 QGraphicsTextItem *getSeqTextItem() {return m_seqTextItem;}
77 QGraphicsTextItem *getNickTextItem() {return m_nickTextItem;}
78 QGraphicsRectItem *getRimRectItem() {return m_rimRectItem;}
Zhenkai Zhud13acd02012-06-04 15:25:20 -070079 QGraphicsRectItem *getInnerRectItem() {return m_innerRectItem;}
80 QGraphicsRectItem *getNickRectItem() {return m_nickRectItem;}
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070081 void setSeqTextItem(QGraphicsTextItem *item) { m_seqTextItem = item;}
82 void setNickTextItem(QGraphicsTextItem *item) { m_nickTextItem = item;}
83 void setRimRectItem(QGraphicsRectItem *item) {m_rimRectItem = item;}
Zhenkai Zhud13acd02012-06-04 15:25:20 -070084 void setInnerRectItem(QGraphicsRectItem *item) {m_innerRectItem = item;}
85 void setNickRectItem(QGraphicsRectItem *item) {m_nickRectItem = item;}
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070086private:
87 QGraphicsTextItem *m_seqTextItem;
88 QGraphicsTextItem *m_nickTextItem;
89 QGraphicsRectItem *m_rimRectItem;
Zhenkai Zhud13acd02012-06-04 15:25:20 -070090 QGraphicsRectItem *m_innerRectItem;
91 QGraphicsRectItem *m_nickRectItem;
Zhenkai Zhu71b42cb2012-06-04 09:42:53 -070092};
93
Zhenkai Zhuf474a0a2012-05-30 15:06:29 -070094#endif