Quark  0.1
AbstractGridModel.h++
Go to the documentation of this file.
1 
2 #ifndef __libquark_gui_AbstractGridModel_hxx
3 #define __libquark_gui_AbstractGridModel_hxx
4 
5 #include <QAbstractItemModel>
6 #include <QBuffer>
7 #include <QDataStream>
8 #include <QDebug>
9 #include <QIcon>
10 #include <QMimeData>
11 #include <QPoint>
12 
13 namespace quark {
14 namespace gui {
15 
31 template<class T, class IS = QDataStream, class OS = QDataStream>
32 class AbstractGridModel : public QAbstractItemModel
33 {
34  public:
35 
37  virtual ~AbstractGridModel();
38 
40  virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
41 
43  virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
44 
46  virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole)
47  const;
48 
50  virtual bool setData(const QModelIndex &index, const QVariant &value,
51  int role = Qt::EditRole);
52 
54  virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
55 
57  virtual QVariant headerData(int section, Qt::Orientation orientation,
58  int role = Qt::DisplayRole) const;
59 
61  virtual QModelIndex index(int row, int column,
62  const QModelIndex &parent = QModelIndex()) const;
63 
65  virtual QModelIndex parent(const QModelIndex &index) const;
66 
68  virtual Qt::ItemFlags flags(const QModelIndex &index) const;
69 
71  virtual QStringList mimeTypes() const;
72 
74  virtual QMimeData *mimeData(const QModelIndexList &indexes) const;
75 
77  virtual bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action,
78  int row, int column, const QModelIndex &parent);
79 
85  void resize(int rows, int columns);
86 
88  int rows() const;
89 
91  int columns() const;
92 
94  int itemCount() const;
95 
100  void clear();
101 
103  bool isEmpty() const;
104 
113  bool setItems(QList<T *> items);
114 
123  void setItemAt(T *item, int row, int column);
124 
133  T *getItemAt(int row, int column) const;
134 
145  T *takeItemAt(int row, int column);
146 
153  void removeItemAt(int row, int column);
154 
163  void updateItem(T *item);
164 
173  void updateItemAt(int row, int column);
174 
182  virtual QPoint positionOf(const T *item) const = 0;
183 
192  bool isCellEmpty(int row, int column) const;
193 
195  void setEditable(bool editable);
196 
198  bool isEditable() const;
199 
201  virtual QVariant getValue(const T &item) const = 0;
202 
210  virtual QString getRowName(int row) const;
211 
219  virtual QString getColumnName(int column) const;
220 
221  protected:
222 
224  AbstractGridModel(QObject *parent = NULL);
225 
227  virtual QIcon getIcon(const T &item) const;
228 
230  virtual QSize getSize(const T &item) const;
231 
233  virtual Qt::AlignmentFlag getValueAlignment(const T &item) const;
234 
236  virtual Qt::AlignmentFlag getRowHeaderAlignment() const;
237 
239  virtual Qt::AlignmentFlag getColumnHeaderAlignment() const;
240 
242  virtual void setValue(T *item, const QVariant &value);
243 
245  virtual void setChecked(T *item, bool checked);
246 
248  virtual bool isEditable(const T &item) const;
249 
251  virtual bool isCheckable(const T &item) const;
252 
254  virtual bool isChecked(const T &item) const;
255 
257  virtual bool isDraggable(const T &item) const;
258 
260  virtual bool isDroppable(const T &item) const;
261 
263  virtual bool isEmptyDroppable() const;
264 
269  virtual void itemAdded(const T *item);
270 
275  virtual void itemUpdated(const T &item);
276 
281  virtual void itemRemoved(const T &item);
282 
284  virtual T *getAt(int row, int column) const = 0;
285 
287  virtual T *takeAt(int row, int column) = 0;
288 
290  virtual void setAt(T *item, int row, int column) = 0;
291 
293  virtual void removeAll() = 0;
294 
296  virtual void resizeData(int rows, int columns) = 0;
297 
311  virtual bool dropOtherMimeData(const QMimeData *mimeData,
312  Qt::DropAction action, int row,
313  int column, const QModelIndex &parent);
314 
319  virtual QStringList otherMimeTypes() const;
320 
322  virtual QString itemMimeType() const = 0;
323 
331  virtual void writeProlog(OS &stream) const;
332 
341  virtual void writeItem(const T &item, OS &stream) const;
342 
350  virtual void writeEpilog(OS &stream) const;
351 
359  virtual void readProlog(IS &stream);
360 
369  virtual T *readItem(IS &stream);
370 
378  virtual void readEpilog(IS &stream);
379 
380  private:
381 
382  bool _editable;
383  int _rows;
384  int _columns;
385 };
386 
387 #include <quark/AbstractGridModelImpl.h++>
388 
389 } // namespace gui
390 } // namespace quark
391 
392 #endif // __libquark_gui_AbstractGridModel_hxx
bool isEditable() const
Tests the editability of the model.
int columns() const
Returns the number of columns in the model.
virtual bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole)
Specified by QAbstractItemModel.
virtual void readProlog(IS &stream)
Reads any necessary prolog (e.g., an XML open-tag) when deserializing items that are being dropped in...
virtual Qt::ItemFlags flags(const QModelIndex &index) const
Specified by QAbstractItemModel.
virtual Qt::AlignmentFlag getColumnHeaderAlignment() const
Returns the preferred column (horizontal) header label alignment.
virtual void writeEpilog(OS &stream) const
Writes any necessary epilog (e.g., an XML close-tag) when serializing items to be dragged out of the ...
int rows() const
Returns the number of rows in the model.
virtual QModelIndex parent(const QModelIndex &index) const
Specified by QAbstractItemModel.
virtual void itemAdded(const T *item)
Called when an item has been added to the model.
virtual QSize getSize(const T &item) const
Returns the preferred display size of a given item, if any.
T * takeItemAt(int row, int column)
Removes and returns the item at the specified row and column.
virtual void writeProlog(OS &stream) const
Writes any necessary prolog (e.g., an XML open-tag) when serializing items to be dragged out of the m...
void removeItemAt(int row, int column)
Removes and deletes the item at the specified row and column.
virtual QString itemMimeType() const =0
Returns the model&#39;s native MIME-type.
bool setItems(QList< T *> items)
Populates the model with items from a QList.
virtual void writeItem(const T &item, OS &stream) const
Serializes an item that is being dragged out of the model.
T * getItemAt(int row, int column) const
Returns the item at the specified row and column.
virtual bool isChecked(const T &item) const
Tests if a given item is currently checked.
virtual QPoint positionOf(const T *item) const =0
Returns the row and column position of the given item in the model.
virtual void readEpilog(IS &stream)
Reads any necessary epilog (e.g., an XML close-tag) when deserializing items that are being dropped i...
virtual bool isDraggable(const T &item) const
Tests if a given item can be dragged.
virtual T * readItem(IS &stream)
Deserializes an item that is being dropped into the model.
virtual T * takeAt(int row, int column)=0
Removes and returns the item at the given row and column.
void resize(int rows, int columns)
Resizes the model.
AbstractGridModel(QObject *parent=NULL)
Constructor.
virtual ~AbstractGridModel()
Destructor.
virtual bool dropOtherMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Handles the dropping of MIME data with a MIME-type that is supported by (but not native to) this mode...
virtual void setChecked(T *item, bool checked)
Sets the checked state of a checkable item.
virtual void setAt(T *item, int row, int column)=0
Sets the item at the given row and column.
virtual void itemUpdated(const T &item)
Called when an item has been updated in the model.
virtual bool isDroppable(const T &item) const
Tests if a given item can be dropped onto.
virtual void itemRemoved(const T &item)
Called when an item is about to be removed from the model.
Definition: BarChartView.h++:6
virtual T * getAt(int row, int column) const =0
Returns the item at the given row and column.
virtual void resizeData(int rows, int columns)=0
Resizes the model.
virtual QStringList otherMimeTypes() const
Returns a list of additional MIME-types that can be dropped onto the model.
virtual int columnCount(const QModelIndex &parent=QModelIndex()) const
Specified by QAbstractItemModel.
virtual QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const
Specified by QAbstractItemModel.
virtual QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const
Specified by QAbstractItemModel.
void updateItemAt(int row, int column)
Notifies the model that the item at the given position has changed in some way.
void updateItem(T *item)
Notifies the model that the given item has changed in some way.
virtual bool hasChildren(const QModelIndex &parent=QModelIndex()) const
Specified by QAbstractItemModel.
void setEditable(bool editable)
Sets the editability of the model.
int itemCount() const
Returns the number of items in the model.
virtual Qt::AlignmentFlag getRowHeaderAlignment() const
Returns the preferred row (vertical) header label alignment.
bool isCellEmpty(int row, int column) const
Tests if the given cell of the model is empty.
virtual QMimeData * mimeData(const QModelIndexList &indexes) const
Specified by QAbstractItemModel.
void setItemAt(T *item, int row, int column)
Sets an item at the specified row and column.
virtual Qt::AlignmentFlag getValueAlignment(const T &item) const
Returns the preferred alignment of a given item.
virtual QString getColumnName(int column) const
Returns the name of the given column.
virtual bool isEmptyDroppable() const
Tests if an empty cell can be dropped onto.
virtual QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const
Specified by QAbstractItemModel.
void clear()
Removes all items from the model.
virtual QStringList mimeTypes() const
Specified by QAbstractItemModel.
virtual void setValue(T *item, const QVariant &value)
Sets the value of an edited item.
virtual bool isCheckable(const T &item) const
Tests if a given item is checkable.
virtual QVariant getValue(const T &item) const =0
Returns the display object for the given item.
virtual void removeAll()=0
Removes all items from the model.
virtual QIcon getIcon(const T &item) const
Returns the icon for a given item, if any.
bool isEmpty() const
Tests if the model is empty.
virtual bool dropMimeData(const QMimeData *mimeData, Qt::DropAction action, int row, int column, const QModelIndex &parent)
Specified by QAbstractItemModel.
virtual QString getRowName(int row) const
Returns the name of the given row.
An abstract base class for grid data models, i.e., models in which every cell contains the same type ...
Definition: AbstractGridModel.h++:32
virtual int rowCount(const QModelIndex &parent=QModelIndex()) const
Specified by QAbstractItemModel.