Salome HOME
0022379: EDF 2276 GEOM: Show the ascendants and descendants of a GEOM object in a...
authorvsr <vsr@opencascade.com>
Fri, 31 Oct 2014 17:23:54 +0000 (20:23 +0300)
committervsr <vsr@opencascade.com>
Fri, 31 Oct 2014 17:23:54 +0000 (20:23 +0300)
- Additionally split view to show OCC and Dependency views near each other

src/GEOMToolsGUI/GEOMToolsGUI_1.cxx

index d3cdf6095c09f52b1f0a37cd6e1a227ef65d81b0..9a5ce23eaecf1c4f5633542ff56d14d56036942d 100644 (file)
 #include <SUIT_MessageBox.h>
 #include <SUIT_Tools.h>
 
+#include <STD_TabDesktop.h>
+
+#include <QtxWorkstack.h>
+
 #include <SalomeApp_Application.h>
 #include <SalomeApp_Study.h>
 #include <SalomeApp_Module.h>
 
 // QT Includes
 #include <QAction>
+#include <QApplication>
 #include <QColorDialog>
 #include <QInputDialog>
 #include <QFileDialog>
 // VTK includes
 #include <vtkRenderer.h>
 
-class QtxDialog;
 // If the next macro is defined, autocolor feature works for all sub-shapes;
 // if it is undefined, autocolor feature works for groups only
 #define GENERAL_AUTOCOLOR
 // Below macro, when uncommented, switches on simplified (more performant) algorithm
 // of auto-color picking up
 #define SIMPLE_AUTOCOLOR
+// Below macro, when defined, switches on automatic layouting of OCC and Dependecy views
+// on Show Dependencies operation
+#define LAYOUT_DEPVIEW
 
 void GEOMToolsGUI::OnCheckGeometry()
 {
@@ -883,30 +890,48 @@ void GEOMToolsGUI::OnShowDependencyTree()
   SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
   if ( !app ) return;
 
-  SUIT_ViewManager *svm = app->getViewManager( GraphicsView_Viewer::Type(), false );
+#ifdef LAYOUT_DEPVIEW
+  SUIT_ViewManager* occVm = app->getViewManager( OCCViewer_Viewer::Type(), true );
+  SUIT_ViewWindow* occVw = occVm->getActiveView();
+#endif
+  SUIT_ViewManager* depVm = app->getViewManager( GraphicsView_Viewer::Type(), false );
+  SUIT_ViewWindow* depVw = 0;
 
-  if( !svm ) {
+  if ( !depVm ) {
     DependencyTree_View* view = new DependencyTree_View();
     DependencyTree_ViewModel* viewModel = new DependencyTree_ViewModel( GraphicsView_Viewer::Type(), view );
-    SUIT_ViewManager *svm = app->createViewManager( viewModel );
+    depVm = app->createViewManager( viewModel );
 
     LightApp_SelectionMgr* selMgr = app->selectionMgr();
     new DependencyTree_Selector( viewModel, (SUIT_SelectionMgr*)selMgr );
 
-    SUIT_ViewWindow* svw = svm->getActiveView();
+    depVw = depVm->getActiveView();
     GraphicsView_ViewFrame* aViewFrame = 0;
-    if (!svw) svw = svm->createViewWindow();
-    if (svw) aViewFrame = dynamic_cast<GraphicsView_ViewFrame*>(svw);
+    if ( !depVw ) depVw = depVm->createViewWindow();
+    if ( depVw ) aViewFrame = dynamic_cast<GraphicsView_ViewFrame*>( depVw );
 
     view->init( aViewFrame );
-    svm->setTitle( view->getViewName() );
+    depVm->setTitle( view->getViewName() );
   }
-  else
-    if( DependencyTree_ViewModel* viewModel = dynamic_cast<DependencyTree_ViewModel*>( svm->getViewModel() ) )
-      if( DependencyTree_View* view = dynamic_cast<DependencyTree_View*>( viewModel->getActiveViewPort() ) ) {
-        svm->getActiveView()->setFocus();
-        view->updateModel();
-      }
+  else if ( DependencyTree_ViewModel* viewModel = dynamic_cast<DependencyTree_ViewModel*>( depVm->getViewModel() ) ) {
+    if ( DependencyTree_View* view = dynamic_cast<DependencyTree_View*>( viewModel->getActiveViewPort() ) ) {
+      depVw = depVm->getActiveView();
+      view->updateModel();
+    }
+  }
+
+#ifdef LAYOUT_DEPVIEW
+  // layout views properly
+  STD_TabDesktop* d = dynamic_cast<STD_TabDesktop*>( app->desktop() );
+  if ( d && depVw && occVw ) {
+    QtxWorkstack* ws = d->workstack();
+    ws->stack();
+    QApplication::instance()->processEvents();
+    ws->Split( depVw, Qt::Horizontal, QtxWorkstack::SplitMove );
+    occVw->setFocus();
+  }
+#endif
+  depVw->setFocus();
 }
 
 void GEOMToolsGUI::OnReduceStudy()