Slicer 5.11
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
123
124 int nameColumn() const;
125 void setNameColumn(int column);
126
127 int visibilityColumn() const;
128 void setVisibilityColumn(int column);
129
130 int colorColumn() const;
131 void setColorColumn(int column);
132
133 int transformColumn() const;
134 void setTransformColumn(int column);
135
136 int descriptionColumn() const;
137 void setDescriptionColumn(int column);
138
139 int idColumn() const;
140 void setIDColumn(int column);
141
142 bool noneEnabled() const;
143 void setNoneEnabled(bool enable);
144
145 QString noneDisplay() const;
146 void setNoneDisplay(const QString& displayName);
147
148 Qt::DropActions supportedDropActions() const override;
149 QMimeData* mimeData(const QModelIndexList& indexes) const override;
150 bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override;
151
152 Q_INVOKABLE virtual void setMRMLScene(vtkMRMLScene* scene);
153 Q_INVOKABLE vtkMRMLScene* mrmlScene() const;
154
156
158 QStandardItem* subjectHierarchySceneItem() const;
160 QModelIndex subjectHierarchySceneIndex() const;
161 virtual bool canBeAChild(vtkIdType itemID) const;
162 virtual bool canBeAParent(vtkIdType itemID) const;
163
164 vtkIdType subjectHierarchyItemFromIndex(const QModelIndex& index) const;
165 vtkIdType subjectHierarchyItemFromItem(QStandardItem* item) const;
166 QModelIndex indexFromSubjectHierarchyItem(vtkIdType itemID, int column = 0) const;
167 QStandardItem* itemFromSubjectHierarchyItem(vtkIdType itemID, int column = 0) const;
168
170 QModelIndexList indexes(vtkIdType itemID) const;
171
172 Q_INVOKABLE virtual vtkIdType parentSubjectHierarchyItem(vtkIdType itemID) const;
175 Q_INVOKABLE virtual int subjectHierarchyItemIndex(vtkIdType itemID) const;
177 Q_INVOKABLE virtual bool reparent(vtkIdType itemID, vtkIdType newParentID);
179 Q_INVOKABLE virtual bool moveToRow(vtkIdType itemID, int newRow);
182 Q_INVOKABLE bool isAncestorItem(vtkIdType child, vtkIdType ancestor) const;
185 Q_INVOKABLE bool isAffiliatedItem(vtkIdType itemA, vtkIdType itemB) const;
186
187signals:
189 void aboutToReparentByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
191 void reparentedByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
197 void requestExpandItem(vtkIdType itemID);
199 void requestCollapseItem(vtkIdType itemID);
204
205public slots:
208
211
212protected slots:
213 virtual void onSubjectHierarchyItemAdded(vtkIdType itemID);
214 virtual void onSubjectHierarchyItemAboutToBeRemoved(vtkIdType itemID);
215 virtual void onSubjectHierarchyItemRemoved(vtkIdType itemID);
216 virtual void onSubjectHierarchyItemModified(vtkIdType itemID);
217 virtual void onSubjectHierarchyItemDisplayModified(vtkIdType itemID);
218 virtual void onSubjectHierarchyItemChildrenReordered(vtkIdType itemID);
219
220 virtual void onMRMLSceneImported(vtkMRMLScene* scene);
221 virtual void onMRMLSceneClosed(vtkMRMLScene* scene);
224 virtual void onMRMLNodeRemoved(vtkMRMLNode* node);
225
226 virtual void onItemChanged(QStandardItem* item);
227 virtual void delayedItemChanged();
228
232
233protected:
234 qMRMLSubjectHierarchyModel(qMRMLSubjectHierarchyModelPrivate* pimpl, QObject* parent = nullptr);
235
238
241
242 virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID);
243 virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID, QStandardItem* parent, int row = -1);
244
245 virtual QFlags<Qt::ItemFlag> subjectHierarchyItemFlags(vtkIdType itemID, int column) const;
246
247 virtual void updateItemFromSubjectHierarchyItem(QStandardItem* item, vtkIdType shItemID, int column);
248 virtual void updateItemDataFromSubjectHierarchyItem(QStandardItem* item, vtkIdType shItemID, int column);
249 virtual void updateSubjectHierarchyItemFromItem(vtkIdType shItemID, QStandardItem* item);
250 virtual void updateSubjectHierarchyItemFromItemData(vtkIdType shItemID, QStandardItem* item);
251
253 void updateModelItems(vtkIdType itemID);
254
255 static void onEvent(vtkObject* caller, unsigned long event, void* clientData, void* callData);
256
258 virtual int maxColumnId() const;
259
260protected:
261 QScopedPointer<qMRMLSubjectHierarchyModelPrivate> d_ptr;
262
263private:
264 Q_DECLARE_PRIVATE(qMRMLSubjectHierarchyModel);
265 Q_DISABLE_COPY(qMRMLSubjectHierarchyModel);
266};
267
268void printStandardItem(QStandardItem* item, const QString& offset);
269
270#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.
@ 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)