]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Issue #377: Do not edit sketch by dragging when interaction style is not standard
authorvsv <vitaly.smetannikov@opencascade.com>
Fri, 6 Feb 2015 10:14:06 +0000 (13:14 +0300)
committervsv <vitaly.smetannikov@opencascade.com>
Fri, 6 Feb 2015 10:14:06 +0000 (13:14 +0300)
src/ModuleBase/ModuleBase_IViewer.h
src/NewGeom/NewGeom_SalomeViewer.cpp
src/NewGeom/NewGeom_SalomeViewer.h
src/PartSet/PartSet_SketcherMgr.cpp
src/XGUI/XGUI_ViewerProxy.cpp
src/XGUI/XGUI_ViewerProxy.h

index ba7ee1b28f536114857a3d6e195018efd5a86e49..3cf3bc5ab332613847b717ad872f65de38ee6f00 100644 (file)
@@ -75,6 +75,10 @@ Q_OBJECT
   /// Update current viewer
   virtual void update() = 0;
 
+  /// Method returns True if the viewer can process editing objects 
+  /// by mouse drugging. If this is impossible thet it has to return False.
+  virtual bool canDragByMouse() const { return true; }
+
 signals:
   /// Signal emited when last view window is closed
   void lastViewClosed();
index 0613d66243959e0efcc1ed29da32efc6039d2639..c3c887ae8e71763f04ae01fdc30409815be02ff5 100644 (file)
@@ -153,11 +153,19 @@ void NewGeom_SalomeViewer::onMouseMove(SUIT_ViewWindow* theView, QMouseEvent* th
 {
   OCCViewer_ViewWindow* aViewWnd = dynamic_cast<OCCViewer_ViewWindow*>(theView);
   Handle(AIS_InteractiveContext) aContext = AISContext();
-  if (aContext->HasDetected())
+  if (aContext->HasDetected()) // Set focus to provide key events in the view
     aViewWnd->getViewPort()->setFocus(Qt::MouseFocusReason);
   emit mouseMove(myView, theEvent);
 }
 
+//**********************************************
+bool NewGeom_SalomeViewer::canDragByMouse() const
+{
+  OCCViewer_Viewer* aViewer = mySelector->viewer();
+  return (aViewer->interactionStyle() != 0);
+}
+
+
 //**********************************************
 void NewGeom_SalomeViewer::onKeyPress(SUIT_ViewWindow* theView, QKeyEvent* theEvent)
 {
index 1809dd2430ed674a1f8bda6452b2ccda8aa9caa1..1d471d1dcc97ea11d04d0479e291c804aae2b6c6 100644 (file)
@@ -113,6 +113,9 @@ Q_OBJECT
   /// Update current viewer
   virtual void update();
 
+  /// Method returns True if the viewer can process editing objects 
+  /// by mouse drugging. If this is impossible thet it has to return False.
+  virtual bool canDragByMouse() const;
 
  private slots:
   void onMousePress(SUIT_ViewWindow*, QMouseEvent*);
index 018001423cf4587155181f284f09482fffc8b65f..80fd683fef3c97a3d289cdb4cbced777e9b0fc52 100644 (file)
@@ -143,7 +143,14 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
   if (!(theEvent->buttons() & Qt::LeftButton))
     return;
 
+  // Clear dragging mode
+  myIsDragging = false;
+
   ModuleBase_IWorkshop* aWorkshop = myModule->workshop();
+  ModuleBase_IViewer* aViewer = aWorkshop->viewer();
+  if (!aViewer->canDragByMouse())
+    return;
+
   ModuleBase_Operation* aOperation = aWorkshop->currentOperation();
   if (aOperation && aOperation->isEditOperation()) {
     ModuleBase_IPropertyPanel* aPanel = aOperation->propertyPanel();
@@ -154,9 +161,6 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
     }
   }
 
-  // Clear dragging mode
-  myIsDragging = false;
-
   // Use only for sketch operations
   if (aOperation && myCurrentSketch) {
     if (!PartSet_Tools::sketchPlane(myCurrentSketch))
@@ -176,7 +180,6 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
       return;
 
     // MoveTo in order to highlight current object
-    ModuleBase_IViewer* aViewer = aWorkshop->viewer();
     aViewer->AISContext()->MoveTo(theEvent->x(), theEvent->y(), theWnd->v3dView());
 
     // Remember highlighted objects for editing
@@ -226,13 +229,15 @@ void PartSet_SketcherMgr::onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseE
 void PartSet_SketcherMgr::onMouseReleased(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
 {
   ModuleBase_IWorkshop* aWorkshop = myModule->workshop();
+  ModuleBase_IViewer* aViewer = aWorkshop->viewer();
+  if (!aViewer->canDragByMouse())
+    return;
   ModuleBase_Operation* aOp = aWorkshop->currentOperation();
   if (aOp) {
     if (sketchOperationIdList().contains(aOp->id())) {
   get2dPoint(theWnd, theEvent, myClickedPoint);
 
       // Only for sketcher operations
-      ModuleBase_IViewer* aViewer = aWorkshop->viewer();
       if (myIsDragging) {
         if (myDragDone) {
           //aOp->commit();
index a4a55cca5f10ed96c784d60b5f06ca19b55dbb28..ec70496183d244a53a2d071c79e4f23bf9f9f130 100644 (file)
@@ -263,3 +263,14 @@ void XGUI_ViewerProxy::update()
 {
   myWorkshop->displayer()->updateViewer();
 }
+
+//***************************************
+bool XGUI_ViewerProxy::canDragByMouse() const
+{
+  if (myWorkshop->isSalomeMode()) {
+    ModuleBase_IViewer* aViewer = myWorkshop->salomeConnector()->viewer();
+    return aViewer->canDragByMouse();
+  } else {
+    return true;
+  }
+}
\ No newline at end of file
index e0894ff0f06724e4d6403102350e2925343a97b4..acd152d23685994672d71022f89b639febba10ce 100644 (file)
@@ -69,6 +69,10 @@ Q_OBJECT
   /// Update current viewer
   virtual void update();
 
+  /// Method returns True if the viewer can process editing objects 
+  /// by mouse drugging. If this is impossible thet it has to return False.
+  virtual bool canDragByMouse() const;
+
 private slots:
   void onTryCloseView(AppElements_ViewWindow*);
   void onDeleteView(AppElements_ViewWindow*);