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