Files
GostGenerator/model/projectparamtablemodel.cpp
T

156 lines
3.9 KiB
C++

#include "projectparamtablemodel.h"
#include <QDebug>
ProjectParamTableModel::ProjectParamTableModel(QObject *parent)
: QAbstractTableModel{parent}
{}
int ProjectParamTableModel::rowCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return m_data.size();
}
int ProjectParamTableModel::columnCount(const QModelIndex &parent) const
{
if (parent.isValid())
return 0;
return 2; // Название и значение
}
QVariant ProjectParamTableModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid() || index.row() >= m_data.size())
return QVariant();
const ProjectParamTableData &param = m_data.at(index.row());
if (role == Qt::DisplayRole || role == Qt::EditRole) {
switch (index.column()) {
case 0: // Название параметра
return param.name;
case 1: // Значение параметра
return param.value;
default:
return QVariant();
}
}
return QVariant();
}
QVariant ProjectParamTableModel::headerData(int section, Qt::Orientation orientation, int role) const
{
if (role != Qt::DisplayRole)
return QVariant();
if (orientation == Qt::Horizontal) {
switch (section) {
case 0:
return tr("Название");
case 1:
return tr("Значение");
default:
return QVariant();
}
}
return QVariant();
}
bool ProjectParamTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
{
if (!index.isValid() || index.row() >= m_data.size() || role != Qt::EditRole)
return false;
ProjectParamTableData &param = m_data[index.row()];
bool changed = false;
switch (index.column()) {
case 0: // Название параметра
if (param.name != value.toString()) {
param.name = value.toString();
changed = true;
}
break;
case 1: // Значение параметра
if (param.value != value.toString()) {
param.value = value.toString();
changed = true;
}
break;
}
if (changed) {
emit dataChanged(index, index);
return true;
}
return false;
}
Qt::ItemFlags ProjectParamTableModel::flags(const QModelIndex &index) const
{
if (!index.isValid())
return Qt::NoItemFlags;
return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
}
void ProjectParamTableModel::setProjectParams(const QList<ProjectParamTableData> &params)
{
qDebug() << "ProjectParamTableModel: устанавливаем" << params.size() << "параметров";
beginResetModel();
m_data = params;
endResetModel();
qDebug() << "ProjectParamTableModel: модель обновлена, теперь содержит" << m_data.size() << "параметров";
}
void ProjectParamTableModel::addProjectParam(const ProjectParamTableData &param)
{
beginInsertRows(QModelIndex(), m_data.size(), m_data.size());
m_data.append(param);
endInsertRows();
}
void ProjectParamTableModel::removeProjectParam(int row)
{
if (row < 0 || row >= m_data.size())
return;
beginRemoveRows(QModelIndex(), row, row);
m_data.removeAt(row);
endRemoveRows();
}
void ProjectParamTableModel::clear()
{
if (m_data.isEmpty())
return;
beginResetModel();
m_data.clear();
endResetModel();
}
ProjectParamTableData ProjectParamTableModel::getProjectParam(int row) const
{
if (row < 0 || row >= m_data.size())
return ProjectParamTableData();
return m_data.at(row);
}
QList<ProjectParamTableData> ProjectParamTableModel::getData() const
{
return m_data;
}
QMap<QString, QString> ProjectParamTableModel::getDataAsMap() const
{
QMap<QString, QString> result;
for (const ProjectParamTableData &param : m_data) {
result[param.name] = param.value;
}
return result;
}