Salome HOME
Livraison IHM Hexa7
[modules/hexablock.git] / src / HEXABLOCKGUI / HEXABLOCKGUI_DocumentModel.hxx
1 // Copyright (C) 2009-2013  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #ifndef _HEXABLOCKGUI_DOCUMENTMODEL_HXX_
21 #define _HEXABLOCKGUI_DOCUMENTMODEL_HXX_
22
23
24 #include <QTemporaryFile>
25 #include <QStandardItemModel>
26 #include <QSortFilterProxyModel>
27
28 #include "HEXABLOCKGUI_DocumentItem.hxx"
29 #include "HexDocument.hxx"
30 #include "HexNewShape.hxx"
31 #include "Hex.hxx"
32
33
34 namespace HEXABLOCK
35 {
36   namespace GUI
37   {
38     class HexaExport DocumentModel : public QStandardItemModel
39     {
40       Q_OBJECT
41     public:
42
43       struct GeomObj
44       {
45           QString shapeName;  //main shape name
46           QString shapeEntry; //main shape entry
47           QString name;
48           QString subId;      // sub-shape id (if it's a sub shape)
49           QString brep;
50           double  start;
51           double  end;
52       };
53
54       typedef HEXA_NS::EnumGroup Group;
55       typedef HEXA_NS::KindLaw   KindLaw;
56
57       typedef QList<GeomObj> GeomObjList;
58
59       DocumentModel( HEXA_NS::Document* doc, const QString& entry, QObject * parent = 0 );
60       DocumentModel( int rows, int columns, QObject * parent = 0 );
61
62       virtual ~DocumentModel();
63
64
65       void setName(const QString& name);
66       QString getName();
67       HEXA_NS::Document* getHexaDocument() const { return _hexaDocument; }
68       void load( const QString& xmlFileName );
69       void load(); //Loads the current document
70       void save( const QString& xmlFileName );
71       void updateData();
72       void updateGeomTree();
73       void refresh(); //refresh data
74       bool isEmpty() const;
75
76       void clearAll();
77       void clearData();
78 //      void clearBuilder();
79       void clearGeometry();
80       void clearAssociation();
81       void clearGroups();
82       void clearMesh();
83
84       void fillData();
85 //      void fillBuilder();
86       void fillGeometry();
87       void fillAssociation();
88       void fillGroups();
89       void fillMesh();
90
91       virtual Qt::ItemFlags flags(const QModelIndex &index) const;
92
93
94       void allowEdition();
95       void disallowEdition();
96
97       void allowDataSelectionOnly();
98       void allowVertexSelectionOnly();
99       void allowEdgeSelectionOnly();
100       void allowQuadSelectionOnly();
101       void allowHexaSelectionOnly();
102
103       void allowVectorSelectionOnly();
104       void allowCylinderSelectionOnly();
105       void allowPipeSelectionOnly();
106       void allowElementsSelectionOnly();
107       void allowCrossElementsSelectionOnly();
108
109       void allowLawSelectionOnly();
110
111       Hex::Hex* getHexaRoot() { return Hex::Hex::getInstance(); }
112
113       HEXA_NS::EltBase* getHexaPtr(const QModelIndex& iElt);
114       template<typename T>
115       T getHexaPtr(QModelIndex iElt)
116       {
117         if (iElt.isValid())
118           return iElt.data( HEXA_DATA_ROLE ).value< T >();
119
120         return NULL;
121       }
122
123       int getNbrElt(HEXA_NS::EnumElt eltType);
124       int getNbrUsedElt(HEXA_NS::EnumElt eltType);
125       int getNbrUnusedElt(HEXA_NS::EnumElt eltType);
126
127       QModelIndex addElementsToTree(HEXA_NS::Elements* helts, QStandardItem* tree);
128
129       //associate a shape to the current document
130       bool addShape(TopoDS_Shape& forme, QString& shapeName, bool publish=true);
131
132       //returns the geom obj id in the document using its entry
133       QString getGeomObjName(QString& studyEntry) const {
134           return docShapesName.contains(studyEntry) ? docShapesName[studyEntry] : QString();
135       }
136
137       //returns the geom obj entry in the document using its id
138       QString getGeomObjEntry(QString& shapeName) const {
139           return docShapesEntry.contains(shapeName) ? docShapesEntry[shapeName] : QString();
140       }
141
142       //returns the document's shapes entries
143       QList<QString> getShapesEntries() const { return docShapesName.uniqueKeys(); }
144
145       //returns the associated geom object to the data index
146       HEXA_NS::SubShape* getGeomPtr(QString& id) const
147       {
148           if (!shapeById.contains(id))
149               return NULL;
150           return shapeById[id];
151       }
152
153       QModelIndex getGeomModelIndex(QString& id) const;
154
155       void setGeomObjName(QString& studyEntry, QString& shapeName) {docShapesName[studyEntry] = shapeName;}
156       void setGeomObjEntry(QString& shapeName, QString& studyEntry) {docShapesEntry[shapeName] = studyEntry;}
157
158       void setName( const QModelIndex& iElt, const QString& name );
159       bool clearEltAssociations( const QModelIndex& iElt );
160       HEXA_NS::Hexa* getQuadHexa(HEXA_NS::Quad* quad);
161
162       //  ************  BUILD HEXABLOCK MODEL (OBSOLETE)************
163       QModelIndex addVertex( double x, double y, double z );
164
165       //
166       QModelIndex addEdgeVertices (const QModelIndex &i_v0, const QModelIndex &i_v1 );
167       QModelIndex addEdgeVector( const QModelIndex &i_v, const QModelIndex &i_vec );
168
169       //
170       QModelIndex addQuadVertices( const QModelIndex &i_v0, const QModelIndex &i_v1,
171           const QModelIndex &i_v2, const QModelIndex &i_v3 );
172       QModelIndex addQuadEdges( const QModelIndex &i_e0, const QModelIndex &i_e1,
173           const QModelIndex &i_e2, const QModelIndex &i_e3 );
174
175       //
176       QModelIndex addHexaVertices( const QModelIndex &i_v0, const QModelIndex &i_v1,
177           const QModelIndex &i_v2, const QModelIndex &i_v3,
178           const QModelIndex &i_v4, const QModelIndex &i_v5,
179           const QModelIndex &i_v6, const QModelIndex &i_v7 );
180       QModelIndex addHexaQuad( const QModelIndex &i_q0, const QModelIndex &i_q1, const QModelIndex &i_q2, const QModelIndex &i_q3, const QModelIndex &i_q4, const QModelIndex &i_q5 );
181
182       QModelIndex addHexaQuads( const QModelIndexList &i_quads ); //NEW HEXA3
183
184
185       //
186       QModelIndex addVector( double dx, double dy, double dz );
187       QModelIndex addVectorVertices( const QModelIndex &i_v0, const QModelIndex &i_v1 );
188
189       //
190 //      QModelIndex addCylinder( const QModelIndex &iv, const QModelIndex &ivec, double r,  double h );
191 //
192 //      //
193 //      QModelIndex addPipe( const QModelIndex &iv, const QModelIndex &ivec, double ri, double re, double h );
194
195
196
197       // ===================== NEW =================================
198
199       // ===== CARTESIAN GRID
200
201       QModelIndex makeCartesianTop(int nx, int ny, int nz);
202       QModelIndex makeCartesianUni(const QModelIndex& icenter, const QModelIndex& ibase, const QModelIndex& ivec,
203                                    const QModelIndex& iaxis, double lx, double ly, double lz, int nx, int ny, int nz);
204       QModelIndex makeCartesian(const QModelIndex& icenter, const QModelIndex& ibase, const QModelIndex& ivec,
205                                 const QModelIndex& iaxis, vector<double>& radius, vector<double>& angles, vector<double>& heights);
206
207       // ====== SPHERE
208
209       QModelIndex makeSphereTop (int nr, int na, int nh);
210
211       QModelIndex makeSphereUni (QModelIndex& icenter,
212                                  QModelIndex& ivec_x, QModelIndex& ivec_z,
213                                  double rtrou, double rext, double ang,
214                                  QModelIndex& ivplan,
215                                  int nr, int na, int nh);
216
217       QModelIndex makeSphere    (QModelIndex& icenter,
218                                  QModelIndex& ivec_x, QModelIndex& ivec_z,
219                                  vector<double>& tray, vector<double>& tang, vector<double>& thaut);
220
221       // ====== SPHERICAL
222
223       QModelIndex makeSphericalTop (int nbre, int crit);
224
225       QModelIndex makeSphericalUni (QModelIndex& icenter,
226                                     QModelIndex& ivec_x, QModelIndex& ivec_z,
227                                     double rayon,
228                                     int nbre, int crit);
229
230       QModelIndex makeSpherical    (QModelIndex& icenter,
231                                     QModelIndex& ivec_x, QModelIndex& ivec_z,
232                                     vector<double>& rayon,
233                                     int crit);
234
235       // =========== RIND
236       QModelIndex makeRindTop (int nr, int na, int nh);
237
238       QModelIndex makeRindUni (QModelIndex& icenter,
239                                QModelIndex& ivec_x, QModelIndex& ivec_z,
240                                double raytrou, double rint, double rext, double ang,
241                                QModelIndex& ivplan,
242                                int nr, int na, int nh);
243
244       QModelIndex makeRind   (QModelIndex& icenter,
245                               QModelIndex& ivec_x, QModelIndex& ivec_z,
246                               vector<double>& tray, vector<double>& tang, vector<double>& thaut);
247
248       // ======== Cylinder
249       QModelIndex makeCylinderTop(int nr, int na, int nh);
250
251       QModelIndex makeCylinderUni(QModelIndex& iorig, QModelIndex& ivecx, QModelIndex& ivecz,
252                                    double rint, double rext, double angle, double haut,
253                                    int nr, int na, int nh);
254
255       QModelIndex makeCylinder   (QModelIndex& iorig, QModelIndex& ivecx, QModelIndex& ivecz,
256                                   vector<double>& tray, vector<double>& tang, vector<double>& thaut);
257
258       // ======== Cylinders
259       QModelIndex makeCylinders  (QModelIndex& iorig1, QModelIndex& ivecz1,  double r1, double h1,
260                                   QModelIndex& iorig2, QModelIndex& ivecz2, double r2, double h2);
261
262       // =========== PIPE
263       QModelIndex makePipeTop (int nr, int na, int nh);
264
265       QModelIndex makePipeUni (QModelIndex& iorig, QModelIndex& ivecx, QModelIndex& ivecz,
266                                double rint, double rext, double angle, double haut,
267                                int nr, int na, int nh);
268
269       QModelIndex makePipe    (QModelIndex& iorig, QModelIndex& ivecx, QModelIndex& ivecz,
270                                vector<double>& tray, vector<double>& tang, vector<double>& thaut);
271
272       // ======== Pipes
273       QModelIndex makePipes  (QModelIndex& iorig1, QModelIndex& ivecz1, double rint1, double rex1, double h1,
274                               QModelIndex& iorig2, QModelIndex& ivecz2, double rint2, double rex2, double h2);
275
276       // ======== Join Quads
277       QModelIndex joinQuadUni(QModelIndex& istart, QModelIndex& idest, QModelIndex& iv1, QModelIndex& iv2,
278                               QModelIndex& iv3, QModelIndex& iv4, int nb);
279
280       QModelIndex joinQuad   (QModelIndex&  istart, QModelIndex& idest, QModelIndex& iva1, QModelIndex& ivb1,
281                               QModelIndex& iva2, QModelIndex& ivb2, vector<double>& tlen);
282
283       QModelIndex joinQuadsUni (QModelIndexList& istarts, QModelIndex& idest, QModelIndex& iv1, QModelIndex& iv2,
284                                 QModelIndex& iv3, QModelIndex& iv4, int nb);
285
286       QModelIndex joinQuads    (QModelIndexList& istarts, QModelIndex& idest, QModelIndex& iva1, QModelIndex& ivb1,
287                                 QModelIndex& iva2, QModelIndex& ivb2, vector<double>& tlen);
288
289       // ======== Quad Revolution
290       QModelIndex revolutionQuadUni(QModelIndex& istart, QModelIndex& icenter, QModelIndex& iaxis,
291                                     double angle, int nbre);
292
293       QModelIndex revolutionQuad(QModelIndex& istart, QModelIndex& icenter, QModelIndex& iaxis,
294                                  vector<double>& angles);
295
296       QModelIndex revolutionQuadsUni(QModelIndexList& istarts, QModelIndex& icenter, QModelIndex& iaxis,
297                                      double angle, int nbre);
298
299       QModelIndex revolutionQuads(QModelIndexList& istarts, QModelIndex& icenter, QModelIndex& iaxis,
300                                   vector<double>& angles);
301
302       // ==== PrismQuad or ExtrudeQuad
303       QModelIndex extrudeQuadTop (QModelIndex& istart, int nbre);
304       QModelIndex extrudeQuadUni (QModelIndex& istart, QModelIndex& dv, double len, int nbre);
305       QModelIndex extrudeQuad    (QModelIndex& istart, QModelIndex& dv, vector<double>& tlen);
306
307       QModelIndex extrudeQuadsTop (QModelIndexList& istarts, int nbre);
308       QModelIndex extrudeQuadsUni (QModelIndexList& istarts, QModelIndex& axis, double len, int nbre);
309       QModelIndex extrudeQuads    (QModelIndexList& istarts, QModelIndex& iaxis, vector<double>& tlen);
310
311       // ==== Cut Edge
312       QModelIndex cutUni     (QModelIndex& iEdge, int nbre);
313       QModelIndex cut        (QModelIndex& iEdge, vector<double>& tlen);
314
315       // ============================== END NEW ================================
316
317       // ************  EDIT HEXABLOCK MODEL ************
318
319       bool updateVertex( const QModelIndex& vertex, double x, double y, double z );
320
321       //
322       bool removeHexa( const QModelIndex& hexa );
323       bool removeConnectedHexa( const QModelIndex& hexa );
324
325       bool mergeVertices( const QModelIndex& va, const QModelIndex& vb );
326       bool mergeEdges( const QModelIndex& ea, const QModelIndex& eb,
327           const QModelIndex& v0, const QModelIndex& v1 );
328       bool mergeQuads( const QModelIndex& qa, const QModelIndex& qb,
329           const QModelIndex& v0, const QModelIndex& v1,
330           const QModelIndex& v2, const QModelIndex& v3 );
331
332       //
333       QModelIndex disconnectVertex( const QModelIndex& h, const QModelIndex& v );
334       QModelIndex disconnectEdge( const QModelIndex& h, const QModelIndex& e );
335       QModelIndex disconnectQuad( const QModelIndex& h, const QModelIndex& q );
336       QModelIndex disconnectEdges( const QModelIndexList& h, const QModelIndexList& e );
337
338       //
339       QModelIndex makeTranslation( const QModelIndex& elts, const QModelIndex& vec );
340       QModelIndex makeScale( const QModelIndex& elts, const QModelIndex& v, double k );
341
342       //
343       QModelIndex makeRotation( const QModelIndex& elts, const QModelIndex& v, const QModelIndex& vec, double angle );
344
345       //
346       QModelIndex makeSymmetryPoint( const QModelIndex& elts, const QModelIndex& v );
347       QModelIndex makeSymmetryLine( const QModelIndex& elts, const QModelIndex& v, const QModelIndex& vec );
348       QModelIndex makeSymmetryPlane( const QModelIndex& elts, const QModelIndex& v, const QModelIndex& vec );
349
350       //
351       bool performTranslation( const QModelIndex& elts, const QModelIndex& vec );
352
353       //
354       bool performScale( const QModelIndex& elts, const QModelIndex& v, double k );
355
356       //
357       bool performRotation( const QModelIndex& elts, const QModelIndex& v, const QModelIndex& vec, double angle );
358
359       //
360       bool performSymmetryPoint( const QModelIndex& elts, const QModelIndex& v );
361       bool performSymmetryLine( const QModelIndex& elts, const QModelIndex& v, const QModelIndex& vec );
362       bool performSymmetryPlane( const QModelIndex& elts, const QModelIndex& v, const QModelIndex& vec );
363
364       QModelIndex replace( const QModelIndexList& quadsPattern,
365           const QModelIndex& p1, const QModelIndex& c1,
366           const QModelIndex& p2, const QModelIndex& c2,
367           const QModelIndex& p3, const QModelIndex& c3 ); //NEW HEXA3
368
369
370       // ************  ASSOCIATION ************
371       bool setVertexAssociation( const QModelIndex& iVertex, double x, double y, double z);
372       bool setVertexAssociation(const QModelIndex& iVertex, const QModelIndex& iGeomVertex);
373       bool addEdgeAssociation(const QModelIndex& iEdge, const QModelIndex& iGeomEdge, double start, double end);
374       bool addQuadAssociation (const QModelIndex& iQuad, const QModelIndex& iGeomFace);
375
376       QMultiMap< QString, int >     getAssocShapesIds(const QModelIndex& dataIndex);
377       QModelIndex     getVertexAssociation(const QModelIndex& iVertex);
378       QModelIndexList getEdgeAssociations(const QModelIndex& iEdge);
379       QModelIndexList getQuadAssociations(const QModelIndex& iQuad);
380
381      //---------- perimees -------------
382       bool associateOpenedLine( const QModelIndexList& edges,
383           const GeomObjList&     assocs,
384           double pstart,
385           double pend );
386
387       bool associateClosedLine( const QModelIndex& vertex,
388           const QModelIndexList& edges,
389           const GeomObjList&     assocs,
390           double pstart,
391           bool   inv = false );
392       //-------------
393
394       bool associateOpenedLine( const QModelIndexList& edges,
395               HEXA_NS::NewShapes shapes,
396               HEXA_NS::IntVector subIds,
397               double pstart,
398               double pend );
399
400       bool associateClosedLine( const QModelIndex& vertex,
401               const QModelIndexList& edges,
402               HEXA_NS::NewShapes shapes,
403               HEXA_NS::IntVector subIds,
404               double pstart,
405               bool   inv = false );
406
407       void clearAssociation(HEXA_NS::EnumElt& eltType);
408
409
410       // ************  GROUPS  ************
411       //
412       QModelIndex addGroup( const QString& name, Group kind );
413
414       //
415       bool removeGroup( const QModelIndex& grp );
416
417       //
418       QModelIndexList getGroupElements( const QModelIndex& iGroup, Group& kind) const;
419
420       // 7.4 Boite: éditer un groupe
421       void setGroupName( const QModelIndex& grp, const QString& name );
422       bool addGroupElement( const QModelIndex& grp, const QModelIndex& elt );
423       bool removeGroupElement( const QModelIndex& grp, int nro ); //CS_TODO
424       bool clearGroupElement( const QModelIndex& grp );
425
426
427       // ************  LAWS  ************
428       //
429       QModelIndex addLaw( const QString& name, int nbnodes );
430       bool setLaw( const QModelIndex& ilaw, int nbnodes, double coeff, KindLaw type );
431       bool  removeLaw( const QModelIndex& law );
432       bool setPropagation( const QModelIndex& iPropagation, const QModelIndex& iLaw, bool way );
433       QModelIndexList getPropagation( const QModelIndex& iPropagation ) const;
434
435       // tools
436       HEXA_NS::Document* documentImpl();
437       QString            documentEntry();
438
439       signals:
440       void patternDataChanged();
441       void nameChanged(const QString& name);
442
443     private:
444       QTemporaryFile    *_hexaFile;
445       HEXA_NS::Document *_hexaDocument;
446       QString            _entry;
447
448       //geom
449       QMap<QString, QString> docShapesEntry;
450       QMap<QString, QString> docShapesName;
451       QMap<QString, HEXA_NS::SubShape*> shapeById;
452
453       QMap<QString, QString> _assocName; // clé: id; valeur: nom
454       bool              _disallowEdition;
455
456       //data
457       QStandardItem     *_vertexDirItem;
458       QStandardItem     *_edgeDirItem;
459       QStandardItem     *_quadDirItem;
460       QStandardItem     *_hexaDirItem;
461
462       //builder
463       QStandardItem     *_vectorDirItem;
464       QStandardItem     *_elementsDirItem;
465       QStandardItem     *_crossElementsDirItem;
466
467       //geometry
468       QStandardItem     *_explicitShapesDirItem;
469       QStandardItem     *_implicitShapesDirItem;
470       QStandardItem     *_cloudOfPointsDirItem;
471
472       //association
473       // CS_TODO
474
475       // groups
476       QStandardItem     *_groupDirItem;
477
478       // law
479       QStandardItem     *_lawDirItem;
480       QStandardItem     *_propagationDirItem;
481
482
483       Qt::ItemFlags     _vertexItemFlags;
484       Qt::ItemFlags     _edgeItemFlags;
485       Qt::ItemFlags     _quadItemFlags;
486       Qt::ItemFlags     _hexaItemFlags;
487
488       Qt::ItemFlags     _vectorItemFlags;
489       Qt::ItemFlags     _elementsItemFlags;
490       Qt::ItemFlags     _crossElementsItemFlags;
491
492       Qt::ItemFlags     _groupItemFlags;
493       Qt::ItemFlags     _lawItemFlags;
494       Qt::ItemFlags     _propagationItemFlags;
495
496     };
497
498
499     class  PatternDataModel : public QSortFilterProxyModel
500     {
501     public:
502       PatternDataModel( QObject * parent = 0 );
503       virtual ~PatternDataModel();
504
505       virtual Qt::ItemFlags flags(const QModelIndex &index) const;
506       virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
507
508       QStandardItem * itemFromIndex ( const QModelIndex & index ) const;
509
510       HEXA_NS::Document* documentImpl();
511       QString            documentEntry();
512     };
513
514
515 //    class  PatternBuilderModel : public QSortFilterProxyModel
516 //    {
517 //    public:
518 //      PatternBuilderModel( QObject * parent = 0 );
519 //      virtual ~PatternBuilderModel();
520 //
521 //      virtual Qt::ItemFlags flags(const QModelIndex &index) const;
522 //      virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
523 //      QStandardItem * itemFromIndex ( const QModelIndex & index ) const;
524 //    };
525
526     class PatternGeomModel : public QSortFilterProxyModel
527     {
528     public:
529         PatternGeomModel( QObject* parent = 0);
530         virtual ~PatternGeomModel();
531
532         virtual Qt::ItemFlags flags(const QModelIndex &index) const;
533         virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
534
535         QStandardItem * itemFromIndex ( const QModelIndex & index ) const;
536     };
537
538
539     class  AssociationsModel : public QSortFilterProxyModel
540     {
541     public:
542       AssociationsModel( QObject * parent = 0 );
543       virtual ~AssociationsModel();
544
545       virtual Qt::ItemFlags flags(const QModelIndex &index) const;
546       virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
547       QStandardItem * itemFromIndex ( const QModelIndex & index ) const;
548     };
549
550
551     class  GroupsModel : public QSortFilterProxyModel
552     {
553     public:
554       GroupsModel( QObject * parent = 0 );
555       virtual ~GroupsModel();
556
557       virtual Qt::ItemFlags flags(const QModelIndex &index) const;
558       virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
559       QStandardItem * itemFromIndex ( const QModelIndex & index ) const;
560
561       QModelIndexList getGroupElements( const QModelIndex& iGroup, DocumentModel::Group& kind ) const;
562     };
563
564
565     class  MeshModel : public QSortFilterProxyModel
566     {
567     public:
568       MeshModel( QObject * parent = 0 );
569       virtual ~MeshModel();
570
571       virtual Qt::ItemFlags flags(const QModelIndex &index) const;
572       virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const;
573       QStandardItem * itemFromIndex ( const QModelIndex & index ) const;
574
575
576       QModelIndexList getPropagation( const QModelIndex& iPropagation ) const;
577     }; 
578
579   }
580 }
581
582 #endif