00001 #ifndef COSTPOSITIONMODEL_H 00002 #define COSTPOSITIONMODEL_H 00003 00004 #include <QAbstractItemModel> 00005 #include <QDomElement> 00006 00007 class CostPositionItem; 00008 00029 class CostPositionModel : public QAbstractItemModel 00030 { 00031 Q_OBJECT; 00032 00033 public: 00034 CostPositionModel(QObject *parent = 0, bool empty = false); 00035 ~CostPositionModel(); 00036 00037 void readCategories(); 00038 00039 QVariant data(const QModelIndex &index, int role) const; 00040 Qt::ItemFlags flags(const QModelIndex &index) const; 00041 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; 00042 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const; 00043 QModelIndex parent(const QModelIndex &index) const; 00044 00045 int rowCount(const QModelIndex &parent = QModelIndex()) const; 00046 int columnCount(const QModelIndex &parent = QModelIndex()) const; 00047 00048 CostPositionItem* getRootItem() { return rootItem; } 00049 CostPositionItem* getCostPositionItem(QString name, QString sectName) const; 00050 void dataChange() { emit dataChanged(QModelIndex(), QModelIndex()); } 00051 00052 void addCategory(uint sectionid, QString name, bool editable); 00053 void addCostPosition(QString desc, QString lang, int actionid, int costtype, QString secName, bool editable); 00054 00055 bool existsCategory(QString name); 00056 bool existsPositionInCategory(QString posName, int sectionid); 00057 00058 bool isCategoryEditable(int sectionId); 00059 bool isPositionEditable(QString positionName, int sectionId); 00060 00061 int getSectionId(QString cat); 00062 int getSectionIdFromPosition(QString position); 00063 QString getCategoryNameFromSectionId(int id); 00064 00065 void deletePosition(QString positionname, int sectionId); 00066 void deleteCategory(int sectionid); 00067 00068 void editCategory(QString oldCat, QString newCat); 00069 void editPosition(QMap<QString, QVariant> *changes); 00070 00071 void addOtherPositions(int sectionId, CostPositionItem *&oldCat); 00072 00073 QDomElement dataNode(); 00074 00075 public slots: 00076 void clearPositions(); 00077 00078 private: 00079 void addPosition(QString desc, QString lang, int actionid, int costtype, int sectionid, bool editable); 00080 00081 CostPositionItem *rootItem; 00082 00083 signals: 00084 void costTypePositionsNotReadable(); 00085 void clearCostPositions(bool clearEntries); 00086 }; 00087 00088 class CostPositionItem 00089 { 00090 public: 00091 CostPositionItem(const QVariantList &data, CostPositionItem *parent = 0); 00092 ~CostPositionItem(); 00093 00094 void appendChild(CostPositionItem *child); 00095 void removeChild(CostPositionItem *child); 00096 void removeChilds(); 00097 00098 CostPositionItem *child(int row); 00099 int childCount() const; 00100 int columnCount() const; 00101 QVariant data(int column) const; 00102 QVariantList itemInfo() const; 00103 QMap<QString, QVariant> itemInformation(); 00104 int row() const; 00105 CostPositionItem *parent(); 00106 00107 QList<CostPositionItem*> childItems; 00108 00109 private: 00110 QVariantList itemData; 00111 CostPositionItem *parentItem; 00112 }; 00113 00114 #endif