X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_Utils.cxx;h=94ef5c93b6b896f44ebfdc9a3c60079116e361bf;hb=5aee18a1d4c8b81b38c613cc8d1f9b06c9014841;hp=7c6b279c4694850b2820b734fd1dfb176e21c900;hpb=7af78cc3d0b95ec53ab6ec83a92b1df4a9fb6b2a;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_Utils.cxx b/src/SMESHGUI/SMESHGUI_Utils.cxx index 7c6b279c4..94ef5c93b 100644 --- a/src/SMESHGUI/SMESHGUI_Utils.cxx +++ b/src/SMESHGUI/SMESHGUI_Utils.cxx @@ -1,24 +1,25 @@ -// Copyright (C) 2007-2008 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 +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + // SMESH SMESHGUI : GUI for SMESH component // File : SMESHGUI_Utils.cxx // Author : Open CASCADE S.A.S. @@ -26,6 +27,8 @@ // #include "SMESHGUI_Utils.h" #include "SMESHGUI.h" +#include "SMESHGUI_Selection.h" +#include "SMESH_Type.h" #include #include @@ -47,6 +50,8 @@ #include #include +#include CORBA_SERVER_HEADER(SMESH_Group) + namespace SMESH { SUIT_Desktop* @@ -189,7 +194,10 @@ namespace SMESH if (theSObject->FindAttribute(anAttr, "AttributeIOR")) { _PTR(AttributeIOR) anIOR = anAttr; CORBA::String_var aVal = anIOR->Value().c_str(); - return app->orb()->string_to_object(aVal); + // string_to_object() DOC: If the input string is not valid ... + // a CORBA::SystemException is thrown. + if ( aVal && strlen( aVal ) > 0 ) + return app->orb()->string_to_object(aVal); } } return CORBA::Object::_nil(); @@ -201,6 +209,20 @@ namespace SMESH return SObjectToObject(theSObject,aStudy); } + _PTR(SObject) ObjectToSObject( CORBA::Object_ptr theObject ) + { + _PTR(SObject) res; + SalomeApp_Application* app = dynamic_cast + (SUIT_Session::session()->activeApplication()); + if ( app ) { + QString IOR = app->orb()->object_to_string( theObject ); + SalomeApp_Study* study = dynamic_cast( app->activeStudy() ); + if ( study && !IOR.isEmpty() ) + res = study->studyDS()->FindObjectIOR( IOR.toLatin1().constData() ); + } + return res; + } + CORBA::Object_var IObjectToObject (const Handle(SALOME_InteractiveObject)& theIO) { if (!theIO.IsNull()) { @@ -230,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); } @@ -261,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" ); } } }