Salome HOME
Avoid of Fit all for 2d mode change
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.cxx
index 01808e2d7b7f46e60595445e385deb00702ffe8a..b44a2734c36bbf4fb8465a898ce55cc5eb71b10a 100644 (file)
@@ -78,6 +78,7 @@
 
 CurveCreator_Widget::CurveCreator_Widget(QWidget* parent,
                                          CurveCreator_ICurve *theCurve,
+                                         const int theActionFlags,
                                          Qt::WindowFlags fl,
                                          int theLocalPointRowLimit )
 : QWidget(parent), myNewSectionEditor(NULL), myCurve(theCurve), mySection(0),
@@ -129,12 +130,14 @@ CurveCreator_Widget::CurveCreator_Widget(QWidget* parent,
   aTB->addAction(anAct);
 
   aTB->addSeparator();
-
+  
   anAct = createAction( NEW_SECTION_ID, tr("NEW_SECTION"), aNewSectionPixmap, tr("NEW_SECTION_TLT"), 
                         QKeySequence(Qt::ControlModifier|Qt::Key_N) );
   connect(anAct, SIGNAL(triggered()), this, SLOT(onNewSection()) );
-  aTB->addAction(anAct);
-  aTB->addSeparator();
+  if ( !(theActionFlags & DisableNewSection) ) {
+    aTB->addAction(anAct);
+    aTB->addSeparator();
+  }
 
   anAct = createAction( ADDITION_MODE_ID, tr("ADDITION_MODE"), aNewPointPixmap, tr("ADDITION_MODE_TLT"), 
                         QKeySequence() );
@@ -155,8 +158,10 @@ CurveCreator_Widget::CurveCreator_Widget(QWidget* parent,
   anAct->setCheckable(true);
   connect(anAct, SIGNAL(triggered(bool)), this, SLOT(onDetectionMode(bool)) );
   connect(anAct, SIGNAL(toggled(bool)), this, SLOT(onModeChanged(bool)) );
-  aTB->addAction(anAct);
-
+  if ( !(theActionFlags & DisableDetectionMode) ) {
+    aTB->addAction(anAct);
+  }
+  
   anAct = createAction( CLOSE_SECTIONS_ID, tr("CLOSE_SECTIONS"), QPixmap(), tr("CLOSE_SECTIONS_TLT"), 
                         QKeySequence(Qt::ControlModifier|Qt::Key_W) );
   connect(anAct, SIGNAL(triggered()), this, SLOT(onCloseSections()) );
@@ -178,6 +183,7 @@ CurveCreator_Widget::CurveCreator_Widget(QWidget* parent,
                         QKeySequence(Qt::ControlModifier|Qt::Key_Delete ) );
   connect(anAct, SIGNAL(triggered()), this, SLOT(onRemove()) );
   aTB->addAction(anAct);
+  
   // TODO join
   //aTB->addSeparator();
 
@@ -500,6 +506,8 @@ void CurveCreator_Widget::onNewSection()
 {
   if( !myCurve )
     return;
+
+  stopModificationMode();
   myNewSectionEditor->clear();
   myNewSectionEditor->setEditMode(false);
   QString aSectName = QString( CurveCreator_UtilsICurve::getUniqSectionName( myCurve ).c_str() );
@@ -565,6 +573,8 @@ void CurveCreator_Widget::onEditSection( int theSection )
 {
   if( !myCurve )
     return;
+  
+  stopModificationMode();
   mySection = theSection;
   QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection));
   bool isClosed = myCurve->isClosed(theSection);
@@ -582,7 +592,6 @@ void CurveCreator_Widget::onModifySection()
   QString aName = myNewSectionEditor->getName();
   bool isClosed = myNewSectionEditor->isClosed();
   CurveCreator::SectionType aSectType = myNewSectionEditor->getSectionType();
-//  myCurve->startOperation();
   if( myCurve->getSectionName(mySection) != aName.toStdString() )
     myCurve->setSectionName( mySection , aName.toStdString() );
 
@@ -591,7 +600,6 @@ void CurveCreator_Widget::onModifySection()
 
   if( myCurve->isClosed(mySection) != isClosed )
     myCurve->setClosed( mySection, isClosed );
-//  myCurve->finishOperation();
   mySectionView->sectionChanged(mySection);
   updateUndoRedo();
   onCancelSection();
@@ -605,15 +613,15 @@ void CurveCreator_Widget::onJoin()
   if( aSections.size() == 0 ){
     return;
   }
+  stopModificationMode();
+
   int aMainSect = aSections[0];
   int aMainSectSize = myCurve->getNbPoints(aMainSect);
-//  myCurve->startOperation();
   for( int i = 1 ; i < aSections.size() ; i++ ){
     int aSectNum = aSections[i] - (i-1);
     myCurve->join( aMainSect, aSectNum );
     mySectionView->sectionsRemoved( aSectNum );
   }
-//  myCurve->finishOperation();
   int aNewSectSize = myCurve->getNbPoints(aMainSect);
   if( aNewSectSize != aMainSectSize )
     mySectionView->pointsAdded( aMainSect, aMainSectSize, aNewSectSize-aMainSectSize );
@@ -641,6 +649,7 @@ void CurveCreator_Widget::onClearAll()
 {
   if( !myCurve )
     return;
+  stopModificationMode();
   myCurve->clear();
   mySectionView->reset();
   updateActionsStates();
@@ -651,6 +660,7 @@ void CurveCreator_Widget::onJoinAll()
 {
   if( !myCurve )
     return;
+  stopModificationMode();
   myCurve->join();
   mySectionView->reset();
   updateActionsStates();
@@ -666,13 +676,12 @@ void CurveCreator_Widget::onSetSpline()
 {
   if( !myCurve )
     return;
+  stopModificationMode();
   QList<int> aSelSections = mySectionView->getSelectedSections();
-//  myCurve->startOperation();
   for( int i = 0 ; i < aSelSections.size() ; i++ ){
     myCurve->setSectionType(aSelSections[i], CurveCreator::Spline );
     mySectionView->sectionChanged(aSelSections[i]);
   }
-//  myCurve->finishOperation();
   updateUndoRedo();
 }
 
@@ -680,13 +689,12 @@ void CurveCreator_Widget::onSetPolyline()
 {
   if( !myCurve )
     return;
-//  myCurve->startOperation();
+  stopModificationMode();
   QList<int> aSelSections = mySectionView->getSelectedSections();
   for( int i = 0 ; i < aSelSections.size() ; i++ ){
     myCurve->setSectionType( aSelSections[i], CurveCreator::Polyline );
     mySectionView->sectionChanged( aSelSections[i] );
   }
-//  myCurve->finishOperation();
   updateUndoRedo();
 }
 
@@ -694,13 +702,12 @@ void CurveCreator_Widget::onCloseSections()
 {
   if( !myCurve )
     return;
-//  myCurve->startOperation();
+  stopModificationMode();
   QList<int> aSelSections = mySectionView->getSelectedSections();
   for( int i = 0 ; i < aSelSections.size() ; i++ ){
     myCurve->setClosed(aSelSections[i], true);
     mySectionView->sectionChanged(aSelSections[i]);
   }
-//  myCurve->finishOperation();
   updateUndoRedo();
 }
 
@@ -708,13 +715,12 @@ void CurveCreator_Widget::onUncloseSections()
 {
   if( !myCurve )
     return;
-//  myCurve->startOperation();
+  stopModificationMode();
   QList<int> aSelSections = mySectionView->getSelectedSections();
   for( int i = 0 ; i < aSelSections.size() ; i++ ){
     myCurve->setClosed(aSelSections[i], false);
     mySectionView->sectionChanged(aSelSections[i]);
   }
-//  myCurve->finishOperation();
   updateUndoRedo();
 }
 
@@ -1004,10 +1010,11 @@ void CurveCreator_Widget::onCellChanged( int theRow, int theColumn )
  */
 void CurveCreator_Widget::removeSection()
 {
+  stopModificationMode();
+
   QList< QPair<int,int> > aSelPoints = mySectionView->getSelectedPoints();
   int aCurrSect=-1;
   int aRemoveCnt = 0;
-//  myCurve->startOperation();
   for( int i = 0 ; i < aSelPoints.size() ; i++ ){
     if( aCurrSect != aSelPoints[i].first ){
       aRemoveCnt = 0;
@@ -1024,7 +1031,6 @@ void CurveCreator_Widget::removeSection()
     myCurve->removeSection( aSectNum );
     mySectionView->sectionsRemoved( aSectNum );
   }
-//  myCurve->finishOperation();
   mySectionView->clearSelection();
   updateUndoRedo();
 }
@@ -1075,8 +1081,6 @@ void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
     return;
   gp_Pnt aPoint;
   gp_Pnt aPoint1, aPoint2;
-  //bool isFoundPoint = CurveCreator_Utils::getNeighbourPoints( aContext, aView, theX, theY,
-  //                                                            aPoint, aPoint1, aPoint2 );
   Handle(AIS_InteractiveObject) anAISObject = myCurve->getAISObject();
   bool isFoundPoint = CurveCreator_Utils::pointOnObject( aView, anAISObject, theX, theY,
                                                          aPoint, aPoint1, aPoint2 );
@@ -1180,7 +1184,7 @@ void CurveCreator_Widget::updateLocalPointView()
   CurveCreator_Utils::getSelectedPoints( aContext, myCurve, myLocalPoints );
   int aNbPoints = myLocalPoints.size();
   bool isRowLimit = aNbPoints > myLocalPointRowLimit;
-  myLocalPointView->setVisible( !isRowLimit );
+  myLocalPointView->setVisible( getActionMode() == ModificationMode && !isRowLimit );
 
   if ( !isRowLimit ) {
     bool isBlocked = myLocalPointView->blockSignals(true);
@@ -1199,7 +1203,7 @@ void CurveCreator_Widget::updateLocalPointView()
  */
 void CurveCreator_Widget::setLocalPointContext( const bool theOpen, const bool isUpdateTable )
 {
-  CurveCreator_Utils::setLocalPointContext( getAISContext(), theOpen );
+  CurveCreator_Utils::setLocalPointContext( myCurve, getAISContext(), theOpen );
   if ( !theOpen && isUpdateTable )
     updateLocalPointView();
 }
@@ -1248,6 +1252,16 @@ void CurveCreator_Widget::setSelectedPoints( const CurveCreator_ICurve::SectionT
   updateLocalPointView();
 }
 
+void CurveCreator_Widget::stopModificationMode()
+{
+  QAction* anAction = myActionMap[MODIFICATION_MODE_ID];
+  if ( anAction ) {
+    if ( anAction->isChecked() )
+      anAction->setChecked( false );
+  }
+  onModificationMode( false );
+}
+
 /**
  * Get viewer information before perform the curve modification.
  * Take a list of selected cuve points an close local context.