]> SALOME platform Git repositories - modules/gui.git/commitdiff
Salome HOME
Issue 0021124: EDF 1731 GUI: Unexpected behaviour of sg.Display() command
authorinv <inv@opencascade.com>
Fri, 24 Dec 2010 14:18:34 +0000 (14:18 +0000)
committerinv <inv@opencascade.com>
Fri, 24 Dec 2010 14:18:34 +0000 (14:18 +0000)
src/LightApp/LightApp_Study.cxx
src/LightApp/LightApp_Study.h
src/SALOME_SWIG/SALOMEGUI_Swig.cxx
src/SalomeApp/SalomeApp_Study.cxx
src/SalomeApp/SalomeApp_Study.h

index 7f2ee5e950d5435fcd0a6f0fcdac9426329fbbff..ae8e174c491003e88d7a1b0ffc427570103bcebe 100644 (file)
@@ -462,3 +462,24 @@ void LightApp_Study::components( QStringList& comp ) const
       comp.append( obj->entry() );
   }
 }
+
+/*!
+  Get the entry for the given module
+  \param comp - list to be filled
+  \return module root's entry
+*/
+QString LightApp_Study::centry( const QString& comp ) const
+{
+  QString e;
+  ModelList dmlist;
+  dataModels( dmlist );
+  QListIterator<CAM_DataModel*> it( dmlist );
+  while ( it.hasNext() && e.isEmpty() ) {
+    CAM_DataModel* dm = it.next();
+    if ( dm->module() && dm->module()->name() == comp ) {
+      LightApp_DataObject* r = dynamic_cast<LightApp_DataObject*>( dm->root() );
+      if ( r ) e = r->entry();
+    }
+  }
+  return e;
+}
index 314b877463fcb1f13fe02804bd1343a41f94831d..c4ef9ce69f0308c49c486455c07facc134a2ba6e 100644 (file)
@@ -69,6 +69,7 @@ public:
   virtual bool        isComponent( const QString& ) const;
   virtual void        children( const QString&, QStringList& ) const;
   virtual void        components( QStringList& ) const;
+  virtual QString     centry( const QString& ) const;
 
 protected:
   virtual void        saveModuleData ( QString theModuleName, QStringList theListOfFiles );
index 2a33e342f2f7291e59f78009cd3586a78dc980ca..bf7f7d830b163a7c7d7b8fe61ffe64148faef306 100644 (file)
@@ -33,6 +33,7 @@
 #include <SUIT_DataObjectIterator.h>
 #include <CAM_DataModel.h>
 #include <LightApp_Application.h>
+#include <LightApp_Displayer.h>
 #include <LightApp_Study.h>
 #include <LightApp_Module.h>
 #include <LightApp_DataObject.h>
@@ -416,8 +417,6 @@ void SALOMEGUI_Swig::ClearIObjects()
   The presentable object should be previously created and
   displayed in this viewer.
 
-  For the current moment implemented for OCC and VTK viewers only.
-
   \param theEntry object entry
 */              
 void SALOMEGUI_Swig::Display( const char* theEntry )
@@ -428,13 +427,20 @@ void SALOMEGUI_Swig::Display( const char* theEntry )
   public:
     TEvent( const char* theEntry ) : myEntry( theEntry ) {}
     virtual void Execute() {
-      if ( LightApp_Application* anApp = getApplication() ) {
-        SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
-        if ( window ) {
-          SALOME_View* view = dynamic_cast<SALOME_View*>( window->getViewManager()->getViewModel() );
-          if ( view )
-            view->Display( view->CreatePrs( myEntry.toLatin1() ) );
-        }
+      LightApp_Application* anApp  = getApplication();
+      LightApp_Study*       aStudy = getActiveStudy();
+      if ( anApp && aStudy ) {
+       QString mname = anApp->moduleTitle( aStudy->componentDataType( myEntry ) );
+       LightApp_Displayer* d = LightApp_Displayer::FindDisplayer( mname, true );
+       if ( d ) {
+         QStringList entries;
+         if( aStudy->isComponent( myEntry ) )
+           aStudy->children( myEntry, entries );
+         else
+           entries.append( myEntry );
+         foreach( QString entry, entries )
+           d->Display( aStudy->referencedToEntry( entry ), false, 0 );
+       }
       }
     }
   };
