1 // Copyright (C) 2009-2013 CEA/DEN, EDF R&D
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.
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.
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
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #include "HEXABLOCKGUI_DocumentItem.hxx"
21 #include "HexShape.hxx"
22 #include "HEXABLOCKGUI_SalomeTools.hxx"
23 #include "HEXABLOCKGUI_DocumentModel.hxx"
24 #include "HexAssoEdge.hxx"
29 using namespace HEXABLOCK::GUI;
31 // ElementItem --------------------------------------------------
32 ElementItem::ElementItem( HEXA_NS::EltBase* docElement, QString entry, HexaType ttype, HexaTreeRole treeRole):
35 m_DocElt = docElement;
40 setText(m_DocElt->getName());
42 setData( treeRole, HEXA_TREE_ROLE );
43 setData( entry, HEXA_DOC_ENTRY_ROLE);
44 setData( IDptr(), HEXA_ENTRY_ROLE );
47 if (m_DocElt!=NULL && m_DocElt->isAssociated())
50 if (m_type == VERTEXITEM) //Vertex
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 );
58 else if (m_type == EDGEITEM)
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)
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())+";";
76 if ( !entries.isEmpty() )
77 setData( entries, HEXA_ASSOC_ENTRY_ROLE );
79 else if (m_type == QUADITEM)
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)
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()) + ";";
94 if ( !entries.isEmpty() )
95 setData( entries, HEXA_ASSOC_ENTRY_ROLE );
100 //---------------------------------------------------------------
101 QVariant ElementItem::data( int role ) const
103 if ( role == HEXA_DATA_ROLE ){
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 );
123 if (role == Qt::ForegroundRole ) {
124 if ( m_DocElt->isAssociated() )
125 return QColor(Qt::darkGreen);
127 return QColor(Qt::black);
129 return QStandardItem::data( role );
132 //---------------------------------------------------------------
133 void ElementItem::setData ( const QVariant& valcont, int role )
135 if ( role == HEXA_DATA_ROLE ){
136 m_DocElt = valcont.value<HEXA_NS::EltBase*>();
140 QStandardItem::setData ( valcont, role );
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) ); }
151 // ----------------------- VERTEX (DATA)
152 VertexItem::VertexItem( HEXA_NS::Vertex* hexaVertex, QString entry):
153 GraphicElementItem(hexaVertex, entry, VERTEXITEM, VERTEX_TREE)
157 // ----------------------- EDGE (DATA)
158 EdgeItem::EdgeItem( HEXA_NS::Edge* hexaEdge, QString entry ):
159 GraphicElementItem(hexaEdge, entry, EDGEITEM, EDGE_TREE)
163 // ----------------------- QUAD (DATA)
164 QuadItem::QuadItem( HEXA_NS::Quad* hexaQuad, QString entry):
165 GraphicElementItem(hexaQuad, entry, QUADITEM, QUAD_TREE)
169 // ----------------------- HEXA (DATA)
170 HexaItem::HexaItem( HEXA_NS::Hexa* hexaHexa , QString entry):
171 GraphicElementItem(hexaHexa,entry, HEXAITEM, HEXA_TREE)
175 // ----------------------- VECTOR (BUILDER)
176 VectorItem::VectorItem( HEXA_NS::Vector* hexaVector, QString entry ):
177 StandardElementItem(hexaVector, entry, VECTORITEM, VECTOR_TREE)
181 // ----------------------- CYLINDER (BUILDER)
182 CylinderItem::CylinderItem( HEXA_NS::Cylinder* hexaCylinder, QString entry):
183 StandardElementItem(hexaCylinder, entry, CYLINDERITEM, CYLINDER_TREE)
187 // ----------------------- PIPE (BUILDER)
188 PipeItem::PipeItem( HEXA_NS::Pipe* hexaPipe, QString entry ):
189 StandardElementItem(hexaPipe, entry, PIPEITEM, PIPE_TREE)
193 // ----------------------- ELEMENTS (NOT USED)
194 ElementsItem::ElementsItem( HEXA_NS::Elements* hexaElements, QString entry ):
195 StandardElementItem(hexaElements, entry, ELEMENTSITEM, ELEMENTS_TREE)
199 // ----------------------- CROSSELEMENTS (NOT USED)
200 CrossElementsItem::CrossElementsItem( HEXA_NS::CrossElements* hexaCrossElts, QString entry ):
201 StandardElementItem(hexaCrossElts, entry, CROSSELEMENTSITEM, CROSSELEMENTS_TREE)
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),
212 // ----------------------- GEOM SHAPE (GEOMETRY)
213 GeomShapeItem::GeomShapeItem( HEXA_NS::NewShape* shape, HEXA_NS::EltBase* assoc ):
214 GeomItem(shape, QString(), GEOMSHAPEITEM, GEOMSHAPE_TREE, assoc)
218 // ----------------------- GEOM POINT (GEOMETRY)
219 GeomPointItem::GeomPointItem( HEXA_NS::VertexShape* geomPoint, HEXA_NS::Vertex* associatedVertex ):
220 GeomItem(geomPoint, QString(), GEOMPOINTITEM, GEOMPOINT_TREE, associatedVertex)
224 // ----------------------- GEOM EDGE (GEOMETRY)
225 GeomEdgeItem::GeomEdgeItem( HEXA_NS::EdgeShape* geomEdge, HEXA_NS::Edge* associatedEdge ):
226 GeomItem(geomEdge, QString(), GEOMEDGEITEM, GEOMEDGE_TREE, associatedEdge)
230 // ----------------------- GEOM FACE (GEOMETRY)
231 GeomFaceItem::GeomFaceItem( HEXA_NS::FaceShape* geomFace, HEXA_NS::Quad* associatedQuad ):
232 GeomItem(geomFace, QString(), GEOMFACEITEM, GEOMFACE_TREE, associatedQuad)
236 // ----------------------- GROUP
237 GroupItem::GroupItem( HEXA_NS::Group* hexaGroup ):
239 _hexaGroup( hexaGroup )
242 QString name = _hexaGroup->getName();//pName);
244 setData( GROUP_TREE, HEXA_TREE_ROLE );
245 setData( QString::number(reinterpret_cast<intptr_t>(_hexaGroup)), HEXA_ENTRY_ROLE );
248 int GroupItem::type() const
253 QVariant GroupItem::data( int role ) const
255 if ( role == HEXA_DATA_ROLE ){
256 return QVariant::fromValue( _hexaGroup );
258 return QStandardItem::data( role );
262 void GroupItem::setData ( const QVariant& value, int role )
264 if ( role == HEXA_DATA_ROLE ){
265 _hexaGroup = value.value<HEXA_NS::Group*>();
268 QStandardItem::setData ( value, role );
274 // ----------------------- LAW
275 LawItem::LawItem( HEXA_NS::Law* hexaLaw ):
280 QString name = _hexaLaw->getName();//pName);
282 setData( LAW_TREE, HEXA_TREE_ROLE );
283 setData( QString::number(reinterpret_cast<intptr_t>(_hexaLaw)), HEXA_ENTRY_ROLE );
286 int LawItem::type() const
291 QVariant LawItem::data( int role ) const
293 if ( role == HEXA_DATA_ROLE ){
294 return QVariant::fromValue( _hexaLaw);
296 return QStandardItem::data( role );
300 void LawItem::setData ( const QVariant & value, int role )
302 if ( role == HEXA_DATA_ROLE ){
303 _hexaLaw = value.value<HEXA_NS::Law*>();
306 QStandardItem::setData ( value, role );
312 // ----------------------- PROPAGATIONITEM
313 PropagationItem::PropagationItem( HEXA_NS::Propagation* hexaPropagation ):
315 _hexaPropagation( hexaPropagation )
318 // QString name = _hexaPropagation->getName(pName);
319 QString name = "Propagation";
321 setData( PROPAGATION_TREE, HEXA_TREE_ROLE );
322 setData( QString::number(reinterpret_cast<intptr_t>(_hexaPropagation)), HEXA_ENTRY_ROLE );
325 int PropagationItem::type() const
327 return PROPAGATIONITEM;
330 QVariant PropagationItem::data( int role ) const
332 if ( role == HEXA_DATA_ROLE ){
333 return QVariant::fromValue( _hexaPropagation );
335 return QStandardItem::data( role );
339 void PropagationItem::setData ( const QVariant & value, int role )
341 if ( role == HEXA_DATA_ROLE ){
342 _hexaPropagation = value.value<HEXA_NS::Propagation*>();
345 QStandardItem::setData ( value, role );
348 //-------------------------------------------------