Go to the documentation of this file.00001 #ifndef MODELAGGREGATOR_H
00002 #define MODELAGGREGATOR_H
00003
00004 #include <QAbstractItemModel>
00005 #include <QAbstractProxyModel>
00006 #include <QModelIndex>
00007 #include <QList>
00008
00009 namespace Aseba
00010 {
00011 class ModelAggregator : public QAbstractItemModel
00012 {
00013 public:
00014 ModelAggregator(QObject* parent = 0);
00015
00016
00017 void addModel(QAbstractItemModel* model, unsigned int column = 0);
00018
00019
00020 int columnCount(const QModelIndex &parent = QModelIndex()) const;
00021 int rowCount(const QModelIndex &parent = QModelIndex()) const;
00022 QVariant data(const QModelIndex &index, int role) const;
00023 bool hasIndex(int row, int column, const QModelIndex &parent) const;
00024 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
00025 QModelIndex parent(const QModelIndex &child) const;
00026
00027 protected:
00028 struct ModelDescription
00029 {
00030 QAbstractItemModel* model;
00031 unsigned int column;
00032 };
00033
00034 typedef QList<ModelDescription> ModelList;
00035 ModelList models;
00036 };
00037
00038
00039
00040 class TreeChainsawFilter : public QAbstractProxyModel
00041 {
00042 Q_OBJECT
00043
00044 public:
00045 TreeChainsawFilter(QObject* parent = 0) : QAbstractProxyModel(parent) { }
00046
00047
00048 int rowCount(const QModelIndex &parent = QModelIndex()) const;
00049 int columnCount(const QModelIndex &parent = QModelIndex()) const;
00050 bool hasIndex(int row, int column, const QModelIndex &parent) const;
00051 QModelIndex index(int row, int column, const QModelIndex &parent) const;
00052 QModelIndex parent(const QModelIndex &child) const;
00053
00054
00055 void setSourceModel(QAbstractItemModel *sourceModel);
00056 QModelIndex mapFromSource(const QModelIndex & sourceIndex) const;
00057 QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
00058
00059 void sort(int column, Qt::SortOrder order);
00060
00061 protected:
00062 struct ModelIndexLink
00063 {
00064 QModelIndex source;
00065 QModelIndex proxy;
00066 };
00067
00068 void sortWalkTree(const QModelIndex& parent);
00069
00070 typedef QList<ModelIndexLink> IndexLinkList;
00071 IndexLinkList indexList;
00072 };
00073 };
00074
00075 #endif // MODELAGGREGATOR_H