Quark  0.1
BasicTreeModel.h++
Go to the documentation of this file.
1 #ifndef __libquark_gui_BasicTreeModel_hxx
2 #define __libquark_gui_BasicTreeModel_hxx
3 
4 #include <QBuffer>
5 #include <QDataStream>
6 #include <QDebug>
7 #include <QIcon>
8 #include <QMimeData>
9 #include <QStringList>
10 #include <QVector>
11 
13 
14 namespace quark {
15 namespace gui {
16 
21 template<class T, class IS = QDataStream, class OS = QDataStream>
23 {
24  public:
25 
27  virtual ~BasicTreeModel();
28 
29  virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
30  virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
31 
32  virtual QVariant headerData(int section, Qt::Orientation orientation,
33  int role = Qt::DisplayRole) const;
34 
35  virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole)
36  const;
37  virtual bool setData(const QModelIndex &index, const QVariant &value,
38  int role = Qt::EditRole);
39 
40  virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
41  virtual QModelIndex index(int row, int column,
42  const QModelIndex &parent = QModelIndex()) const;
43  virtual QModelIndex parent(const QModelIndex &index) const;
44 
45  virtual bool canFetchMore(const QModelIndex &index) const;
46  virtual void fetchMore(const QModelIndex &index);
47 
48  virtual Qt::ItemFlags flags(const QModelIndex & index) const;
49 
50  virtual bool removeRows(int row, int count,
51  const QModelIndex &parent = QModelIndex());
52 
53  virtual QStringList mimeTypes() const;
54  virtual QMimeData *mimeData(const QModelIndexList &indexes) const;
55  virtual bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action,
56  int row, int column, const QModelIndex &parent);
57 
58  void clear();
59  bool isEmpty() const;
60  void addItem(T *parent, T *item);
61  void insertItemAt(T *parent, int index, T *item);
62  void setItems(T *parent, QList<T *> items);
63  T *getItemAt(const T *parent, int index) const;
64  T *takeItemAt(const T *parent, int index);
65  T* getRootItem() const;
66 
67  void removeItem(T *item);
68  void removeChildItem(T *parent, int index);
69  int itemCount(const T *parent) const;
70  void updateItem(T *item);
71  int indexOf(const T *parent, const T *item) const;
72 
73  T *getParentItem(const T *item) const;
74 
75  T* getItemForIndex(const QModelIndex& index) const;
76  void unloadItemsForIndex(const QModelIndex& parent);
77  QModelIndex getIndexForItem(const T *item) const;
78 
79  virtual bool isLeaf(const T &item) const = 0;
80 
81  virtual QVariant getFieldValue(const T &item, int field) const = 0;
82 
83  virtual bool write(OS &stream) const;
84  virtual bool read(IS &stream);
85 
86  protected:
87 
89  typedef BasicTreeModelBase::Options Options;
90 
91  BasicTreeModel(T *root, Options options = 0, QObject *parent = NULL);
92 
93  virtual QIcon getIcon(const T &item) const;
94 
95  virtual Qt::AlignmentFlag getFieldAlignment(const T &item, int field) const;
96  virtual QString getFieldToolTip(const T &item, int field) const;
97 
98  virtual bool setFieldValue(T *item, int field, const QVariant &value);
99 
100  virtual bool isDraggable(const T &item) const;
101  virtual bool isDroppable(const T &item) const;
102  virtual bool isRootDroppable() const;
103  virtual bool isDynamic(const T &item) const;
104 
105  virtual void loadChildren(T *parent);
106 
107  virtual void onItemReparented(T *item, T *parent);
108 
109  virtual bool dropOtherMimeData(const QMimeData *mimeData,
110  Qt::DropAction action, int row,
111  int column, const QModelIndex &parent);
112  virtual QString itemMimeType() const;
113  virtual QStringList otherMimeTypes() const;
114 
115  virtual void writeProlog(OS &stream) const;
116  virtual void writeItem(const T &item, OS &stream) const;
117  virtual void writeEndItem(const T &item, OS &stream) const;
118  virtual void writeEpilog(OS &stream) const;
119 
120  virtual bool readProlog(IS &stream);
121  virtual T *readItem(IS &stream);
122  virtual void readEndItem(T *item, IS &stream);
123  virtual bool readEpilog(IS &stream);
124 
125  private:
126 
127  struct Node;
128 
129  bool readInto(IS &stream, const QModelIndex &parent, int row);
130  inline Node *nodeForIndex(const QModelIndex &index) const;
131  QModelIndex indexForNode(const Node *node) const;
132  bool serialize(const Node *node, OS &stream, bool childrenOnly = false)
133  const;
134  bool deserialize(Node *node, IS &stream);
135  void addNodesToMap(Node *node);
136  void removeNodesFromMap(Node *node);
137 
138  Node *_root;
139  QMap<const T *, Node *> _nodeMap;
140 };
141 
142 #include <quark/BasicTreeModelImpl.h++>
143 
144 } // namespace gui
145 } // namespace quark
146 
147 #endif // __libquark_gui_BasicTableModel_hxx
T * getItemAt(const T *parent, int index) const
virtual bool write(OS &stream) const
virtual bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &parent)
virtual Qt::ItemFlags flags(const QModelIndex &index) const
virtual bool setFieldValue(T *item, int field, const QVariant &value)
virtual void readEndItem(T *item, IS &stream)
virtual bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole)
Definition: BasicTreeModel.h++:22
virtual bool hasChildren(const QModelIndex &parent=QModelIndex()) const
virtual QStringList otherMimeTypes() const
int itemCount(const T *parent) const
Option
Definition: BasicTreeModelBase.h++:19
virtual bool readEpilog(IS &stream)
virtual Qt::AlignmentFlag getFieldAlignment(const T &item, int field) const
virtual ~BasicTreeModel()
Destructor.
BasicTreeModel(T *root, Options options=0, QObject *parent=NULL)
virtual bool isDraggable(const T &item) const
virtual bool isRootDroppable() const
virtual bool isLeaf(const T &item) const =0
virtual void writeItem(const T &item, OS &stream) const
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const
virtual bool dropOtherMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &parent)
QModelIndex getIndexForItem(const T *item) const
Definition: BasicTreeModelBase.h++:13
void removeChildItem(T *parent, int index)
virtual T * readItem(IS &stream)
virtual void loadChildren(T *parent)
virtual void writeEndItem(const T &item, OS &stream) const
virtual QVariant getFieldValue(const T &item, int field) const =0
virtual bool removeRows(int row, int count, const QModelIndex &parent=QModelIndex())
virtual bool readProlog(IS &stream)
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Definition: BarChartView.h++:6
virtual QIcon getIcon(const T &item) const
virtual QModelIndex parent(const QModelIndex &index) const
int indexOf(const T *parent, const T *item) const
void unloadItemsForIndex(const QModelIndex &parent)
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
T * takeItemAt(const T *parent, int index)
virtual bool isDynamic(const T &item) const
virtual QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
BasicTreeModelBase::Option Option
Definition: BasicTreeModel.h++:88
virtual void writeProlog(OS &stream) const
virtual void writeEpilog(OS &stream) const
virtual void fetchMore(const QModelIndex &index)
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
void setItems(T *parent, QList< T *> items)
void insertItemAt(T *parent, int index, T *item)
virtual QMimeData * mimeData(const QModelIndexList &indexes) const
virtual QString itemMimeType() const
T * getItemForIndex(const QModelIndex &index) const
virtual QString getFieldToolTip(const T &item, int field) const
void addItem(T *parent, T *item)
T * getParentItem(const T *item) const
virtual bool canFetchMore(const QModelIndex &index) const
virtual bool isDroppable(const T &item) const
virtual void onItemReparented(T *item, T *parent)
virtual bool read(IS &stream)
BasicTreeModelBase::Options Options
Definition: BasicTreeModel.h++:89
virtual QStringList mimeTypes() const