25 QAbstractTableModel(parent), m_modified(false)
34 if (names.size() != values.size())
37 "Error. Cannot set initial value model. Passed parameter names vector and default values vector have different size.";
40 emit beginResetModel();
42 this->m_ParameterNames = names;
43 this->m_Values = values;
45 this->m_modified =
false;
55 values.set_size(names.size());
65 if (!node)
mitkThrow() <<
"Try to set a null ptr as initial value source image.";
67 if (!dynamic_cast<mitk::Image*>(node->
GetData()))
mitkThrow() <<
"Error. Passed node does not contain an image.";
69 emit beginResetModel();
71 this->m_ParameterImageMap[paramIndex] = node;
78 emit beginResetModel();
80 this->m_ParameterImageMap.clear();
89 return this->m_Values;
97 initDelegate->SetInitialParameterization(m_Values);
99 for (
const auto& pos : this->m_ParameterImageMap)
101 initDelegate->AddInitialParameterImage(dynamic_cast<mitk::Image*>(pos.second->GetData()), pos.first);
104 return initDelegate.GetPointer();
111 for (
const auto& pos : this->m_ParameterImageMap)
113 if (pos.second.IsNull())
return false;
122 if (parent.isValid())
127 return m_Values.size();
134 if (parent.isValid())
143 QmitkInitialValuesModel::
144 valueType(
const QModelIndex& index)
const 146 if (m_ParameterImageMap.find(index.row()) != m_ParameterImageMap.end())
158 data(
const QModelIndex& index,
int role)
const 160 if (!index.isValid())
167 if (index.row() <
static_cast<int>(m_Values.size()))
169 switch (index.column())
172 if (role == Qt::DisplayRole || role == Qt::EditRole)
174 result = QVariant(QString::fromStdString(m_ParameterNames[index.row()]));
176 else if (role == Qt::ToolTipRole)
178 result = QVariant(
"Name of the parameter.");
184 if (role == Qt::DisplayRole)
186 if (valueType(index) == 1)
188 result = QVariant(
"image");
192 result = QVariant(
"scalar");
195 else if (role == Qt::EditRole)
197 result = QVariant(valueType(index));
199 else if (role == Qt::ToolTipRole)
201 result = QVariant(
"type of the inital value.");
206 if (role == Qt::DisplayRole || role == Qt::EditRole)
208 const auto& finding = m_ParameterImageMap.find(index.row());
209 if (finding != m_ParameterImageMap.end())
211 if (finding->second.IsNotNull())
213 result = QVariant(finding->second->GetName().c_str());
217 result = QVariant(
"Invalid. Select image.");
222 result = QVariant(m_Values(index.row()));
225 else if (role == Qt::UserRole)
227 result = QVariant(valueType(index));
229 else if (role == Qt::ToolTipRole)
231 result = QVariant(
"Initial values for the parameter.");
243 flags(
const QModelIndex& index)
const 245 Qt::ItemFlags
flags = QAbstractItemModel::flags(index);
247 if (index.row() <
static_cast<int>(m_Values.size()))
249 if (index.column() > 0)
251 flags |= Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
255 flags |= Qt::ItemIsEnabled | Qt::ItemIsSelectable;
264 headerData(
int section, Qt::Orientation orientation,
int role)
const 266 if ((Qt::DisplayRole == role) &&
267 (Qt::Horizontal == orientation))
271 return QVariant(
"Parameters");
273 else if (section == 1)
275 return QVariant(
"Type");
277 else if (section == 2)
279 return QVariant(
"Value");
288 setData(
const QModelIndex& index,
const QVariant& value,
int role)
290 if (!index.isValid() || index.row() >=
static_cast<int>(m_Values.size()) || (index.column() == 0))
295 if (Qt::EditRole == role)
297 emit dataChanged(index, index);
299 emit beginResetModel();
302 if (index.column() == 1)
304 if (value.toInt() == 0)
306 this->m_ParameterImageMap.erase(index.row());
312 this->m_ParameterImageMap[index.row()] =
nullptr;
319 if (valueType(index) == 0)
321 m_Values[index.row()] = value.toDouble();
328 if (node && dynamic_cast<mitk::Image*>(node->
GetData()))
330 this->m_ParameterImageMap[index.row()] = node;
337 emit endResetModel();
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
mitk::InitialParameterizationDelegateBase::Pointer getInitialParametrizationDelegate() const
itk::Array< ParameterValueType > ParametersType
BaseData * GetData() const
Get the data object (instance of BaseData, e.g., an Image) managed by this DataNode.
std::vector< ParameterNameType > ParameterNamesType
int columnCount(const QModelIndex &parent=QModelIndex()) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
bool hasValidInitialValues() const
QVariant data(const QModelIndex &index, int role) const override
mitk::ModelTraitsInterface::ParametersType getInitialValues() const
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
void resetInitialParameterImage()
QmitkInitialValuesModel(QObject *parent=nullptr)
void setInitialValues(const mitk::ModelTraitsInterface::ParameterNamesType &names, const mitk::ModelTraitsInterface::ParametersType values)
void addInitialParameterImage(const mitk::DataNode *node, mitk::ModelTraitsInterface::ParametersType::size_type paramIndex)
int rowCount(const QModelIndex &parent=QModelIndex()) const override
Class for nodes of the DataTree.