Slicer 5.8
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
qMRMLSubjectHierarchyTreeView.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 __qMRMLSubjectHierarchyTreeView_h
24#define __qMRMLSubjectHierarchyTreeView_h
25
26// Qt includes
27#include <QTreeView>
28
29// CTK includes
30#include <ctkVTKObject.h>
31
32// SubjectHierarchy includes
33#include "qSlicerSubjectHierarchyModuleWidgetsExport.h"
34
35class qMRMLSubjectHierarchyTreeViewPrivate;
38class vtkMRMLNode;
39class vtkMRMLScene;
41class vtkIdList;
42
43class Q_SLICER_MODULE_SUBJECTHIERARCHY_WIDGETS_EXPORT qMRMLSubjectHierarchyTreeView : public QTreeView
44{
45 Q_OBJECT
46 QVTK_OBJECT
47
52 Q_PROPERTY(bool showRootItem READ showRootItem WRITE setShowRootItem)
56 Q_PROPERTY(bool highlightReferencedItems READ highlightReferencedItems WRITE setHighlightReferencedItems)
58 Q_PROPERTY(bool contextMenuEnabled READ contextMenuEnabled WRITE setContextMenuEnabled)
60 Q_PROPERTY(bool editMenuActionVisible READ editMenuActionVisible WRITE setEditMenuActionVisible)
62 Q_PROPERTY(bool selectRoleSubMenuVisible READ selectRoleSubMenuVisible WRITE setSelectRoleSubMenuVisible)
64 Q_PROPERTY(bool multiSelection READ multiSelection WRITE setMultiSelection)
65 Q_PROPERTY(QStringList levelFilter READ levelFilter WRITE setLevelFilter)
66 Q_PROPERTY(QString nameFilter READ nameFilter WRITE setNameFilter)
67 Q_PROPERTY(QStringList nodeTypes READ nodeTypes WRITE setNodeTypes)
68 Q_PROPERTY(QStringList hideChildNodeTypes READ hideChildNodeTypes WRITE setHideChildNodeTypes)
69 Q_PROPERTY(bool visibilityColumnVisible READ visibilityColumnVisible WRITE setVisibilityColumnVisible)
70 Q_PROPERTY(bool idColumnVisible READ idColumnVisible WRITE setIdColumnVisible)
71 Q_PROPERTY(bool colorColumnVisible READ colorColumnVisible WRITE setColorColumnVisible)
72 Q_PROPERTY(bool transformColumnVisible READ transformColumnVisible WRITE setTransformColumnVisible)
73 Q_PROPERTY(bool descriptionColumnVisible READ descriptionColumnVisible WRITE setDescriptionColumnVisible)
74
77 Q_PROPERTY(bool noneEnabled READ noneEnabled WRITE setNoneEnabled)
81 Q_PROPERTY(QString noneDisplay READ noneDisplay WRITE setNoneDisplay)
82
84 Q_PROPERTY(QStringList includeItemAttributeNamesFilter READ includeItemAttributeNamesFilter WRITE setIncludeItemAttributeNamesFilter)
86 Q_PROPERTY(QStringList includeNodeAttributeNamesFilter READ includeNodeAttributeNamesFilter WRITE setIncludeNodeAttributeNamesFilter)
89 Q_PROPERTY(QStringList excludeItemAttributeNamesFilter READ excludeItemAttributeNamesFilter WRITE setExcludeItemAttributeNamesFilter)
92 Q_PROPERTY(QStringList excludeNodeAttributeNamesFilter READ excludeNodeAttributeNamesFilter WRITE setExcludeNodeAttributeNamesFilter)
93
97 Q_PROPERTY(QString attributeNameFilter READ attributeNameFilter WRITE setAttributeNameFilter)
102 Q_PROPERTY(QString attributeValueFilter READ attributeValueFilter WRITE setAttributeValueFilter)
103
105 Q_PROPERTY(bool useTerminologySelector READ useTerminologySelector WRITE setUseTerminologySelector)
106
107public:
108 typedef QTreeView Superclass;
109 qMRMLSubjectHierarchyTreeView(QWidget *parent=nullptr);
111
112public:
113 Q_INVOKABLE vtkMRMLScene* mrmlScene()const;
114
117 Q_INVOKABLE vtkMRMLSubjectHierarchyNode* subjectHierarchyNode()const;
118
120 Q_INVOKABLE vtkIdType currentItem()const;
122 QList<vtkIdType> currentItems();
125 Q_INVOKABLE void currentItems(vtkIdList* selectedItems);
126
128 virtual vtkMRMLNode* currentNode()const;
129
131 Q_INVOKABLE vtkIdType rootItem()const;
133 bool showRootItem()const;
134
136 bool multiSelection();
137
138 QStringList includeItemAttributeNamesFilter()const;
139 QStringList includeNodeAttributeNamesFilter()const;
140 QStringList excludeItemAttributeNamesFilter()const;
141 QStringList excludeNodeAttributeNamesFilter()const;
142 QString attributeValueFilter()const;
143 QString attributeNameFilter()const;
148 Q_INVOKABLE void setAttributeFilter(const QString& attributeName, const QVariant& attributeValue=QVariant());
150 Q_INVOKABLE void removeAttributeFilter();
158 Q_INVOKABLE void addItemAttributeFilter(QString attributeName, QVariant attributeValue=QString(), bool include=true);
160 Q_INVOKABLE void removeItemAttributeFilter(QString attributeName, QVariant attributeValue, bool include);
162 Q_INVOKABLE void removeItemAttributeFilter(QString attributeName, bool include);
171 Q_INVOKABLE void addNodeAttributeFilter(QString attributeName, QVariant attributeValue=QString(), bool include=true, QString className=QString());
173 Q_INVOKABLE void removeNodeAttributeFilter(QString attributeName, QVariant attributeValue, bool include, QString className);
175 Q_INVOKABLE void removeNodeAttributeFilter(QString attributeName, bool include);
176
177
179 void setLevelFilter(QStringList &levelFilter);
180 QStringList levelFilter()const;
181
183 void setNameFilter(QString &nameFilter);
184 QString nameFilter()const;
185
187 void setNodeTypes(const QStringList& types);
188 QStringList nodeTypes()const;
189
192 void setHideChildNodeTypes(const QStringList& types);
193 QStringList hideChildNodeTypes()const;
194
195 Q_INVOKABLE qMRMLSortFilterSubjectHierarchyProxyModel* sortFilterProxyModel()const;
196 Q_INVOKABLE qMRMLSubjectHierarchyModel* model()const;
197
199 Q_INVOKABLE int displayedItemCount()const;
200
201 bool highlightReferencedItems()const;
202 bool contextMenuEnabled()const;
203 bool editMenuActionVisible()const;
204 bool selectRoleSubMenuVisible()const;
205 bool noneEnabled()const;
206 QString noneDisplay()const;
207
209 void setVisibilityColumnVisible(bool visible);
210 bool visibilityColumnVisible();
212 void setIdColumnVisible(bool visible);
213 bool idColumnVisible();
215 void setColorColumnVisible(bool visible);
216 bool colorColumnVisible();
218 void setTransformColumnVisible(bool visible);
219 bool transformColumnVisible();
221 void setDescriptionColumnVisible(bool visible);
222 bool descriptionColumnVisible();
223
226 bool useTerminologySelector()const;
227
228public slots:
230 virtual void setMRMLScene(vtkMRMLScene* scene);
231
233 virtual void setCurrentItem(vtkIdType itemID);
235 virtual void setCurrentItems(QList<vtkIdType> items);
237 virtual void setCurrentItems(vtkIdList* items);
239 virtual void setCurrentNode(vtkMRMLNode* node);
240
242 virtual void setRootItem(vtkIdType itemID);
244 void setShowRootItem(bool show);
245
247 void renameCurrentItem();
249 void deleteSelectedItems();
251 void hideSelectedItems();
253 void showSelectedItems();
255 void toggleVisibilityOfSelectedItems();
257 virtual void editCurrentItem();
258
260 virtual void expandItem(vtkIdType itemID);
262 virtual void collapseItem(vtkIdType itemID);
263
265 virtual void selectPluginForCurrentItem();
266
271 virtual void updateSelectPluginActions();
272
274 virtual void setMultiSelection(bool multiSelectionOn);
275
279 void setPluginAllowlist(QStringList allowlist);
283 void setPluginBlocklist(QStringList blocklist);
286 void disablePlugin(QString plugin);
287
289 void setPluginWhitelist(QStringList allowlist)
290 {
291 qWarning("qMRMLSubjectHierarchyTreeView::setPluginWhitelist is deprecated. Use setPluginAllowlist instead.");
292 this->setPluginAllowlist(allowlist);
293 }
295 void setPluginBlacklist(QStringList blocklist)
296 {
297 qWarning("qMRMLSubjectHierarchyTreeView::setPluginBlacklist is deprecated. Use setPluginBlocklist instead.");
298 this->setPluginBlocklist(blocklist);
299 }
300
304 bool showContextMenuHint(bool visibility=false);
305
306 void setHighlightReferencedItems(bool highlightOn);
307 void setContextMenuEnabled(bool enabled);
308 void setEditMenuActionVisible(bool visible);
309 void setSelectRoleSubMenuVisible(bool visible);
310 void setNoneEnabled(bool enable);
311 void setNoneDisplay(const QString& displayName);
312
315
316 void setIncludeItemAttributeNamesFilter(QStringList filter);
317 void setIncludeNodeAttributeNamesFilter(QStringList filter);
318 void setExcludeItemAttributeNamesFilter(QStringList filter);
319 void setExcludeNodeAttributeNamesFilter(QStringList filter);
320 void setAttributeNameFilter(QString& filter);
321 void setAttributeValueFilter(QString& filter);
322
324 void setUseTerminologySelector(bool useTerminologySelector);
325
326signals:
327 void currentItemChanged(vtkIdType);
328 void currentItemsChanged(QList<vtkIdType>);
329 void currentItemModified(vtkIdType);
330
331protected slots:
332 virtual void onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
333
335 virtual void onItemExpanded(const QModelIndex &expandedItemIndex);
337 virtual void onItemCollapsed(const QModelIndex &collapsedItemIndex);
338
341 virtual void updateRootItem();
342
344 virtual void onSubjectHierarchyItemModified(vtkObject *caller, void *callData);
346 virtual void onSubjectHierarchyItemTransformModified(vtkObject *caller, void *callData);
347
349 virtual void onMRMLSceneStartClose(vtkObject* sceneObject);
351 virtual void onMRMLSceneEndClose(vtkObject* sceneObject);
353 virtual void onMRMLSceneStartBatchProcess(vtkObject* sceneObject);
355 virtual void onMRMLSceneEndBatchProcess(vtkObject* sceneObject);
356
357 void onCustomContextMenu(const QPoint& point);
358
359protected:
362
367 virtual void populateContextMenuForItem(vtkIdType itemID);
369 virtual void populateVisibilityContextMenuForItem(vtkIdType itemID);
371 virtual void populateTransformContextMenuForItem(vtkIdType itemID);
372
376 virtual bool clickDecoration(QMouseEvent* e);
378 void mousePressEvent(QMouseEvent* e) override;
380 void keyPressEvent(QKeyEvent* e) override;
381
384 void applyReferenceHighlightForItems(QList<vtkIdType> itemIDs);
385
388 vtkIdType firstSelectedSubjectHierarchyItemInBranch(vtkIdType itemID);
389
390 void changeEvent(QEvent* e) override;
391
392protected:
393 QScopedPointer<qMRMLSubjectHierarchyTreeViewPrivate> d_ptr;
394
395private:
396 Q_DECLARE_PRIVATE(qMRMLSubjectHierarchyTreeView);
397 Q_DISABLE_COPY(qMRMLSubjectHierarchyTreeView);
399};
400
401#endif
Item model for subject hierarchy.
void setIncludeNodeAttributeNamesFilter(QStringList filter)
void setNoneDisplay(const QString &displayName)
void setExcludeNodeAttributeNamesFilter(QStringList filter)
virtual void onMRMLSceneStartBatchProcess(vtkObject *sceneObject)
Called when batch processing starts. Makes sure stored selection does not get emptied before restorin...
void currentItemsChanged(QList< vtkIdType >)
void setExcludeItemAttributeNamesFilter(QStringList filter)
void keyPressEvent(QKeyEvent *e) override
Handle key press event.
void currentItemChanged(vtkIdType)
void onCustomContextMenu(const QPoint &point)
virtual void onSubjectHierarchyItemModified(vtkObject *caller, void *callData)
Propagate item modified event.
vtkIdType firstSelectedSubjectHierarchyItemInBranch(vtkIdType itemID)
void applyReferenceHighlightForItems(QList< vtkIdType > itemIDs)
virtual void onMRMLSceneEndBatchProcess(vtkObject *sceneObject)
Called when batch processing ends. Restores selection, which is lost when the hierarchy is rebuilt.
virtual bool clickDecoration(QMouseEvent *e)
void changeEvent(QEvent *e) override
void setPluginBlacklist(QStringList blocklist)
Deprecated. Use setPluginBlocklist instead.
void mousePressEvent(QMouseEvent *e) override
Handle mouse press event.
void setUseTerminologySelector(bool useTerminologySelector)
Set if standard terminologies are used for choosing segment name and color.
bool showContextMenuHint(bool visibility=false)
void setIncludeItemAttributeNamesFilter(QStringList filter)
virtual void onMRMLSceneStartClose(vtkObject *sceneObject)
Called when scene close is started.
virtual void populateContextMenuForItem(vtkIdType itemID)
virtual void onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected)
virtual void setSubjectHierarchyNode(vtkMRMLSubjectHierarchyNode *shNode)
Set the subject hierarchy node found in the given scene. Called only internally.
void resetColumnSizesToDefault()
Resets column sizes and size policies to default.
void currentItemModified(vtkIdType)
virtual void populateVisibilityContextMenuForItem(vtkIdType itemID)
Populate visibility context menu for given subject hierarchy item.
void setContextMenuEnabled(bool enabled)
void setEditMenuActionVisible(bool visible)
QScopedPointer< qMRMLSubjectHierarchyTreeViewPrivate > d_ptr
virtual void onItemCollapsed(const QModelIndex &collapsedItemIndex)
Updates subject hierarchy item expanded property when item is collapsed.
virtual void onItemExpanded(const QModelIndex &expandedItemIndex)
Updates subject hierarchy item expanded property when item is expanded.
virtual void onSubjectHierarchyItemTransformModified(vtkObject *caller, void *callData)
Propagate item transform modified event.
virtual void onMRMLSceneEndClose(vtkObject *sceneObject)
Called when scene close is finished. Hierarchy is cleared in that case.
void setNoneEnabled(bool enable)
void setAttributeValueFilter(QString &filter)
void setAttributeNameFilter(QString &filter)
void setSelectRoleSubMenuVisible(bool visible)
void setHighlightReferencedItems(bool highlightOn)
virtual void populateTransformContextMenuForItem(vtkIdType itemID)
Populate transform context menu for given subject hierarchy item.
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.