Salome HOME
Profile object creation.
[modules/hydro.git] / src / HYDROCurveCreator / OCCViewer_ViewWidget.cxx
index 791e2f2863b85eb31ed1b31ad45ee16fbd703881..ac9fd07c51abe19ce6774c75fcab83aed881f1bc 100644 (file)
@@ -1,8 +1,6 @@
 
 #include "OCCViewer_ViewWidget.h"
 
-#include <Basics_OCCTVersion.hxx>
-
 #include <SUIT_Desktop.h>
 #include <SUIT_Session.h>
 #include <SUIT_ResourceMgr.h>
@@ -154,8 +152,8 @@ const char* imageCrossCursor[] = {
   "................................"};
 
 // ---------------- OCC view widget --------
-OCCViewer_ViewWidget::OCCViewer_ViewWidget(QWidget* parent)
-  : QFrame(parent), myShowTrihedron(true)
+OCCViewer_ViewWidget::OCCViewer_ViewWidget(QWidget* parent, const bool isUseMultiAction)
+  : QFrame(parent), myShowTrihedron(true), myUseMultiAction(isUseMultiAction)
 {
   setObjectName("OCC_view_widget");
   mySelectedPoint = gp_Pnt(0.,0.,0.);
@@ -172,16 +170,17 @@ OCCViewer_ViewWidget::OCCViewer_ViewWidget(QWidget* parent)
 
   myToolBar = new QToolBar(aBtnBox);
   aBtnLay->addWidget(myToolBar);
-  myZoomBtns = new QtxMultiAction(aBtnBox);
-  myZoomBtns->setObjectName("zoomBtn");
-  myToolBar->addAction(myZoomBtns);
-  myPanBtns = new QtxMultiAction(aBtnBox);
-  myPanBtns->setObjectName("panBtn");
-  myToolBar->addAction(myPanBtns);
-  myProjBtns = new QtxMultiAction(aBtnBox);
-  myProjBtns->setObjectName("projectionBtn");
-  myToolBar->addAction(myProjBtns);
-
+  if (myUseMultiAction) {
+    myZoomBtns = new QtxMultiAction(aBtnBox);
+    myZoomBtns->setObjectName("zoomBtn");
+    myToolBar->addAction(myZoomBtns);
+    myPanBtns = new QtxMultiAction(aBtnBox);
+    myPanBtns->setObjectName("panBtn");
+    myToolBar->addAction(myPanBtns);
+    myProjBtns = new QtxMultiAction(aBtnBox);
+    myProjBtns->setObjectName("projectionBtn");
+    myToolBar->addAction(myProjBtns);
+  }
   // Rotation
   aBtnLay->addStretch(1);
   anAnalLay->addWidget(aBtnBox, 0, 0, 1, 2);
@@ -232,15 +231,26 @@ OCCViewer_ViewWidget::OCCViewer_ViewWidget(QWidget* parent)
   createActions();
   myButsMap[TrihId]->setChecked(false);
   onTrihChanged();
+
+  my2dMode = No2dMode;
 }
 
 OCCViewer_ViewWidget::~OCCViewer_ViewWidget()
 {
+  delete myViewPort;
+
+  myAISContext.Nullify();
+  myV3dViewer.Nullify();
   #if OCC_VERSION_LARGE <= 0x06060000
     myV3dCollector.Nullify();
   #endif
 }
 
+OCCViewer_ViewPort3d* OCCViewer_ViewWidget::getViewPort()
+{
+  return myViewPort;
+}
+
 void OCCViewer_ViewWidget::reset()
 {
   clearViewer();
@@ -368,19 +378,36 @@ void OCCViewer_ViewWidget::createActions()
   myToolBar->addAction(aAction);
   myButsMap[ TrihId ] = aAction;
 
-  myZoomBtns->insertAction(myButsMap[ FitAllId ]);
-  myZoomBtns->insertAction(myButsMap[ FitRectId ]);
-  myZoomBtns->insertAction(myButsMap[ ZoomId ]);
+  if (myUseMultiAction) {
+    myZoomBtns->insertAction(myButsMap[ FitAllId ]);
+    myZoomBtns->insertAction(myButsMap[ FitRectId ]);
+    myZoomBtns->insertAction(myButsMap[ ZoomId ]);
 
-  myPanBtns->insertAction(myButsMap[ PanId ]);
-  myPanBtns->insertAction(myButsMap[ GlobalPanId ]);
+    myPanBtns->insertAction(myButsMap[ PanId ]);
+    myPanBtns->insertAction(myButsMap[ GlobalPanId ]);
 
-  myProjBtns->insertAction(myButsMap[ FrontId ]);
-  myProjBtns->insertAction(myButsMap[ BackId ]);
-  myProjBtns->insertAction(myButsMap[ TopId ]);
-  myProjBtns->insertAction(myButsMap[ BottomId ]);
-  myProjBtns->insertAction(myButsMap[ LeftId ]);
-  myProjBtns->insertAction(myButsMap[ RightId ]);
+    myProjBtns->insertAction(myButsMap[ FrontId ]);
+    myProjBtns->insertAction(myButsMap[ BackId ]);
+    myProjBtns->insertAction(myButsMap[ TopId ]);
+    myProjBtns->insertAction(myButsMap[ BottomId ]);
+    myProjBtns->insertAction(myButsMap[ LeftId ]);
+    myProjBtns->insertAction(myButsMap[ RightId ]);
+  }
+  else {
+    myToolBar->addAction(myButsMap[ FitAllId ]);
+    myToolBar->addAction(myButsMap[ FitRectId ]);
+    myToolBar->addAction(myButsMap[ ZoomId ]);
+
+    myToolBar->addAction(myButsMap[ PanId ]);
+    myToolBar->addAction(myButsMap[ GlobalPanId ]);
+
+    myToolBar->addAction(myButsMap[ FrontId ]);
+    myToolBar->addAction(myButsMap[ BackId ]);
+    myToolBar->addAction(myButsMap[ TopId ]);
+    myToolBar->addAction(myButsMap[ BottomId ]);
+    myToolBar->addAction(myButsMap[ LeftId ]);
+    myToolBar->addAction(myButsMap[ RightId ]);
+  }
 }
 
 /*!
@@ -436,6 +463,16 @@ bool OCCViewer_ViewWidget::eventFilter(QObject* watched, QEvent* e)
   return aRes;
 }
 
+void OCCViewer_ViewWidget::set2dMode(OCCViewer_ViewWidget::Mode2dType theType)
+{
+  my2dMode = theType;
+}
+
+QAction* OCCViewer_ViewWidget::action( const ButtonsType& theId )
+{
+  return myButsMap.contains( theId ) ? myButsMap[theId] : 0;
+}
+
 void OCCViewer_ViewWidget::onActivated()
 {
   if(!sender() || !sender()->inherits("QtxAction"))
@@ -637,6 +674,7 @@ void OCCViewer_ViewWidget::vpMousePressEvent(QMouseEvent* theEvent)
         //myViewPort->startRotation(myStartX, myStartY);//, 0, mySelectedPoint);
         break;
       default:
+        emit mousePressed(theEvent);
         break;
     }
   }
@@ -651,7 +689,8 @@ OCCViewer_ViewWidget::OperationType OCCViewer_ViewWidget::getButtonState(QMouseE
            (theEvent->button() == SUIT_ViewModel::myButtonMap[SUIT_ViewModel::STANDARD][SUIT_ViewModel::PAN]))
     aOp = PANVIEW;
   else if((theEvent->modifiers()  == SUIT_ViewModel::myStateMap[SUIT_ViewModel::STANDARD][SUIT_ViewModel::ROTATE]) &&
-           (theEvent->button() == SUIT_ViewModel::myButtonMap[SUIT_ViewModel::STANDARD][SUIT_ViewModel::ROTATE]))
+           (theEvent->button() == SUIT_ViewModel::myButtonMap[SUIT_ViewModel::STANDARD][SUIT_ViewModel::ROTATE]) &&
+           (my2dMode == No2dMode))
     aOp = ROTATE;
 
   return aOp;
@@ -661,6 +700,7 @@ void OCCViewer_ViewWidget::vpMouseReleaseEvent(QMouseEvent* theEvent)
 {
   switch (myOperation) {
   case NOTHING:
+    emit mouseReleased(theEvent);
     break;
   case ROTATE:
     myViewPort->endRotation();
@@ -738,7 +778,9 @@ void OCCViewer_ViewWidget::vpMouseMoveEvent(QMouseEvent* theEvent)
             setCursor(handCursor);
           }
         }
-      }
+    }
+    else
+      emit mouseMoving( theEvent );
     }
   }
 }