33 void QmitkDataStorageSimpleTreeModel::ResetTree()
36 rootDataNode->SetName(
"Data Storage");
37 m_Root =
new TreeItem(rootDataNode,
nullptr);
64 m_Root->
Find(node) !=
nullptr)
67 this->AddNodeInternal(node);
79 QModelIndex
index = this->createIndex(treeItem->
GetIndex(), 0, treeItem);
82 emit dataChanged(index, index);
88 if (node ==
nullptr || !m_Root)
96 QModelIndex parentIndex = this->IndexFromTreeItem(parentTreeItem);
99 this->beginRemoveRows(parentIndex, treeItem->
GetIndex(), treeItem->
GetIndex());
102 std::vector<TreeItem *> children = treeItem->
GetChildren();
103 m_TreeItems.remove(treeItem);
106 if (!children.empty())
111 this->UpdateModelData();
119 if (!parent.isValid() || parent.model() !=
this)
122 parentItem =
static_cast<TreeItem *
>(parent.internalPointer());
128 return createIndex(row, column, childItem);
131 return QModelIndex();
136 if (!child.isValid() || !m_Root || child.model() !=
this)
137 return QModelIndex();
139 TreeItem *childItem = this->TreeItemFromIndex(child);
142 return QModelIndex();
146 if (parentItem == m_Root)
147 return QModelIndex();
149 return this->createIndex(parentItem->
GetIndex(), 0, parentItem);
153 const QModelIndex &
index)
const 155 if (index.isValid() && index.model() ==
this)
157 auto item =
static_cast<TreeItem *
>(index.internalPointer());
158 auto finding = std::find(std::begin(m_TreeItems), std::end(m_TreeItems), item);
159 if (finding == std::end(m_TreeItems))
171 TreeItem *parentTreeItem = this->TreeItemFromIndex(parent);
185 if (!index.isValid() || index.model() !=
this)
190 auto treeItem = this->TreeItemFromIndex(index);
196 QString nodeName = QString::fromStdString(dataNode->
GetName());
197 if (nodeName.isEmpty())
199 nodeName =
"unnamed";
202 if (role == Qt::DisplayRole)
204 else if (role == Qt::ToolTipRole)
206 else if (role == Qt::DecorationRole)
209 return nodeDescriptor->
GetIcon(dataNode);
217 return QVariant::fromValue<mitk::DataNode *>(dataNode);
225 if (!index.isValid() || index.model() !=
this)
228 auto treeItem = this->TreeItemFromIndex(index);
236 if (role == Qt::EditRole && !value.toString().isEmpty())
238 dataNode->
SetName(value.toString().toStdString().c_str());
240 else if (role == Qt::CheckStateRole)
245 QVariant qcheckstate = index.data(Qt::CheckStateRole);
246 int checkstate = qcheckstate.toInt();
247 bool isVisible = bool(checkstate);
251 emit dataChanged(index, index);
257 if (orientation == Qt::Horizontal && role == Qt::DisplayRole && m_Root)
258 return QString::fromStdString(m_Root->
GetDataNode()->GetName());
265 if (index.isValid() && index.model() ==
this)
267 auto treeItem = this->TreeItemFromIndex(index);
269 return Qt::NoItemFlags;
271 const auto dataNode = treeItem->GetDataNode();
274 return Qt::ItemIsEnabled | Qt::ItemIsSelectable | Qt::ItemIsEditable;
278 return Qt::NoItemFlags;
283 return Qt::NoItemFlags;
290 mitk::DataStorage::SetOfObjects::ConstPointer _Sources =
m_DataStorage.
Lock()->GetSources(node);
292 if (_Sources->Size() > 0)
293 dataNode = _Sources->front();
298 void QmitkDataStorageSimpleTreeModel::AddNodeInternal(
const mitk::DataNode *node)
310 parentTreeItem = m_Root->
Find(parentDataNode);
314 parentTreeItem = m_Root->
Find(parentDataNode);
320 index = this->createIndex(parentTreeItem->
GetIndex(), 0, parentTreeItem);
323 int firstRowWithASiblingBelow = 0;
328 int siblingLayer = -1;
331 siblingNode->GetIntProperty(
"layer", siblingLayer);
333 if (nodeLayer > siblingLayer)
337 ++firstRowWithASiblingBelow;
339 beginInsertRows(index, firstRowWithASiblingBelow, firstRowWithASiblingBelow);
340 auto newNode =
new TreeItem(const_cast<mitk::DataNode *>(node));
341 parentTreeItem->
InsertChild(newNode, firstRowWithASiblingBelow);
342 m_TreeItems.push_back(newNode);
347 QModelIndex QmitkDataStorageSimpleTreeModel::IndexFromTreeItem(
TreeItem *item)
const 350 return QModelIndex();
352 return this->createIndex(item->
GetIndex(), 0, item);
355 void QmitkDataStorageSimpleTreeModel::UpdateModelData()
365 for (
const auto& node : *nodeset)
367 this->AddNodeInternal(node);
int columnCount(const QModelIndex &parent=QModelIndex()) const override
itk::SmartPointer< T > Lock() const
Decorator class for mitk::DataNode.
void SetVisibility(bool visible, const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="visible")
Convenience method for setting visibility properties (instances of BoolProperty)
~QmitkDataStorageSimpleTreeModel() override
QmitkDataStorageTreeModelInternalItem TreeItem
void DataStorageChanged() override
bool GetIntProperty(const char *propertyKey, int &intValue, const mitk::BaseRenderer *renderer=nullptr) const
Convenience access method for int properties (instances of IntProperty)
itk::SmartPointer< Self > Pointer
QmitkNodeDescriptor * GetDescriptor(const mitk::DataNode *node) const
void NodeAdded(const mitk::DataNode *node) override
mitk::NodePredicateBase::ConstPointer m_NodePredicate
mitk::DataNode::Pointer GetDataNode() const
QmitkDataStorageTreeModelInternalItem * GetChild(int index) const
bool IsExpired() const noexcept
virtual void SetName(const char *name)
Extra convenience access method to set the name of an object.
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
QmitkDataStorageTreeModelInternalItem * GetParent() const
int rowCount(const QModelIndex &parent=QModelIndex()) const override
QModelIndex parent(const QModelIndex &child) const override
int GetChildCount() const
void NodeChanged(const mitk::DataNode *node) override
QmitkDataStorageTreeModelInternalItem * Find(const mitk::DataNode *_DataNode) const
bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) override
std::vector< QmitkDataStorageTreeModelInternalItem * > GetChildren() const
QVariant data(const QModelIndex &index, int role=Qt::DisplayRole) const override
virtual QIcon GetIcon(const mitk::DataNode *node) const
void NodeRemoved(const mitk::DataNode *node) override
void NodePredicateChanged() override
Qt::ItemFlags flags(const QModelIndex &index) const override
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
QmitkDataStorageSimpleTreeModel(QObject *parent)
static QmitkNodeDescriptorManager * GetInstance()
Class for nodes of the DataTree.
bool GetName(std::string &nodeName, const mitk::BaseRenderer *renderer=nullptr, const char *propertyKey="name") const
Convenience access method for accessing the name of an object (instance of StringProperty with proper...
mitk::WeakPointer< mitk::DataStorage > m_DataStorage
void InsertChild(QmitkDataStorageTreeModelInternalItem *item, int index=-1)