]> SALOME platform Git repositories - modules/geom.git/commitdiff
Salome HOME
corrections to IPAL 22059 SIGSEGV on closing study
authordmv <dmv@opencascade.com>
Mon, 11 Oct 2010 13:51:55 +0000 (13:51 +0000)
committerdmv <dmv@opencascade.com>
Mon, 11 Oct 2010 13:51:55 +0000 (13:51 +0000)
src/GEOMBase/GEOMBase.cxx
src/GEOMBase/GEOMBase.h
src/GEOMBase/GEOMBase_Helper.cxx
src/GEOMBase/GEOMBase_Helper.h
src/GroupGUI/GroupGUI_GroupDlg.cxx
src/MeasureGUI/MeasureGUI_BndBoxDlg.cxx
src/RepairGUI/RepairGUI_SuppressFacesDlg.cxx

index 6cbf4f37413e94c9d7c6d09c910f448af4ed8af8..efd69ff3c6024c5419a63839b6742b40e1d96ae8 100644 (file)
@@ -893,7 +893,7 @@ GEOM::GEOM_Object_ptr GEOMBase::GetObjectFromIOR( const char* theIOR )
 // function : GetIORFromObject()
 // purpose  : returns IOR of a given GEOM_Object
 //=======================================================================
-char* GEOMBase::GetIORFromObject( const GEOM::GEOM_Object_ptr& theObject )
+QString GEOMBase::GetIORFromObject( const GEOM::GEOM_Object_ptr& theObject )
 {
   if ( CORBA::is_nil( theObject ) )
     return NULL;
index e1bd56882315fc912ddbb1eed05404475a62d8ab..fb846fe3c59a15ede7a059d72ba349d56f2e07a4 100644 (file)
@@ -90,7 +90,7 @@ public :
 
   static GEOM::GEOM_Object_ptr GetObjectFromIOR(const char* theIOR);
 
-  static char* GetIORFromObject(const GEOM::GEOM_Object_ptr& theObject);
+  static QString GetIORFromObject(const GEOM::GEOM_Object_ptr& theObject);
 
   /* Geometry */
   static bool VertexToPoint(const TopoDS_Shape& S, gp_Pnt& P);
index 02bc2980f5c0955feefb30369c191a00d171e312..de5f92978a387ffe1dea7b401cd842499f8037f3 100755 (executable)
@@ -170,9 +170,10 @@ void GEOMBase_Helper::erase( const ObjectList& objList, const bool updateView )
 void GEOMBase_Helper::erase( GEOM::GEOM_Object_ptr object, const bool updateView )
 {
   if ( !object->_is_nil() ) {
-    std::string entry = getEntry( object );
+    QString entry = getEntry( object );
     getDisplayer()->Erase( new SALOME_InteractiveObject(
-      entry.c_str(), "GEOM", strdup( GEOMBase::GetName( object ).toLatin1().constData() ) ), true, updateView );
+      entry.toLatin1().constData(), 
+      "GEOM", strdup( GEOMBase::GetName( object ).toLatin1().constData() ) ), true, updateView );
   }
 }
 
@@ -209,9 +210,9 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object,
     // Enable activisation of selection
     getDisplayer()->SetToActivate( true );
 
-    std::string entry = getEntry( object );
+    QString entry = getEntry( object );
     getDisplayer()->Redisplay(new SALOME_InteractiveObject
-                              (entry.c_str(), "GEOM", strdup(GEOMBase::GetName(object).toLatin1().constData())), false);
+                              (entry.toLatin1().constData(), "GEOM", strdup(GEOMBase::GetName(object).toLatin1().constData())), false);
   }
 
   if ( withChildren ) {
@@ -227,9 +228,9 @@ void GEOMBase_Helper::redisplay( GEOM::GEOM_Object_ptr object,
             (GeometryGUI::ClientSObjectToObject(anIt->Value()));
           if ( !CORBA::is_nil( aChild ) ) {
             if ( !aChild->_is_nil() ) {
-              std::string entry = getEntry( aChild );
+              QString entry = getEntry( aChild );
               getDisplayer()->Redisplay( new SALOME_InteractiveObject(
-                entry.c_str(), "GEOM", strdup( GEOMBase::GetName( aChild ).toLatin1().constData() ) ), false );
+                entry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( aChild ).toLatin1().constData() ) ), false );
             }
           }
         }
@@ -449,10 +450,10 @@ void GEOMBase_Helper::localSelection( const ObjectList& theObjs, const int theMo
     GEOM::GEOM_Object_ptr anObj = *anIter;
     if ( anObj->_is_nil() )
       continue;
-    std::string aEntry = getEntry( anObj );
-    if ( aEntry != "" )
+    QString anEntry = getEntry( anObj );
+    if ( anEntry != "" )
       aListOfIO.Append( new SALOME_InteractiveObject(
-        aEntry.c_str(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) );
+        anEntry.toLatin1().constData(), "GEOM", strdup( GEOMBase::GetName( anObj ).toLatin1().constData() ) ) );
   }
 
   getDisplayer()->LocalSelection( aListOfIO, theMode );
@@ -619,19 +620,18 @@ SalomeApp_Study* GEOMBase_Helper::getStudy() const
 // Function : getEntry
 // Purpose  :
 //================================================================
-char* GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const
+QString GEOMBase_Helper::getEntry( GEOM::GEOM_Object_ptr object ) const
 {
   SalomeApp_Study* study = getStudy();
   if ( study )  {
-    CORBA::String_var objIOR = GEOMBase::GetIORFromObject( object );
-    std::string IOR( objIOR );
-    if ( IOR != "" ) {
-      _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( IOR ) );
+    QString objIOR = GEOMBase::GetIORFromObject( object );
+    if ( objIOR != "" ) {
+      _PTR(SObject) SO ( study->studyDS()->FindObjectIOR( objIOR.toLatin1().constData() ) );
       if ( SO )
-        return (char*) TCollection_AsciiString((char*)SO->GetID().c_str()).ToCString();
+        return QString::fromStdString(SO->GetID());
     }
   }
-  return (char*)"";
+  return "";
 }
 
 //================================================================
