File indexing completed on 2024-05-05 05:40:28

0001 #include "model/genericmodel.h"
0002 #include "data/character.h"
0003 
0004 GenericModel::GenericModel(QStringList cols, QVector<int> readOnlyCols, QObject* parent)
0005     : QAbstractTableModel(parent), m_columnList(cols), m_readOnlyCols(readOnlyCols)
0006 {
0007 }
0008 
0009 QVariant GenericModel::headerData(int section, Qt::Orientation orientation, int role) const
0010 {
0011     if(orientation == Qt::Horizontal && Qt::DisplayRole == role)
0012     {
0013         return m_columnList[section];
0014     }
0015     return QVariant();
0016 }
0017 
0018 int GenericModel::rowCount(const QModelIndex& parent) const
0019 {
0020     if(parent.isValid())
0021         return 0;
0022 
0023     return m_data.size();
0024 }
0025 
0026 int GenericModel::columnCount(const QModelIndex& parent) const
0027 {
0028     if(parent.isValid())
0029         return 0;
0030 
0031     return m_columnList.size();
0032 }
0033 
0034 QVariant GenericModel::data(const QModelIndex& index, int role) const
0035 {
0036     if(!index.isValid())
0037         return QVariant();
0038 
0039     auto item= m_data.at(index.row());
0040 
0041     return item->getData(index.column(), role);
0042 }
0043 
0044 bool GenericModel::setData(const QModelIndex& index, const QVariant& value, int role)
0045 {
0046     if(!index.isValid())
0047         return false;
0048 
0049     auto item= m_data.at(index.row());
0050     if(item->setData(index.column(), value, role))
0051     {
0052         emit dataChanged(index, index, QVector<int>() << role);
0053         return true;
0054     }
0055     return false;
0056 }
0057 
0058 Qt::ItemFlags GenericModel::flags(const QModelIndex& index) const
0059 {
0060     if(!index.isValid())
0061         return Qt::NoItemFlags;
0062 
0063     if(m_readOnlyCols.contains(index.column()))
0064         return Qt::ItemIsSelectable | Qt::ItemIsEnabled;
0065 
0066     return Qt::ItemIsEditable | Qt::ItemIsSelectable | Qt::ItemIsEnabled;
0067 }
0068 
0069 void GenericModel::addData(CharacterField* item)
0070 {
0071     beginInsertRows(QModelIndex(), m_data.size(), m_data.size());
0072     m_data.append(item);
0073     endInsertRows();
0074 }
0075 
0076 void GenericModel::removeData(const QModelIndex& index)
0077 {
0078     if(!index.isValid())
0079         return;
0080 
0081     beginRemoveRows(QModelIndex(), index.row(), index.row());
0082     m_data.removeAt(index.row());
0083     endRemoveRows();
0084 }
0085 
0086 QList<CharacterField*>::iterator GenericModel::begin()
0087 {
0088     return m_data.begin();
0089 }
0090 
0091 QList<CharacterField*>::iterator GenericModel::end()
0092 {
0093     return m_data.end();
0094 }
0095 
0096 void GenericModel::resetData(QList<CharacterField*> list)
0097 {
0098     beginResetModel();
0099     m_data.clear();
0100     m_data << list;
0101     endResetModel();
0102 }
0103 
0104 const QList<CharacterField*>& GenericModel::fields() const
0105 {
0106     return m_data;
0107 }