26 #include <itkCommand.h> 32 : QAbstractTableModel(parent),
36 m_SortDescending(false)
76 if (role == Qt::DisplayRole)
78 if (orientation == Qt::Horizontal)
83 else if (section == 1)
84 headerData =
"Data Type";
85 else if (section == 2)
86 headerData =
"Visibility";
88 else if (orientation == Qt::Vertical)
91 headerData = section + 1;
100 Qt::ItemFlags
flags = QAbstractItemModel::flags(index);
103 if (index.column() == 0)
105 flags |= Qt::ItemIsEditable;
107 else if (index.column() == 2)
109 flags |= Qt::ItemIsUserCheckable;
131 if (index.isValid() && !
m_NodeSet.empty())
135 std::string nodeName = node->GetName();
136 if (nodeName.empty())
137 nodeName =
"unnamed";
140 if (index.column() == 0)
143 if (role == Qt::DisplayRole || role == Qt::EditRole)
145 data = QString::fromStdString(nodeName);
149 data = QVariant::fromValue(node);
152 else if (index.column() == 1)
157 if (role == Qt::DisplayRole)
162 else if (role == Qt::DecorationRole)
164 data = nodeDescriptor->
GetIcon(node);
167 else if (index.column() == 2)
170 bool visibility =
false;
172 if (node->GetVisibility(visibility,
nullptr) && role == Qt::CheckStateRole)
174 data = (visibility ? Qt::Checked : Qt::Unchecked);
204 dataStorage->AddNodeEvent.RemoveListener(
208 dataStorage->RemoveNodeEvent.RemoveListener(
222 dataStorage->AddNodeEvent.AddListener(
226 dataStorage->RemoveNodeEvent.AddListener(
246 if (node->
GetData() ==
nullptr)
250 itk::MemberCommand<QmitkDataStorageTableModel>::Pointer propertyModifiedCommand =
251 itk::MemberCommand<QmitkDataStorageTableModel>::New();
260 tempProperty->AddObserver(itk::ModifiedEvent(), propertyModifiedCommand);
265 tempProperty->AddObserver(itk::ModifiedEvent(), propertyModifiedCommand);
271 m_NodeSet.push_back(const_cast<mitk::DataNode *>(node));
291 tempProperty = (*nodeIt)->GetProperty(
"visible");
297 tempProperty = (*nodeIt)->GetProperty(
"name");
303 int row = std::distance(
m_NodeSet.begin(), nodeIt);
306 this->beginRemoveRows(QModelIndex(), row, row);
324 if (modifiedProperty)
330 std::vector<mitk::DataNode *>::iterator it;
338 visibilityProperty = (*it)->GetProperty(
"visible");
339 if (modifiedProperty == visibilityProperty)
345 nameProperty = (*it)->GetProperty(
"name");
346 if (modifiedProperty == nameProperty)
355 row = std::distance(
m_NodeSet.begin(), it);
358 QModelIndex indexOfChangedProperty = index(row, column);
359 emit dataChanged(indexOfChangedProperty, indexOfChangedProperty);
368 if (index.isValid() && (role == Qt::EditRole || role == Qt::CheckStateRole))
376 if (index.column() == 0)
378 node->SetStringProperty(
"name", value.toString().toStdString().c_str());
380 else if (index.column() == 2)
382 node->SetBoolProperty(
"visible", (value.toInt() == Qt::Checked ? true :
false));
387 emit dataChanged(index, index);
399 mitk::DataStorage::SetOfObjects::ConstPointer _NodeSet;
428 _NodeSet = dataStorage->GetAll();
433 for (
auto it = _NodeSet->begin(); it != _NodeSet->end(); it++)
443 bool sortDescending = (order == Qt::DescendingOrder) ?
true :
false;
460 else if (column == 2)
466 QAbstractTableModel::beginResetModel();
467 QAbstractTableModel::endResetModel();
478 : m_CompareCriteria(_CompareCriteria), m_CompareOperator(_CompareOperator)
489 return (_Left->GetData()->GetNameOfClass() < _Right->GetData()->GetNameOfClass());
491 return (_Left->GetData()->GetNameOfClass() > _Right->GetData()->GetNameOfClass());
496 bool _LeftVisibility =
false;
497 bool _RightVisibility =
false;
498 _Left->GetVisibility(_LeftVisibility,
nullptr);
499 _Right->GetVisibility(_RightVisibility,
nullptr);
502 return (_LeftVisibility < _RightVisibility);
504 return (_LeftVisibility > _RightVisibility);
511 return (_Left->GetName() < _Right->GetName());
513 return (_Left->GetName() > _Right->GetName());
mitk::BaseProperty * GetProperty(const char *propertyKey, const mitk::BaseRenderer *renderer=nullptr, bool fallBackOnDataProperties=true) const
Get the property (instance of BaseProperty) with key propertyKey from the PropertyList of the rendere...
QmitkDataStorageTableModel(mitk::DataStorage::Pointer _DataStorage, mitk::NodePredicateBase *_Predicate=nullptr, QObject *parent=nullptr)
bool setData(const QModelIndex &index, const QVariant &value, int role) override
itk::SmartPointer< T > Lock() const
mitk::DataNode::Pointer GetNode(const QModelIndex &index) const
Decorator class for mitk::DataNode.
CompareCriteria
Specifies field of the property with which it will be sorted.
QVariant data(const QModelIndex &index, int role) const override
int rowCount(const QModelIndex &parent) const override
const mitk::DataStorage::Pointer GetDataStorage() const
QVariant headerData(int section, Qt::Orientation orientation, int role) const override
std::vector< mitk::DataNode * > m_NodeSet
virtual std::vector< mitk::DataNode * > GetNodeSet() const
void sort(int column, Qt::SortOrder order=Qt::AscendingOrder) override
Reimplemented sort function from QAbstractTableModel to enable sorting on the table.
void SetDataStorage(mitk::DataStorage::Pointer _DataStorage)
QmitkNodeDescriptor * GetDescriptor(const mitk::DataNode *node) const
BaseData * GetData() const
Get the data object (instance of BaseData, e.g., an Image) managed by this DataNode.
Abstract base class for properties.
mitk::DataStorage::Pointer m_DataStorage
static RenderingManager * GetInstance()
bool IsExpired() const noexcept
CompareOperator m_CompareOperator
mitk::WeakPointer< mitk::DataStorage > m_DataStorage
virtual void RemoveNode(const mitk::DataNode *node)
std::map< mitk::BaseProperty *, unsigned long > m_VisiblePropertyModifiedObserverTags
Maps a property to an observer tag.
A struct that inherits from std::binary_function. You can use it in std::sort algorithm for sorting t...
CompareCriteria m_CompareCriteria
virtual QString GetNameOfClass() const
std::map< mitk::BaseProperty *, unsigned long > m_NamePropertyModifiedObserverTags
Maps a property to an observer tag.
DataNodeCompareFunction(CompareCriteria _CompareCriteria=CompareByName, CompareOperator _CompareOperator=Less)
Creates a PropertyDataSetCompareFunction. A CompareCriteria and a CompareOperator must be given...
mitk::NodePredicateBase::Pointer GetPredicate() const
Interface for evaluation conditions used in the DataStorage class GetSubset() method.
mitk::NodePredicateBase::Pointer m_Predicate
virtual QIcon GetIcon(const mitk::DataNode *node) const
int columnCount(const QModelIndex &parent) const override
virtual void AddNode(const mitk::DataNode *node)
virtual void PropertyModified(const itk::Object *caller, const itk::EventObject &event)
Called when a single property was changed. The function searches through the list of nodes in this mo...
~QmitkDataStorageTableModel() override
void RequestUpdateAll(RequestType type=REQUEST_UPDATE_ALL)
Qt::ItemFlags flags(const QModelIndex &index) const override
static QmitkNodeDescriptorManager * GetInstance()
bool operator()(const mitk::DataNode::Pointer &_Left, const mitk::DataNode::Pointer &_Right) const
The reimplemented compare function.
Class for nodes of the DataTree.
void SetPredicate(mitk::NodePredicateBase *_Predicate)
CompareOperator
Specifies Ascending/descending ordering.