Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
qMRMLSubjectHierarchyModel.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Laboratory for Percutaneous Surgery (PerkLab)
6 Queen's University, Kingston, ON, Canada. All Rights Reserved.
7
8 See COPYRIGHT.txt
9 or http://www.slicer.org/copyright/copyright.txt for details.
10
11 Unless required by applicable law or agreed to in writing, software
12 distributed under the License is distributed on an "AS IS" BASIS,
13 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 See the License for the specific language governing permissions and
15 limitations under the License.
16
17 This file was originally developed by Csaba Pinter, PerkLab, Queen's University
18 and was supported through the Applied Cancer Research Unit program of Cancer Care
19 Ontario with funds provided by the Ontario Ministry of Health and Long-Term Care
20
21==============================================================================*/
22
23#ifndef __qMRMLSubjectHierarchyModel_h
24#define __qMRMLSubjectHierarchyModel_h
25
26// Qt includes
27#include <QStandardItemModel>
28
29// CTK includes
30#include <ctkPimpl.h>
31#include <ctkVTKObject.h>
32
33// SubjectHierarchy includes
34#include "qSlicerSubjectHierarchyModuleWidgetsExport.h"
35
36class qMRMLSubjectHierarchyModelPrivate;
38class vtkMRMLNode;
39class vtkMRMLScene;
40
49class Q_SLICER_MODULE_SUBJECTHIERARCHY_WIDGETS_EXPORT qMRMLSubjectHierarchyModel : public QStandardItemModel
50{
51 Q_OBJECT
52 QVTK_OBJECT
53
60 Q_PROPERTY (int nameColumn READ nameColumn WRITE setNameColumn)
66 Q_PROPERTY(int colorColumn READ colorColumn WRITE setColorColumn)
77 Q_PROPERTY (int idColumn READ idColumn WRITE setIDColumn)
78
81 Q_PROPERTY(bool noneEnabled READ noneEnabled WRITE setNoneEnabled)
85 Q_PROPERTY(QString noneDisplay READ noneDisplay WRITE setNoneDisplay)
86
87public:
88 typedef QStandardItemModel Superclass;
89 qMRMLSubjectHierarchyModel(QObject *parent=nullptr);
91
104
105 int nameColumn()const;
106 void setNameColumn(int column);
107
109 void setVisibilityColumn(int column);
110
111 int colorColumn()const;
112 void setColorColumn(int column);
113
114 int transformColumn()const;
115 void setTransformColumn(int column);
116
118 void setDescriptionColumn(int column);
119
120 int idColumn()const;
121 void setIDColumn(int column);
122
123 bool noneEnabled()const;
124 void setNoneEnabled(bool enable);
125
126 QString noneDisplay()const;
127 void setNoneDisplay(const QString& displayName);
128
129 Qt::DropActions supportedDropActions()const override;
130 QMimeData* mimeData(const QModelIndexList& indexes)const override;
131 bool dropMimeData(const QMimeData *data, Qt::DropAction action,
132 int row, int column, const QModelIndex &parent) override;
133
134 Q_INVOKABLE virtual void setMRMLScene(vtkMRMLScene* scene);
135 Q_INVOKABLE vtkMRMLScene* mrmlScene()const;
136
138
140 QStandardItem* subjectHierarchySceneItem()const;
142 QModelIndex subjectHierarchySceneIndex()const;
143 virtual bool canBeAChild(vtkIdType itemID)const;
144 virtual bool canBeAParent(vtkIdType itemID)const;
145
146 vtkIdType subjectHierarchyItemFromIndex(const QModelIndex &index)const;
147 vtkIdType subjectHierarchyItemFromItem(QStandardItem* item)const;
148 QModelIndex indexFromSubjectHierarchyItem(vtkIdType itemID, int column=0)const;
149 QStandardItem* itemFromSubjectHierarchyItem(vtkIdType itemID, int column=0)const;
150
152 QModelIndexList indexes(vtkIdType itemID)const;
153
154 Q_INVOKABLE virtual vtkIdType parentSubjectHierarchyItem(vtkIdType itemID)const;
157 Q_INVOKABLE virtual int subjectHierarchyItemIndex(vtkIdType itemID)const;
159 Q_INVOKABLE virtual bool reparent(vtkIdType itemID, vtkIdType newParentID);
161 Q_INVOKABLE virtual bool moveToRow(vtkIdType itemID, int newRow);
164 Q_INVOKABLE bool isAncestorItem(vtkIdType child, vtkIdType ancestor)const;
167 Q_INVOKABLE bool isAffiliatedItem(vtkIdType itemA, vtkIdType itemB)const;
168
169signals:
171 void aboutToReparentByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
173 void reparentedByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
179 void requestExpandItem(vtkIdType itemID);
181 void requestCollapseItem(vtkIdType itemID);
186
187public slots:
190
193
194protected slots:
195 virtual void onSubjectHierarchyItemAdded(vtkIdType itemID);
196 virtual void onSubjectHierarchyItemAboutToBeRemoved(vtkIdType itemID);
197 virtual void onSubjectHierarchyItemRemoved(vtkIdType itemID);
198 virtual void onSubjectHierarchyItemModified(vtkIdType itemID);
199
200 virtual void onMRMLSceneImported(vtkMRMLScene* scene);
201 virtual void onMRMLSceneClosed(vtkMRMLScene* scene);
204 virtual void onMRMLNodeRemoved(vtkMRMLNode* node);
205
206 virtual void onItemChanged(QStandardItem* item);
207 virtual void delayedItemChanged();
208
212
213protected:
214 qMRMLSubjectHierarchyModel(qMRMLSubjectHierarchyModelPrivate* pimpl, QObject *parent=nullptr);
215
218
221
222 virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID);
223 virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID, QStandardItem* parent, int row=-1);
224
225 virtual QFlags<Qt::ItemFlag> subjectHierarchyItemFlags(vtkIdType itemID, int column)const;
226
228 QStandardItem* item, vtkIdType shItemID, int column );
230 QStandardItem* item, vtkIdType shItemID, int column );
232 vtkIdType shItemID, QStandardItem* item );
234 vtkIdType shItemID, QStandardItem* item );
235
237 void updateModelItems(vtkIdType itemID);
238
239 static void onEvent(vtkObject* caller, unsigned long event, void* clientData, void* callData);
240
242 virtual int maxColumnId()const;
243
244protected:
245 QScopedPointer<qMRMLSubjectHierarchyModelPrivate> d_ptr;
246
247private:
248 Q_DECLARE_PRIVATE(qMRMLSubjectHierarchyModel);
249 Q_DISABLE_COPY(qMRMLSubjectHierarchyModel);
250};
251
252void printStandardItem(QStandardItem* item, const QString& offset);
253
254#endif
virtual bool canBeAChild(vtkIdType itemID) const
QModelIndex indexFromSubjectHierarchyItem(vtkIdType itemID, int column=0) const
void invalidateFilter()
Triggers invalidating the sort filter proxy model.
virtual void onSubjectHierarchyItemAboutToBeRemoved(vtkIdType itemID)
void setTransformColumn(int column)
virtual Q_INVOKABLE vtkIdType parentSubjectHierarchyItem(vtkIdType itemID) const
virtual void updateSubjectHierarchyItemFromItem(vtkIdType shItemID, QStandardItem *item)
void subjectHierarchyAboutToBeUpdated()
This signal is sent when the whole subject hierarchy is about to be updated.
void requestExpandItem(vtkIdType itemID)
Signal requesting expanding of the subject hierarchy tree item belonging to an item.
virtual void setSubjectHierarchyNode(vtkMRMLSubjectHierarchyNode *shNode)
Set the subject hierarchy node found in the given scene. Called only internally.
void setIDColumn(int column)
virtual Q_INVOKABLE void setMRMLScene(vtkMRMLScene *scene)
void setNoneEnabled(bool enable)
Qt::DropActions supportedDropActions() const override
virtual void updateItemFromSubjectHierarchyItem(QStandardItem *item, vtkIdType shItemID, int column)
virtual void updateSubjectHierarchyItemFromItemData(vtkIdType shItemID, QStandardItem *item)
virtual void onMRMLSceneImported(vtkMRMLScene *scene)
void subjectHierarchyUpdated()
This signal is sent after the whole subject hierarchy is updated.
void reparentedByDragAndDrop(vtkIdType itemID, vtkIdType newParentID)
This signal is sent after a user dragged and dropped an item in the tree view.
void setColorColumn(int column)
QStandardItem * itemFromSubjectHierarchyItem(vtkIdType itemID, int column=0) const
Q_INVOKABLE vtkMRMLScene * mrmlScene() const
void setNameColumn(int column)
void requestSelectItems(QList< vtkIdType > itemIDs)
Signal requesting selecting items in the tree.
void setDescriptionColumn(int column)
virtual void onMRMLSceneEndBatchProcess(vtkMRMLScene *scene)
vtkIdType subjectHierarchyItemFromIndex(const QModelIndex &index) const
virtual void onItemChanged(QStandardItem *item)
virtual Q_INVOKABLE int subjectHierarchyItemIndex(vtkIdType itemID) const
Q_INVOKABLE bool isAffiliatedItem(vtkIdType itemA, vtkIdType itemB) const
virtual void onSubjectHierarchyItemAdded(vtkIdType itemID)
void setNoneDisplay(const QString &displayName)
void setVisibilityColumn(int column)
QModelIndex subjectHierarchySceneIndex() const
Invalid until a valid scene is set.
void onHardenTransformOnBranchOfCurrentItem()
Harden transform on branch of current item.
QModelIndexList indexes(vtkIdType itemID) const
Return all the QModelIndexes (all the columns) for a given subject hierarchy item.
qMRMLSubjectHierarchyModel(qMRMLSubjectHierarchyModelPrivate *pimpl, QObject *parent=nullptr)
void aboutToReparentByDragAndDrop(vtkIdType itemID, vtkIdType newParentID)
This signal is sent when a user is about to reparent an item by drag and drop.
void onRemoveTransformsFromBranchOfCurrentItem()
Remove transforms from nodes in branch of current item.
qMRMLSubjectHierarchyModel(QObject *parent=nullptr)
virtual Q_INVOKABLE bool reparent(vtkIdType itemID, vtkIdType newParentID)
Insert/move item in subject hierarchy under new parent.
virtual void onMRMLSceneStartBatchProcess(vtkMRMLScene *scene)
QString noneDisplay() const
static void onEvent(vtkObject *caller, unsigned long event, void *clientData, void *callData)
QMimeData * mimeData(const QModelIndexList &indexes) const override
@ LastRole
Must stay the last enum in the list.
@ SubjectHierarchyItemIDRole
Unique ID of the item, typed vtkIdType.
@ TransformIDRole
MRML node ID of the parent transform.
virtual void onSubjectHierarchyItemRemoved(vtkIdType itemID)
Q_INVOKABLE bool isAncestorItem(vtkIdType child, vtkIdType ancestor) const
void requestCollapseItem(vtkIdType itemID)
Signal requesting collapsing of the subject hierarchy tree item belonging to an item.
vtkIdType subjectHierarchyItemFromItem(QStandardItem *item) const
virtual void delayedItemChanged()
virtual void onMRMLSceneClosed(vtkMRMLScene *scene)
virtual void rebuildFromSubjectHierarchy()
Rebuild model from scratch.
virtual void updateItemDataFromSubjectHierarchyItem(QStandardItem *item, vtkIdType shItemID, int column)
virtual QStandardItem * insertSubjectHierarchyItem(vtkIdType itemID)
virtual int maxColumnId() const
Must be reimplemented in subclasses that add new column types.
virtual void onMRMLNodeRemoved(vtkMRMLNode *node)
bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override
vtkMRMLSubjectHierarchyNode * subjectHierarchyNode() const
QScopedPointer< qMRMLSubjectHierarchyModelPrivate > d_ptr
void updateModelItems(vtkIdType itemID)
Update the model items associated with the subject hierarchy item.
virtual bool canBeAParent(vtkIdType itemID) const
virtual QStandardItem * insertSubjectHierarchyItem(vtkIdType itemID, QStandardItem *parent, int row=-1)
QStandardItem * subjectHierarchySceneItem() const
nullptr until a valid scene is set
virtual void onSubjectHierarchyItemModified(vtkIdType itemID)
virtual QFlags< Qt::ItemFlag > subjectHierarchyItemFlags(vtkIdType itemID, int column) const
virtual Q_INVOKABLE bool moveToRow(vtkIdType itemID, int newRow)
Move item in subject hierarchy branch to a new row (re-order)
Abstract Superclass for all specific types of MRML nodes.
A set of MRML Nodes that supports serialization and undo/redo.
MRML node to represent a complete subject hierarchy tree.
void printStandardItem(QStandardItem *item, const QString &offset)