183 lines
4.0 KiB
C++

#include "CTableModel.h"
#include "CIconActDialog.h"
CTableModel::CTableModel(QObject *parent)
: QAbstractTableModel(parent)
{
m_parent = dynamic_cast<CIconActDialog *>(parent);
m_headerList << tr("图元名称") << tr("触发动作") << tr("控制面板") << tr("默认着色策略") << tr("模拟操作");
}
const QList<ST_ICONACT> &CTableModel::getDataList()
{
return m_dataList;
}
void CTableModel::updateData(QList<ST_ICONACT> &dataList)
{
beginResetModel();
m_dataList.swap(dataList);
endResetModel();
}
void CTableModel::addRows(const QList<ST_ICONACT> &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;
}