Salome HOME
Merge from V6_main 01/04/2013
[modules/hexablock.git] / src / HEXABLOCKGUI / HEXABLOCKGUI_DocumentItem.cxx
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 #include "HEXABLOCKGUI_DocumentItem.hxx"
21 #include "HexShape.hxx"
22 #include "HEXABLOCKGUI_SalomeTools.hxx"
23 #include "HEXABLOCKGUI_DocumentModel.hxx"
24 #include "HexAssoEdge.hxx"
25
26 #include <inttypes.h>
27
28 using namespace std;
29 using namespace HEXABLOCK::GUI;
30
31 // ElementItem --------------------------------------------------
32 ElementItem::ElementItem( HEXA_NS::EltBase* docElement, QString entry, HexaType ttype, HexaTreeRole treeRole):
33 QStandardItem()
34 {
35         m_DocElt = docElement;
36         m_type   = ttype;
37
38         if (m_DocElt != NULL)
39         {
40                 setText(m_DocElt->getName());
41         }
42         setData( treeRole,    HEXA_TREE_ROLE );
43         setData( entry,       HEXA_DOC_ENTRY_ROLE);
44         setData( IDptr(),     HEXA_ENTRY_ROLE );
45
46         //Init assocs entry
47         if (m_DocElt!=NULL && m_DocElt->isAssociated())
48         {
49                 QString entry;
50                 if (m_type == VERTEXITEM) //Vertex
51                 {
52                     HEXA_NS::Vertex* vertex = (HEXA_NS::Vertex*) m_DocElt;
53                     double assocX, assocY, assocZ;
54                         vertex->getAssoCoord(assocX, assocY, assocZ);
55                         entry = QString::number(assocX)+","+QString::number(assocY)+","+QString::number(assocZ);
56                         setData( entry, HEXA_ASSOC_ENTRY_ROLE );
57                 }
58                 else if (m_type == EDGEITEM)
59                 {
60                         QString entries;
61                         HEXA_NS::Edge* edge = (HEXA_NS::Edge*) m_DocElt;
62                         HEXA_NS::NewShape* mainShape;
63                         HEXA_NS::EdgeShape* geomEdge;
64                         HEXA_NS::AssoEdge* anEdgeAssoc;
65                         int nbAssocs = edge->countAssociation();
66                         for (int i = 0; i < nbAssocs; ++i)
67                         {
68                             anEdgeAssoc = edge->getAssociation(i);
69                             if (anEdgeAssoc == NULL) continue;
70                             geomEdge = anEdgeAssoc->getEdgeShape();
71                             if (geomEdge == NULL) continue;
72                             mainShape = geomEdge->getParentShape();
73                             if (mainShape == NULL) continue;    // => les generatrices ne sont pas gerees pour le moment
74                             entries += QString(mainShape->getName())+","+QString::number(geomEdge->getIdent())+";";
75                         }
76                         if ( !entries.isEmpty() )
77                                 setData( entries, HEXA_ASSOC_ENTRY_ROLE );
78                 }
79                 else if (m_type == QUADITEM)
80                 {
81                         QString entries;
82                         HEXA_NS::Quad* quad = (HEXA_NS::Quad*) m_DocElt;
83                         HEXA_NS::NewShape* mainShape;
84                         HEXA_NS::FaceShape* geomFace;
85                         int nbAssocs = quad->countAssociation();
86                         for (int i = 0; i < nbAssocs; ++i)
87                         {
88                             geomFace = quad->getAssociation(i);
89                             if (geomFace == NULL) continue;
90                             mainShape = geomFace->getParentShape();
91                             if (mainShape == NULL) continue;
92                             entries += QString(mainShape->getName()) + "," + QString::number(geomFace->getIdent()) + ";";
93                         }
94                         if ( !entries.isEmpty() )
95                                 setData( entries, HEXA_ASSOC_ENTRY_ROLE );
96                 }
97         }
98 }
99
100 //---------------------------------------------------------------
101 QVariant ElementItem::data( int role ) const
102 {
103         if ( role == HEXA_DATA_ROLE ){
104                 switch(m_type)
105                 {
106                 case VERTEXITEM: return QVariant::fromValue( (HEXA_NS::Vertex*)m_DocElt );
107                 case EDGEITEM: return QVariant::fromValue( (HEXA_NS::Edge*)m_DocElt );
108                 case QUADITEM: return QVariant::fromValue( (HEXA_NS::Quad*)m_DocElt );
109                 case HEXAITEM: return QVariant::fromValue( (HEXA_NS::Hexa*)m_DocElt );
110                 case VECTORITEM: return QVariant::fromValue( (HEXA_NS::Vector*)m_DocElt );
111                 case CYLINDERITEM: return QVariant::fromValue( (HEXA_NS::Cylinder*)m_DocElt );
112                 case PIPEITEM: return QVariant::fromValue( (HEXA_NS::Pipe*)m_DocElt );
113                 case ELEMENTSITEM: return QVariant::fromValue( (HEXA_NS::Elements*)m_DocElt );
114                 case CROSSELEMENTSITEM: return QVariant::fromValue( (HEXA_NS::CrossElements*)m_DocElt );
115                 case GEOMSHAPEITEM: return QVariant::fromValue( (HEXA_NS::NewShape*) m_DocElt );
116                 case GEOMPOINTITEM: return QVariant::fromValue( (HEXA_NS::VertexShape*) m_DocElt );
117                 case GEOMEDGEITEM:  return QVariant::fromValue( (HEXA_NS::EdgeShape*) m_DocElt );
118                 case GEOMFACEITEM:  return QVariant::fromValue( (HEXA_NS::FaceShape*) m_DocElt );
119                 default: return QVariant::fromValue( m_DocElt );
120                 }
121         }
122
123         if (role == Qt::ForegroundRole ) {
124                 if ( m_DocElt->isAssociated() )
125                         return QColor(Qt::darkGreen);
126                 else
127                         return QColor(Qt::black);
128         }
129         return QStandardItem::data( role );
130 }
131
132 //---------------------------------------------------------------
133 void ElementItem::setData ( const QVariant& valcont, int role )
134 {
135         if ( role == HEXA_DATA_ROLE ){
136                 m_DocElt = valcont.value<HEXA_NS::EltBase*>();
137                 emitDataChanged ();
138
139         } else {
140                 QStandardItem::setData ( valcont, role );
141         }
142 }
143 //---------------------------------------------------------------
144 int ElementItem::type () const {return m_type;}
145 //---------------------------------------------------------------
146 bool ElementItem::isAssoc () const {return m_DocElt->isAssociated();}
147 //---------------------------------------------------------------
148 QString ElementItem::IDptr() const {  return QString::number( reinterpret_cast<intptr_t>(m_DocElt) ); }
149
150
151 // ----------------------- VERTEX (DATA)
152 VertexItem::VertexItem( HEXA_NS::Vertex* hexaVertex, QString entry):
153                 GraphicElementItem(hexaVertex, entry, VERTEXITEM, VERTEX_TREE)
154 {
155 }
156
157 // ----------------------- EDGE   (DATA)
158 EdgeItem::EdgeItem( HEXA_NS::Edge* hexaEdge, QString entry ):
159                 GraphicElementItem(hexaEdge, entry, EDGEITEM, EDGE_TREE)
160 {
161 }
162
163 // ----------------------- QUAD   (DATA)
164 QuadItem::QuadItem( HEXA_NS::Quad* hexaQuad, QString entry):
165                 GraphicElementItem(hexaQuad, entry, QUADITEM, QUAD_TREE)
166 {
167 }
168
169 // ----------------------- HEXA   (DATA)
170 HexaItem::HexaItem( HEXA_NS::Hexa* hexaHexa , QString entry):
171                 GraphicElementItem(hexaHexa,entry, HEXAITEM, HEXA_TREE)
172 {
173 }
174
175 // ----------------------- VECTOR   (BUILDER)
176 VectorItem::VectorItem( HEXA_NS::Vector* hexaVector, QString entry ):
177                 StandardElementItem(hexaVector, entry, VECTORITEM, VECTOR_TREE)
178 {
179 }
180
181 // ----------------------- CYLINDER (BUILDER)
182 CylinderItem::CylinderItem( HEXA_NS::Cylinder* hexaCylinder, QString entry):
183                 StandardElementItem(hexaCylinder, entry, CYLINDERITEM, CYLINDER_TREE)
184 {
185 }
186
187 // ----------------------- PIPE     (BUILDER)
188 PipeItem::PipeItem( HEXA_NS::Pipe* hexaPipe, QString entry ):
189                 StandardElementItem(hexaPipe, entry, PIPEITEM, PIPE_TREE)
190 {
191 }
192
193 // ----------------------- ELEMENTS      (NOT USED)
194 ElementsItem::ElementsItem( HEXA_NS::Elements* hexaElements, QString entry ):
195                 StandardElementItem(hexaElements, entry, ELEMENTSITEM, ELEMENTS_TREE)
196 {
197 }
198
199 // ----------------------- CROSSELEMENTS (NOT USED)
200 CrossElementsItem::CrossElementsItem( HEXA_NS::CrossElements* hexaCrossElts, QString entry ):
201                 StandardElementItem(hexaCrossElts, entry, CROSSELEMENTSITEM, CROSSELEMENTS_TREE)
202 {
203 }
204
205 // ----------------------- GEOM     (GEOMETRY)
206 GeomItem::GeomItem( HEXA_NS::EltBase* geomShape, QString entry, HexaType ttype, HexaTreeRole treeRole, HEXA_NS::EltBase* assoc ):
207         StandardElementItem(geomShape, entry, ttype, treeRole),
208         association(assoc)
209 {
210 }
211
212 // ----------------------- GEOM SHAPE     (GEOMETRY)
213 GeomShapeItem::GeomShapeItem( HEXA_NS::NewShape* shape, HEXA_NS::EltBase* assoc ):
214         GeomItem(shape, QString(), GEOMSHAPEITEM, GEOMSHAPE_TREE, assoc)
215 {
216 }
217
218 // ----------------------- GEOM POINT     (GEOMETRY)
219 GeomPointItem::GeomPointItem( HEXA_NS::VertexShape* geomPoint, HEXA_NS::Vertex* associatedVertex ):
220         GeomItem(geomPoint, QString(), GEOMPOINTITEM, GEOMPOINT_TREE, associatedVertex)
221 {
222 }
223
224 // ----------------------- GEOM EDGE     (GEOMETRY)
225 GeomEdgeItem::GeomEdgeItem( HEXA_NS::EdgeShape* geomEdge, HEXA_NS::Edge* associatedEdge ):
226         GeomItem(geomEdge, QString(), GEOMEDGEITEM, GEOMEDGE_TREE, associatedEdge)
227 {
228 }
229
230 // ----------------------- GEOM FACE     (GEOMETRY)
231 GeomFaceItem::GeomFaceItem( HEXA_NS::FaceShape* geomFace, HEXA_NS::Quad* associatedQuad ):
232         GeomItem(geomFace, QString(), GEOMFACEITEM, GEOMFACE_TREE, associatedQuad)
233 {
234 }
235
236 // ----------------------- GROUP
237 GroupItem::GroupItem( HEXA_NS::Group* hexaGroup ):
238   QStandardItem(),
239   _hexaGroup( hexaGroup )
240 {
241 //   char pName[12];
242   QString name = _hexaGroup->getName();//pName);
243   setText(name);
244   setData( GROUP_TREE, HEXA_TREE_ROLE );
245   setData( QString::number(reinterpret_cast<intptr_t>(_hexaGroup)), HEXA_ENTRY_ROLE );
246 }
247
248 int GroupItem::type() const
249 {
250   return GROUPITEM;
251 }
252
253 QVariant GroupItem::data( int role ) const
254 {
255     if ( role == HEXA_DATA_ROLE ){
256       return QVariant::fromValue( _hexaGroup );
257     } else {
258       return QStandardItem::data( role );
259     }
260 }
261
262 void GroupItem::setData ( const QVariant& value, int role )
263 {
264     if ( role == HEXA_DATA_ROLE ){
265       _hexaGroup = value.value<HEXA_NS::Group*>();
266       emitDataChanged ();
267     } else {
268       QStandardItem::setData ( value, role );
269     }
270 }
271
272
273
274 // ----------------------- LAW
275 LawItem::LawItem( HEXA_NS::Law* hexaLaw ):
276   QStandardItem(),
277   _hexaLaw( hexaLaw )
278 {
279 //   char pName[12];
280   QString name = _hexaLaw->getName();//pName);
281   setText(name);
282   setData( LAW_TREE, HEXA_TREE_ROLE );
283   setData( QString::number(reinterpret_cast<intptr_t>(_hexaLaw)), HEXA_ENTRY_ROLE );
284 }
285
286 int LawItem::type() const
287 {
288   return LAWITEM;
289 }
290
291 QVariant LawItem::data( int role ) const
292 {
293     if ( role == HEXA_DATA_ROLE ){
294       return QVariant::fromValue( _hexaLaw);
295     } else {
296       return QStandardItem::data( role );
297     }
298 }
299
300 void LawItem::setData ( const QVariant & value, int role )
301 {
302     if ( role == HEXA_DATA_ROLE ){
303       _hexaLaw = value.value<HEXA_NS::Law*>();
304       emitDataChanged ();
305     } else {
306       QStandardItem::setData ( value, role );
307     }
308 }
309
310
311
312 // ----------------------- PROPAGATIONITEM
313 PropagationItem::PropagationItem( HEXA_NS::Propagation* hexaPropagation ):
314   QStandardItem(),
315   _hexaPropagation( hexaPropagation )
316 {
317 //   char pName[12];
318 //   QString name = _hexaPropagation->getName(pName);
319   QString name = "Propagation";
320   setText(name);
321   setData( PROPAGATION_TREE, HEXA_TREE_ROLE );
322   setData( QString::number(reinterpret_cast<intptr_t>(_hexaPropagation)), HEXA_ENTRY_ROLE );
323 }
324
325 int PropagationItem::type() const
326 {
327   return PROPAGATIONITEM;
328 }
329
330 QVariant PropagationItem::data( int role ) const
331 {
332     if ( role == HEXA_DATA_ROLE ){
333       return QVariant::fromValue( _hexaPropagation );
334     } else {
335       return QStandardItem::data( role );
336     }
337 }
338
339 void PropagationItem::setData ( const QVariant & value, int role )
340 {
341     if ( role == HEXA_DATA_ROLE ){
342       _hexaPropagation = value.value<HEXA_NS::Propagation*>();
343       emitDataChanged ();
344     } else {
345       QStandardItem::setData ( value, role );
346     }
347 }
348 //-------------------------------------------------
349
350