Salome HOME
Refs #277 - New point is added during selection operation
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.cxx
index e997fe69fe3fc1e9bab18fbe1ee083c040a3e9c2..e4df186f745a85e4644df01d6ef12740a5b6cc96 100644 (file)
@@ -669,13 +669,22 @@ void CurveCreator_Widget::onJoin()
   for( int i = 0; i < aSections.size() ; i++ ){
     aSectionsToJoin.push_back( aSections[i] );
   }
-
+  //int aMainSect = aSectionsToJoin.front();
+  //int aMainSectSize = myCurve->getNbPoints(aMainSect);
   if ( myCurve->join( aSectionsToJoin ) )
   {
-    for( int i = 0, aSectionsSize = aSectionsToJoin.size(); i < aSectionsSize; i++ )
-      mySectionView->sectionsRemoved( i );
+    std::list<int>::const_iterator anIt = aSectionsToJoin.begin(),
+                                   aLast = aSectionsToJoin.end();
+    // the first section should be skipped. It is not removed, but is modified
+    anIt++;
+    for ( ; anIt != aLast; anIt++ )
+      mySectionView->sectionsRemoved( *anIt );
   }
 
+  /* The update for the points of the main section
+  int aNewSectSize = myCurve->getNbPoints(aMainSect);
+  if( aNewSectSize != aMainSectSize )
+    mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize );*/
   updateUndoRedo();
 }
 
@@ -943,6 +952,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
@@ -1038,10 +1050,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();
 }
 
 /**
@@ -1155,6 +1173,7 @@ void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords
   }
   int aSection = aSections[0];
   myCurve->addPoints(theCoords, aSection); // add to the end of section
+  mySectionView->pointsAdded( aSection, myCurve->getNbPoints( aSection ) );
   updateActionsStates();
   updateUndoRedo();
 }
@@ -1193,6 +1212,7 @@ void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
   CurveCreator_ICurve::SectionToPointList::const_iterator anIt = aPoints1.begin(),
                                                           aLast = aPoints1.end();
   int aSectionId = -1;
+  // find the indices of the neighbour point
   // there can be a case when a new point is added into two sections
   int aPoint1Id = -1, aPoint2Id = -1;
   for ( ; anIt != aLast && aSectionId < 0; anIt++ ) {
@@ -1217,6 +1237,7 @@ void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
     anInsertPos = aPoint1Id < aPoint2Id ? aPoint1Id + 1 : aPoint2Id + 1;
 
   myCurve->addPoints( aCoords, aSectionId, anInsertPos );
+  mySectionView->pointsAdded( aSectionId, myCurve->getNbPoints( aSectionId ) );
 
   finishCurveModification( aSelPoints );