Salome HOME
Update Help for VISU module.
[modules/visu.git] / src / VISUGUI / VisuGUI_Displayer.cxx
index 09c43537ae75d80a194817bf0602238b5a68c661..bcfffa772294744ddb3810aca7e4ef7ed5c8c996 100644 (file)
 #include <SPlot2d_Prs.h>
 #include <Plot2d_ViewWindow.h>
 
+#include <SalomeApp_Application.h>
 #include <SalomeApp_Study.h>
 
 #include "VISU_ViewManager_i.hh"
 
-VisuGUI_Displayer::VisuGUI_Displayer( SalomeApp_Study* st )
+VisuGUI_Displayer::VisuGUI_Displayer( SalomeApp_Application* app )
 : LightApp_Displayer(),
-  myStudy( st )
+  myApp( app )
 {
 }
 
@@ -56,10 +57,12 @@ SALOME_Prs* VisuGUI_Displayer::buildPresentation( const QString& entry, SALOME_V
   SALOME_Prs* prs = 0;
 
   SALOME_View* aViewFrame = theViewFrame ? theViewFrame : GetActiveView();
+  SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
 
-  if ( myStudy && aViewFrame )
+  if ( study && aViewFrame )
   {
-    CORBA::Object_var anObj = VISU::ClientSObjectToObject( myStudy->studyDS()->FindObjectID( entry.latin1() ) );
+    _PTR(SObject) obj = study->studyDS()->FindObjectID( entry.latin1() );
+    CORBA::Object_var anObj = VISU::ClientSObjectToObject( obj );
     if( CORBA::is_nil( anObj ) )
       return 0;
 
@@ -179,12 +182,16 @@ SPlot2d_Prs* VisuGUI_Displayer::buildContainer( Plot2d_ViewWindow* wnd, VISU::Co
 SPlot2d_Prs* VisuGUI_Displayer::buildTable( Plot2d_ViewWindow* wnd, VISU::Table_i* t ) const
 {
   SPlot2d_Prs* prs = new SPlot2d_Prs();
-  _PTR(SObject) TableSO = myStudy->studyDS()->FindObjectID( t->GetEntry().latin1() );
+  SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
+  if( !study )
+    return prs;
+
+  _PTR(SObject) TableSO = study->studyDS()->FindObjectID( t->GetEntry().latin1() );
 
   if( !TableSO )
     return prs;
 
-  _PTR(ChildIterator) Iter = myStudy->studyDS()->NewChildIterator( TableSO );
+  _PTR(ChildIterator) Iter = study->studyDS()->NewChildIterator( TableSO );
   for( ; Iter->More(); Iter->Next() )
   {
     CORBA::Object_var childObject = VISU::ClientSObjectToObject( Iter->Value() );
@@ -205,3 +212,30 @@ SPlot2d_Prs* VisuGUI_Displayer::buildTable( Plot2d_ViewWindow* wnd, VISU::Table_
   }
   return prs;
 }
+
+bool VisuGUI_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const
+{
+  SalomeApp_Study* study = dynamic_cast<SalomeApp_Study*>( myApp->activeStudy() );
+  if( !study )
+    return false;
+
+  _PTR(SObject) obj = study->studyDS()->FindObjectID( entry.latin1() );
+  CORBA::Object_var anObj = VISU::ClientSObjectToObject( obj );
+  if( CORBA::is_nil( anObj ) )
+    return false;
+
+  if( viewer_type==SVTK_Viewer::Type() )
+  {
+    VISU::Prs3d_i* thePrs = dynamic_cast<VISU::Prs3d_i*>( VISU::GetServant( anObj ).in() );
+    return thePrs;
+  }
+  else if( viewer_type==SPlot2d_Viewer::Type() )
+  {
+    VISU::Curve_i* aCurve = dynamic_cast<VISU::Curve_i*>( VISU::GetServant( anObj ).in() );
+    VISU::Container_i* aCont = dynamic_cast<VISU::Container_i*>( VISU::GetServant( anObj ).in() );
+    VISU::Table_i* aTable = dynamic_cast<VISU::Table_i*>(VISU::GetServant( anObj ).in() );
+    return aCurve || aCont || aTable;
+  }
+  else 
+    return false;
+}