Salome HOME
Refs #289 - Spline profile is represented in OCC view as polyline profile
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.cxx
index 5880c724cfd95d825ec0d82840614a76c23b6acc..af71520e178ac355e8bc459b3aa03cf3f61831ad 100644 (file)
@@ -575,50 +575,6 @@ QAction* CurveCreator_Widget::getAction( ActionMode theMode )
   return anAction;
 }
 
-void CurveCreator_Widget::setActionMode( const ActionMode& theMode )
-{
-  ActionMode aPrevMode = getActionMode();
-  QAction* aPrevAction = getAction( aPrevMode );
-  switch ( theMode ) {
-    case NoneMode: {
-      if ( aPrevAction ) {
-        if ( aPrevAction->isChecked() )
-          aPrevAction->setChecked( false );
-      }
-      if ( aPrevMode == ModificationMode )
-        onModificationMode( false );
-      if ( aPrevMode == AdditionMode )
-        onAdditionMode( false );
-    }
-    break;
-    case AdditionMode: {
-      // TODO
-    }
-    break;
-    case ModificationMode:
-    {
-      //TODO
-    }
-    break;
-    case DetectionMode:
-      break;
-  }
-}
-
-CurveCreator_Widget::ActionMode CurveCreator_Widget::getActionMode() const
-{
-  ActionMode aMode = NoneMode;
-
-  if ( myActionMap[ADDITION_MODE_ID]->isChecked() )
-    aMode = AdditionMode;
-  else if ( myActionMap[MODIFICATION_MODE_ID]->isChecked() )
-    aMode = ModificationMode;
-  else if ( myActionMap[DETECTION_MODE_ID]->isChecked() )
-    aMode = DetectionMode;
-
-  return aMode;
-}
-
 void CurveCreator_Widget::onEditSection( int theSection )
 {
   if( !myCurve )
@@ -881,6 +837,13 @@ QList<int> CurveCreator_Widget::getSelectedSections()
   return mySectionView->getSelectedSections();
 }
 
+void CurveCreator_Widget::setSelectedSections( const QList<int>& theSections )
+{
+  mySectionView->setSelectedSections( theSections );
+  updateActionsStates();
+  updateUndoRedo();
+}
+
 /**
  * According to the widget state, performs the remove action
  */
@@ -904,6 +867,55 @@ bool CurveCreator_Widget::removeEnabled()
   return isEnabled;
 }
 
+void CurveCreator_Widget::setActionMode( const ActionMode& theMode )
+{
+  ActionMode aPrevMode = getActionMode();
+  QAction* aPrevAction = getAction( aPrevMode );
+  QAction* anAction = getAction( theMode );
+  switch ( theMode ) {
+    case NoneMode:
+    case AdditionMode: {
+      if ( aPrevAction ) {
+        if ( aPrevAction->isChecked() ) {
+          aPrevAction->setChecked( false );
+        }
+      }
+      if ( aPrevMode == ModificationMode )
+        onModificationMode( false );
+      if ( aPrevMode == AdditionMode )
+        onAdditionMode( false );
+
+      if ( theMode == AdditionMode )
+      {
+        anAction->setChecked( true );
+        onModeChanged( true );
+      }
+    }
+    break;
+    break;
+    case ModificationMode:
+    {
+      //TODO
+    }
+    break;
+    case DetectionMode:
+      break;
+  }
+}
+
+CurveCreator_Widget::ActionMode CurveCreator_Widget::getActionMode() const
+{
+  ActionMode aMode = NoneMode;
+
+  if ( myActionMap[ADDITION_MODE_ID]->isChecked() )
+    aMode = AdditionMode;
+  else if ( myActionMap[MODIFICATION_MODE_ID]->isChecked() )
+    aMode = ModificationMode;
+  else if ( myActionMap[DETECTION_MODE_ID]->isChecked() )
+    aMode = DetectionMode;
+
+  return aMode;
+}
 
 //=================================================================================
 // function : GeometryGUI::addCoordsByClick()
@@ -952,6 +964,9 @@ void CurveCreator_Widget::onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent
   if ( theEvent->button() != Qt::LeftButton )
     return;
 
+  myPressedX = theEvent->x();
+  myPressedY = theEvent->y();
+
   switch( getActionMode() ) {
     case ModificationMode: {
       //store initial cursor position for Drag&Drop
@@ -1047,10 +1062,16 @@ void CurveCreator_Widget::onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEven
     }
   }
   else // check whether the segment is clicked an a new point should be added to the segment
-    insertPointToSelectedSegment( theEvent->pos().x(), theEvent->pos().y() );
+  {
+    int aReleasedX = theEvent->x();
+    int aReleasedY = theEvent->y();
+    if ( myPressedX == aReleasedX && myPressedY == aReleasedY )
+      insertPointToSelectedSegment( aReleasedX, aReleasedY );
+  }
 
   // updates the input panel table to show the selected point coordinates
   updateLocalPointView();
+  updateUndoRedo();
 }
 
 /**