Slicer 5.13
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
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
125
126 int nameColumn() const;
127 void setNameColumn(int column);
128
129 int visibilityColumn() const;
130 void setVisibilityColumn(int column);
131
132 int colorColumn() const;
133 void setColorColumn(int column);
134
135 int transformColumn() const;
136 void setTransformColumn(int column);
137
138 int descriptionColumn() const;
139 void setDescriptionColumn(int column);
140
141 int idColumn() const;
142 void setIDColumn(int column);
143
144 bool noneEnabled() const;
145 void setNoneEnabled(bool enable);
146
147 QString noneDisplay() const;
148 void setNoneDisplay(const QString& displayName);
149
150 Qt::DropActions supportedDropActions() const override;
151 QMimeData* mimeData(const QModelIndexList& indexes) const override;
152 bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override;
153
154 Q_INVOKABLE virtual void setMRMLScene(vtkMRMLScene* scene);
155 Q_INVOKABLE vtkMRMLScene* mrmlScene() const;
156
158
160 QStandardItem* subjectHierarchySceneItem() const;
162 QModelIndex subjectHierarchySceneIndex() const;
163 virtual bool canBeAChild(vtkIdType itemID) const;
164 virtual bool canBeAParent(vtkIdType itemID) const;
165
166 vtkIdType subjectHierarchyItemFromIndex(const QModelIndex& index) const;
167 vtkIdType subjectHierarchyItemFromItem(QStandardItem* item) const;
168 QModelIndex indexFromSubjectHierarchyItem(vtkIdType itemID, int column = 0) const;
169 QStandardItem* itemFromSubjectHierarchyItem(vtkIdType itemID, int column = 0) const;
170
172 QModelIndexList indexes(vtkIdType itemID) const;
173
174 Q_INVOKABLE virtual vtkIdType parentSubjectHierarchyItem(vtkIdType itemID) const;
177 Q_INVOKABLE virtual int subjectHierarchyItemIndex(vtkIdType itemID) const;
179 Q_INVOKABLE virtual bool reparent(vtkIdType itemID, vtkIdType newParentID);
181 Q_INVOKABLE virtual bool moveToRow(vtkIdType itemID, int newRow);
184 Q_INVOKABLE bool isAncestorItem(vtkIdType child, vtkIdType ancestor) const;
187 Q_INVOKABLE bool isAffiliatedItem(vtkIdType itemA, vtkIdType itemB) const;
188
189signals:
191 void aboutToReparentByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
193 void reparentedByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
199 void requestExpandItem(vtkIdType itemID);
201 void requestCollapseItem(vtkIdType itemID);
206
207public slots:
210
213
214protected slots:
215 virtual void onSubjectHierarchyItemAdded(vtkIdType itemID);
216 virtual void onSubjectHierarchyItemAboutToBeRemoved(vtkIdType itemID);
217 virtual void onSubjectHierarchyItemRemoved(vtkIdType itemID);
218 virtual void onSubjectHierarchyItemModified(vtkIdType itemID);
219 virtual void onSubjectHierarchyItemDisplayModified(vtkIdType itemID);
220 virtual void onSubjectHierarchyItemChildrenReordered(vtkIdType itemID);
221
222 virtual void onMRMLSceneImported(vtkMRMLScene* scene);
223 virtual void onMRMLSceneClosed(vtkMRMLScene* scene);
226 virtual void onMRMLNodeRemoved(vtkMRMLNode* node);
227
228 virtual void onItemChanged(QStandardItem* item);
229 virtual void delayedItemChanged();
230
234
235protected:
236 qMRMLSubjectHierarchyModel(qMRMLSubjectHierarchyModelPrivate* pimpl, QObject* parent = nullptr);
237
240
243
244 virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID);
245 virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID, QStandardItem* parent, int row = -1);
246
247 virtual QFlags<Qt::ItemFlag> subjectHierarchyItemFlags(vtkIdType itemID, int column) const;
248
249 virtual void updateItemFromSubjectHierarchyItem(QStandardItem* item, vtkIdType shItemID, int column);
250 virtual void updateItemDataFromSubjectHierarchyItem(QStandardItem* item, vtkIdType shItemID, int column);
251 virtual void updateSubjectHierarchyItemFromItem(vtkIdType shItemID, QStandardItem* item);
252 virtual void updateSubjectHierarchyItemFromItemData(vtkIdType shItemID, QStandardItem* item);
253
255 void updateModelItems(vtkIdType itemID);
256
257 static void onEvent(vtkObject* caller, unsigned long event, void* clientData, void* callData);
258
260 virtual int maxColumnId() const;
261
262protected:
263 QScopedPointer<qMRMLSubjectHierarchyModelPrivate> d_ptr;
264
265private:
266 Q_DECLARE_PRIVATE(qMRMLSubjectHierarchyModel);
267 Q_DISABLE_COPY(qMRMLSubjectHierarchyModel);
268};
269
270void printStandardItem(QStandardItem* item, const QString& offset);
271
272#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.
virtual void onSubjectHierarchyItemDisplayModified(vtkIdType itemID)
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.
@ GeneratedColorRole
Auto-generated color used when the selected terminology contains no recommended color.
@ ColorRole
QColor of the item; stored here instead of DecorationRole so the delegate does not paint it.
@ DefaultTerminologyRole
Serialized default terminology entry, used to initialize the selector when the item has no terminolog...
@ SubjectHierarchyItemIDRole
Unique ID of the item, typed vtkIdType.
@ VisibilityIconRole
QIcon for the visibility button; stored here instead of DecorationRole so the delegate does not paint...
@ TransformIDRole
MRML node ID of the parent transform.
@ ColorAutoGeneratedRole
True if the color is the terminology-recommended one (or auto-generated in the absence of a recommend...
@ NameAutoGeneratedRole
True if the name was auto-generated from terminology.
@ ChildOrderRole
Position of the item among its siblings. Only used temporarily, for reordering child items.
@ TerminologyRole
Serialized terminology entry.
@ NameRole
Name of the item (either custom or auto-generated from terminology)
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 void onSubjectHierarchyItemChildrenReordered(vtkIdType itemID)
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)