Salome HOME
Updated copyright comment
[modules/geom.git] / src / GEOMToolsGUI / GEOMToolsGUI.cxx
index ca6f6d3f2226b01c1f1004c8a00c20d192ae75ad..639c370caad6adc53a4fc9702e52ede4b60dea6a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -29,6 +29,7 @@
 
 #include <GeometryGUI.h>
 #include "GeometryGUI_Operations.h"
+#include <GEOMBase.h>
 #include <GEOM_Operation.h>
 #include <GEOM_Displayer.h>
 
@@ -47,7 +48,6 @@
 #include <GEOMImpl_Types.hxx>
 
 #include <SALOME_ListIO.hxx>
-#include <SALOME_ListIteratorOfListIO.hxx>
 #include <SALOME_Prs.h>
 
 // QT Includes
 typedef QMap<QString, QString> FilterMap;
 static QString lastUsedFilter;
 
-//=======================================================================
-// function : getFileName
-// purpose  : Selection of a file name for Import/Export. Returns also
-//            the selected file type code through <filter> argument.
-//=======================================================================
-static QString getFileName( QWidget*           parent,
-                            const QString&     initial,
-                            const FilterMap&   filterMap,
-                            const QStringList& filters,
-                            const QString&     caption,
-                            bool               open,
-                            QString&           format,
-                            bool               showCurrentDirInitially = false )
-{
-  //QStringList filters;
-  QString aBrepFilter;
-  for (FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it) {
-    //filters.push_back( it.key() );
-    if (it.key().contains( "BREP", Qt::CaseInsensitive ))
-      aBrepFilter = it.key();
-  }
-
-  SUIT_FileDlg* fd = new SUIT_FileDlg( parent, open, true, true );
-  if ( !caption.isEmpty() )
-    fd->setWindowTitle( caption );
-
-  if ( !initial.isEmpty() )
-    fd->selectFile( initial );
-
-  if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() )
-    fd->setDirectory( QDir::currentPath() );
-
-  fd->setFilters( filters );
-
-  if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) ) {
-    fd->selectFilter( lastUsedFilter );
-  }
-  else if ( !aBrepFilter.isEmpty() ) {
-    fd->selectFilter( aBrepFilter );
-  }
-
-  QString filename;
-  if ( fd->exec() == QDialog::Accepted ) {
-    filename = fd->selectedFile();
-    format = filterMap[fd->selectedFilter()];
-    lastUsedFilter = fd->selectedFilter();
-  }
-
-  delete fd;
-  qApp->processEvents();
-  return filename;
-}
-
-//=======================================================================
-// function : getFileNames
-// purpose  : Select list of files for Import operation. Returns also
-//            the selected file type code through <format> argument.
-//=======================================================================
-static QStringList getFileNames( QWidget*           parent,
-                                 const QString&     initial,
-                                 const FilterMap&   filterMap,
-                                 const QString&     caption,
-                                 QString&           format,
-                                 bool               showCurrentDirInitially = false)
-{
-  QString aBrepFilter;
-  QStringList allFilters;
-  QStringList filters;
-  QRegExp re( "\\((.*)\\)" );
-  re.setMinimal( true );
-  for ( FilterMap::const_iterator it = filterMap.begin(); it != filterMap.end(); ++it ) {
-    if ( it.value().contains( "BREP", Qt::CaseInsensitive ) && aBrepFilter.isEmpty() )
-      aBrepFilter = it.key();
-    filters.append( it.key() );
-    int pos = 0;
-    while ( re.indexIn( it.key(), pos ) >= 0 ) {
-      QString f = re.cap(1);
-      pos = re.pos() + f.length() + 2;
-      allFilters.append( f.simplified() );
-    }
-  }
-  filters.append( QObject::tr( "GEOM_ALL_IMPORT_FILES" ).arg( allFilters.join( " " ) ) );
-
-  SUIT_FileDlg fd( parent, true, true, true );
-  fd.setFileMode( SUIT_FileDlg::ExistingFiles );
-  if ( !caption.isEmpty() )
-    fd.setWindowTitle( caption );
-  if ( !initial.isEmpty() )
-    fd.selectFile( initial );
-
-  if ( showCurrentDirInitially && SUIT_FileDlg::getLastVisitedPath().isEmpty() )
-    fd.setDirectory( QDir::currentPath() );
-
-  fd.setFilters( filters );
-
-  if ( !lastUsedFilter.isEmpty() && filterMap.contains( lastUsedFilter ) )
-    fd.selectFilter( lastUsedFilter );
-  else if ( !aBrepFilter.isEmpty() )
-    fd.selectFilter( aBrepFilter );
-
-  QStringList filenames;
-  if ( fd.exec() ) {
-    filenames = fd.selectedFiles();
-    format = filterMap.contains( fd.selectedFilter() ) ? filterMap[ fd.selectedFilter() ] : QString();
-    lastUsedFilter = fd.selectedFilter();
-  }
-  qApp->processEvents();
-  return filenames;
-}
-
 //=======================================================================
 // function : getParentComponent
 // purpose  : Get object's parent component entry
@@ -187,11 +77,12 @@ static QString getParentComponent( _PTR( SObject ) obj )
 
 //=====================================================================================
 // function : inUse