@@ -448,8 +454,6 @@ void SALOMEGUI_Swig::Display( const char* theEntry )
   The presentable object should be previously created and 
   displayed in this viewer.
 
-  For the current moment implemented for OCC and VTK viewers only.
-  
   \param theEntry object entry
 */
 void SALOMEGUI_Swig::DisplayOnly( const char* theEntry )
@@ -461,15 +465,27 @@ void SALOMEGUI_Swig::DisplayOnly( const char* theEntry )
     TEvent( const char* theEntry ) : myEntry( theEntry ) {}
     virtual void Execute()
     {
-      if ( LightApp_Application* anApp = getApplication() ) {
-        SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
-        if ( window ) {
-          SALOME_View* view = dynamic_cast<SALOME_View*>( window->getViewManager()->getViewModel() );
-          if ( view ) {
-            view->EraseAll( false );
-            view->Display( view->CreatePrs( myEntry.toLatin1() ) );
-          }
-        }
+      LightApp_Application* anApp  = getApplication();
+      LightApp_Study*       aStudy = getActiveStudy();
+      if ( anApp && aStudy ) {
+       QStringList comps;
+       aStudy->components( comps );
+       foreach( QString comp, comps ) {
+         LightApp_Displayer* d = LightApp_Displayer::FindDisplayer( anApp->moduleTitle( comp ), true );
+         if ( d ) d->EraseAll( false, false, 0 );
+       }
+
+       QString mname = anApp->moduleTitle( aStudy->componentDataType( myEntry ) );
+       LightApp_Displayer* d = LightApp_Displayer::FindDisplayer( mname, true );
+       if ( d ) {
+         QStringList entries;
+         if( aStudy->isComponent( myEntry ) )
+           aStudy->children( myEntry, entries );
+         else
+           entries.append( myEntry );
+         foreach( QString entry, entries )
+           d->Display( aStudy->referencedToEntry( entry ), false, 0 );
+       }
       }
     }
   };
@@ -482,8 +498,6 @@ void SALOMEGUI_Swig::DisplayOnly( const char* theEntry )
   The presentable object should be previously created and 
   displayed in this viewer.
 
-  For the current moment implemented for OCC and VTK viewers only.
-
   \param theEntry object entry
 */              
 void SALOMEGUI_Swig::Erase( const char* theEntry )
@@ -495,13 +509,20 @@ void SALOMEGUI_Swig::Erase( const char* theEntry )
     TEvent( const char* theEntry ) : myEntry( theEntry ) {}
     virtual void Execute()
     {
-      if ( LightApp_Application* anApp = getApplication() ) {
-        SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
-        if ( window ) {
-          SALOME_View* view = dynamic_cast<SALOME_View*>( window->getViewManager()->getViewModel() );
-          if ( view )
-            view->Erase( view->CreatePrs( myEntry.toLatin1() ) );
-        }
+      LightApp_Application* anApp  = getApplication();
+      LightApp_Study*       aStudy = getActiveStudy();
+      if ( anApp && aStudy ) {
+       QString mname = anApp->moduleTitle( aStudy->componentDataType( myEntry ) );
+       LightApp_Displayer* d = LightApp_Displayer::FindDisplayer( mname, true );
+       if ( d ) {
+         QStringList entries;
+         if( aStudy->isComponent( myEntry ) )
+           aStudy->children( myEntry, entries );
+         else
+           entries.append( myEntry );
+         foreach( QString entry, entries )
+           d->Erase( aStudy->referencedToEntry( entry ), false, false, 0 );
+       }
       }
     }
   };
@@ -514,8 +535,6 @@ void SALOMEGUI_Swig::Erase( const char* theEntry )
   
   The presentable objects should be previously created and
   displayed in this viewer.
-
-  For the current moment implemented for OCC and VTK viewers only.
 */
 void SALOMEGUI_Swig::DisplayAll()
 {
@@ -525,20 +544,20 @@ void SALOMEGUI_Swig::DisplayAll()
     TEvent() {}
     virtual void Execute()
     {
-      if ( LightApp_Application* anApp = getApplication() ) {
-        LightApp_Study*  study        = dynamic_cast<LightApp_Study*>( anApp->activeStudy() ); // for sure!
-        SUIT_ViewWindow*  window       = anApp->desktop()->activeWindow();
-        LightApp_Module* activeModule = dynamic_cast<LightApp_Module*>( anApp->activeModule() );
-        if ( study && window && activeModule ) {
-          SALOME_View* view = dynamic_cast<SALOME_View*>( window->getViewManager()->getViewModel() );
-          if ( view ) {
-            for ( SUIT_DataObjectIterator it( activeModule->dataModel()->root(), SUIT_DataObjectIterator::DepthLeft ); it.current(); ++it ) {
-              LightApp_DataObject* obj = dynamic_cast<LightApp_DataObject*>( it.current() );
-              if ( obj && !obj->entry().isEmpty() )
-                view->Display( view->CreatePrs( obj->entry().toLatin1() ) );
-            }
-          }
-        }
+      LightApp_Application* anApp  = getApplication();
+      LightApp_Study*       aStudy = getActiveStudy();
+      if ( anApp && aStudy ) {
+       QStringList comps;
+       aStudy->components( comps );
+       foreach( QString comp, comps ) {
+         LightApp_Displayer* d = LightApp_Displayer::FindDisplayer( anApp->moduleTitle( comp ), true );
+         if ( d ) {
+           QStringList entries;
+           aStudy->children( aStudy->centry( comp ), entries );
+           foreach( QString entry, entries )
+             d->Display( aStudy->referencedToEntry( entry ), false, 0 );
+         }
+       }
       }
     }
   };
@@ -547,8 +566,6 @@ void SALOMEGUI_Swig::DisplayAll()
 
 /*!
   \brief Erase all objects from the current view window.
-  
-  For the current moment implemented for OCC and VTK viewers only.
 */
 void SALOMEGUI_Swig::EraseAll()
 {
@@ -558,13 +575,15 @@ void SALOMEGUI_Swig::EraseAll()
     TEvent() {}
     virtual void Execute()
     {
-      if ( LightApp_Application* anApp = getApplication() ) {
-        SUIT_ViewWindow* window = anApp->desktop()->activeWindow();
-        if ( window ) {
-          SALOME_View* view = dynamic_cast<SALOME_View*>( window->getViewManager()->getViewModel() );
-          if ( view )
-            view->EraseAll( false );
-        }
+      LightApp_Application* anApp  = getApplication();
+      LightApp_Study*       aStudy = getActiveStudy();
+      if ( anApp && aStudy ) {
+       QStringList comps;
+       aStudy->components( comps );
+       foreach( QString comp, comps ) {
+         LightApp_Displayer* d = LightApp_Displayer::FindDisplayer( anApp->moduleTitle( comp ), true );
+         if ( d ) d->EraseAll( false, false, 0 );
+       }
       }
     }
   };
index 019b882b430d563630360dc4340db7961bc64810..7a00087838b447cfdbf016d9e6024a1df6fc49ca 100644 (file)
@@ -706,6 +706,23 @@ void SalomeApp_Study::components( QStringList& comps ) const
   }
 }
 
+/*!
+  Get the entry for the given module
+  \param comp - list to be filled
+  \return module root's entry
+*/
+QString SalomeApp_Study::centry( const QString& comp ) const
+{
+  QString e;
+  for( _PTR(SComponentIterator) it ( studyDS()->NewComponentIterator() ); it->More() && e.isEmpty(); it->Next() ) 
+  {
+    _PTR(SComponent) aComponent ( it->Value() );
+    if ( aComponent && comp == aComponent->ComponentDataType().c_str() )
+      e = aComponent->GetID().c_str();
+  }
+  return e;
+}
+
 /*!
   \return a list of saved points' IDs
 */
index 597a3e069e5720dc38ea6dabcf003de17c3ed736..e63decf93416589ac777fd626624c0e7cb769d64 100644 (file)
@@ -71,6 +71,7 @@ public:
   virtual bool        isComponent( const QString& ) const;
   virtual void        children( const QString&, QStringList& ) const;
   virtual void        components( QStringList& ) const;
+  virtual QString     centry( const QString& ) const;
 
   std::vector<int>    getSavePoints();
   void                removeSavePoint(int savePoint);