00001 #ifndef DOCUMENTCHOOSERMODEL_H
00002 #define DOCUMENTCHOOSERMODEL_H
00003
00004 #include <QAbstractItemModel>
00005
00006 class AbstractModel;
00007 class DocumentItem;
00008 class CostTypeModel;
00009
00010 class DocumentChooserModel : public QAbstractItemModel
00011 {
00012 Q_OBJECT;
00013
00014 public:
00015 DocumentChooserModel(QObject *parent = 0);
00016 ~DocumentChooserModel();
00017
00018 QVariant data(const QModelIndex &index, int role) const;
00019 Qt::ItemFlags flags(const QModelIndex &index) const;
00020 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
00021 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
00022 QModelIndex parent(const QModelIndex &index) const;
00023
00024 int rowCount(const QModelIndex &parent = QModelIndex()) const;
00025 int columnCount(const QModelIndex &parent = QModelIndex()) const;
00026
00027 DocumentItem* rootItem() { return p_rootItem; }
00028 DocumentItem* documentItem(int fileid, int documentType) const;
00029 DocumentItem* documentItem(QString documenttype, QString filename) const;
00030 AbstractModel* abstractModel(int fileid, int documentType) const;
00031
00032
00033 void addDocument(AbstractModel *model);
00034
00035
00036 void deleteDocument(int fileid, int documentType);
00037
00038
00039 void clear();
00040
00041 bool fileExists(const QString &name) const;
00042
00043 CostTypeModel* costTypeModelById(int fileId);
00044
00045 private:
00046
00047 void addDocumentType(int documentType);
00048
00049
00050 bool documentExists(int fileid, int documentType);
00051
00052 DocumentItem *p_rootItem;
00053
00054 signals:
00055 void documentRemoved(int fileid);
00056 };
00057
00058 class DocumentItem
00059 {
00060 public:
00061 DocumentItem() { p_model = NULL;}
00062 DocumentItem(AbstractModel *m, DocumentItem *parent = 0);
00063 ~DocumentItem();
00064
00065 void appendChild(DocumentItem *child);
00066 void removeChild(DocumentItem *child);
00067 void removeChilds();
00068
00069 DocumentItem *child(int row);
00070
00071 int childCount() const;
00072 int columnCount() const;
00073
00074 QVariant data(int column) const;
00075 AbstractModel* model() const;
00076
00077 int fileid() const;
00078 QString fileName() const;
00079 int type() const;
00080
00081 int row() const;
00082 DocumentItem* parent();
00083
00084 QList<DocumentItem*> childItems;
00085
00086 private:
00087 DocumentItem *parentItem;
00088
00089 AbstractModel *p_model;
00090 };
00091
00092 Q_DECLARE_METATYPE(DocumentItem)
00093
00094 #endif // DOCUMENTCHOOSERMODEL_H