X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Utils.cxx;h=94ef5c93b6b896f44ebfdc9a3c60079116e361bf;hb=6adaa05a566d145a77999117cd32e04c04ef503e;hp=638fc47bf6732d1dbdf879acd739581d9735d2d6;hpb=2c607013a23bd4e7ba07e72e0c04dee2c1209cff;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_Utils.cxx b/src/SMESHGUI/SMESHGUI_Utils.cxx index 638fc47bf..94ef5c93b 100644 --- a/src/SMESHGUI/SMESHGUI_Utils.cxx +++ b/src/SMESHGUI/SMESHGUI_Utils.cxx @@ -1,4 +1,4 @@ -// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2012 CEA/DEN, EDF R&D, OPEN CASCADE // // Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS @@ -27,6 +27,8 @@ // #include "SMESHGUI_Utils.h" #include "SMESHGUI.h" +#include "SMESHGUI_Selection.h" +#include "SMESH_Type.h" #include #include @@ -48,6 +50,8 @@ #include #include +#include CORBA_SERVER_HEADER(SMESH_Group) + namespace SMESH { SUIT_Desktop* @@ -248,7 +252,7 @@ namespace SMESH int aNbSel = selected.Extent(); if (aNbSel == 1) { Handle(SALOME_InteractiveObject) anIObject = selected.First(); - theName = anIObject->getName(); + theName = QString( anIObject->getName() ).trimmed(); } else { theName = QObject::tr("SMESH_OBJECTS_SELECTED").arg(aNbSel); } @@ -279,29 +283,61 @@ namespace SMESH _PTR(GenericAttribute) anAttr = aBuilder->FindOrCreateAttribute(theSObject,"AttributePixMap"); _PTR(AttributePixMap) aPixmap = anAttr; - if (theIsNotModif) { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH"); - } else if ( isEmptyMesh ) { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN"); - } else { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_PARTIAL"); - } + + std::string pmName; + if (theIsNotModif) + pmName = "ICON_SMESH_TREE_MESH"; + else if ( isEmptyMesh ) + pmName = "ICON_SMESH_TREE_MESH_WARN"; + else + pmName = "ICON_SMESH_TREE_MESH_PARTIAL"; + aPixmap->SetPixMap( pmName ); _PTR(ChildIterator) anIter = aStudy->NewChildIterator(theSObject); for (int i = 1; anIter->More(); anIter->Next(), i++) { _PTR(SObject) aSObj = anIter->Value(); if (i >= 4) { _PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj); - for ( ; anIter1->More(); anIter1->Next()) { + for ( ; anIter1->More(); anIter1->Next()) + { _PTR(SObject) aSObj1 = anIter1->Value(); + anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap"); aPixmap = anAttr; - if (theIsNotModif) { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH"); - } else if ( isEmptyMesh ) { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN"); - } else { - aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_PARTIAL"); + + std::string entry = aSObj1->GetID(); + int objType = SMESHGUI_Selection::type( entry.c_str(), aStudy ); + + SMESH::SMESH_IDSource_var idSrc = SObjectToInterface( aSObj1 ); + if ( !idSrc->_is_nil() ) + { + SMESH::SMESH_GroupOnFilter_var gof = + SObjectToInterface( aSObj1 ); + const bool isGroupOnFilter = !gof->_is_nil(); + + bool isEmpty = false; + if ( !isGroupOnFilter ) // GetTypes() can be very long on isGroupOnFilter! + { + SMESH::array_of_ElementType_var elemTypes = idSrc->GetTypes(); + isEmpty = ( elemTypes->length() == 0 ); + } + if ( isEmpty ) + aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN"); + else if ( objType != GROUP ) + aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" ); + else if ( isGroupOnFilter ) + aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP_ON_FILTER" ); + else + aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP" ); + } + else + { + if ( !theIsNotModif ) + aPixmap->SetPixMap( pmName ); + else if ( objType == GROUP ) + aPixmap->SetPixMap( "ICON_SMESH_TREE_GROUP" ); + else + aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH" ); } } }