1 // Copyright (C) 2009-2014 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, or (at your option) any later version.
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_SalomeTools.hxx"
21 #include "HEXABLOCKGUI_DocumentItem.hxx"
22 #include "HexShape.hxx"
24 #include "HEXABLOCKGUI_DocumentModel.hxx"
25 #include "HexAssoEdge.hxx"
32 using namespace HEXABLOCK::GUI;
34 // ElementItem --------------------------------------------------
35 ElementItem::ElementItem( HEXA_NS::EltBase* docElement, QString entry, HexaType ttype, HexaTreeRole treeRole):
38 m_DocElt = docElement;
43 setText(m_DocElt->getName());
44 if ( m_DocElt->isAssociated() )
45 setData(Qt::darkGreen, Qt::ForegroundRole);
47 setData( treeRole, HEXA_TREE_ROLE );
48 setData( entry, HEXA_DOC_ENTRY_ROLE);
49 setData( IDptr(), HEXA_ENTRY_ROLE );
52 if (m_DocElt!=NULL && m_DocElt->isAssociated())
55 if (m_type == VERTEXITEM) //Vertex
57 HEXA_NS::Vertex* vertex = (HEXA_NS::Vertex*) m_DocElt;
58 HEXA_NS::VertexShape* assoc = vertex->getAssociation();
61 HEXA_NS::NewShape* mainSh = assoc->getParentShape();
64 entry = QString(mainSh->getName())+","+QString::number(assoc->getIdent())+";";
65 setData( entry, HEXA_ASSOC_ENTRY_ROLE );
69 else if (m_type == EDGEITEM)
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)
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())+";";
87 if ( !entries.isEmpty() )
88 setData( entries, HEXA_ASSOC_ENTRY_ROLE );
90 else if (m_type == QUADITEM)
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)
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()) + ";";
105 if ( !entries.isEmpty() )
106 setData( entries, HEXA_ASSOC_ENTRY_ROLE );
111 //---------------------------------------------------------------
112 QVariant ElementItem::data( int role ) const
114 if ( role == HEXA_DATA_ROLE ){
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 );
134 if (role == Qt::ForegroundRole && m_DocElt != NULL && !m_DocElt->isAssociated())
135 return QColor(Qt::black);
137 return QStandardItem::data( role );
140 //---------------------------------------------------------------
141 void ElementItem::setData ( const QVariant& valcont, int role )
143 if ( role == HEXA_DATA_ROLE ){
144 m_DocElt = valcont.value<HEXA_NS::EltBase*>();
148 QStandardItem::setData ( valcont, role );
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) ); }
159 // ----------------------- VERTEX (DATA)
160 VertexItem::VertexItem( HEXA_NS::Vertex* hexaVertex, QString entry):
161 GraphicElementItem(hexaVertex, entry, VERTEXITEM, VERTEX_TREE)
165 // ----------------------- EDGE (DATA)
166 EdgeItem::EdgeItem( HEXA_NS::Edge* hexaEdge, QString entry ):
167 GraphicElementItem(hexaEdge, entry, EDGEITEM, EDGE_TREE)
171 // ----------------------- QUAD (DATA)
172 QuadItem::QuadItem( HEXA_NS::Quad* hexaQuad, QString entry):
173 GraphicElementItem(hexaQuad, entry, QUADITEM, QUAD_TREE)
177 // ----------------------- HEXA (DATA)
178 HexaItem::HexaItem( HEXA_NS::Hexa* hexaHexa , QString entry):
179 GraphicElementItem(hexaHexa,entry, HEXAITEM, HEXA_TREE)
183 // ----------------------- VECTOR (BUILDER)
184 VectorItem::VectorItem( HEXA_NS::Vector* hexaVector, QString entry ):
185 StandardElementItem(hexaVector, entry, VECTORITEM, VECTOR_TREE)
189 //// ----------------------- CYLINDER (BUILDER)
190 //CylinderItem::CylinderItem( HEXA_NS::Cylinder* hexaCylinder, QString entry):
191 // StandardElementItem(hexaCylinder, entry, CYLINDERITEM, CYLINDER_TREE)
195 //// ----------------------- PIPE (BUILDER)
196 //PipeItem::PipeItem( HEXA_NS::Pipe* hexaPipe, QString entry ):
197 // StandardElementItem(hexaPipe, entry, PIPEITEM, PIPE_TREE)
201 // ----------------------- ELEMENTS (NOT USED)
202 ElementsItem::ElementsItem( HEXA_NS::Elements* hexaElements, QString entry ):
203 StandardElementItem(hexaElements, entry, ELEMENTSITEM, ELEMENTS_TREE)
207 // ----------------------- CROSSELEMENTS (NOT USED)
208 //CrossElementsItem::CrossElementsItem( HEXA_NS::CrossElements* hexaCrossElts, QString entry ):
209 // StandardElementItem(hexaCrossElts, entry, CROSSELEMENTSITEM, CROSSELEMENTS_TREE)
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),
220 // ----------------------- GEOM SHAPE (GEOMETRY)
221 GeomShapeItem::GeomShapeItem( HEXA_NS::NewShape* shape, HEXA_NS::EltBase* assoc ):
222 GeomItem(shape, QString(), GEOMSHAPEITEM, GEOMSHAPE_TREE, assoc)
226 // ----------------------- GEOM POINT (GEOMETRY)
227 GeomPointItem::GeomPointItem( HEXA_NS::VertexShape* geomPoint, HEXA_NS::Vertex* associatedVertex ):
228 GeomItem(geomPoint, QString(), GEOMPOINTITEM, GEOMPOINT_TREE, associatedVertex)
232 // ----------------------- GEOM EDGE (GEOMETRY)
233 GeomEdgeItem::GeomEdgeItem( HEXA_NS::EdgeShape* geomEdge, HEXA_NS::Edge* associatedEdge ):
234 GeomItem(geomEdge, QString(), GEOMEDGEITEM, GEOMEDGE_TREE, associatedEdge)
238 // ----------------------- GEOM FACE (GEOMETRY)
239 GeomFaceItem::GeomFaceItem( HEXA_NS::FaceShape* geomFace, HEXA_NS::Quad* associatedQuad ):
240 GeomItem(geomFace, QString(), GEOMFACEITEM, GEOMFACE_TREE, associatedQuad)
244 // ----------------------- GROUP
245 GroupItem::GroupItem( HEXA_NS::Group* hexaGroup ):
247 _hexaGroup( hexaGroup )
250 QString name = _hexaGroup->getName();//pName);
252 setData( GROUP_TREE, HEXA_TREE_ROLE );
253 setData( QString::number(reinterpret_cast<intptr_t>(_hexaGroup)), HEXA_ENTRY_ROLE );
256 int GroupItem::type() const
261 QVariant GroupItem::data( int role ) const
263 if ( role == HEXA_DATA_ROLE ){
264 return QVariant::fromValue( _hexaGroup );
266 return QStandardItem::data( role );
270 void GroupItem::setData ( const QVariant& value, int role )
272 if ( role == HEXA_DATA_ROLE ){
273 _hexaGroup = value.value<HEXA_NS::Group*>();
276 QStandardItem::setData ( value, role );
282 // ----------------------- LAW
283 LawItem::LawItem( HEXA_NS::Law* hexaLaw ):
288 QString name = _hexaLaw->getName();//pName);
290 setData( LAW_TREE, HEXA_TREE_ROLE );
291 setData( QString::number(reinterpret_cast<intptr_t>(_hexaLaw)), HEXA_ENTRY_ROLE );
294 int LawItem::type() const
299 QVariant LawItem::data( int role ) const
301 if ( role == HEXA_DATA_ROLE ){
302 return QVariant::fromValue( _hexaLaw);
304 return QStandardItem::data( role );
308 void LawItem::setData ( const QVariant & value, int role )
310 if ( role == HEXA_DATA_ROLE ){
311 _hexaLaw = value.value<HEXA_NS::Law*>();
314 QStandardItem::setData ( value, role );
320 // ----------------------- PROPAGATIONITEM
321 PropagationItem::PropagationItem( HEXA_NS::Propagation* hexaPropagation ):
323 _hexaPropagation( hexaPropagation )
325 QString name = "Propagation";
327 setData( PROPAGATION_TREE, HEXA_TREE_ROLE );
328 setData( QString::number(reinterpret_cast<intptr_t>(_hexaPropagation)), HEXA_ENTRY_ROLE );
331 int PropagationItem::type() const
333 return PROPAGATIONITEM;
336 QVariant PropagationItem::data( int role ) const
338 if ( role == HEXA_DATA_ROLE ){
339 return QVariant::fromValue( _hexaPropagation );
341 return QStandardItem::data( role );
345 void PropagationItem::setData ( const QVariant & value, int role )
347 if ( role == HEXA_DATA_ROLE ){
348 _hexaPropagation = value.value<HEXA_NS::Propagation*>();
351 QStandardItem::setData ( value, role );
354 //-------------------------------------------------