Slicer 5.4
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
44class Q_SLICER_MODULE_SUBJECTHIERARCHY_WIDGETS_EXPORT qMRMLSubjectHierarchyTreeView : public QTreeView
45{
46 Q_OBJECT
47 QVTK_OBJECT
48
53 Q_PROPERTY(bool showRootItem READ showRootItem WRITE setShowRootItem)
57 Q_PROPERTY(bool highlightReferencedItems READ highlightReferencedItems WRITE setHighlightReferencedItems)
59 Q_PROPERTY(bool contextMenuEnabled READ contextMenuEnabled WRITE setContextMenuEnabled)
61 Q_PROPERTY(bool editMenuActionVisible READ editMenuActionVisible WRITE setEditMenuActionVisible)
63 Q_PROPERTY(bool selectRoleSubMenuVisible READ selectRoleSubMenuVisible WRITE setSelectRoleSubMenuVisible)
65 Q_PROPERTY(bool multiSelection READ multiSelection WRITE setMultiSelection)
66 Q_PROPERTY(QStringList levelFilter READ levelFilter WRITE setLevelFilter)
67 Q_PROPERTY(QString nameFilter READ nameFilter WRITE setNameFilter)
68 Q_PROPERTY(QStringList nodeTypes READ nodeTypes WRITE setNodeTypes)
69 Q_PROPERTY(QStringList hideChildNodeTypes READ hideChildNodeTypes WRITE setHideChildNodeTypes)
70 Q_PROPERTY(bool visibilityColumnVisible READ visibilityColumnVisible WRITE setVisibilityColumnVisible)
71 Q_PROPERTY(bool idColumnVisible READ idColumnVisible WRITE setIdColumnVisible)
72 Q_PROPERTY(bool colorColumnVisible READ colorColumnVisible WRITE setColorColumnVisible)
73 Q_PROPERTY(bool transformColumnVisible READ transformColumnVisible WRITE setTransformColumnVisible)
74 Q_PROPERTY(bool descriptionColumnVisible READ descriptionColumnVisible WRITE setDescriptionColumnVisible)
75
78 Q_PROPERTY(bool noneEnabled READ noneEnabled WRITE setNoneEnabled)
82 Q_PROPERTY(QString noneDisplay READ noneDisplay WRITE setNoneDisplay)
83
85 Q_PROPERTY(QStringList includeItemAttributeNamesFilter READ includeItemAttributeNamesFilter WRITE setIncludeItemAttributeNamesFilter)
87 Q_PROPERTY(QStringList includeNodeAttributeNamesFilter READ includeNodeAttributeNamesFilter WRITE setIncludeNodeAttributeNamesFilter)
90 Q_PROPERTY(QStringList excludeItemAttributeNamesFilter READ excludeItemAttributeNamesFilter WRITE setExcludeItemAttributeNamesFilter)
93 Q_PROPERTY(QStringList excludeNodeAttributeNamesFilter READ excludeNodeAttributeNamesFilter WRITE setExcludeNodeAttributeNamesFilter)
94
97 Q_PROPERTY(QString attributeNameFilter READ attributeNameFilter WRITE setAttributeNameFilter)
102 Q_PROPERTY(QString attributeValueFilter READ attributeValueFilter WRITE setAttributeValueFilter)
103
104public:
105 typedef QTreeView Superclass;
106 qMRMLSubjectHierarchyTreeView(QWidget *parent=nullptr);
108
109public:
110 Q_INVOKABLE vtkMRMLScene* mrmlScene()const;
111 Q_INVOKABLE vtkMRMLSubjectHierarchyNode* subjectHierarchyNode()const;
112
114 Q_INVOKABLE vtkIdType currentItem()const;
116 QList<vtkIdType> currentItems();
119 Q_INVOKABLE void currentItems(vtkIdList* selectedItems);
120
122 virtual vtkMRMLNode* currentNode()const;
123
125 Q_INVOKABLE vtkIdType rootItem()const;
127 bool showRootItem()const;
128
130 bool multiSelection();
131
132 QStringList includeItemAttributeNamesFilter()const;
133 QStringList includeNodeAttributeNamesFilter()const;
134 QStringList excludeItemAttributeNamesFilter()const;
135 QStringList excludeNodeAttributeNamesFilter()const;
136 QString attributeValueFilter()const;
137 QString attributeNameFilter()const;
142 Q_INVOKABLE void setAttributeFilter(const QString& attributeName, const QVariant& attributeValue=QVariant());
144 Q_INVOKABLE void removeAttributeFilter();
152 Q_INVOKABLE void addItemAttributeFilter(QString attributeName, QVariant attributeValue=QString(), bool include=true);
154 Q_INVOKABLE void removeItemAttributeFilter(QString attributeName, QVariant attributeValue, bool include);
156 Q_INVOKABLE void removeItemAttributeFilter(QString attributeName, bool include);
165 Q_INVOKABLE void addNodeAttributeFilter(QString attributeName, QVariant attributeValue=QString(), bool include=true, QString className=QString());
167 Q_INVOKABLE void removeNodeAttributeFilter(QString attributeName, QVariant attributeValue, bool include, QString className);
169 Q_INVOKABLE void removeNodeAttributeFilter(QString attributeName, bool include);
170
171
173 void setLevelFilter(QStringList &levelFilter);
174 QStringList levelFilter()const;
175
177 void setNameFilter(QString &nameFilter);
178 QString nameFilter()const;
179
181 void setNodeTypes(const QStringList& types);
182 QStringList nodeTypes()const;
183
186 void setHideChildNodeTypes(const QStringList& types);
187 QStringList hideChildNodeTypes()const;
188
189 Q_INVOKABLE qMRMLSortFilterSubjectHierarchyProxyModel* sortFilterProxyModel()const;
190 Q_INVOKABLE qMRMLSubjectHierarchyModel* model()const;
191
193 Q_INVOKABLE int displayedItemCount()const;
194
195 bool highlightReferencedItems()const;
196 bool contextMenuEnabled()const;
197 bool editMenuActionVisible()const;
198 bool selectRoleSubMenuVisible()const;
199 bool noneEnabled()const;
200 QString noneDisplay()const;
201
203 void setVisibilityColumnVisible(bool visible);
204 bool visibilityColumnVisible();
206 void setIdColumnVisible(bool visible);
207 bool idColumnVisible();
209 void setColorColumnVisible(bool visible);
210 bool colorColumnVisible();
212 void setTransformColumnVisible(bool visible);
213 bool transformColumnVisible();
215 void setDescriptionColumnVisible(bool visible);
216 bool descriptionColumnVisible();
217
218public slots:
220 virtual void setMRMLScene(vtkMRMLScene* scene);
221
223 virtual void setCurrentItem(vtkIdType itemID);
225 virtual void setCurrentItems(QList<vtkIdType> items);
227 virtual void setCurrentItems(vtkIdList* items);
229 virtual void setCurrentNode(vtkMRMLNode* node);
230
232 virtual void setRootItem(vtkIdType itemID);
234 void setShowRootItem(bool show);
235
237 void renameCurrentItem();
239 void deleteSelectedItems();
241 void hideSelectedItems();
243 void showSelectedItems();
245 void toggleVisibilityOfSelectedItems();
247 virtual void editCurrentItem();
248
250 virtual void expandItem(vtkIdType itemID);
252 virtual void collapseItem(vtkIdType itemID);
253
255 virtual void selectPluginForCurrentItem();
256
261 virtual void updateSelectPluginActions();
262
264 virtual void setMultiSelection(bool multiSelectionOn);
265
269 void setPluginAllowlist(QStringList allowlist);
273 void setPluginBlocklist(QStringList blocklist);
276 void disablePlugin(QString plugin);
277
279 void setPluginWhitelist(QStringList allowlist)
280 {
281 qWarning("qMRMLSubjectHierarchyTreeView::setPluginWhitelist is deprecated. Use setPluginAllowlist instead.");
282 this->setPluginAllowlist(allowlist);
283 }
285 void setPluginBlacklist(QStringList blocklist)
286 {
287 qWarning("qMRMLSubjectHierarchyTreeView::setPluginBlacklist is deprecated. Use setPluginBlocklist instead.");
288 this->setPluginBlocklist(blocklist);
289 }
290
294 bool showContextMenuHint(bool visibility=false);
295
296 void setHighlightReferencedItems(bool highlightOn);
297 void setContextMenuEnabled(bool enabled);
298 void setEditMenuActionVisible(bool visible);
299 void setSelectRoleSubMenuVisible(bool visible);
300 void setNoneEnabled(bool enable);
301 void setNoneDisplay(const QString& displayName);
302
305
306 void setIncludeItemAttributeNamesFilter(QStringList filter);
307 void setIncludeNodeAttributeNamesFilter(QStringList filter);
308 void setExcludeItemAttributeNamesFilter(QStringList filter);
309 void setExcludeNodeAttributeNamesFilter(QStringList filter);
310 void setAttributeNameFilter(QString& filter);
311 void setAttributeValueFilter(QString& filter);
312
313signals:
314 void currentItemChanged(vtkIdType);
315 void currentItemsChanged(QList<vtkIdType>);
316 void currentItemModified(vtkIdType);
317
318protected slots:
319 virtual void onSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
320
322 virtual void onItemExpanded(const QModelIndex &expandedItemIndex);
324 virtual void onItemCollapsed(const QModelIndex &collapsedItemIndex);
325
328
331 virtual void updateRootItem();
332
334 virtual void onSubjectHierarchyItemModified(vtkObject *caller, void *callData);
336 virtual void onSubjectHierarchyItemTransformModified(vtkObject *caller, void *callData);
337
339 virtual void onMRMLSceneStartClose(vtkObject* sceneObject);
341 virtual void onMRMLSceneEndClose(vtkObject* sceneObject);
343 virtual void onMRMLSceneStartBatchProcess(vtkObject* sceneObject);
345 virtual void onMRMLSceneEndBatchProcess(vtkObject* sceneObject);
346
347 void onCustomContextMenu(const QPoint& point);
348
350 virtual void onTransformInteractionInViewToggled(bool show);
352 virtual void onCreateNewTransform();
353
354protected:
357
362 virtual void populateContextMenuForItem(vtkIdType itemID);
364 virtual void populateVisibilityContextMenuForItem(vtkIdType itemID);
366 virtual void populateTransformContextMenuForItem(vtkIdType itemID);
367
371 virtual bool clickDecoration(QMouseEvent* e);
373 void mousePressEvent(QMouseEvent* e) override;
375 void keyPressEvent(QKeyEvent* e) override;
376
379 void applyReferenceHighlightForItems(QList<vtkIdType> itemIDs);
380
383 vtkIdType firstSelectedSubjectHierarchyItemInBranch(vtkIdType itemID);
384
385 void changeEvent(QEvent* e) override;
386
387protected:
388 QScopedPointer<qMRMLSubjectHierarchyTreeViewPrivate> d_ptr;
389
390private:
391 Q_DECLARE_PRIVATE(qMRMLSubjectHierarchyTreeView);
392 Q_DISABLE_COPY(qMRMLSubjectHierarchyTreeView);
394};
395
396#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.
virtual void onCreateNewTransform()
virtual void onTransformActionSelected()
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.
virtual void expandToDepthFromContextMenu()
Expand tree to depth specified by the clicked context menu action.
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 onTransformEditProperties()
virtual void onItemExpanded(const QModelIndex &expandedItemIndex)
Updates subject hierarchy item expanded property when item is expanded.
virtual void onTransformInteractionInViewToggled(bool show)
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.