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