Slicer  4.8
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
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 
36 class qMRMLSubjectHierarchyModelPrivate;
38 class vtkMRMLNode;
39 class vtkMRMLScene;
40 
49 class 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)
63  Q_PROPERTY (int visibilityColumn READ visibilityColumn WRITE setVisibilityColumn)
68  Q_PROPERTY (int transformColumn READ transformColumn WRITE setTransformColumn)
71  Q_PROPERTY (int idColumn READ idColumn WRITE setIDColumn)
72 
73 public:
74  typedef QStandardItemModel Superclass;
75  qMRMLSubjectHierarchyModel(QObject *parent=0);
76  virtual ~qMRMLSubjectHierarchyModel();
77 
79  {
81  SubjectHierarchyItemIDRole = Qt::UserRole + 1,
88  LastRole
89  };
90 
91  int nameColumn()const;
92  void setNameColumn(int column);
93 
94  int visibilityColumn()const;
95  void setVisibilityColumn(int column);
96 
97  int transformColumn()const;
98  void setTransformColumn(int column);
99 
100  int idColumn()const;
101  void setIDColumn(int column);
102 
103  virtual Qt::DropActions supportedDropActions()const;
104  virtual QMimeData* mimeData(const QModelIndexList& indexes)const;
105  virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action,
106  int row, int column, const QModelIndex &parent);
107 
108  Q_INVOKABLE virtual void setMRMLScene(vtkMRMLScene* scene);
109  Q_INVOKABLE vtkMRMLScene* mrmlScene()const;
110 
111  vtkMRMLSubjectHierarchyNode* subjectHierarchyNode()const;
112 
114  QStandardItem* subjectHierarchySceneItem()const;
116  QModelIndex subjectHierarchySceneIndex()const;
117  virtual bool canBeAChild(vtkIdType itemID)const;
118  virtual bool canBeAParent(vtkIdType itemID)const;
119 
120  vtkIdType subjectHierarchyItemFromIndex(const QModelIndex &index)const;
121  vtkIdType subjectHierarchyItemFromItem(QStandardItem* item)const;
122  QModelIndex indexFromSubjectHierarchyItem(vtkIdType itemID, int column=0)const;
123  QStandardItem* itemFromSubjectHierarchyItem(vtkIdType itemID, int column=0)const;
124 
126  QModelIndexList indexes(vtkIdType itemID)const;
127 
128  Q_INVOKABLE virtual vtkIdType parentSubjectHierarchyItem(vtkIdType itemID)const;
131  Q_INVOKABLE virtual int subjectHierarchyItemIndex(vtkIdType itemID)const;
133  Q_INVOKABLE virtual bool reparent(vtkIdType itemID, vtkIdType newParentID);
135  Q_INVOKABLE virtual bool moveToRow(vtkIdType itemID, int newRow);
138  Q_INVOKABLE bool isAncestorItem(vtkIdType child, vtkIdType ancestor)const;
141  Q_INVOKABLE bool isAffiliatedItem(vtkIdType itemA, vtkIdType itemB)const;
142 
143 signals:
145  void aboutToReparentByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
147  void reparentedByDragAndDrop(vtkIdType itemID, vtkIdType newParentID);
149  void subjectHierarchyAboutToBeUpdated();
151  void subjectHierarchyUpdated();
153  void requestExpandItem(vtkIdType itemID);
155  void requestCollapseItem(vtkIdType itemID);
157  void requestSelectItems(QList<vtkIdType> itemIDs);
159  void invalidateFilter();
160 
161 public slots:
163  void onRemoveTransformsFromBranchOfCurrentItem();
164 
166  void onHardenTransformOnBranchOfCurrentItem();
167 
168 protected slots:
169  virtual void onSubjectHierarchyItemAdded(vtkIdType itemID);
170  virtual void onSubjectHierarchyItemAboutToBeRemoved(vtkIdType itemID);
171  virtual void onSubjectHierarchyItemRemoved(vtkIdType itemID);
172  virtual void onSubjectHierarchyItemModified(vtkIdType itemID);
173 
174  virtual void onMRMLSceneImported(vtkMRMLScene* scene);
175  virtual void onMRMLSceneClosed(vtkMRMLScene* scene);
176  virtual void onMRMLSceneStartBatchProcess(vtkMRMLScene* scene);
177  virtual void onMRMLSceneEndBatchProcess(vtkMRMLScene* scene);
178  virtual void onMRMLNodeRemoved(vtkMRMLNode* node);
179 
180  virtual void onItemChanged(QStandardItem* item);
181  virtual void delayedItemChanged();
182 
185  void updateColumnCount();
186 
187 protected:
188  qMRMLSubjectHierarchyModel(qMRMLSubjectHierarchyModelPrivate* pimpl, QObject *parent=0);
189 
191  virtual void setSubjectHierarchyNode(vtkMRMLSubjectHierarchyNode* shNode);
192 
193  virtual void updateFromSubjectHierarchy();
194  virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID);
195  virtual QStandardItem* insertSubjectHierarchyItem(vtkIdType itemID, QStandardItem* parent, int row=-1);
196 
197  virtual QFlags<Qt::ItemFlag> subjectHierarchyItemFlags(vtkIdType itemID, int column)const;
198 
199  virtual void updateItemFromSubjectHierarchyItem(
200  QStandardItem* item, vtkIdType shItemID, int column );
201  virtual void updateItemDataFromSubjectHierarchyItem(
202  QStandardItem* item, vtkIdType shItemID, int column );
203  virtual void updateSubjectHierarchyItemFromItem(
204  vtkIdType shItemID, QStandardItem* item );
205  virtual void updateSubjectHierarchyItemFromItemData(
206  vtkIdType shItemID, QStandardItem* item );
207 
209  void updateModelItems(vtkIdType itemID);
210 
211  static void onEvent(vtkObject* caller, unsigned long event, void* clientData, void* callData);
212 
214  virtual int maxColumnId()const;
215 
216 protected:
217  QScopedPointer<qMRMLSubjectHierarchyModelPrivate> d_ptr;
218 
219 private:
220  Q_DECLARE_PRIVATE(qMRMLSubjectHierarchyModel);
221  Q_DISABLE_COPY(qMRMLSubjectHierarchyModel);
222 };
223 
224 void printStandardItem(QStandardItem* item, const QString& offset);
225 
226 #endif
QScopedPointer< qMRMLSubjectHierarchyModelPrivate > d_ptr
MRML node ID of the parent transform.
void printStandardItem(QStandardItem *item, const QString &offset)
MRML node to represent a complete subject hierarchy tree.
A set of MRML Nodes that supports serialization and undo/redo.
Definition: vtkMRMLScene.h:54
Item model for subject hierarchy.
Abstract Superclass for all specific types of MRML nodes.
Definition: vtkMRMLNode.h:135