Slicer  5.0
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
qMRMLSortFilterSubjectHierarchyProxyModel.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 __qMRMLSortFilterSubjectHierarchyProxyModel_h
24 #define __qMRMLSortFilterSubjectHierarchyProxyModel_h
25 
26 // SubjectHierarchy includes
27 #include "qSlicerSubjectHierarchyModuleWidgetsExport.h"
28 
29 // Qt includes
30 #include <QSortFilterProxyModel>
31 
32 // CTK includes
33 #include <ctkVTKObject.h>
34 #include <ctkPimpl.h>
35 
36 class qMRMLSortFilterSubjectHierarchyProxyModelPrivate;
38 class vtkMRMLScene;
39 class QStandardItem;
40 
42 class Q_SLICER_MODULE_SUBJECTHIERARCHY_WIDGETS_EXPORT qMRMLSortFilterSubjectHierarchyProxyModel : public QSortFilterProxyModel
43 {
44  Q_OBJECT
45  QVTK_OBJECT
46 
48  Q_PROPERTY(QString nameFilter READ nameFilter WRITE setNameFilter)
51  Q_PROPERTY(vtkIdType hideItemsUnaffiliatedWithItemID READ hideItemsUnaffiliatedWithItemID WRITE setHideItemsUnaffiliatedWithItemID)
56  Q_PROPERTY(bool showEmptyHierarchyItems READ showEmptyHierarchyItems WRITE setShowEmptyHierarchyItems)
58  Q_PROPERTY(QStringList levelFilter READ levelFilter WRITE setLevelFilter)
59 
62  Q_PROPERTY(QStringList nodeTypes READ nodeTypes WRITE setNodeTypes)
71  Q_PROPERTY(QStringList hideChildNodeTypes READ hideChildNodeTypes WRITE setHideChildNodeTypes)
72 
75  Q_PROPERTY(QStringList includeItemAttributeNamesFilter READ includeItemAttributeNamesFilter WRITE setIncludeItemAttributeNamesFilter)
78  Q_PROPERTY(QStringList includeNodeAttributeNamesFilter READ includeNodeAttributeNamesFilter WRITE setIncludeNodeAttributeNamesFilter)
82  Q_PROPERTY(QStringList excludeItemAttributeNamesFilter READ excludeItemAttributeNamesFilter WRITE setExcludeItemAttributeNamesFilter)
86  Q_PROPERTY(QStringList excludeNodeAttributeNamesFilter READ excludeNodeAttributeNamesFilter WRITE setExcludeNodeAttributeNamesFilter)
87 
90  Q_PROPERTY(QString attributeNameFilter READ attributeNameFilter WRITE setAttributeNameFilter)
95  Q_PROPERTY(QString attributeValueFilter READ attributeValueFilter WRITE setAttributeValueFilter)
96 
97 public:
98  typedef QSortFilterProxyModel Superclass;
99  qMRMLSortFilterSubjectHierarchyProxyModel(QObject *parent=nullptr);
101 
102  Q_INVOKABLE vtkMRMLSubjectHierarchyNode* subjectHierarchyNode()const;
103  Q_INVOKABLE vtkMRMLScene* mrmlScene()const;
104 
105  QString nameFilter()const;
106  QStringList levelFilter()const;
107  QStringList nodeTypes()const;
108  QStringList hideChildNodeTypes()const;
109  QStringList includeItemAttributeNamesFilter()const;
110  QStringList includeNodeAttributeNamesFilter()const;
111  QStringList excludeItemAttributeNamesFilter()const;
112  QStringList excludeNodeAttributeNamesFilter()const;
113  QString attributeValueFilter()const;
114  QString attributeNameFilter()const;
122  Q_INVOKABLE void addItemAttributeFilter(QString attributeName, QVariant attributeValue=QString(), bool include=true);
124  Q_INVOKABLE void removeItemAttributeFilter(QString attributeName, QVariant attributeValue, bool include);
126  Q_INVOKABLE void removeItemAttributeFilter(QString attributeName, bool include);
135  Q_INVOKABLE void addNodeAttributeFilter(QString attributeName, QVariant attributeValue=QString(), bool include=true, QString className=QString());
137  Q_INVOKABLE void removeNodeAttributeFilter(QString attributeName, QVariant attributeValue, bool include, QString className);
139  Q_INVOKABLE void removeNodeAttributeFilter(QString attributeName, bool include);
140 
141  vtkIdType hideItemsUnaffiliatedWithItemID()const;
142  void setHideItemsUnaffiliatedWithItemID(vtkIdType itemID);
143 
144  bool showEmptyHierarchyItems()const;
145  void setShowEmptyHierarchyItems(bool show);
146 
148  Q_INVOKABLE QModelIndex subjectHierarchySceneIndex()const;
149 
151  Q_INVOKABLE vtkIdType subjectHierarchyItemFromIndex(const QModelIndex& index)const;
152 
154  Q_INVOKABLE QModelIndex indexFromSubjectHierarchyItem(vtkIdType itemID, int column=0)const;
155 
159  Q_INVOKABLE int acceptedItemCount(vtkIdType rootItemID=0)const;
160 
164  bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent)const override;
165 
166  Qt::ItemFlags flags(const QModelIndex & index)const override;
167 
168 public slots:
169  void setNameFilter(QString filter);
170  void setAttributeNameFilter(QString filter);
171  void setAttributeValueFilter(QString filter);
172  void setLevelFilter(QStringList filter);
173  void setNodeTypes(const QStringList& types);
174  void setHideChildNodeTypes(const QStringList& types);
175  void setIncludeItemAttributeNamesFilter(QStringList filterList);
176  void setIncludeNodeAttributeNamesFilter(QStringList filterList);
177  void setExcludeItemAttributeNamesFilter(QStringList filterList);
178  void setExcludeNodeAttributeNamesFilter(QStringList filterList);
179 
180 protected:
190  {
191  Reject = 0,
194  };
195 
197  virtual AcceptType filterAcceptsItem(vtkIdType itemID, bool canAcceptIfAnyChildIsAccepted=true)const;
198 
199  QStandardItem* sourceItem(const QModelIndex& index)const;
200 
201 protected:
202  QScopedPointer<qMRMLSortFilterSubjectHierarchyProxyModelPrivate> d_ptr;
203 
204 private:
208 };
209 
210 #endif
MRML node to represent a complete subject hierarchy tree.
A set of MRML Nodes that supports serialization and undo/redo.
Definition: vtkMRMLScene.h:57
QScopedPointer< qMRMLSortFilterSubjectHierarchyProxyModelPrivate > d_ptr