- SALOMEDS::SObject_var aSObj = anIter->Value();
- if(i >= 4){
- SALOMEDS::ChildIterator_var anIter1 = aStudy->NewChildIterator(aSObj);
- for(; anIter1->More(); anIter1->Next()){
- SALOMEDS::SObject_var aSObj1 = anIter1->Value();
- anAttr = aBuilder->FindOrCreateAttribute(aSObj1,"AttributePixMap");
- aPixmap = SALOMEDS::AttributePixMap::_narrow(anAttr);
- if(theIsRight){
- aPixmap->SetPixMap("ICON_SMESH_TREE_MESH");
- }else{
- aPixmap->SetPixMap("ICON_SMESH_TREE_MESH_WARN");
- }
- }
+ _PTR(SObject) aSObj = anIter->Value();
+ if (i >= 4) {
+ _PTR(ChildIterator) anIter1 = aStudy->NewChildIterator(aSObj);
+ for ( ; anIter1->More(); anIter1->Next())
+ {
+ _PTR(SObject) aSObj1 = anIter1->Value();
+
+ anAttr = aBuilder->FindOrCreateAttribute(aSObj1, "AttributePixMap");
+ aPixmap = anAttr;
+
+ std::string entry = aSObj1->GetID();
+ int objType = SMESHGUI_Selection::type( entry.c_str(), aStudy );
+
+ SMESH::SMESH_IDSource_var idSrc = SObjectToInterface<SMESH::SMESH_IDSource>( aSObj1 );
+ if ( !idSrc->_is_nil() )
+ {
+ SMESH::SMESH_GroupOnFilter_var gof =
+ SObjectToInterface<SMESH::SMESH_GroupOnFilter>( 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" );
+ }
+ }