Salome HOME
SMH: 3.0.0 preparation = merged version (POLYWORK + RTVDEBUG01) + adopation for new GUI
[modules/superv.git] / src / SUPERVGUI / SUPERVGUI.cxx
index d8055e4608ea2621e6ae1c350b234e550dc85484..e0f0a7d39a0052b2589d838b16a9b422d04ffd3b 100644 (file)
 
 using namespace std;
 #include "SUPERVGUI.h"
-
-#include "QAD_Resource.h"
-#include "QAD_FileDlg.h"
-#include "QAD_Application.h"
-#include "QAD_StudyFrame.h"
-#include "QAD_RightFrame.h"
-#include "QAD_LeftFrame.h"
-#include "QAD_ViewFrame.h"
-#include "QAD_ObjectBrowser.h"
-#include "QAD_ObjectBrowserItem.h"
-#include "QAD_MessageBox.h"
-
-#include "SALOME_Selection.h"
+#include "SUPERVGUI_DataModel.h"
+
+#include "SALOMEDSClient.hxx"
+#include <boost/shared_ptr.hpp>
+using namespace boost;
+
+#include "CAM_Application.h"
+#include "OB_Browser.h"
+#include "OB_ListItem.h"
+#include "SalomeApp_Application.h"
+#include "SalomeApp_ImportOperation.h"
+#include "SalomeApp_NameDlg.h"
+#include "SalomeApp_SelectionMgr.h"
+#include "SalomeApp_Study.h"
+#include "SUIT_Desktop.h"
+#include "SUIT_FileDlg.h"
+#include "SUIT_MessageBox.h"
+#include "SUIT_Operation.h"
+#include "SUIT_ResourceMgr.h"
+#include "SUIT_Session.h"
+#include "SUIT_Study.h"
+
+#include "SUPERVGraph_ViewManager.h"
+
+#include "SALOME_ListIO.hxx"
 #include "SALOME_ListIteratorOfListIO.hxx"
 #include "SALOME_InteractiveObject.hxx"
-#include "SALOMEGUI_ImportOperation.h"
-#include "SALOMEGUI_NameDlg.h"            
 #include "Utils_ORB_INIT.hxx"
 
 #include CORBA_SERVER_HEADER(SALOMEDS_Attributes)
 
+#include <qmenubar.h>
 
 int SUPERVGUI::factory = 0;
-SUPERVGUI Supervision("");
 
+extern "C" {
+  Standard_EXPORT CAM_Module* createModule() {
+    return new SUPERVGUI();
+  }
+}
 
-SUPERVGUI::SUPERVGUI(const QString& theName, QObject* theParent)
-     : SALOMEGUI( theName, theParent ),
-       desktop(0),
+
+SUPERVGUI::SUPERVGUI()
+     : SalomeApp_Module( "SUPERV" ),
        study(0),
        browser(0)
   //info(0)
@@ -86,35 +101,146 @@ SUPERVGUI::~SUPERVGUI() {
     };
 }
 
-void SUPERVGUI::init(QAD_Desktop* parent) {
-    Trace("SUPERVGUI::init")
-    if (desktop==0) {
-        desktop = parent;
-       study = desktop->getActiveStudy();
-        SALOME_NamingService* namingService = desktop->getNameService();
-        loadEngine(namingService);
-        browser = new SUPERVGUI_Service(namingService);
-        //info    = new SUPERVGUI_Information();
-        cursor  = desktop->cursor();
-       connect(desktop->getMainFrame(), SIGNAL(windowActivated(QWidget*)), this, SLOT(setMain(QWidget*)));
-
-       int anId = 300;
-       parent->menuBar()->changeItem(anId,parent->getComponentUserName("SUPERV"));
-       
-    };
+SUPERVGUI* SUPERVGUI::Supervision() {
+  CAM_Application* anApp = dynamic_cast<CAM_Application*>( SUIT_Session::session()->activeApplication() );
+  if ( anApp ) {
+    SUPERVGUI* aSupervModule = dynamic_cast<SUPERVGUI*>( anApp->activeModule() );
+    return aSupervModule;
+  }
+  return NULL;
+}
+
+void SUPERVGUI::createSupervAction( const int id, const QString& po_id, const QString& icon_id, const int key, const bool toggle  )
+{
+  QIconSet icon;
+  QWidget* parent = application()->desktop();
+  SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+  QPixmap pix;
+  if ( icon_id.length() ) 
+    pix = resMgr->loadPixmap( "SUPERV", tr( icon_id ) );
+  else
+    pix = resMgr->loadPixmap( "SUPERV", tr( QString( "ICO_" )+po_id ) );
+  if ( !pix.isNull() )
+    icon = QIconSet( pix );
+
+  QString tooltip    = tr( QString( "TOP_" )+po_id ),
+          menu       = tr( QString( "MEN_" )+po_id ),
+          status_bar = tr( QString( "STB_" )+po_id );
+
+  createAction( id, tooltip, icon, menu, status_bar, key, parent, toggle, this, SLOT( OnGUIEvent() )  );
 }
 
+void SUPERVGUI::initialize( CAM_Application* app )
+{
+  SalomeApp_Module::initialize( app );
+
+  SALOME_NamingService* namingService = (( SalomeApp_Application* )application())->namingService();
+  loadEngine(namingService);
+
+  browser = new SUPERVGUI_Service(namingService);
+  //info    = new SUPERVGUI_Information();
+  cursor  = application()->desktop()->cursor();
+
+  // ----- create actions --------------
+  createSupervAction( 301, "IMPORT" );
+  createSupervAction( 302, "EXPORT" );
+
+  createSupervAction( 303, "NEW" );
+  createSupervAction( 304, "MODIFY" );
+
+  createSupervAction( 305, "RELOAD" );
+  createSupervAction( 306, "RUN" );
+  createSupervAction( 307, "KILL" );
+  createSupervAction( 308, "SUSPEND/RESUME" );
+  createSupervAction( 309, "ADDNODE" );
+  createSupervAction( 310, "STEPBYSTEP" );
+
+  // ----- create menu -----------------
+  int fileId = createMenu( tr( "MEN_FILE" ), -1, -1 );
+  createMenu( 301, fileId, 10 );
+  createMenu( 302, fileId, 10 );
+  createMenu( separator(), fileId, 10 );
+
+  int editId = createMenu( tr( "MEN_EDIT" ), -1, -1 );
+  createMenu( separator(), fileId, 7 );
+  createMenu( 303, editId, -1 );
+  createMenu( 304, editId, -1 );
+
+  int supervId = createMenu( tr( "MEN_SUPERV" ), -1, -1, 10/*, 300*/ );
+  createMenu( 305, supervId, -1 );
+  createMenu( 309, supervId, -1 );
+  createMenu( separator(), fileId, 3 );
+  createMenu( 306, supervId, -1 );
+  createMenu( 310, supervId, -1 );
+  createMenu( 307, supervId, -1 );
+  createMenu( 308, supervId, -1 );     
+
+  // ----- create toolbars -------------
+  int supervisorId = createTool( tr( "TOOL_SUPERVISOR" ) );
+  createTool( 301, supervisorId );
+  createTool( 302, supervisorId );
+  createTool( 303, supervisorId );
+  createTool( 304, supervisorId );
+  createTool( 305, supervisorId );
+  createTool( 309, supervisorId );
+
+  int executionId = createTool( tr( "TOOL_EXECUTION" ) );
+  createTool( 306, executionId );
+  createTool( 310, executionId );
+  createTool( 307, executionId );
+  createTool( 308, executionId );
+
+}
+
+ void SUPERVGUI::activateModule( SUIT_Study* theStudy )
+{
+  SalomeApp_Module::activateModule( theStudy );
+
+  //---------------------------------------
+  setMenuShown( true );
+  setToolShown( true );
+
+  study = application()->activeStudy();
+
+  connect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ), 
+          this, SLOT( setMain( SUIT_ViewWindow* ) ) );
 
