00001 #ifndef EXERCISEMODEL_H
00002 #define EXERCISEMODEL_H
00003
00004 #include <QAbstractItemModel>
00005 #include <QList>
00006 #include <QVariantList>
00007 #include <QIcon>
00008 #include <QDebug>
00009 #include "../Data/datadefinitions.h"
00010
00011 class ExerciseItem;
00012 class DataProject;
00013
00029 class ExerciseModel : public QAbstractItemModel
00030 {
00031 Q_OBJECT;
00032 public:
00033 ExerciseModel(bool exercise, DataProject *project = 0, QAbstractItemModel *parent = 0);
00034 Qt::ItemFlags flags(const QModelIndex &index) const;
00035 QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
00036 QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
00037 QModelIndex parent(const QModelIndex &index) const;
00038 int rowCount(const QModelIndex &parent = QModelIndex()) const;
00039 int columnCount(const QModelIndex &parent = QModelIndex()) const;
00040 QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
00041 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
00042
00043 void addChapter(QString chapterName, uint chapterId);
00044 void addExercise(QString chapterName, QString exerciseName, uint exerciseId, DataExerciseStatus status);
00045 void addOtherExercises(uint chapterId, ExerciseItem *oldExercise);
00046
00047 bool existsChapter(QString chapterName);
00048 bool existsExercise(QString chapterName, QString exerciseName);
00049 void editState(QString exerciseName, int exerciseId, DataExerciseStatus state);
00050
00051 void replaceChapterName(ExerciseItem *oldChapter, QString name);
00052 void replaceExerciseName(ExerciseItem *oldExercise, QString name);
00053
00054 void removeChapterByName(QString chapterName);
00055 void removeExerciseByName(QString chapterName, QString exerciseName, uint chapterId = 0);
00056
00057 void editChapter(QString oldChap, QString newChap);
00058 void removeChapter(int chapterID, QString chapterName);
00059 void removeExercise(ExerciseItem *chapter, QString exerciseName);
00060
00061 int chapterID(QString chapterName);
00062 QString chapterName(uint chapterId);
00063
00064 ExerciseItem* chapter(uint chapterId, QString name);
00065 ExerciseItem* chapterByName(QString name);
00066 ExerciseItem* chapterById(uint chapterId);
00067
00068 uint maxChapterID() { return maxChapterId; }
00069 uint maxExerciseIdByChapterId(uint chapterId);
00070 uint maxExerciseIdByChapterName(QString chapterName);
00071
00072 ExerciseItem *getExercise(QString chapterName, QString exerciseName) const;
00073 ExerciseItem *getItemByName(QString name) const;
00074 ExerciseItem *getRootItem() { return this->rootItem; }
00075 void setTeacher(bool state) { isTeacher = state; }
00076 void drawTreeOnDebugOutput();
00077
00078 void setPrintDialogUser(bool used)
00079 {
00080 isPrintDialog = used;
00081 }
00082
00083 private:
00084 ExerciseItem *rootItem;
00085
00086 bool isTeacher;
00087 uint maxChapterId;
00088
00089
00090 bool isPrintDialog;
00091 DataProject *p_project;
00092
00093 signals:
00094 void printError(QString);
00095 void setSelection(uint, int);
00096 void resetView();
00097 };
00098
00103 class ExerciseItem
00104 {
00105 public:
00106 ExerciseItem(const QVariantList &data, ExerciseItem *parent = 0);
00107 int childCount() const;
00108 int columnCount() const;
00109 ExerciseItem *child(int row);
00110 QVariant data(int column) const;
00111 bool setData(QVariant value, int column) const;
00112 int row() const;
00113 void addChild(ExerciseItem *item);
00114 void removeChild(ExerciseItem *item);
00115 ExerciseItem* parent();
00116
00117 Qt::CheckState isChecked()
00118 {
00119 return checkState;
00120 }
00121 void setCheckState(Qt::CheckState value)
00122 {
00123 checkState = value;
00124 }
00125
00126 QVariantList itemInfo() const { return this->infos; }
00127 QList<ExerciseItem*> getChildItems() const { return this->childItems; }
00128 ExerciseItem *getParentItem() const { return this->parentItem; }
00129 void setParent(ExerciseItem *parent) { this->parentItem=parent; }
00130
00131 QList<ExerciseItem *> childItems;
00132
00133 uint maxExerciseID() { return maxExerciseId; }
00134 void incrementExerciseIdByOne() { maxExerciseId++; }
00135
00136 int positionOfExerciseById(uint exerciseId);
00137
00138 private:
00139 QVariantList infos;
00140 ExerciseItem *parentItem;
00141 uint maxExerciseId;
00142 Qt::CheckState checkState;
00143 };
00144
00145 #endif // EXERCISEVIEWMODEL_H