Slicer 5.9
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
104
105 int nameColumn() const;
106 void setNameColumn(int column);
107
108 int visibilityColumn() const;
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
117 int descriptionColumn() const;
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, int row, int column, const QModelIndex& parent) override;
132
133 Q_INVOKABLE virtual void setMRMLScene(vtkMRMLScene* scene);
134 Q_INVOKABLE vtkMRMLScene* mrmlScene() const;
135
137
139 QStandardItem* subjectHierarchySceneItem() const;
141 QModelIndex subjectHierarchySceneIndex() const;
142 virtual bool canBeAChild(vtkIdType itemID) const;
143 virtual bool canBeAParent(vtkIdType itemID) const;
144
145 vtkIdType subjectHierarchyItemFromIndex(const QModelIndex& index) const;
146 vtkIdType subjectHierarchyItemFromItem(QStandardItem* item) const;
147 QModelIndex indexFromSubjectHierarchyItem(vtkIdType itemID, int column = 0) const;
148 QStandardItem* itemFromSubjectHierarchyItem(vtkIdType itemID, int column = 0) const;
149
151 QModelIndexList indexes(vtkIdType itemID) const;
152
153 Q_INVOKABLE virtual vtkIdType parentSubjectHierarchyItem(vtkIdType itemID) const;
156 Q_INVOKABLE virtual int subjectHierarchyItemIndex(vtkIdType itemID) const;
158 Q_INVOKABLE virtual bool reparent(vtkIdType itemID, vtkIdType newParentID);
160 Q_INVOKABLE virtual bool moveToRow(vtkIdType itemID, int newRow);
163 Q_INVOKABLE bool isAncestorItem(vtkIdType child, vtkIdType ancestor) const;
166 Q_INVOKABLE bool isAffiliatedItem(vtkIdType itemA, vtkIdType itemB) const;
167
168signals:
170 void aboutToReparentByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
172 void reparentedByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
178 void requestExpandItem(vtkIdType itemID);
180 void requestCollapseItem(vtkIdType itemID);
185
186public slots:
189
192
193protected slots:
194 virtual void onSubjectHierarchyItemAdded(vtkIdType itemID);
195 virtual void onSubjectHierarchyItemAboutToBeRemoved(vtkIdType itemID);
196 virtual void onSubjectHierarchyItemRemoved(vtkIdType itemID);
197 virtual void onSubjectHierarchyItemModified(vtkIdType itemID);
198 virtual void onSubjectHierarchyItemChildrenReordered(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
227 virtual void updateItemFromSubjectHierarchyItem(QStandardItem* item, vtkIdType shItemID, int column);
228 virtual void updateItemDataFromSubjectHierarchyItem(QStandardItem* item, vtkIdType shItemID, int column);
229 virtual void updateSubjectHierarchyItemFromItem(vtkIdType shItemID, QStandardItem* item);
230 virtual void updateSubjectHierarchyItemFromItemData(vtkIdType shItemID, QStandardItem* item);
231
233 void updateModelItems(vtkIdType itemID);
234
235 static void onEvent(vtkObject* caller, unsigned long event, void* clientData, void* callData);
236
238 virtual int maxColumnId() const;
239
240protected:
241 QScopedPointer<qMRMLSubjectHierarchyModelPrivate> d_ptr;
242
243private:
244 Q_DECLARE_PRIVATE(qMRMLSubjectHierarchyModel);
245 Q_DISABLE_COPY(qMRMLSubjectHierarchyModel);
246};
247
248void printStandardItem(QStandardItem* item, const QString& offset);
249
250#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 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)