CTK  0.1.0
The Common Toolkit is a community effort to provide support code for medical image analysis, surgical navigation, and related projects.
ctkVTKDataSetModel.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Library: CTK
4 
5  Copyright (c) Kitware Inc.
6 
7  Licensed under the Apache License, Version 2.0 (the "License");
8  you may not use this file except in compliance with the License.
9  You may obtain a copy of the License at
10 
11  http://www.apache.org/licenses/LICENSE-2.0.txt
12 
13  Unless required by applicable law or agreed to in writing, software
14  distributed under the License is distributed on an "AS IS" BASIS,
15  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  See the License for the specific language governing permissions and
17  limitations under the License.
18 
19 =========================================================================*/
20 
21 #ifndef __ctkVTKDataSetModel_h
22 #define __ctkVTKDataSetModel_h
23 
24 // Qt includes
25 #include <QStandardItemModel>
26 
27 // CTK includes
28 #include <ctkVTKObject.h>
29 
30 // CTK includes
31 #include "ctkVisualizationVTKWidgetsExport.h"
32 
33 class vtkDataSet;
34 class vtkAbstractArray;
35 
37 namespace ctkVTK
38 {
39  enum ItemDataRole {
40  PointerRole = Qt::UserRole + 1,
42  };
43 };
44 
45 class ctkVTKDataSetModelPrivate;
46 
47 //------------------------------------------------------------------------------
49 class CTK_VISUALIZATION_VTK_WIDGETS_EXPORT ctkVTKDataSetModel
50  : public QStandardItemModel
51 {
52  Q_OBJECT
54  Q_FLAGS(AttributeType AttributeTypes)
55 
56 
59  Q_PROPERTY(AttributeTypes attributeTypes READ attributeTypes WRITE setAttributeTypes)
60 
61 
66  Q_PROPERTY(bool includeNullItem READ includeNullItem WRITE setIncludeNullItem)
67 
68 public:
70  typedef QStandardItemModel Superclass;
71  ctkVTKDataSetModel(QObject *parent=0);
73 
75  {
76  NoAttribute = 0x1,
77  ScalarsAttribute = 0x2,
78  VectorsAttribute = 0x4,
79  NormalsAttribute = 0x8,
80  TCoordsAttribute = 0x10,
81  TensorsAttribute = 0x20,
82  GlobalIDsAttribute = 0x40,
83  PedigreeIDsAttribute = 0x80,
84  EdgeFlagAttribute = 0x100,
85  AllAttribute = NoAttribute | ScalarsAttribute | VectorsAttribute | NormalsAttribute | TCoordsAttribute | TensorsAttribute | GlobalIDsAttribute | PedigreeIDsAttribute | EdgeFlagAttribute
86  };
87  Q_DECLARE_FLAGS(AttributeTypes, AttributeType)
88 
89  virtual void setDataSet(vtkDataSet* dataSet);
90  vtkDataSet* dataSet()const;
91 
92  AttributeTypes attributeTypes()const;
93  void setAttributeTypes(const AttributeTypes& attributeTypes);
94 
95  bool includeNullItem()const;
96  void setIncludeNullItem(bool includeNullItem);
97  int nullItemLocation()const;
98 
101  inline vtkAbstractArray* arrayFromIndex(const QModelIndex& arrayIndex)const;
102 
106  inline int locationFromIndex(const QModelIndex& arrayIndex)const;
107 
108  vtkAbstractArray* arrayFromItem(QStandardItem* nodeItem)const;
109 
113  int locationFromItem(QStandardItem* nodeItem)const;
114 
115  inline QModelIndex indexFromArray(vtkAbstractArray* array, int column = 0)const;
116  QStandardItem* itemFromArray(vtkAbstractArray* array, int column = 0)const;
117  QModelIndexList indexes(vtkAbstractArray* array)const;
118 
119 protected Q_SLOTS:
120  void onDataSetModified(vtkObject* dataSet);
121  void onDataSetPointDataModified(vtkObject* dataSetPointData);
122  void onDataSetCellDataModified(vtkObject* dataSetCellData);
123  void onArrayModified(vtkObject* array);
124  void onItemChanged(QStandardItem * item);
125 
126 protected:
127 
128  ctkVTKDataSetModel(ctkVTKDataSetModelPrivate* pimpl, QObject *parent=0);
129 
130  virtual void insertArray(vtkAbstractArray* array, int location);
131  virtual void insertArray(vtkAbstractArray* array, int location, int row);
132  virtual void updateItemFromArray(QStandardItem* item, vtkAbstractArray* array, int location, int column);
133  virtual void updateArrayFromItem(vtkAbstractArray* array, QStandardItem* item);
134  virtual void updateDataSet();
135  virtual void populateDataSet();
136  virtual void insertNullItem();
137  virtual void removeNullItem();
138 
139 protected:
140  QScopedPointer<ctkVTKDataSetModelPrivate> d_ptr;
141  int NullItemLocation;
142 
143 private:
144  Q_DECLARE_PRIVATE(ctkVTKDataSetModel);
145  Q_DISABLE_COPY(ctkVTKDataSetModel);
146 };
148 
149 // -----------------------------------------------------------------------------
150 vtkAbstractArray* ctkVTKDataSetModel::arrayFromIndex(const QModelIndex &nodeIndex)const
151 {
152  return this->arrayFromItem(this->itemFromIndex(nodeIndex));
153 }
154 
155 // -----------------------------------------------------------------------------
156 int ctkVTKDataSetModel::locationFromIndex(const QModelIndex &nodeIndex)const
157 {
158  return this->locationFromItem(this->itemFromIndex(nodeIndex));
159 }
160 
161 // -----------------------------------------------------------------------------
162 QModelIndex ctkVTKDataSetModel::indexFromArray(vtkAbstractArray* array, int column)const
163 {
164  QStandardItem* item = this->itemFromArray(array, column);
165  return item ? item->index() : QModelIndex();
166 }
167 
168 #endif
ctkVTKDataSetModel Self
QStandardItemModel Superclass
QModelIndex indexFromArray(vtkAbstractArray *array, int column=0) const
virtual ~ctkVTKDataSetModel()
ctkVTKDataSetModel(QObject *parent=0)
int locationFromIndex(const QModelIndex &arrayIndex) const
Q_DECLARE_OPERATORS_FOR_FLAGS(ctkVTKDataSetModel::AttributeTypes)
#define QVTK_OBJECT
Define VTK/Qt event/slot connection utility methods. It is a convenient macro that declares and defin...
Definition: ctkVTKObject.h:222