-// purpose  : check if the object(s) passed as the the second arguments are used
+// purpose  : check if the object(s) passed as the second arguments are used
 //            by the other objects in the study
 //=====================================================================================
-static bool inUse( _PTR(Study) study, const QString& component, const QMap<QString,QString>& objects )
+static bool inUse( const QString& component, const QMap<QString,QString>& objects )
 {
+  _PTR(Study) study = SalomeApp_Application::getStudy();
   _PTR(SObject) comp = study->FindObjectID( component.toLatin1().data() );
   if ( !comp )
     return false;
@@ -200,54 +91,61 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap<QStri
   QMap<QString, GEOM::GEOM_BaseObject_var> gobjects;
   QMap<QString, QString>::ConstIterator oit;
   std::list<_PTR(SObject)> aSelectedSO;
-  for ( oit = objects.begin(); oit != objects.end(); ++oit ) {
-    _PTR(SObject) so = study->FindObjectID( oit.key().toLatin1().data() );
-    if ( !so )
+  for ( oit = objects.begin(); oit != objects.end(); ++oit )
+  {
+    _PTR(SObject) so = study->FindObjectID( oit.key().toUtf8().data() );
+    if ( !GeometryGUI::IsInGeomComponent( so ))
       continue;
     aSelectedSO.push_back(so);
-    CORBA::Object_var corbaObj_rem = GeometryGUI::ClientSObjectToObject( so );
+    CORBA::Object_var        corbaObj_rem = GeometryGUI::ClientSObjectToObject( so );
     GEOM::GEOM_BaseObject_var geomObj_rem = GEOM::GEOM_BaseObject::_narrow( corbaObj_rem );
-    if( CORBA::is_nil( geomObj_rem ) )
-      continue;
-    gobjects.insert( oit.key(), geomObj_rem );
+    if ( ! CORBA::is_nil( geomObj_rem ))
+      gobjects.insert( oit.key(), geomObj_rem );
   }
 
   // Search References with other Modules
   std::list< _PTR(SObject) >::iterator itSO = aSelectedSO.begin();
-  for ( ; itSO != aSelectedSO.end(); ++itSO ) {
+  for ( ; itSO != aSelectedSO.end(); ++itSO )
+  {
     std::vector<_PTR(SObject)> aReferences = study->FindDependances( *itSO  );
     int aRefLength = aReferences.size();
-    if (aRefLength) {
-      for (int i = 0; i < aRefLength; i++) {
-        _PTR(SObject) firstSO( aReferences[i] );
-        _PTR(SComponent) aComponent = firstSO->GetFatherComponent();
-        QString type = aComponent->ComponentDataType().c_str();
-        if ( type == "SMESH" )
-          return true;
-      }
+    for ( int i = 0; i < aRefLength; i++ )
+    {
+      _PTR(SObject) firstSO( aReferences[i] );
+      _PTR(SComponent) aComponent = firstSO->GetFatherComponent();
+      QString type = aComponent->ComponentDataType().c_str();
+      if ( type == "SMESH" )
+        return true;
     }
   }
 
-  // browse through all GEOM data tree
+  // browse through all GEOM data tree to find an object with is not deleted and depends
+  // on a deleted object
   _PTR(ChildIterator) it ( study->NewChildIterator( comp ) );
-  for ( it->InitEx( true ); it->More(); it->Next() ) {
-    _PTR(SObject) child( it->Value() );
-    CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child );
+  for ( it->InitEx( true ); it->More(); it->Next() )
+  {
+    _PTR(SObject) child   = it->Value();
+    QString       childID = child->GetID().c_str();
+    bool deleted = objects.contains( childID );
+    if ( deleted )
+      continue; // deleted object
+
+    CORBA::Object_var    corbaObj = GeometryGUI::ClientSObjectToObject( child );
     GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
-    if( CORBA::is_nil( geomObj ) )
+    if ( CORBA::is_nil( geomObj ) )
       continue;
 
-    GEOM::ListOfGBO_var list = geomObj->GetDependency();
-    if( list->length() == 0 )
-      continue;
+    GEOM::ListOfGBO_var dep = geomObj->GetDependency(); // child depends on dep
+    for( CORBA::ULong i = 0; i < dep->length(); i++ )
+    {
+      CORBA::String_var id = dep[i]->GetStudyEntry();
+      bool depends = objects.contains( id.in() ); // depends on deleted
 
-    for( int i = 0; i < list->length(); i++ ) {
-      bool depends = false;
-      bool deleted = false;
       QMap<QString, GEOM::GEOM_BaseObject_var>::Iterator git;
-      for ( git = gobjects.begin(); git != gobjects.end() && ( !depends || !deleted ); ++git ) {
-        depends = depends || list[i]->_is_equivalent( *git );
-        deleted = deleted || git.key() == child->GetID().c_str() ;//geomObj->_is_equivalent( *git );
+      for ( git = gobjects.begin(); git != gobjects.end() && ( !depends || !deleted ); ++git )
+      {
+        depends = depends || dep[i]->_is_equivalent( *git );
+        deleted = deleted || git.key() == childID ;//geomObj->_is_equivalent( *git )
       }
       if ( depends && !deleted )
         return true;
@@ -260,11 +158,11 @@ static bool inUse( _PTR(Study) study, const QString& component, const QMap<QStri
 // function : getGeomChildrenAndFolders
 // purpose  : Get direct (1-level) GEOM objects under each folder, sub-folder, etc. and these folders itself
 //=======================================================================
-static void getGeomChildrenAndFolders( _PTR(SObject) theSO, 
-                                       QMap<QString,QString>& geomObjList, 
+static void getGeomChildrenAndFolders( _PTR(SObject) theSO,
+                                       QMap<QString,QString>& geomObjList,
                                        QMap<QString,QString>& folderList ) {
   if ( !theSO ) return;
-  _PTR(Study) aStudy = theSO->GetStudy();
+  _PTR(Study) aStudy = SalomeApp_Application::getStudy();
   if ( !aStudy ) return;
   _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
 
@@ -292,7 +190,7 @@ static void getGeomChildrenAndFolders( _PTR(SObject) theSO,
 // purpose  : Constructor
 //=======================================================================
 GEOMToolsGUI::GEOMToolsGUI( GeometryGUI* parent )
-: GEOMGUI( parent )
+  : GEOMGUI( parent )
 {
 }
 
@@ -308,7 +206,7 @@ GEOMToolsGUI::~GEOMToolsGUI()
 // function : OnGUIEvent()
 // purpose  :
 //=======================================================================
-bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
+bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* /*parent*/)
 {
   getGeometryGUI()->EmitSignalDeactivateDialog();
 
@@ -316,15 +214,11 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
   case GEOMOp::OpDelete:         // EDIT - DELETE
     OnEditDelete();
     break;
-  case GEOMOp::OpImport:         // FILE - IMPORT
-    Import();
-    break;
-  case GEOMOp::OpExport:         // FILE - EXPORT
-    Export();
-    break;
+#ifndef DISABLE_PYCONSOLE
   case GEOMOp::OpCheckGeom:      // TOOLS - CHECK GEOMETRY
     OnCheckGeometry();
     break;
+#endif
   case GEOMOp::OpSelectVertex:   // POPUP - SELECT ONLY - VERTEX
     OnSelectOnly( GEOM_POINT );
     break;
@@ -421,7 +315,15 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
      break;
   case GEOMOp::OpSortChildren:
     OnSortChildren();
+    break;
+#ifndef DISABLE_GRAPHICSVIEW
+  case GEOMOp::OpShowDependencyTree:
+    OnShowDependencyTree();
      break;
+#endif
+  case GEOMOp::OpReduceStudy:
+    OnReduceStudy();
+    break;
   default:
     SUIT_Session::session()->activeApplication()->putInfo(tr("GEOM_PRP_COMMAND").arg(theCommandID));
     break;
@@ -433,7 +335,7 @@ bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent)
 // function : OnGUIEvent()
 // purpose  :
 //=======================================================================
-bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* parent, const QVariant& theParam )
+bool GEOMToolsGUI::OnGUIEvent(int theCommandID, SUIT_Desktop* /*parent*/, const QVariant& theParam )
 {
   getGeometryGUI()->EmitSignalDeactivateDialog();
 
@@ -461,8 +363,7 @@ void GEOMToolsGUI::OnEditDelete()
     return;
 
   LightApp_SelectionMgr* aSelMgr = app->selectionMgr();
-  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
-  if ( !aSelMgr || !appStudy )
+  if ( !aSelMgr )
     return;
 
   // get selection
@@ -470,7 +371,7 @@ void GEOMToolsGUI::OnEditDelete()
   if ( selected.IsEmpty() )
     return;
 
-  _PTR(Study) aStudy = appStudy->studyDS();
+  _PTR(Study) aStudy = SalomeApp_Application::getStudy();
   _PTR(UseCaseBuilder) aUseCaseBuilder = aStudy->GetUseCaseBuilder();
 
   // check if study is locked
@@ -497,7 +398,7 @@ void GEOMToolsGUI::OnEditDelete()
       continue; // invalid object
     // ...
     QString entry = anIObject->getEntry();
-    _PTR(SObject) obj = aStudy->FindObjectID( entry.toLatin1().data() );
+    _PTR(SObject) obj = aStudy->FindObjectID( entry.toUtf8().data() );
     // check parent component
     QString parentComp = getParentComponent( obj );
     if ( parentComp != geomComp )  {
@@ -550,6 +451,8 @@ void GEOMToolsGUI::OnEditDelete()
   if ( !dlg.exec() )
     return; // operation is cancelled by user
 
+  SUIT_OverrideCursor wc;
+
   // get currently opened views
   QList<SALOME_View*> views;
   SALOME_View* view;
@@ -563,11 +466,12 @@ void GEOMToolsGUI::OnEditDelete()
   }
 
   _PTR(StudyBuilder) aStudyBuilder (aStudy->NewBuilder());
-  GEOM_Displayer* disp = new GEOM_Displayer( appStudy );
+  GEOM_Displayer disp;
+  bool toUpdateColorScale = disp.SetUpdateColorScale( false ); // IPAL54049
 
   if ( isComponentSelected ) {
     // GEOM component is selected: delete all objects recursively
-    _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() );
+    _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toUtf8().data() );
     if ( !comp )
       return;
     _PTR(ChildIterator) it ( aStudy->NewChildIterator( comp ) );
@@ -575,7 +479,7 @@ void GEOMToolsGUI::OnEditDelete()
     for ( it->InitEx( false ); it->More(); it->Next() ) {
       _PTR(SObject) child( it->Value() );
       // remove object from GEOM engine
-      removeObjectWithChildren( child, aStudy, views, disp );
+      removeObjectWithChildren( child, views, &disp );
       // remove object from study
       aStudyBuilder->RemoveObjectWithChildren( child );
       // remove object from use case tree
@@ -584,7 +488,7 @@ void GEOMToolsGUI::OnEditDelete()
   }
   else {
     // GEOM component is not selected: check if selected objects are in use
-    if ( inUse( aStudy, geomComp, allDeleted ) && 
+    if ( inUse( geomComp, allDeleted ) &&
          SUIT_MessageBox::question( app->desktop(),
                                     QObject::tr("WRN_WARNING"),
                                     QObject::tr("DEP_OBJECT"),
@@ -595,9 +499,9 @@ void GEOMToolsGUI::OnEditDelete()
     // ... and then delete all objects
     QMap<QString, QString>::Iterator it;
     for ( it = toBeDeleted.begin(); it != toBeDeleted.end(); ++it ) {
-      _PTR(SObject) obj ( aStudy->FindObjectID( it.key().toLatin1().data() ) );
+      _PTR(SObject) obj ( aStudy->FindObjectID( it.key().toUtf8().data() ) );
       // remove object from GEOM engine
-      removeObjectWithChildren( obj, aStudy, views, disp );
+      removeObjectWithChildren( obj, views, &disp );
       // remove objects from study
       aStudyBuilder->RemoveObjectWithChildren( obj );
       // remove object from use case tree
@@ -605,9 +509,9 @@ void GEOMToolsGUI::OnEditDelete()
     }
     // ... and then delete all folders
     for ( it = toBeDelFolders.begin(); it != toBeDelFolders.end(); ++it ) {
-      _PTR(SObject) obj ( aStudy->FindObjectID( it.key().toLatin1().data() ) );
+      _PTR(SObject) obj ( aStudy->FindObjectID( it.key().toUtf8().data() ) );
       // remove object from GEOM engine
-      removeObjectWithChildren( obj, aStudy, views, disp );
+      removeObjectWithChildren( obj, views, &disp );
       // remove objects from study
       aStudyBuilder->RemoveObjectWithChildren( obj );
       // remove object from use case tree
@@ -615,385 +519,27 @@ void GEOMToolsGUI::OnEditDelete()
     }
   }
 
+  disp.SetUpdateColorScale( toUpdateColorScale ); // IPAL54049
   selected.Clear();
   aSelMgr->setSelectedObjects( selected );
   getGeometryGUI()->updateObjBrowser();
   app->updateActions(); //SRN: To update a Save button in the toolbar
 }
 
-//=====================================================================================
-// function : Import
-// purpose  : BRep, Iges, Step, ...
-//=====================================================================================
-bool GEOMToolsGUI::Import()
-{
-  SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( getGeometryGUI()->getApp() );
-  if ( !app ) return false;
-
-  SalomeApp_Study* stud = dynamic_cast<SalomeApp_Study*> ( app->activeStudy() );
-  if ( !stud ) {
-    MESSAGE ( "FAILED to cast active study to SalomeApp_Study" );
-    return false;
-  }
-  _PTR(Study) aStudy = stud->studyDS();
-
-  // check if study is locked
-  bool aLocked = (_PTR(AttributeStudyProperties)(aStudy->GetProperties()))->IsLocked();
-  if ( aLocked ) {
-    SUIT_MessageBox::warning( app->desktop(),
-                              QObject::tr("WRN_WARNING"),
-                              QObject::tr("WRN_STUDY_LOCKED") );
-    return false;
-  }
-
-  // check if GEOM engine is available
-  GEOM::GEOM_Gen_var eng = GeometryGUI::GetGeomGen();
-  if ( CORBA::is_nil( eng ) ) {
-    SUIT_MessageBox::critical( app->desktop(),
-                               QObject::tr("WRN_WARNING"),
-                               QObject::tr( "GEOM Engine is not started" ) );
-    return false;
-  }
-
-  GEOM::GEOM_IInsertOperations_var aInsOp = eng->GetIInsertOperations( aStudy->StudyId() );
-  if ( aInsOp->_is_nil() )
-    return false;
-
-  // obtain a list of available import formats
-  FilterMap aMap;
-  GEOM::string_array_var aFormats, aPatterns;
-  aInsOp->ImportTranslators( aFormats, aPatterns );
-
-  for ( int i = 0, n = aFormats->length(); i < n; i++ )
-    aMap.insert( (char*)aPatterns[i], (char*)aFormats[i] );
-
-  // select files to be imported
-  QString fileType;
-  QStringList fileNames = getFileNames( app->desktop(), "", aMap,
-                                        tr( "GEOM_MEN_IMPORT" ), fileType, true );
-
-  // set Wait cursor
-  SUIT_OverrideCursor wc;
-
-  if ( fileNames.count() == 0 )
-    return false; // nothing selected, return
-
-  QStringList errors;
-
-  QList< GEOM::GEOM_Object_var > objsForDisplay;
-
-  QStringList anEntryList;
-
-  // iterate through all selected files
-
-  SUIT_MessageBox::StandardButton igesAnswer = SUIT_MessageBox::NoButton;
-  SUIT_MessageBox::StandardButton acisAnswer = SUIT_MessageBox::NoButton;
-
-  for ( int i = 0; i < fileNames.count(); i++ ) {
-    QString fileName = fileNames[i];
-
-    if ( fileName.isEmpty() )
-      continue;
-
-    QString aCurrentType;
-    if ( fileType.isEmpty() ) {
-      // file type is not defined, try to detect
-      QString ext = QFileInfo( fileName ).suffix().toUpper();
-      QRegExp re( "\\*\\.(\\w+)" );
-      for ( FilterMap::const_iterator it = aMap.begin();
-            it != aMap.end() && aCurrentType.isEmpty(); ++it ) {
-        int pos = 0;
-        while ( re.indexIn( it.key(), pos ) >= 0 ) {
-          QString f = re.cap(1).trimmed().toUpper();
-          if ( ext == f ) { aCurrentType = it.value(); break; }
-          pos = re.pos() + re.cap(1).length() + 2;
-        }
-      }
-    }
-    else {
-      aCurrentType = fileType;
-    }
-
-    if ( aCurrentType.isEmpty() ) {
-      errors.append( QString( "%1 : %2" ).arg( fileName ).arg( tr( "GEOM_UNSUPPORTED_TYPE" ) ) );
-      continue;
-    }
-
-    GEOM_Operation* anOp = new GEOM_Operation( app, aInsOp.in() );
-    try {
-      app->putInfo( tr( "GEOM_PRP_LOADING" ).arg( SUIT_Tools::file( fileName, /*withExten=*/true ) ) );
-      anOp->start();
-
-      CORBA::String_var fileN = fileName.toUtf8().constData();
-      CORBA::String_var fileT = aCurrentType.toUtf8().constData();
-
-      // jfa 21.08.2012 for mantis issue 21511 (STEP file units)
-      CORBA::String_var aUnits = aInsOp->ReadValue(fileN, fileT, "LEN_UNITS");
-      QString aUnitsStr (aUnits.in());
-      bool needConvert = true;
-      if (aUnitsStr.isEmpty() || aUnitsStr == "M" || aUnitsStr.toLower() == "metre")
-        needConvert = false;
-
-      if (needConvert) {
-        if (igesAnswer == SUIT_MessageBox::NoToAll) {
-          // converting for all files is already approved
-          fileT = (aCurrentType + "_SCALE").toLatin1().constData();
-        }
-        else if (igesAnswer != SUIT_MessageBox::YesToAll) {
-          SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No;
-          if (i < fileNames.count() - 1) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll;
-          igesAnswer = SUIT_MessageBox::question(app->desktop(),
-                                                 "Question",//tr("WRN_WARNING"),
-                                                 tr("GEOM_SCALE_DIMENSIONS").arg(aUnitsStr),
-                                                 btns | SUIT_MessageBox::Cancel,
-                                                 SUIT_MessageBox::No);
-          switch (igesAnswer) {
-          case SUIT_MessageBox::Cancel:
-            return false;                // cancel (break) import operation
-          case SUIT_MessageBox::Yes:
-          case SUIT_MessageBox::YesToAll:
-            break;                       // scaling is confirmed
-          case SUIT_MessageBox::No:
-          case SUIT_MessageBox::NoAll:
-            fileT = (aCurrentType + "_SCALE").toLatin1().constData();
-          default:
-            break;                       // scaling is rejected
-          } // switch ( igesAnswer )
-        } // if ( igeAnswer != NoToAll )
-      } // if ( needConvert )
-
-      /*
-      // skl 29.05.2009
-      if ( aCurrentType == "IGES" ) {
-        GEOM::GEOM_Object_var anObj = aInsOp->ImportFile( fileN, "IGES_UNIT" );
-        bool needConvert = false;
-        TCollection_AsciiString aUnitName = aInsOp->GetErrorCode();
-        if ( aUnitName.SubString( 1, 4 ) == "UNIT" )
-          needConvert = aUnitName.SubString( 6, aUnitName.Length() ) != "M";
-
-        if ( needConvert ) {
-          if ( igesAnswer == SUIT_MessageBox::NoToAll ) {
-            // converting for all files is already approved
-            fileT = "IGES_SCALE";
-          }
-          else if ( igesAnswer != SUIT_MessageBox::YesToAll ) {
-            SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No;
-            if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll;
-            igesAnswer = SUIT_MessageBox::question( app->desktop(),
-                                                    "Question",//tr("WRN_WARNING"),
-                                                    tr("GEOM_SCALE_DIMENSIONS"),
-                                                    btns | SUIT_MessageBox::Cancel,
-                                                    SUIT_MessageBox::No );
-            switch ( igesAnswer ) {
-            case SUIT_MessageBox::Cancel:
-              return false;                // cancel (break) import operation
-            case SUIT_MessageBox::Yes:
-            case SUIT_MessageBox::YesToAll:
-              break;                       // scaling is confirmed
-            case SUIT_MessageBox::No:
-            case SUIT_MessageBox::NoAll:
-              fileT = "IGES_SCALE";
-            default:
-              break;                       // scaling is rejected
-            } // switch ( igesAnswer )
-          } // if ( igeAnswer != NoToAll )
-        } // if ( needConvert )
-      } // if ( aCurrentType == "IGES" )
-      else if ( aCurrentType == "ACIS" ) {
-      */
-
-      if ( aCurrentType == "ACIS" ) {
-        if ( acisAnswer != SUIT_MessageBox::YesToAll && acisAnswer != SUIT_MessageBox::NoToAll ) {
-          SUIT_MessageBox::StandardButtons btns = SUIT_MessageBox::Yes | SUIT_MessageBox::No;
-          if ( i < fileNames.count()-1 ) btns = btns | SUIT_MessageBox::YesToAll | SUIT_MessageBox::NoToAll;
-          acisAnswer = SUIT_MessageBox::question( app->desktop(),
-                                                  "Question",//tr("WRN_WARNING"),
-                                                  tr("GEOM_PUBLISH_NAMED_SHAPES"),
-                                                  btns | SUIT_MessageBox::Cancel,
-                                                  SUIT_MessageBox::No );
-          if ( acisAnswer == SUIT_MessageBox::Cancel )
-            return false; // cancel (break) import operation
-        } // if ( acisAnswer != YesToAll && acisAnswer != NoToAll )
-      } // else if ( aCurrentType == "ACIS" )
-
-      // IMPORT
-      GEOM::ListOfGO_var anObj = aInsOp->ImportFile( fileN, fileT );
-
-      if ( anObj->length() > 0 && aInsOp->IsDone() ) {
-        GEOM::GEOM_Object_ptr aFather = anObj[0]._retn();
-        QString aPublishObjName =
-          GEOMBase::GetDefaultName( SUIT_Tools::file( fileName, /*withExten=*/true ) );
-
-        SALOMEDS::Study_var aDSStudy = GeometryGUI::ClientStudyToStudy( aStudy );
-        SALOMEDS::SObject_var aSO =
-          GeometryGUI::GetGeomGen()->PublishInStudy( aDSStudy,
-                                                     SALOMEDS::SObject::_nil(),
-                                                     aFather,
-                                                     aPublishObjName.toLatin1().constData() );
-        if ( ( !aSO->_is_nil() ) )
-          anEntryList.append( aSO->GetID() );
-
-        objsForDisplay.append( aFather );
-
-        if ( aCurrentType == "ACIS" ) {
-          if ( acisAnswer == SUIT_MessageBox::Yes || acisAnswer == SUIT_MessageBox::YesToAll )
-            GeometryGUI::GetGeomGen()->PublishNamedShapesInStudy( aDSStudy, aFather );
-        }
-
-        anOp->commit();
-
-        // Treat group objects.
-        for (int i = 1, n = anObj->length(); i < n; i++) {
-          GEOM::GEOM_Object_ptr anObject = anObj[i]._retn();
-          GeometryGUI::GetGeomGen()->AddInStudy(aDSStudy,
-            anObject, tr(anObject->GetName()).toStdString().c_str(), aFather);
-        }
-      }
-      else {
-        anOp->abort();
-        errors.append( QString( "%1 : %2" ).arg( fileName ).arg( aInsOp->GetErrorCode() ) );
-      }
-    }
-    catch( const SALOME::SALOME_Exception& S_ex ) {
-      anOp->abort();
-      errors.append( QString( "%1 : %2" ).arg( fileName ).arg( tr( "GEOM_UNKNOWN_IMPORT_ERROR" ) ) );
-    }
-  }
-
-  // update object browser
-  getGeometryGUI()->updateObjBrowser( true );
-
-  // browse published objects
-  app->browseObjects( anEntryList );
-
-  // display imported model (if only one file is selected)
-  if ( objsForDisplay.count() == 1 )
-    GEOM_Displayer( stud ).Display( objsForDisplay[0].in() );
-
-  if ( errors.count() > 0 ) {
-    SUIT_MessageBox::critical( app->desktop(),
-                               QObject::tr( "GEOM_ERROR" ),
-                               QObject::tr( "GEOM_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) );
-  }
-
-  app->updateActions(); //SRN: To update a Save button in the toolbar
-
-  return objsForDisplay.count() > 0;
-}
-
-//=====================================================================================
-// function : Export
-// purpose  : BRep, Iges, Step
-//=====================================================================================
-bool GEOMToolsGUI::Export()
-{
-  SalomeApp_Application* app = getGeometryGUI()->getApp();
-  if (!app) return false;
-
-  SalomeApp_Study* stud = dynamic_cast<SalomeApp_Study*> ( app->activeStudy() );
-  if ( !stud ) {
-    MESSAGE ( "FAILED to cast active study to SalomeApp_Study" );
-    return false;
-  }
-  _PTR(Study) aStudy = stud->studyDS();
-
-  GEOM::GEOM_Gen_var eng = GeometryGUI::GetGeomGen();
-  if ( CORBA::is_nil( eng ) ) {
-    SUIT_MessageBox::critical( app->desktop(),
-                               QObject::tr("WRN_WARNING"),
-                               QObject::tr( "GEOM Engine is not started" ) );
-    return false;
-  }
-
-  GEOM::GEOM_IInsertOperations_var aInsOp = eng->GetIInsertOperations( aStudy->StudyId() );
-  if ( aInsOp->_is_nil() )
-    return false;
-
-  // Obtain a list of available export formats
-  FilterMap aMap;
-  QStringList filters;
-  GEOM::string_array_var aFormats, aPatterns;
-  aInsOp->ExportTranslators( aFormats, aPatterns );
-  for ( int i = 0, n = aFormats->length(); i < n; i++ ) {
-    aMap.insert( (char*)aPatterns[i], (char*)aFormats[i] );
-    filters.push_back( (char*)aPatterns[i] );
-  }
-
-  // Get selected objects
-  LightApp_SelectionMgr* sm = app->selectionMgr();
-  if ( !sm )
-    return false;
-
-  SALOME_ListIO selectedObjects;
-  sm->selectedObjects( selectedObjects );
-  bool appropriateObj = false;
-
-  SALOME_ListIteratorOfListIO It( selectedObjects );
-  for (; It.More(); It.Next()) {
-    Handle(SALOME_InteractiveObject) IObject = It.Value();
-    GEOM::GEOM_Object_var anObj = GEOMBase::ConvertIOinGEOMObject( IObject );
-
-    if ( anObj->_is_nil() )
-      continue;
-
-    QString fileType;
-    QString file = getFileName(app->desktop(), QString( IObject->getName() ), aMap, filters,
-                               tr("GEOM_MEN_EXPORT"), false, fileType, true);
-
-    // User has pressed "Cancel" --> stop the operation
-    if ( file.isEmpty() || fileType.isEmpty() )
-      return false;
-
-    GEOM_Operation* anOp = new GEOM_Operation( app, aInsOp.in() );
-    try {
-      SUIT_OverrideCursor wc;
-
-      app->putInfo( tr("GEOM_PRP_EXPORT").arg(SUIT_Tools::file( file, /*withExten=*/true )) );
-
-      anOp->start();
-
-      aInsOp->Export( anObj, file.toUtf8().constData(), fileType.toUtf8().constData() );
-
-      if (aInsOp->IsDone())
-        anOp->commit();
-      else {
-        anOp->abort();
-        wc.suspend();
-        SUIT_MessageBox::critical(app->desktop(),
-                                  QObject::tr("GEOM_ERROR"),
-                                  QObject::tr("GEOM_PRP_ABORT") + "\n" + QObject::tr(aInsOp->GetErrorCode()));
-        return false;
-      }
-    }
-    catch (const SALOME::SALOME_Exception& S_ex) {
-      //QtCatchCorbaException(S_ex);
-      anOp->abort();
-      return false;
-    }
-    appropriateObj = true;
-  }
-
-  if ( !appropriateObj )
-    SUIT_MessageBox::warning( app->desktop(),
-                              QObject::tr("WRN_WARNING"),
-                              QObject::tr("GEOM_WRN_NO_APPROPRIATE_SELECTION") );
-  return true;
-}
-
 //=====================================================================================
 // function : RemoveObjectWithChildren
 // purpose  : used by OnEditDelete() method
 //=====================================================================================
 void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj,
-                                            _PTR(Study) aStudy,
                                             QList<SALOME_View*> views,
                                             GEOM_Displayer* disp)
 {
+  _PTR(Study) aStudy = SalomeApp_Application::getStudy();
   // iterate through all children of obj
   for (_PTR(ChildIterator) it (aStudy->NewChildIterator(obj)); it->More(); it->Next()) {
   // for (_PTR(UseCaseIterator) it (aStudy->GetUseCaseBuilder()->GetUseCaseIterator(obj)); it->More(); it->Next()) {
     _PTR(SObject) child (it->Value());
-    removeObjectWithChildren(child, aStudy, views, disp);
+    removeObjectWithChildren(child, views, disp);
   }
 
   // erase object and remove it from engine
@@ -1012,7 +558,7 @@ void GEOMToolsGUI::removeObjectWithChildren(_PTR(SObject) obj,
     if (!CORBA::is_nil(geomObj)) {
 
       //Remove visual properties of the object
-      appStudy->removeObjectFromAll(obj->GetID().c_str());
+      appStudy->removeObjectProperties(obj->GetID().c_str());
 
       // Erase graphical object
       QListIterator<SALOME_View*> it( views );
@@ -1037,153 +583,12 @@ void GEOMToolsGUI::deactivate()
 {
   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
   if ( app ) {
-    SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
-    GEOM_Displayer aDisp (appStudy);
+    GEOM_Displayer aDisp;
     aDisp.GlobalSelection();
     getGeometryGUI()->setLocalSelectionMode(GEOM_ALLOBJECTS);
   }
 }
 
-//=======================================================================
-// function : 
-// purpose  : 
-//=======================================================================
-std::string GEOMToolsGUI::getDependencyTree( QStringList rootObjectIORs )
-{
-  // fill in the tree structure
-  DependencyTree tree;
-  foreach( QString ior, rootObjectIORs ) {
-    GEOM::GEOM_Object_ptr anObj = GEOMBase::GetObjectFromIOR( ior );
-    QList<NodeLevel> upLevelList;
-    getUpwardDependency( anObj, upLevelList );
-    QList<NodeLevel> downLevelList;
-    getDownwardDependency( anObj, downLevelList );
-    tree.insert( ior, QPair<QList<NodeLevel>, QList<NodeLevel> >( upLevelList, downLevelList ) );
-  }
-  // translation the tree into string
-  std::string treeStr;
-  DependencyTree::iterator i;
-  for ( i = tree.begin(); i != tree.end(); ++i ) {
-    treeStr.append( i.key().toUtf8().constData() );
-    treeStr.append( "-" );
-    QList<NodeLevel> upLevelList = i.value().first;
-    treeStr.append( "upward" );
-    treeStr.append( "{" );
-    foreach( NodeLevel level, upLevelList ) {
-      NodeLevel::iterator upIter;
-      for ( upIter = level.begin(); upIter != level.end(); ++upIter ) {
-        treeStr.append( upIter.key().toUtf8().constData() );
-        treeStr.append( "_" );
-        treeStr.append( QStringList(upIter.value()).join("_").toUtf8().constData() );
-        treeStr.append( upIter+1 == level.end() ? ";" : "," );
-      }
-    }
-    treeStr.append( "}" );
-    QList<NodeLevel> downLevelList = i.value().second;
-    treeStr.append( "downward" );
-    treeStr.append( "{" );
-    foreach( NodeLevel level, downLevelList ) {
-      NodeLevel::iterator downIter;
-      for ( downIter = level.begin(); downIter != level.end(); ++downIter ) {
-        treeStr.append( downIter.key().toUtf8().constData() );
-        treeStr.append( "_" );
-        treeStr.append( QStringList(downIter.value()).join("_").toUtf8().constData() );
-        treeStr.append( downIter+1 == level.end() ? ";" : "," );
-      }
-    }
-    treeStr.append("}");
-  }
-  return treeStr;
-}
-
-//=======================================================================
-// function : 
-// purpose  : 
-//=======================================================================
-void GEOMToolsGUI::getUpwardDependency( GEOM::GEOM_BaseObject_ptr gbo, 
-                                        QList<NodeLevel> &upLevelList,  
-                                        int level )
-{
-  QString aGboIOR = GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(gbo));
-  GEOM::ListOfGBO_var depList = gbo->GetDependency();
-  for( int j = 0; j < depList->length(); j++ ) {
-    if ( level > 0 ) {
-      QStringList anIORs;
-      NodeLevel aLevelMap;
-      if ( level-1 >= upLevelList.size() ) {
-        upLevelList.append( aLevelMap );
-      } else {
-        aLevelMap = upLevelList.at(level-1);
-        if ( aLevelMap.contains( aGboIOR ) )
-          anIORs = aLevelMap.value( aGboIOR );
-      }
-      anIORs << GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(depList[j]));
-      aLevelMap.insert( aGboIOR, anIORs );
-    }
-    getUpwardDependency(depList[j], upLevelList, level++);
-  }
-}
-
-//=======================================================================
-// function : 
-// purpose  : 
-//=======================================================================
-void GEOMToolsGUI::getDownwardDependency( GEOM::GEOM_BaseObject_ptr gbo, 
-                                          QList<NodeLevel> &downLevelList, 
-                                          int level )
-{
-  SalomeApp_Application* app =
-    dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
-  if ( !app )
-    return;
-
-  SalomeApp_Study* appStudy = dynamic_cast<SalomeApp_Study*>( app->activeStudy() );
-  if ( !appStudy )
-    return;
-
-  _PTR(Study) aStudy = appStudy->studyDS();
-
-  // get GEOM component
-  CORBA::String_var geomIOR = app->orb()->object_to_string( GeometryGUI::GetGeomGen() );
-  QString geomComp = getParentComponent( aStudy->FindObjectIOR( geomIOR.in() ) );
-
-  _PTR(SObject) comp = aStudy->FindObjectID( geomComp.toLatin1().data() );
-  if ( !comp )
-    return;
-
-  _PTR(ChildIterator) it ( aStudy->NewChildIterator( comp ) );
-  for ( it->InitEx( true ); it->More(); it->Next() ) {
-    _PTR(SObject) child( it->Value() );
-    CORBA::Object_var corbaObj = GeometryGUI::ClientSObjectToObject( child );
-    GEOM::GEOM_Object_var geomObj = GEOM::GEOM_Object::_narrow( corbaObj );
-    if( CORBA::is_nil( geomObj ) )
-      continue;
-
-    GEOM::ListOfGBO_var depList = geomObj->GetDependency();
-    if( depList->length() == 0 )
-      continue;
-    QString aGoIOR = GEOMBase::GetIORFromObject( geomObj );
-
-    for( int i = 0; i < depList->length(); i++ ) {
-      if ( depList[i]->IsSame( gbo ) ) {
-        QStringList anIORs;
-        NodeLevel aLevelMap;
-        if ( level >= downLevelList.size() ) {
-          aLevelMap = NodeLevel();
-          downLevelList.append( aLevelMap );
-        } else {
-          aLevelMap = downLevelList.at(level);
-          if ( aLevelMap.contains( aGoIOR ) )
-            anIORs = aLevelMap.value( aGoIOR );
-        }
-        anIORs << GEOMBase::GetIORFromObject(GEOM::GEOM_Object::_narrow(depList[i]));
-        aLevelMap.insert( aGoIOR, anIORs );
-      }
-    }
-    getDownwardDependency(geomObj, downLevelList, level++);
-  }
-}
-
 //=====================================================================================
 // EXPORTED METHODS
 //=====================================================================================