156 lines
3.9 KiB
C++
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 ¶m = 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 ¶m = 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> ¶ms)
|
|
{
|
|
qDebug() << "ProjectParamTableModel: устанавливаем" << params.size() << "параметров";
|
|
beginResetModel();
|
|
m_data = params;
|
|
endResetModel();
|
|
qDebug() << "ProjectParamTableModel: модель обновлена, теперь содержит" << m_data.size() << "параметров";
|
|
}
|
|
|
|
void ProjectParamTableModel::addProjectParam(const ProjectParamTableData ¶m)
|
|
{
|
|
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 ¶m : m_data) {
|
|
result[param.name] = param.value;
|
|
}
|
|
return result;
|
|
}
|