#include "CTableModel.h" #include "CIconActDialog.h" CTableModel::CTableModel(QObject *parent) : QAbstractTableModel(parent) { m_parent = dynamic_cast(parent); m_headerList << tr("图元名称") << tr("触发动作") << tr("控制面板") << tr("默认着色策略") << tr("模拟操作"); } const QList &CTableModel::getDataList() { return m_dataList; } void CTableModel::updateData(QList &dataList) { beginResetModel(); m_dataList.swap(dataList); endResetModel(); } void CTableModel::addRows(const QList &dataList) { if(dataList.isEmpty()) { return; } beginInsertRows(QModelIndex(), rowCount(), rowCount() + dataList.length()-1); m_dataList.append(dataList); endInsertRows(); } void CTableModel::removeRows(const QModelIndexList &rowIndexList) { beginResetModel(); for(int nIndex(rowIndexList.length()-1); nIndex>=0; nIndex--){ m_dataList.removeAt(rowIndexList[nIndex].row()); } endResetModel(); } void CTableModel::getExistIcon(QStringList &nameList) { foreach (ST_ICONACT st_icon, m_dataList) { nameList.append(st_icon.name); } } QVariant CTableModel::headerData(int section, Qt::Orientation orientation, int role) const { if(Qt::DisplayRole == role) { if(Qt::Horizontal == orientation) { return m_headerList.at(section); } } return QVariant(); } int CTableModel::rowCount(const QModelIndex &parent) const { if(parent.isValid()) return 0; return m_dataList.length(); } int CTableModel::columnCount(const QModelIndex &parent) const { if(parent.isValid()) return 0; return m_headerList.length(); } QVariant CTableModel::data(const QModelIndex &index, int role) const { if(!index.isValid()) return QVariant(); if(Qt::TextAlignmentRole == role) { return Qt::AlignCenter; } \ if(Qt::DisplayRole != role) { return QVariant(); } switch(index.column()){ case NAME: { return m_dataList.at(index.row()).name; break; } case ACTION: { return m_parent->getActDesc( m_dataList.at(index.row()).action ); break; } case PANEL: { return m_dataList.at(index.row()).panel; break; } case STRATEGY: { return m_dataList.at(index.row()).strategy; break; } case SIMULATE: { return m_parent->getSimDesc( m_dataList.at(index.row()).simulate ); break; } default: break; } return QVariant(); } bool CTableModel::setData(const QModelIndex &index, const QVariant &value, int role) { if(!index.isValid()) { return false; } if(Qt::DisplayRole == role) { switch(index.column()){ case NAME: { m_dataList[index.row()].name = value.toString(); break; } case PANEL: { m_dataList[index.row()].panel = value.toString(); break; } case STRATEGY: { m_dataList[index.row()].strategy = value.toString(); break; } default: break; } } if(Qt::UserRole == role) { switch(index.column()){ case ACTION: { m_dataList[index.row()].action = value.toInt(); break; } case SIMULATE: { m_dataList[index.row()].simulate = value.toInt(); break; } default: break; } } return true; } Qt::ItemFlags CTableModel::flags(const QModelIndex &index) const { if (!index.isValid()) { return Qt::NoItemFlags; } return Qt::ItemIsSelectable | Qt::ItemIsEnabled | Qt::ItemIsEditable; }