Salome HOME
Fix for Bug IPAL8945
[modules/visu.git] / src / VISUGUI / VisuGUI_Displayer.cxx
index 0d604a34559ce4bf70959f55340b1cd07cae876a..1fa6f098984eb6b1e560bf44fc517dd634a0beea 100644 (file)
@@ -27,6 +27,7 @@
 //  $Header: /home/server/cvs/VISU/VISU_SRC/src/VISUGUI/VisuGUI_Displayer.cxx
 
 #include "VisuGUI_Displayer.h"
+#include "VVTK_ViewModel.h"
 #include "VisuGUI_Tools.h"
 #include "VISU_Actor.h"
 
@@ -69,7 +70,8 @@ SALOME_Prs* VisuGUI_Displayer::buildPresentation( const QString& entry, SALOME_V
     SVTK_Viewer* vtk_viewer = dynamic_cast<SVTK_Viewer*>( aViewFrame );
     if( vtk_viewer )
     {
-      SVTK_ViewWindow* wnd = dynamic_cast<SVTK_ViewWindow*>( vtk_viewer->getViewManager()->getActiveView() );
+      SVTK_ViewWindow* wnd =
+        dynamic_cast<SVTK_ViewWindow*>( vtk_viewer->getViewManager()->getActiveView() );
       if( wnd )
       {
        VISU::Prs3d_i* thePrs = dynamic_cast<VISU::Prs3d_i*>( VISU::GetServant( anObj ).in() );
@@ -84,7 +86,8 @@ SALOME_Prs* VisuGUI_Displayer::buildPresentation( const QString& entry, SALOME_V
     SPlot2d_Viewer* plot_viewer = dynamic_cast<SPlot2d_Viewer*>( aViewFrame );
     if( plot_viewer )
     {
-      Plot2d_ViewWindow* wnd = dynamic_cast<Plot2d_ViewWindow*>( plot_viewer->getViewManager()->getActiveView() );
+      Plot2d_ViewWindow* wnd =
+        dynamic_cast<Plot2d_ViewWindow*>( plot_viewer->getViewManager()->getActiveView() );
       if( !wnd )
        return 0;
 
@@ -116,11 +119,9 @@ void VisuGUI_Displayer::buildPrs3d( SVTK_ViewWindow* wnd, VISU::Prs3d_i* thePrs
   VISU_Actor* newAct = VISU::FindActor( wnd, thePrs );
   if( !newAct )
   {
-    VISU_Actor* a = thePrs->CreateActor();
-    if( a )
-      newAct = a->GetParent();
+    newAct = thePrs->CreateActor();
   }
-  if( newAct && newAct )
+  if( newAct )
   {
     wnd->AddActor( newAct );
     wnd->Repaint();
@@ -212,3 +213,33 @@ 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( study->isComponent( entry ) )
+    return true;
+
+  if( viewer_type==SVTK_Viewer::Type() || viewer_type==VVTK_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;
+}