Slicer 4.2
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
qMRMLSortFilterProxyModel.h
Go to the documentation of this file.
00001 /*==============================================================================
00002 
00003   Program: 3D Slicer
00004 
00005   Copyright (c) Kitware Inc.
00006 
00007   See COPYRIGHT.txt
00008   or http://www.slicer.org/copyright/copyright.txt for details.
00009 
00010   Unless required by applicable law or agreed to in writing, software
00011   distributed under the License is distributed on an "AS IS" BASIS,
00012   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013   See the License for the specific language governing permissions and
00014   limitations under the License.
00015 
00016   This file was originally developed by Julien Finet, Kitware Inc.
00017   and was partially funded by NIH grant 3P41RR013218-12S1
00018 
00019 ==============================================================================*/
00020 
00021 #ifndef __qMRMLSortFilterProxyModel_h
00022 #define __qMRMLSortFilterProxyModel_h
00023 
00024 // Qt includes
00025 #include <QSortFilterProxyModel>
00026 #include <QStringList>
00027 class QStandardItem;
00028 
00029 // CTK includes
00030 #include <ctkVTKObject.h>
00031 
00032 // qMRML includes
00033 #include "qMRMLWidgetsExport.h"
00034 
00035 class vtkMRMLNode;
00036 class vtkMRMLScene;
00037 class qMRMLAbstractItemHelper;
00038 class qMRMLSceneModel;
00039 class qMRMLSortFilterProxyModelPrivate;
00040 
00043 class QMRML_WIDGETS_EXPORT qMRMLSortFilterProxyModel : public QSortFilterProxyModel
00044 {
00045   Q_OBJECT
00046   QVTK_OBJECT
00047 
00051   Q_PROPERTY(QStringList nodeTypes READ nodeTypes WRITE setNodeTypes)
00052 
00053   
00054 
00055 
00056 
00057   Q_PROPERTY(bool showHidden READ showHidden WRITE setShowHidden)
00058 
00062   Q_PROPERTY(QStringList showHiddenForTypes READ showHiddenForTypes WRITE setShowHiddenForTypes)
00063 
00068   Q_PROPERTY(bool showChildNodeTypes READ showChildNodeTypes WRITE setShowChildNodeTypes)
00069 
00078   Q_PROPERTY(QStringList hideChildNodeTypes READ hideChildNodeTypes WRITE setHideChildNodeTypes)
00079 
00084   Q_PROPERTY(FilterType filterType READ filterType WRITE setFilterType)
00085   Q_ENUMS(FilterType)
00090   Q_PROPERTY(bool showAll READ showAll WRITE setShowAll STORED false)
00094   Q_PROPERTY(bool hideAll READ hideAll WRITE setHideAll STORED false)
00095 
00100   Q_PROPERTY(QStringList hiddenNodeIDs READ hiddenNodeIDs WRITE setHiddenNodeIDs)
00101 
00106   Q_PROPERTY(QStringList visibleNodeIDs READ visibleNodeIDs WRITE setVisibleNodeIDs)
00107 
00111   Q_PROPERTY(QString hideNodesUnaffiliatedWithNodeID READ hideNodesUnaffiliatedWithNodeID WRITE setHideNodesUnaffiliatedWithNodeID)
00112 
00113 public:
00114   enum FilterType
00115     {
00116     HideAll = 0,
00117     ShowAll,
00118     UseFilters
00119     };
00120 
00121   typedef QSortFilterProxyModel Superclass;
00122   qMRMLSortFilterProxyModel(QObject *parent=0);
00123   virtual ~qMRMLSortFilterProxyModel();
00124 
00126   vtkMRMLScene* mrmlScene()const;
00127 
00129   Q_INVOKABLE QModelIndex mrmlSceneIndex()const;
00130 
00132   Q_INVOKABLE vtkMRMLNode* mrmlNodeFromIndex(const QModelIndex& index)const;
00133 
00135   Q_INVOKABLE QModelIndex indexFromMRMLNode(vtkMRMLNode* node, int column = 0)const;
00136 
00140   QStringList nodeTypes()const;
00141   void setNodeTypes(const QStringList& nodeTypes);
00142 
00146   bool showHidden()const;
00147 
00152   QStringList showHiddenForTypes()const;
00153   void setShowHiddenForTypes(const QStringList& nodeTypes);
00154 
00158   Q_INVOKABLE void addAttribute(const QString& nodeType,
00159                     const QString& attributeName,
00160                     const QVariant& attributeValue = QVariant());
00161 
00165   void setShowChildNodeTypes(bool show);
00166   bool showChildNodeTypes()const;
00167 
00172   void setHideChildNodeTypes(const QStringList& nodeTypes);
00174   QStringList hideChildNodeTypes()const;
00175 
00178   void setHiddenNodeIDs(const QStringList& nodeIDsToHide);
00181   QStringList hiddenNodeIDs()const;
00182 
00185   void setVisibleNodeIDs(const QStringList& nodeIDsToShow);
00188   QStringList visibleNodeIDs()const;
00189 
00193   void setHideNodesUnaffiliatedWithNodeID(const QString& nodeID);
00196   QString hideNodesUnaffiliatedWithNodeID()const;
00197 
00200   FilterType filterType()const;
00203   bool showAll()const;
00206   bool hideAll()const;
00207 
00209   Q_INVOKABLE qMRMLSceneModel* sceneModel()const;
00210 
00211 public slots:
00214   void setShowHidden(bool);
00215 
00218   void setFilterType(FilterType filterType);
00221   void setShowAll(bool show);
00224   void setHideAll(bool hide);
00225 
00226   // TODO Add setMRMLScene() to propagate to the scene model
00227 protected:
00239   enum AcceptType
00240   {
00241     Reject = 0,
00242     Accept,
00243     RejectButPotentiallyAcceptable,
00244     AcceptButPotentiallyRejectable,
00245   };
00254   virtual bool filterAcceptsRow(int source_row,
00255                                 const QModelIndex &source_parent)const;
00260   virtual AcceptType filterAcceptsNode(vtkMRMLNode* node)const;
00261 
00262   QStandardItem* sourceItem(const QModelIndex& index)const;
00263 
00264 protected:
00265   QScopedPointer<qMRMLSortFilterProxyModelPrivate> d_ptr;
00266 
00267 private:
00268   Q_DECLARE_PRIVATE(qMRMLSortFilterProxyModel);
00269   Q_DISABLE_COPY(qMRMLSortFilterProxyModel);
00270 };
00271 
00272 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines