]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Application::onLoadDoc() method implementation (for VISU batchmode tests)
authorjfa <jfa@opencascade.com>
Thu, 23 Jun 2005 11:11:13 +0000 (11:11 +0000)
committerjfa <jfa@opencascade.com>
Thu, 23 Jun 2005 11:11:13 +0000 (11:11 +0000)
src/Qtx/QtxMainWindow.cxx
src/STD/STD_Application.cxx
src/STD/STD_Application.h
src/SUIT/SUIT_Application.cxx
src/SUIT/SUIT_Application.h
src/SUIT/SUIT_Session.cxx
src/SalomeApp/SalomeApp_Application.cxx
src/SalomeApp/SalomeApp_Application.h
src/SalomeApp/SalomeApp_Study.cxx

index f48012050214d1f285195f361ef1c59634b02555..ad5c5141c5791e140cd184e990bf000a5c8d1e2c 100644 (file)
@@ -58,8 +58,8 @@ bool QtxMainWindow::Filter::eventFilter( QObject* o, QEvent* e )
 
 QtxMainWindow::QtxMainWindow( QWidget* parent, const char* name, WFlags f )
 : QMainWindow( parent, name, f ),
-myMenuBar( 0 ),
-myStatusBar( 0 )
+myMenuBar( NULL ),
+myStatusBar( NULL )
 {
 }
 
index 946f0285a4197184f8639ac837703e3f8ca25fa7..072ef073827c396341561b0ad14c557249b300fa 100755 (executable)
@@ -231,10 +231,11 @@ bool STD_Application::onOpenDoc( const QString& aName )
   if ( !activeStudy() )
   {
     // if no study - open in current desktop
-    createEmptyStudy();
-    res = activeStudy()->openDocument( aName );
-    updateDesktopTitle();
-    updateCommandsStatus();
+    // jfa 21.06.2005:createEmptyStudy();
+    // jfa 21.06.2005:res = activeStudy()->openDocument( aName );
+    // jfa 21.06.2005:updateDesktopTitle();
+    // jfa 21.06.2005:updateCommandsStatus();
+    res = useFile( aName ); // jfa 21.06.2005
   }
   else
   {
@@ -261,6 +262,43 @@ bool STD_Application::onOpenDoc( const QString& aName )
   return res;
 }
 
+bool STD_Application::onLoadDoc( const QString& aName )
+{
+  bool res = true;
+  if ( !activeStudy() )
+  {
+    // if no study - load in current desktop
+    res = useStudy( aName );
+  }
+  else
+  {
+    // if study exists - load in new desktop. Check: is the same file is loaded?
+    SUIT_Session* aSession = SUIT_Session::session();
+    QPtrList<SUIT_Application> aAppList = aSession->applications();
+    bool isAlreadyOpen = false;
+    SUIT_Application* aApp = 0;
+    for ( QPtrListIterator<SUIT_Application> it( aAppList ); it.current() && !isAlreadyOpen; ++it )
+    {
+      aApp = it.current();
+      if ( aApp->activeStudy()->studyName() == aName )
+        isAlreadyOpen = true;
+    }
+    if ( !isAlreadyOpen )
+    {
+      // temporary commented because of "pure virtual method called" execution error.
+      // current state of code is not right, but works somehow.
+      // SALOMEDS::Study of the first found application is replaced by the new one,
+      // while normally the new study must be used by a new application
+      //jfa tmp:aApp = startApplication( 0, 0 );
+      if ( aApp )
+        res = aApp->useStudy( aName );
+    }
+    else
+      aApp->desktop()->setActiveWindow();
+  }
+  return res;
+}
+
 void STD_Application::beforeCloseDoc( SUIT_Study* )
 {
 }
index e5fecef175b0613e0f7f969d69c724b9b7994758..069854332b2e6325fb3d7d71b2b30a60130df0b7 100755 (executable)
@@ -78,6 +78,9 @@ public slots:
   virtual void          onOpenDoc();
   virtual bool          onOpenDoc( const QString& );
 
+  //virtual void          onLoadDoc();
+  virtual bool          onLoadDoc( const QString& );
+
   virtual void          onExit();
 
   virtual void          onCopy();
index 4acf370ac4431bbcccd00fc84c2169acf328d83e..7d5b6d99c0b97c6a156e2880bcf5cb2b654f2a7b 100755 (executable)
@@ -59,6 +59,12 @@ bool SUIT_Application::useFile( const QString& theFileName )
   createEmptyStudy();
   if ( activeStudy() )
     return activeStudy()->openDocument( theFileName );
+  return false;
+}
+
+bool SUIT_Application::useStudy( const QString& theName )
+{
+  return false;
 }
 
 void SUIT_Application::createEmptyStudy()
index 804c65f2af8cdf4f58607eb24f82cf82f6bcb809..7d67c9f48c0af6efa2c1a31f64196805ae67542c 100755 (executable)
@@ -50,8 +50,11 @@ public:
   //! Shows the application's main widget. For non GUI application must be redefined.
   virtual void          start();
 
-  //! Loads document <theFileName> into active Study. If Study is empty - creates it.
-  virtual bool          useFile( const QString& );
+  //! Opens document <theFileName> into active Study. If Study is empty - creates it.
+  virtual bool          useFile( const QString& theFileName);
+
+  //! Loads document <theName> into active Study. If Study is empty - creates it.
+  virtual bool          useStudy( const QString& theName);
 
   //! Creates new empty Study if active Study = 0
   virtual void          createEmptyStudy();
@@ -127,7 +130,8 @@ private:
 //! This function must return a new application instance.
 extern "C"
 {
-  typedef SUIT_Application* (*APP_CREATE_FUNC)( int, char** );
+  //jfa 22.06.2005:typedef SUIT_Application* (*APP_CREATE_FUNC)( int, char** );
+  typedef SUIT_Application* (*APP_CREATE_FUNC)();
 }
 
 #define APP_CREATE_NAME "createApplication"
index 9dcef329a14af5edd78440d78d3189b6f9b0b372..082d49addffcdc87b3dbc5c4c2dcbc917925ce78 100755 (executable)
@@ -66,7 +66,8 @@ SUIT_Application* SUIT_Session::startApplication( const QString& name, int args,
     return 0;
   }
 
-  myAppLibs.insert( appName, libHandle );
+  if (!myAppLibs.contains(appName) || !myAppLibs[appName]) // jfa 22.06.2005
+    myAppLibs.insert( appName, libHandle );
 
   APP_CREATE_FUNC crtInst = 0;
 
@@ -90,7 +91,8 @@ SUIT_Application* SUIT_Session::startApplication( const QString& name, int args,
     myResMgr->loadLanguage();
   }
 
-  SUIT_Application* anApp = crtInst( args, argv );
+  //jfa 22.06.2005:SUIT_Application* anApp = crtInst( args, argv );
+  SUIT_Application* anApp = crtInst();
   if ( !anApp )
   {
     SUIT_MessageBox::warn1(0, tr( "Error" ), tr( "Can not find function %1. %2").arg( APP_CREATE_NAME ).arg( lastError() ), tr( "Ok" ) );
index 3f9eb7c3067fe6ce905eddcf3e740e908b52342e..1432fffd6bdcf3d3d540ad8a1c3f89971b0b14fc 100644 (file)
@@ -524,6 +524,22 @@ bool SalomeApp_Application::onOpenDoc( const QString& aName )
   return res;
 }
 
+bool SalomeApp_Application::onLoadDoc( const QString& aName )
+{
+  bool res = CAM_Application::onLoadDoc( aName );
+
+  /*jfa tmp:QAction* a = action( MRUId );
+  if ( a && a->inherits( "QtxMRUAction" ) )
+  {
+    QtxMRUAction* mru = (QtxMRUAction*)a;
+    if ( res )
+      mru->insert( aName );
+    else
+      mru->remove( aName );
+  }*/
+  return res;
+}
+
 void SalomeApp_Application::onSelection()
 {
   onSelectionChanged();
@@ -641,6 +657,18 @@ void SalomeApp_Application::onOpenWith()
   QApplication::restoreOverrideCursor();
 }
 
+bool SalomeApp_Application::useStudy(const QString& theName)
+{
+  createEmptyStudy();
+  SalomeApp_Study* aStudy = dynamic_cast<SalomeApp_Study*>(activeStudy());
+  bool res = false;
+  if (aStudy)
+    res = aStudy->loadDocument( theName );
+  updateDesktopTitle();
+  updateCommandsStatus();
+  return res;
+}
+
 void SalomeApp_Application::setActiveStudy( SUIT_Study* study )
 {
   CAM_Application::setActiveStudy( study );
index 5c220cfef16b0bd6d74ed117cf1a81384393e720..1999ef00e248a8fabb39c07f057e4480f02e6a5e 100644 (file)
@@ -65,6 +65,8 @@ public:
   virtual CAM_Module*                 loadModule( const QString& );
   virtual bool                        activateModule( const QString& );
   
+  virtual bool                        useStudy( const QString& );
+
   SalomeApp_SelectionMgr*             selectionMgr() const;
 
   LogWindow*                          logWindow();
@@ -115,6 +117,7 @@ public slots:
   virtual void                        onOpenDoc();
   virtual void                        onHelpAbout();
   virtual bool                        onOpenDoc( const QString& );
+  virtual bool                        onLoadDoc( const QString& );
   virtual void                        onCopy();
   virtual void                        onPaste();  
 
index 0d6c28ae57b40eb64b0123cb8bd82367336eb81c..aa812a9748269d2397610c8de246c13cad61bbe6 100644 (file)
@@ -120,16 +120,17 @@ bool SalomeApp_Study::loadDocument( const QString& theStudyName )
 
     if ( aComponent->ComponentDataType() == "Interface Applicative" )
       continue; // skip the magic "Interface Applicative" component
-    
+
     SalomeApp_DataModel::BuildTree( aComponent, root(), this );
   }
 
   // TODO: potentially unsafe call, since base study's openDocument() might try to access the file directly - to be improved
+  //bool res = true;
   bool res = CAM_Study::openDocument( theStudyName );
 
-  emit opened( this );
+  //emit opened( this );
 
-  return res;  
+  return res;
 }
 
 //=======================================================================