4#include "include/column_data/column_data.h"
5#include "include/tables/game_child_table.h"
11template<
class T_ChildAbstractTableItem,
12 class T_ParentAbstractTableItem,
20 :
public GameChildTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>
29 bool hasChildren(
const QModelIndex &parent = QModelIndex())
const override;
30 QModelIndex sibling(
int row,
int column,
const QModelIndex &idx)
const override;
33 QVariant data(
const QModelIndex &index, qint32 role = Qt::DisplayRole)
const override;
36 qint32 columnCount(
const QModelIndex &parent = QModelIndex())
const override;
37 qint32 rowCount(
const QModelIndex &parent = QModelIndex())
const override;
40 bool hasIndex(
int row,
int column,
const QModelIndex &parent = QModelIndex())
const;
41 QModelIndex index(qint32 row,
43 const QModelIndex &parent = QModelIndex())
const override;
44 QModelIndex parent(
const QModelIndex &index)
const override;
47 bool setData(
const QModelIndex &index,
48 const QVariant &value,
49 qint32 role = Qt::EditRole)
override;
52 inline QString modelName()
const override {
return QStringLiteral(
"Game child tree table"); }
53 inline constexpr AbstractBaseModel::AbstractTableModelType modelType()
const override
55 return AbstractBaseModel::AbstractTableModelType::GameChildTreeTable;
59 static constexpr qint32 parent_row_column_count_{1};
66template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
71 :
GameChildTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>(table_name,
80template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
81bool GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::hasChildren(
82 const QModelIndex &parent)
const
84 if (!parent.isValid())
87 if (parent.column() != 0)
90 if (parent.internalId() ==
static_cast<quintptr
>(GameChildTreeTable::NO_PARENT))
91 return this->rowCount(parent) > 0;
96template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
98GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::sibling(
99 int row,
int column,
const QModelIndex &idx)
const
102 return QModelIndex();
105 if (!idx.parent().isValid()) {
108 if (column != 0 || row < 0 || row >= rowCount())
109 return QModelIndex();
111 return index(row, 0);
115 if (row < 0 || row >= rowCount(idx.parent()) || column < 0
116 || column >= columnCount(idx.parent()))
117 return QModelIndex();
119 return index(row, column, idx.parent());
126template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
127QVariant GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::data(
128 const QModelIndex &index, qint32 role)
const
131 if (index.internalId() !=
static_cast<quintptr
>(GameChildTreeTable::NO_PARENT))
132 return GameChildTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::
136 if (role == Qt::DisplayRole) {
137 switch (index.column()) {
139 return this->parent_table_->text(index.row());
152template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
154GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::columnCount(
155 const QModelIndex &parent)
const
157 if (!parent.isValid())
158 return this->constColumnData()->columnCount();
160 if (parent.internalId() ==
static_cast<quintptr
>(GameChildTreeTable::NO_PARENT)
161 && parent.column() == 0)
162 return this->constColumnData()->columnCount();
173template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
174qint32 GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::rowCount(
175 const QModelIndex &parent)
const
178 if (!parent.isValid())
179 return this->parent_table_->rowCount();
182 if (parent.internalId() ==
static_cast<quintptr
>(GameChildTreeTable::NO_PARENT)
183 && parent.column() == 0)
184 return this->parent_table_->childRowCount(parent.row(), this->attributes()->id());
193template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
194bool GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::hasIndex(
195 int row,
int column,
const QModelIndex &parent)
const
197 if (parent.isValid() && parent.column() != 0)
200 if (column < 0 || column >= this->columnCount(parent)) {
204 return row >= 0 && row < this->rowCount(parent);
207template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
209GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::index(
210 qint32 row, qint32 column,
const QModelIndex &parent)
const
212 if (!this->hasIndex(row, column, parent))
213 return QModelIndex();
215 if (!parent.isValid())
216 return this->createIndex(row, column,
static_cast<quintptr
>(GameChildTreeTable::NO_PARENT));
218 return this->createIndex(row,
220 parent.row() + GameChildTreeTable::CHILD_INDEX_PARENT_ROW_MODIFIER);
223template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
225GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::parent(
226 const QModelIndex &index)
const
229 || index.internalId() ==
static_cast<quintptr
>(GameChildTreeTable::NO_PARENT))
230 return QModelIndex();
232 return this->createIndex(index.internalId()
233 - GameChildTreeTable::CHILD_INDEX_PARENT_ROW_MODIFIER,
241template<
class T_ChildAbstractTableItem,
class T_ParentAbstractTableItem,
class T_ColumnData>
242bool GameChildTreeTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::setData(
243 const QModelIndex &index,
const QVariant &value, qint32 role)
245 if (index.internalId() ==
static_cast<quintptr
>(GameChildTreeTable::NO_PARENT))
248 return GameChildTable<T_ChildAbstractTableItem, T_ParentAbstractTableItem, T_ColumnData>::setData(
The ColumnData class represents a container of ehm_dal::column_data::Column and attributes relating t...
Definition: column_data.h:18
The GameChildTable class is a model for child data of a parent table. Each parent item has a single c...
Definition: game_child_table.h:20
The GameChildTreeTable class is a model for child data of a parent table. Each parent item can have m...
Definition: game_child_tree_table.h:21
namespace ehm_dal::tables
Definition: column.h:4
TableType
The TableType enum denotes different types of database table.
Definition: table_type.h:12
TableIndex
The TableIndex enum represents the id number of each table within the database.
Definition: table_index.h:14