Salome HOME
Profile object creation.
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.cxx
index 1897434ccea30b3e0c5c6df8fd778988b47b2197..8f624b0616b7aad798a9ab2bb103ca80a930c5c6 100644 (file)
@@ -36,6 +36,7 @@
 #include <OCCViewer_ViewManager.h>
 #include <OCCViewer_ViewPort3d.h>
 #include "OCCViewer_Utilities.h"
+#include "OCCViewer_ViewWidget.h"
 
 #include <BRep_Tool.hxx>
 #include <TopoDS.hxx>
@@ -82,7 +83,7 @@ CurveCreator_Widget::CurveCreator_Widget(QWidget* parent,
                                          Qt::WindowFlags fl)
 : QWidget(parent), myNewSectionEditor(NULL), myCurve(theCurve), mySection(0),
   myDragStarted( false ), myDragInteractionStyle( SUIT_ViewModel::STANDARD ),
-  myOCCViewer( 0 )
+  myOCCViewer( 0 ), myOCCViewWidget( 0 )
 {
   myNewSectionEditor = new CurveCreator_NewSectionDlg( this );
   myNewSectionEditor->hide();
@@ -257,7 +258,7 @@ void CurveCreator_Widget::setOCCViewer( OCCViewer_Viewer* theViewer )
            this, SLOT( onMouseMove( SUIT_ViewWindow*, QMouseEvent* ) ) );
     connect( aViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ),
            this, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) );
-    OCCViewer_Utilities::setViewer2DMode( theViewer, OCCViewer_ViewWindow::XYPlane );
+    OCCViewer_Utilities::setViewer2DMode( myOCCViewer, OCCViewer_ViewWindow::XYPlane );
   }
 }
 
@@ -269,13 +270,65 @@ OCCViewer_Viewer* CurveCreator_Widget::getOCCViewer()
   return myOCCViewer;
 }
 
+/**
+ * Set an OCC viewer
+ */
+void CurveCreator_Widget::setOCCViewWidget( OCCViewer_ViewWidget* theViewWidget )
+{
+  if ( myOCCViewWidget == theViewWidget )
+    return;
+
+  if ( myOCCViewWidget ) {
+    disconnect( myOCCViewWidget, SIGNAL( mousePressed( QMouseEvent* ) ),
+           this, SLOT( onMousePress( QMouseEvent* ) ) );
+    disconnect( myOCCViewWidget, SIGNAL( mouseReleased( QMouseEvent* ) ),
+           this, SLOT( onMouseRelease( QMouseEvent* ) ) );
+    disconnect( myOCCViewWidget, SIGNAL( mouseMoving( QMouseEvent* ) ),
+           this, SLOT( onMouseMove( QMouseEvent* ) ) );
+    //disconnect( myOCCViewWidget, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ),
+    //       this, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) );
+
+    // restore normal mode in the viewer
+    OCCViewer_Utilities::setViewWidget2DMode( myOCCViewWidget, OCCViewer_ViewWidget::No2dMode );
+    // all local contexts should be closed if the viewer is not more used
+    setLocalPointContext( false, true );
+  }
+
+  myOCCViewWidget = theViewWidget;
+  if ( myOCCViewWidget ) {
+    connect( myOCCViewWidget, SIGNAL( mousePressed( QMouseEvent* ) ),
+           this, SLOT( onMousePress( QMouseEvent* ) ) );
+    connect( myOCCViewWidget, SIGNAL( mouseReleased( QMouseEvent* ) ),
+           this, SLOT( onMouseRelease( QMouseEvent* ) ) );
+    connect( myOCCViewWidget, SIGNAL( mouseMoving( QMouseEvent* ) ),
+           this, SLOT( onMouseMove( QMouseEvent* ) ) );
+    //connect( aViewManager, SIGNAL( lastViewClosed( SUIT_ViewManager* ) ),
+    //       this, SLOT( onLastViewClosed( SUIT_ViewManager* ) ) );
+    OCCViewer_Utilities::setViewWidget2DMode( myOCCViewWidget, OCCViewer_ViewWidget::XYPlane );
+  }
+}
+
+/**
+ * Returns current OCC viewer
+ */
+OCCViewer_ViewWidget* CurveCreator_Widget::getOCCViewWidget()
+{
+  return myOCCViewWidget;
+}
+
 /**
  * Returns OCC viewer context
  */
 Handle(AIS_InteractiveContext) CurveCreator_Widget::getAISContext()
 {
+  Handle(AIS_InteractiveContext) aContext;
   OCCViewer_Viewer* aViewer = getOCCViewer();
-  return aViewer ? aViewer->getAISContext() : 0;
+  if ( aViewer )
+    aContext = aViewer->getAISContext();
+  else if ( myOCCViewWidget )
+    aContext = myOCCViewWidget->getAISContext();
+
+  return aContext;
 }
 
 /**
@@ -287,7 +340,9 @@ OCCViewer_ViewPort3d* CurveCreator_Widget::getViewPort()
   OCCViewer_Viewer* aViewer = getOCCViewer();
   if ( aViewer )
     aViewPort = ((OCCViewer_ViewWindow*)aViewer->getViewManager()->getActiveView())->getViewPort();
-
+  else if ( myOCCViewWidget )
+    aViewPort = myOCCViewWidget->getViewPort();
+    
   return aViewPort;
 }
 
@@ -318,6 +373,22 @@ void CurveCreator_Widget::setObjectsSelected(const AIS_ListOfInteractive& theLis
   OCCViewer_Viewer* aViewer = getOCCViewer();
   if ( aViewer )
     aViewer->setObjectsSelected(theList);
+  else if ( myOCCViewWidget ) {
+    Handle(AIS_InteractiveContext) aContext = myOCCViewWidget->getAISContext();
+    
+    AIS_ListIteratorOfListOfInteractive aIt;
+    for (aIt.Initialize(theList); aIt.More(); aIt.Next())
+      aContext->AddOrRemoveSelected(aIt.Value(), false);
+    aContext->UpdateCurrentViewer();
+  }
+}
+
+//=======================================================================
+// function: reset
+// purpose: reset the widget viewer, close local context, clear selection
+//=======================================================================
+void CurveCreator_Widget::reset()
+{
 }
 
 //=======================================================================
@@ -1023,6 +1094,21 @@ void CurveCreator_Widget::onLastViewClosed( SUIT_ViewManager* theManager )
   myOCCViewer = 0;
 }
 
+void CurveCreator_Widget::onMousePress( QMouseEvent* theEvent )
+{
+  onMousePress( 0, theEvent );
+}
+
+void CurveCreator_Widget::onMouseRelease( QMouseEvent* theEvent )
+{
+  onMouseRelease( 0, theEvent );
+}
+
+void CurveCreator_Widget::onMouseMove( QMouseEvent* theEvent )
+{
+  onMouseMove( 0, theEvent );
+}
+
 void CurveCreator_Widget::onCellChanged( int theRow, int theColumn )
 {
   int aCurrSect = getSectionId( theRow );