-QAD_StudyFrame* SUPERVGUI::createGraph() {
-  QAD_StudyFrame* aStudyFrame = study->newWindow3d(study->getNextStudyFrameName(),
-                                                  VIEW_GRAPHSUPERV, false);
-  if (aStudyFrame) {
-    connect(study, 
-           SIGNAL(supervStudyFrameClosing(QAD_ViewFrame*)), 
-           &Supervision, 
-           SLOT(onGraphClosed(QAD_ViewFrame*)));
+}
+
+QString SUPERVGUI::engineIOR() const 
+{
+ if ( !CORBA::is_nil( engine ) )
+    return QString( getApp()->orb()->object_to_string( engine));
+  return QString( "" );
+}
+
+void SUPERVGUI::deactivateModule( SUIT_Study* theStudy )
+{
+  setMenuShown( false );
+  setToolShown( false );
+
+  disconnect( application()->desktop(), SIGNAL( windowActivated( SUIT_ViewWindow* ) ), 
+             this, SLOT( setMain( SUIT_ViewWindow* ) ) );
+  //---------------------------------------
+
+  SalomeApp_Module::deactivateModule( theStudy );
+}
+
+CAM_DataModel* SUPERVGUI::createDataModel()
+{
+  return new SUPERVGUI_DataModel( this );
+}
+
+SUIT_ViewWindow* SUPERVGUI::createGraph() {
+  SUPERVGraph_ViewManager* aVM = new SUPERVGraph_ViewManager( study, application()->desktop(), new SUPERVGraph_Viewer() );
+  SUIT_ViewWindow* aVW = aVM->createViewWindow();
+  if ( aVW ) {
+    connect( aVM, 
+            SIGNAL( deleteView( SUIT_ViewWindow* ) ),
+            this,
+            SLOT( onGraphClosed( SUIT_ViewWindow* ) ) );
   }
-  return aStudyFrame;
+  return aVW;
 }
 
 
@@ -124,20 +250,21 @@ void SUPERVGUI::loadEngine(SALOME_NamingService* namingService) {
     SALOME_LifeCycleCORBA LCC(namingService);
     Engines::Component_var objComponent = LCC.FindOrLoad_Component("SuperVisionContainer", "SUPERV");
     if (CORBA::is_nil(objComponent)) {
-        QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_LOAD_SUPERV"));
+        QMessageBox::warning(application()->desktop(), tr("ERROR"), tr("MSG_CANT_LOAD_SUPERV"));
         return;
     };
 
     SUPERV::SuperG_var aSuperVisionComponent;
     aSuperVisionComponent = SUPERV::SuperG::_narrow(objComponent);
     if (CORBA::is_nil(aSuperVisionComponent)) {
-        QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_CANT_NARROW_SUPERV"));
+        QMessageBox::warning(application()->desktop(), tr("ERROR"), tr("MSG_CANT_NARROW_SUPERV"));
         return;
     };
 
     //    engine  = new SUPERV::SuperG_var;
     engine = aSuperVisionComponent;
 }
+
 /*
 bool SUPERVGUI::information(SUPERV_CNode node, bool isReadOnly) {
     Trace("SUPERVGUI::information")
@@ -146,12 +273,7 @@ bool SUPERVGUI::information(SUPERV_CNode node, bool isReadOnly) {
 */
 void SUPERVGUI::putInfo(const char* mess) {
     Trace("SUPERVGUI::putInfo")
-    desktop->putInfo(mess);
-}
-
-QAD_Desktop* SUPERVGUI::getDesktop() {
-    Trace("SUPERVGUI::getDesktop")
-    return(desktop);
+    application()->putInfo(mess);
 }
 
 SUPERV_Engine SUPERVGUI::getEngine() {
@@ -190,7 +312,7 @@ void SUPERVGUI::unregisterGraph(SUPERVGUI_Main* theGraph) {
 }
 
 
-bool SUPERVGUI::isContains(QAD_Study* theStudy, const QString theKey) {
+bool SUPERVGUI::isContains(SUIT_Study* theStudy, const QString theKey) {
   SUPERVGUI_Main* aMain;
   for (aMain = myGraphList.first(); aMain; aMain = myGraphList.next()) {
     if ((aMain->getStudy() == theStudy) && (aMain->getHashCode() == theKey))
@@ -200,17 +322,17 @@ bool SUPERVGUI::isContains(QAD_Study* theStudy, const QString theKey) {
 }
 
 
-void SUPERVGUI::onGraphClosed(QAD_ViewFrame* theViewFrame) {
-  if(SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(theViewFrame)){
-    disconnect(study, 0 , this, 0);
+void SUPERVGUI::onGraphClosed(SUIT_ViewWindow* theViewWindow) {
+  if( SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(theViewWindow) ) {
+    disconnect(supervFrame->getViewManager(), 0 , this, 0);
     SUPERVGraph_View* view = supervFrame->getViewWidget();
     SUPERVGUI_Main* aGraph = dynamic_cast<SUPERVGUI_Main*>(view);
-    if (aGraph) {
+    if ( aGraph ) {
       unregisterGraph(aGraph);
       SUPERV_Graph aDataFlow = aGraph->getDataflow();
       if ( !SUPERV_isNull( aDataFlow ) ) {
        if ( aDataFlow->IsExecuting() ) {
-         const int aMsgResult = QMessageBox::warning(QAD_Application::getDesktop(),
+         const int aMsgResult = QMessageBox::warning(application()->desktop(),
                                                      tr("WARNING"), 
                                                      tr("MSG_DF_RUNNING"), 
                                                      tr("MSG_DF_EXECUTION"), 
@@ -248,20 +370,21 @@ void SUPERVGUI::onGraphClosed(QAD_ViewFrame* theViewFrame) {
   }
 }
 
-void SUPERVGUI::setMain(QWidget* w) {
+void SUPERVGUI::setMain( SUIT_ViewWindow* w) {
   main = 0;
-  QAD_StudyFrame* aStudyFrame = dynamic_cast<QAD_StudyFrame*>(w);
-  if (!aStudyFrame) return;
+  if ( !w ) return;
 
-  study = aStudyFrame->getStudy();
-  if (!study) return;
+  study = w->getViewManager()->study();
+  if (!study) {
+    cout<<" setMain(...) : NULL study!";
+    return;
+  }
 
-  QAD_ViewFrame* viewFrame = aStudyFrame->getRightFrame()->getViewFrame();
-  if(SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(viewFrame)){
+  if(SUPERVGraph_ViewFrame* supervFrame = dynamic_cast<SUPERVGraph_ViewFrame*>(w)){
     SUPERVGraph_View* view = supervFrame->getViewWidget();
     if (view) {
       main = dynamic_cast<SUPERVGUI_Main*>(view);
-      connect(&Supervision, SIGNAL(KillMainThread(bool)), main->getMyThread(), SLOT(KillThread(bool)));
+      connect(this, SIGNAL(KillMainThread(bool)), main->getMyThread(), SLOT(KillThread(bool)));
     }
   }
   Trace("SUPERVGUI::setMain - main: "<<main);
@@ -269,25 +392,25 @@ void SUPERVGUI::setMain(QWidget* w) {
 
 void SUPERVGUI::displayDataflow() {
     Trace("SUPERVGUI::displayDataflow");
-    QAD_ObjectBrowser* aBrowser = ((QAD_StudyFrame*)(desktop->getMainFrame()->activeWindow()))->getLeftFrame()->getObjectBrowser();
+    OB_Browser* aBrowser = (( SalomeApp_Application* )application())->objectBrowser();
     SUPERV_Graph aDataFlow;
     QString aIORName;
 
-    QAD_ObjectBrowserItem* item = (QAD_ObjectBrowserItem*)(aBrowser->getListView()->currentItem());
-    SALOMEDS::SObject_var aObj = desktop->getActiveStudy()->getStudyDocument()->FindObjectID(item->getEntry().latin1());
-    SALOMEDS::GenericAttribute_var anAttr;
+    OB_ListItem* item = (OB_ListItem*)(aBrowser->getListView()->currentItem());
+    _PTR(SObject) aObj 
+      ( (( SalomeApp_Study* )(application()->activeStudy()))->studyDS()->FindObjectID(item->text(2).latin1()) );
+    _PTR(GenericAttribute) anAttr;
     if (aObj->FindAttribute(anAttr, "AttributeIOR")) {
-      SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-      Standard_CString ior = anIOR->Value();
-      aIORName = ior;
+      _PTR(AttributeIOR) anIOR ( anAttr );
+      aIORName = QString(anIOR->Value().c_str());
       if (isContains(study, aIORName)) {
-       if (QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), 
+       if (QMessageBox::warning(application()->desktop(), tr("WARNING"), 
                                 tr("MSG_GRAPH_DISPLAYED").arg(""), 
                                 QMessageBox::Yes, QMessageBox::No) == QMessageBox::No)
          return;
       }
-      //aDataFlow = engine->getStreamGraph(ior);
-      aDataFlow = engine->getGraph(ior);
+      //aDataFlow = engine->getStreamGraph(anIOR->Value().c_str());
+      aDataFlow = engine->getGraph(anIOR->Value().c_str());
       if (SUPERV_isNull(aDataFlow)) {
        QMessageBox::warning(0, tr("ERROR"), tr("MSG_ACCESS_BAD_IOR"));
        return;
@@ -303,38 +426,46 @@ void SUPERVGUI::displayDataflow() {
       }
       */
     }
-    QAD_StudyFrame* aStudyFrame = createGraph();
-    SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
-      (aStudyFrame->getRightFrame()->getViewFrame());
-    if(aViewFrame) {
-      main = new SUPERVGUI_Main(aViewFrame, desktop, aDataFlow);
-      registerGraph(aIORName, main);
-      study->showFrame(aStudyFrame);
+    SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>( createGraph() );
+    if( aViewFrame ) {
+      main = new SUPERVGUI_Main( aViewFrame, application()->desktop(), aDataFlow );
+      registerGraph( aIORName, main );
+      aViewFrame->show();
     }
 }
 
 
 void SUPERVGUI::renameDataflow() {
-  SALOME_Selection* Sel = SALOME_Selection::Selection( study->getSelection() );
-  SALOME_ListIteratorOfListIO It( Sel->StoredIObjects() );
+  SALOME_ListIO aList;
+  aList.Clear();
+  (( SalomeApp_Application* )application())->selectionMgr()->selectedObjects( aList );
+
+  SALOME_ListIteratorOfListIO It( aList );
   for ( ; It.More(); It.Next() ) {
     Handle(SALOME_InteractiveObject) IObject = It.Value();
     
-    SALOMEDS::Study_var aStudy = study->getStudyDocument();
-    SALOMEDS::SObject_var obj = aStudy->FindObjectID( IObject->getEntry() );
-    SALOMEDS::GenericAttribute_var anAttr;
-    SALOMEDS::AttributeName_var    aName;
-    if ( !obj->_is_nil() ) {
-      if (obj->FindAttribute(anAttr, "AttributeName")) {
-       aName = SALOMEDS::AttributeName::_narrow(anAttr);
-       QString nm = QString( aName->Value() );
-       nm = SALOMEGUI_NameDlg::getName( QAD_Application::getDesktop(), nm );
+    _PTR(Study) aStudy = (( SalomeApp_Study* )study)->studyDS();
+    _PTR(SObject) obj ( aStudy->FindObjectID( IObject->getEntry() ) );
+    _PTR(GenericAttribute) anAttr;
+    if ( obj ) {
+      if ( obj->FindAttribute(anAttr, "AttributeName") ) {
+       _PTR(AttributeName) aName ( anAttr );
+       QString nm = QString( aName->Value().c_str() );
+       nm = SalomeApp_NameDlg::getName( application()->desktop(), nm );
        if ( !nm.isEmpty() ) {
          // sak : 24.11.04 : fix for PAL6898 : if rename fails (study locked), 
          // a message box is displayed, and cursor is "wait cursor".  We think that "wait cursor"
          // is not neccessary here, because the rename operation is fast.
          //QApplication::setOverrideCursor( Qt::waitCursor );
-         study->renameIObject( IObject, nm );
+         //study->renameIObject( IObject, nm );
+
+         //--->
+         aName->SetValue( nm.latin1() );
+         //rename Interactive object 
+         IObject->setName( ( char* )nm.latin1() );
+         //<---
+
+         updateObjBrowser();
          //QApplication::restoreOverrideCursor();
        }
       }
@@ -345,17 +476,17 @@ void SUPERVGUI::renameDataflow() {
 void SUPERVGUI::exportDataflow() {
     Trace("SUPERVGUI::exportDataflow")
     if ( main==0 ) {
-      QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
+      QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
     } 
     else if ( SUPERV_isNull( main->getDataflow() ) ) { // should not normally happen..
-      QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
+      QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_EXPORT"));
     } 
     else {
-      QString f = QAD_FileDlg::getFileName(QAD_Application::getDesktop(),
-                                          "",
-                                          "*.xml",
-                                          tr("TTL_EXPORT_DATAFLOW"),
-                                          false);
+      QString f = SUIT_FileDlg::getFileName(application()->desktop(),
+                                           "",
+                                           "*.xml",
+                                           tr("TTL_EXPORT_DATAFLOW"),
+                                           false);
       if ( !f.isEmpty() ) {
        
        // asv : bug [VSR Bugs and Improvements in Supervisor] 1.8 : when exporting a file, 
@@ -371,7 +502,7 @@ void SUPERVGUI::exportDataflow() {
            QFile::remove( aBackupFile );
        }
        else {
-         QMessageBox::warning(QAD_Application::getDesktop(), tr("ERROR"), tr("MSG_BAD_WRITING").arg(aBackupFile));
+         QMessageBox::warning(application()->desktop(), tr("ERROR"), tr("MSG_BAD_WRITING").arg(aBackupFile));
        }
       }
     }
@@ -408,6 +539,13 @@ QString SUPERVGUI::createBackupFile( const QString& theOriginalFileName ) {
   return theBackupFileName;
 }
 
+void SUPERVGUI::windows( QMap<int, int>& mappa ) const
+{
+  mappa.insert( SalomeApp_Application::WT_ObjectBrowser, Qt::DockLeft );
+  mappa.insert( SalomeApp_Application::WT_PyConsole, Qt::DockBottom );
+  mappa.insert( SalomeApp_Application::WT_LogWindow, Qt::DockBottom );
+}
+
 void SUPERVGUI::newDataflow() {
   createDataflow( New );
 }
@@ -424,9 +562,9 @@ bool SUPERVGUI::createDataflow( const NEW_DF_MODE mode ) {
   Trace("SUPERVGUI::createDataflow, mode = " << mode );
 
   // asv : 27.01.05 : fix for PAL7823 : if the study is locked - warn the user and return.
-  SALOMEDS::Study_var aStudy = study->getStudyDocument();
+  _PTR(Study) aStudy = (( SalomeApp_Study* )study)->studyDS();
   if ( aStudy->GetProperties()->IsLocked() ) {
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WRN_WARNING"), tr("WRN_STUDY_LOCKED"));
+    QMessageBox::warning(application()->desktop(), tr("WRN_WARNING"), tr("WRN_STUDY_LOCKED"));
     return false;
   }
 
@@ -435,13 +573,13 @@ bool SUPERVGUI::createDataflow( const NEW_DF_MODE mode ) {
   QString f; // file name.  declared here because may be used below in error msg construction..
   if ( mode == Import || mode == Modify ) { // 0. import or modify existing dataflow - select XML file
     QString title = QString( "TLT_CREATE_DF_%1" ).arg( mode );
-    f = QAD_FileDlg::getFileName( QAD_Application::getDesktop(), "", "*.xml", tr( title ), true );
+    f = SUIT_FileDlg::getFileName( application()->desktop(), "", "*.xml", tr( title ), true );
     if ( f.isEmpty() ) // pressed Cancel in file select dialog
       return false;
     
     // check if study already contains a graph imported from the same file
     if ( isContains( study, f ) ) {
-      if ( QMessageBox::warning( QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_GRAPH_DISPLAYED").arg(f), 
+      if ( QMessageBox::warning( application()->desktop(), tr("WARNING"), tr("MSG_GRAPH_DISPLAYED").arg(f), 
                                 QMessageBox::Yes, QMessageBox::No) == QMessageBox::No )
        return false;
     }
@@ -454,23 +592,21 @@ bool SUPERVGUI::createDataflow( const NEW_DF_MODE mode ) {
 
   if ( CORBA::is_nil( aGraph ) ) {
     QString msg( mode == New ? tr("MSG_CANT_CREATE_DF") : tr("MSG_BAD_FILE").arg(f) );
-    QAD_MessageBox::warn1( QAD_Application::getDesktop(), tr("ERROR"), tr(msg), tr("BUT_OK") );
+    SUIT_MessageBox::warn1( application()->desktop(), tr("ERROR"), tr(msg), tr("BUT_OK") );
     return false;
   }
 
   // 2. create a ViewFrame object
-  QAD_StudyFrame* aStudyFrame = createGraph();
-  SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>
-    (aStudyFrame->getRightFrame()->getViewFrame());
+  SUPERVGraph_ViewFrame* aViewFrame = dynamic_cast<SUPERVGraph_ViewFrame*>( createGraph() );
   if ( aViewFrame ) {
 
     // 3. bind Graph and ViewFrame == create SUPERVGUI_Main object
-    main = new SUPERVGUI_Main(aViewFrame, desktop, aGraph);
+    main = new SUPERVGUI_Main( aViewFrame, application()->desktop(), aGraph );
     if ( mode == New )
       main->addNode();
     else
       registerGraph( f, main );
-    study->showFrame(aStudyFrame);
+    aViewFrame->show();
   }
 
   return true;
@@ -481,7 +617,7 @@ void SUPERVGUI::reloadDataflow() {
   if ( main )  
     main->sync();
   else 
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RELOAD"));
+    QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RELOAD"));
 }
 
 void SUPERVGUI::runDataflow() {
@@ -489,7 +625,7 @@ void SUPERVGUI::runDataflow() {
   if ( main )
     main->run( /*andSuspend=*/false );
   else
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
+    QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
 }
 
 void SUPERVGUI::stepByStep() {
@@ -497,7 +633,7 @@ void SUPERVGUI::stepByStep() {
   if ( main )
     main->run( /*andSuspend=*/true );
   else
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
+    QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_RUN"));
 }
 
 void SUPERVGUI::killDataflow() {
@@ -505,7 +641,7 @@ void SUPERVGUI::killDataflow() {
   if ( main )
     main->kill();
   else
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_KILL"));
+    QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_KILL"));
 }
 
 void SUPERVGUI::suspendResumeDataflow() {
@@ -513,7 +649,7 @@ void SUPERVGUI::suspendResumeDataflow() {
   if ( main )
     main->suspendResume();
   else
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_SUSPEND"));
+    QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_SUSPEND"));
 }
 
 void SUPERVGUI::showComponents() {
@@ -522,17 +658,17 @@ void SUPERVGUI::showComponents() {
     if ( main->isEditable() )
       main->addNode();
     else
-      QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOTEDITABLE"));
+      QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOTEDITABLE"));
   }
   else
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_ADD"));
+    QMessageBox::warning(application()->desktop(), tr("WARNING"), tr("MSG_NOWINDOW_TO_ADD"));
 
 }
 
 
-bool SUPERVGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QString& theContext, const QString& theParent, const QString& theObject) {
+/*bool SUPERVGUI::CustomPopup(QPopupMenu* popup, const QString& theContext, const QString& theParent, const QString& theObject) {
   Trace("SUPERVGUI::customPopup");
-  Supervision.init(parent);
+  Supervision.init();
   if(popup->count() > 3) {
     // Temporary code: is to be deleted soon
     popup->removeItem(QAD_Display_Popup_ID);
@@ -542,40 +678,45 @@ bool SUPERVGUI::CustomPopup(QAD_Desktop* parent, QPopupMenu* popup, const QStrin
     if (id < 0 && id != -1) popup->removeItem(id); // separator
     // Temporary code end
   }
-    SALOME_Selection* Sel = SALOME_Selection::Selection(study->getSelection() );
-    if ((Sel==NULL) || (Sel->IObjectCount() == 0)) return false;
-
-    if (Sel->IObjectCount() == 1) {
-      Handle(SALOME_InteractiveObject) anIObj = Sel->firstIObject();
-
-      // insert SUPERV-specific popup items here
+  
+  SALOME_ListIO aList;
+  aList.Clear();
+  (( SalomeApp_Application* )application())->selectionMgr()->selectedObjects( aList );
+  if ( aList.Extent() == 0 ) return false;
+  
+  if ( aList.Extent() == 1 ) {
+    Handle(SALOME_InteractiveObject) anIObj = aList.First();
+    
+    // insert SUPERV-specific popup items here
+    
+    bool isDataflow, ownObj;
+    whatIsSelected(anIObj, ownObj, isDataflow);
+    
+    if (isDataflow) {
+      popup->insertItem(tr( "MSG_RENAME" ), this, SLOT(renameDataflow()));
+      popup->insertItem("Display", this, SLOT(displayDataflow()));
+      popup->insertSeparator();
+    }
+    if (ownObj)
+      popup->insertItem(tr("MSG_DELETE"), this, SLOT(deleteObject()));
+  }
 
-      bool isDataflow, ownObj;
-      whatIsSelected(anIObj, ownObj, isDataflow);
+  if ( aList.Extent() > 1 ) {
+    int aIObjCount = 0;
+    SALOME_ListIteratorOfListIO It_forCheckOwner( aList );
+    for(;It_forCheckOwner.More();It_forCheckOwner.Next()) {
+      Handle(SALOME_InteractiveObject) anIObj = It_forCheckOwner.Value();
+      bool aIsOwner, aIsDataflow;
+      whatIsSelected(anIObj, aIsOwner, aIsDataflow);
       
-      if (isDataflow) {
-       popup->insertItem(tr( "MSG_RENAME" ), this, SLOT(renameDataflow()));
-       popup->insertItem("Display", this, SLOT(displayDataflow()));
-       popup->insertSeparator();
-      }
-      if (ownObj)
-       popup->insertItem(tr("MSG_DELETE"), this, SLOT(deleteObject()));
-    }
-    if (Sel->IObjectCount() > 1) {
-      int aIObjCount = 0;
-      SALOME_ListIteratorOfListIO It_forCheckOwner(Sel->StoredIObjects());
-      for(;It_forCheckOwner.More();It_forCheckOwner.Next()) {
-       Handle(SALOME_InteractiveObject) anIObj = It_forCheckOwner.Value();
-       bool aIsOwner, aIsDataflow;
-       whatIsSelected(anIObj, aIsOwner, aIsDataflow);
-       
-       if (aIsOwner) aIObjCount++;
-      }
-      if (aIObjCount == Sel->IObjectCount())  //all selected objects belong to Supervision
-       popup->insertItem(tr("MSG_DELETE"), this, SLOT(deleteObject()));
+      if (aIsOwner) aIObjCount++;
     }
+    if ( aIObjCount == aList.Extent() )  //all selected objects belong to Supervision
+      popup->insertItem(tr("MSG_DELETE"), this, SLOT(deleteObject()));
+  }
+
   return(true);
-}
+  }*/
 
  
 
@@ -589,24 +730,21 @@ void SUPERVGUI::whatIsSelected(const Handle(SALOME_InteractiveObject)& theObj, b
 
   if (theObj.IsNull()) return;
   
-  SALOMEDS::Study_var aStudy = study->getStudyDocument();
-  SALOMEDS::SObject_var  obj = aStudy->FindObjectID( theObj->getEntry() );
-
-  if ( !obj->_is_nil() ) {
-    SALOMEDS::SComponent_var comp = obj->GetFatherComponent();
-    if ( !comp->_is_nil() ) {
-      SALOMEDS::GenericAttribute_var anAttr;
-      SALOMEDS::AttributeName_var    aName;
+  _PTR(Study) aStudy = (( SalomeApp_Study* )study)->studyDS();
+  _PTR(SObject) obj ( aStudy->FindObjectID( theObj->getEntry() ) );
+
+  if ( obj ) {
+    _PTR(SComponent) comp ( obj->GetFatherComponent() );
+    if ( comp ) {
+      _PTR(GenericAttribute) anAttr;
       if (comp->FindAttribute(anAttr, "AttributeName")) {
-       aName = SALOMEDS::AttributeName::_narrow(anAttr);
-       QString compName(aName->Value());
-       //if (compName.compare(STUDY_SUPERVISION) == 0) {
-       if (compName.compare(QAD_Application::getDesktop()->getComponentUserName("SUPERV")) == 0) {
-         SALOMEDS::GenericAttribute_var anAttr;
+       _PTR(AttributeName) aName ( anAttr );
+       QString compName(aName->Value().c_str());
+       if ( compName.compare( (( CAM_Application* )application())->moduleTitle( moduleName() ) ) == 0 ) {
+         _PTR(GenericAttribute) anAttr;
          if (obj->FindAttribute(anAttr, "AttributeIOR")) {
-           SALOMEDS::AttributeIOR_var anIOR = SALOMEDS::AttributeIOR::_narrow(anAttr);
-           //SUPERV_Graph aDataFlow = engine->getStreamGraph(anIOR->Value());
-           SUPERV_Graph aDataFlow = engine->getGraph(anIOR->Value());
+           _PTR(AttributeIOR) anIOR ( anAttr );
+           SUPERV_Graph aDataFlow = engine->getGraph(anIOR->Value().c_str());
            if (!SUPERV_isNull(aDataFlow)) {
              if (aDataFlow->IsStreamGraph()) {
                if (!SUPERV_isNull(aDataFlow->ToStreamGraph()))
@@ -616,8 +754,8 @@ void SUPERVGUI::whatIsSelected(const Handle(SALOME_InteractiveObject)& theObj, b
                theIsDataflow = true;
            }
          }
-         CORBA::String_var anObjectID = obj->GetID();
-         CORBA::String_var aComponentID = comp->GetID();
+         CORBA::String_var anObjectID = obj->GetID().c_str();
+         CORBA::String_var aComponentID = comp->GetID().c_str();
          if (strcmp(anObjectID, aComponentID)) theIsOwner = true;          
        }
       }
@@ -626,117 +764,122 @@ void SUPERVGUI::whatIsSelected(const Handle(SALOME_InteractiveObject)& theObj, b
 }
 
 void SUPERVGUI::deleteObject() {
-  SALOME_Selection* Sel = SALOME_Selection::Selection(study->getSelection() );
-  if ((Sel==NULL) || (Sel->IObjectCount() == 0)) return;
+  SALOME_ListIO aList;
+  aList.Clear();
+  (( SalomeApp_Application* )application())->selectionMgr()->selectedObjects( aList );
+  if ( aList.Extent() == 0 ) return;
    
   // sak : 24.11.04 : fix for PAL6899 : if the study is locked - warn the user and return.
-  SALOMEDS::Study_var aStudy = study->getStudyDocument();
+  _PTR(Study) aStudy = (( SalomeApp_Study* )study)->studyDS();
   if ( aStudy->GetProperties()->IsLocked() ) {
-    QMessageBox::warning(QAD_Application::getDesktop(), tr("WRN_WARNING"), tr("WRN_STUDY_LOCKED"));
+    QMessageBox::warning(application()->desktop(), tr("WRN_WARNING"), tr("WRN_STUDY_LOCKED"));
     return;
   }
 
   // sak : 24.11.04 : fix for PAL6901 : Incorrect deletion of the objects : pressing ESC button
   // emitted "YES" button click, now it is corrected, and treated as "NO" button click.
-  if (QMessageBox::warning(QAD_Application::getDesktop(),
+  if (QMessageBox::warning(application()->desktop(),
                           tr("WARNING"),
                           tr("MSG_ASK_DELETE"),
                           QMessageBox::No, QMessageBox::Yes) != QMessageBox::Yes)
     return;
    
-  SALOME_ListIteratorOfListIO It(Sel->StoredIObjects());
+  SALOME_ListIteratorOfListIO It( aList );
   for(;It.More();It.Next()) {
     Handle(SALOME_InteractiveObject) anIObj = It.Value();
     bool aIsOwner, aIsDataflow;
     whatIsSelected(anIObj, aIsOwner, aIsDataflow);
     
-    SALOMEDS::SObject_var  aObj = aStudy->FindObjectID( anIObj->getEntry() );
-    if (!aObj->_is_nil()) {
-      QAD_Operation* op = new SALOMEGUI_ImportOperation( study );
-      SALOMEDS::StudyBuilder_var aBuilder = aStudy->NewBuilder();
+    _PTR(SObject) aObj ( aStudy->FindObjectID( anIObj->getEntry() ) );
+    if ( aObj ) {
+      SUIT_Operation* op = new SalomeApp_ImportOperation( application() );
+      _PTR(StudyBuilder) aBuilder ( aStudy->NewBuilder() );
       op->start();
-      aBuilder->RemoveObjectWithChildren(aObj);
-      op->finish();
+      aBuilder->RemoveObjectWithChildren( aObj );
+      op->commit();
     }
   }
-  Sel->ClearIObjects() ; 
+  (( SalomeApp_Application* )application())->selectionMgr()->clearSelected();
 }
 
-bool SUPERVGUI::OnGUIEvent(int command, QAD_Desktop* parent) {
-  Supervision.init(parent);
+void SUPERVGUI::OnGUIEvent()
+{
+  const QObject* obj = sender();
+  if ( !obj || !obj->inherits( "QAction" ) )
+    return;
+  int id = actionId((QAction*)obj);
+  if ( id != -1 )
+    OnGUIEvent( id );
+}
+
+bool SUPERVGUI::OnGUIEvent(int command) {
   switch (command) {
   case 301: 
-    Supervision.importDataflow();
+    importDataflow();
     return(false);
     
   case 302: 
-    Supervision.exportDataflow();
+    exportDataflow();
     return(false);
     
   case 303: 
-    Supervision.newDataflow();
+    newDataflow();
     return(false);
     
   case 304: 
-    Supervision.modifyDataflow();
+    modifyDataflow();
     return(false);
     
   case 305:
-    Supervision.reloadDataflow();
+    reloadDataflow();
     return(false);
     
   case 306:
-    Supervision.runDataflow();
+    runDataflow();
     return(false);
     
   case 307: 
-    Supervision.killDataflow();
+    killDataflow();
     return(false);
     
   case 308:
-    Supervision.suspendResumeDataflow();
+    suspendResumeDataflow();
     return(false);
     
   case 309: 
-    Supervision.showComponents();
+    showComponents();
     return(false);
     
   case 310: 
-    Supervision.stepByStep();
+    stepByStep();
     return(false);
     
   default: 
-    QMessageBox::warning(QAD_Application::getDesktop(), "Supervision Error", "Unknown Command From Salome");
+    QMessageBox::warning(application()->desktop(), "Supervision Error", "Unknown Command From Salome");
     return(false);
   }
 }
 
-bool SUPERVGUI::SetSettings(QAD_Desktop* parent) {
+/*bool SUPERVGUI::SetSettings() {
   Trace("SUPERVGUI::SetSettings");
-  Supervision.init(parent);
+  Supervision.init();
   return(true);
-}
+  }*/
 
-void SUPERVGUI::DefinePopup(QString& theContext, QString& theParent, QString& theObject) {
+/*void SUPERVGUI::DefinePopup(QString& theContext, QString& theParent, QString& theObject) {
   theObject  = "";
   theContext = "";
-}
+  }*/
 
-bool SUPERVGUI::ActiveStudyChanged(QAD_Desktop* parent) {
+bool SUPERVGUI::ActiveStudyChanged() {
   Trace("SUPERVGUI::activeStudyChanged");
-  study = desktop->getActiveStudy();
+  study = application()->activeStudy();
   return true;
 }
 
-void SUPERVGUI::SupportedViewType (int* buffer, int bufferSize)
+/*void SUPERVGUI::SupportedViewType (int* buffer, int bufferSize)
 {
   if (!buffer || !bufferSize) return;
   buffer[0] = (int)VIEW_GRAPHSUPERV;
-}
+}*/
 
-extern "C"
-{
-  Standard_EXPORT SALOMEGUI* GetComponentGUI() {
-    return &Supervision;
-  }
-}