@@ -1023,9 +1023,8 @@ bool GEOMBase_Helper::selectObjects( ObjectList& objects )
   ObjectList::iterator anIter;
   for ( anIter = objects.begin(); anIter != objects.end(); ++anIter )
   {
-    std::string entry = getEntry( *anIter );
-    QString aEntry( entry.c_str() );
-    LightApp_DataOwner* anOwher = new LightApp_DataOwner( aEntry );
+    QString anEntry = getEntry( *anIter );
+    LightApp_DataOwner* anOwher = new LightApp_DataOwner( anEntry );
     aList.append( anOwher );
   }
 
@@ -1055,8 +1054,8 @@ GEOM::GEOM_Object_ptr GEOMBase_Helper::findObjectInFather (GEOM::GEOM_Object_ptr
     dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
   SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
   _PTR(Study) aDStudy = appStudy->studyDS();
-  std::string IOR = GEOMBase::GetIORFromObject( theFather );
-  _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR ) );
+  QString IOR = GEOMBase::GetIORFromObject( theFather );
+  _PTR(SObject) SObj ( aDStudy->FindObjectIOR( IOR.toLatin1().constData() ) );
 
   bool inStudy = false;
   GEOM::GEOM_Object_var aReturnObject;
@@ -1102,7 +1101,7 @@ void GEOMBase_Helper::addSubshapesToFather( QMap<QString, GEOM::GEOM_Object_var>
     if ( !anOp->_is_nil() ) {
       GEOM::GEOM_Object_var aFatherObj = anOp->GetMainShape( it.value() );
       if ( !aFatherObj->_is_nil() ) {
-        std::string aFatherEntry = getEntry( aFatherObj );
+        QString aFatherEntry = getEntry( aFatherObj );
         if ( aFatherEntry != "") { // additional checking that object is valid 0020598 EDF 1191
           GEOM::GEOM_Object_var aFindedObject = findObjectInFather(aFatherObj, it.key().toLatin1().data() );
           //Add Object to study if its not exist
index b8e12adbaafb7f663b1c8bc0293bbb17515b9953..0a3fc2914fd827aa7bcd98a97295a41142aeec7e 100755 (executable)
@@ -177,7 +177,7 @@ protected:
   SUIT_Desktop*               getDesktop() const;
 
 private:
-  char* getEntry              ( GEOM::GEOM_Object_ptr ) const;
+  QString                     getEntry( GEOM::GEOM_Object_ptr ) const;
   void                        clearShapeBuffer( GEOM::GEOM_Object_ptr );
 
 private:
index 9771d89f67367d57e9f3f91f81292aafdc257abe..01afe7a4db07925ed1f4c78c58a79ad732ef893c 100644 (file)
@@ -1059,10 +1059,9 @@ bool GroupGUI_GroupDlg::execute(ObjectList& objects)
 
   SalomeApp_Study* study = getStudy();
   if (study) {
-    CORBA::String_var objIOR = GEOMBase::GetIORFromObject(aGroup);
-    std::string IOR(objIOR);
-    if (IOR != "") {
-      _PTR(SObject) SO (study->studyDS()->FindObjectIOR(IOR));
+    QString objIOR = GEOMBase::GetIORFromObject(aGroup);
+    if (objIOR != "") {
+      _PTR(SObject) SO (study->studyDS()->FindObjectIOR(objIOR.toLatin1().constData()));
       if (SO) {
         _PTR(StudyBuilder) aBuilder (study->studyDS()->NewBuilder());
         aBuilder->SetName(SO, getNewObjectName().toLatin1().constData());
index 5344991b4b555fb36e6c2f1284d8b3e1e78d7e61..20d7d7674a7ee60b133ff5f52ab0175b86a2711f 100644 (file)
@@ -177,8 +177,8 @@ bool MeasureGUI_BndBoxDlg::getParameters( double& theXmin, double& theXmax,
       if ( CORBA::is_nil(aGeomGen) )
         return false;
 
-      CORBA::String_var IOR = GEOMBase::GetIORFromObject( myObj );
-      GEOM::GEOM_Object_var anObject = aGeomGen->GetIORFromString(IOR);
+      QString IOR = GEOMBase::GetIORFromObject( myObj );
+      GEOM::GEOM_Object_var anObject = aGeomGen->GetIORFromString( IOR.toLatin1().constData() );
       if ( CORBA::is_nil(anObject) )
         return false;
 
index 717dfa4a6819f090e89e0d3bce5ae6b2cd50560a..2469cefe6d7b2e301fc240c1f1ff98ce07be1f01 100644 (file)
@@ -246,8 +246,8 @@ void RepairGUI_SuppressFacesDlg::SelectionIntoArgument()
         aSelMgr->clearSelected();
 
         Standard_Boolean isOk;
-        CORBA::String_var objIOR = GEOMBase::GetIORFromObject(myObject);
-        Handle(GEOM_AISShape) aSh = GEOMBase::ConvertIORinGEOMAISShape(objIOR, isOk, true);
+        QString objIOR = GEOMBase::GetIORFromObject(myObject);
+        Handle(GEOM_AISShape) aSh = GEOMBase::ConvertIORinGEOMAISShape(objIOR.toLatin1().constData(), isOk, true);
         if (!isOk || aSh.IsNull())
           return;