Salome HOME
Bug #183: regression: polyline - unnecessary table in Additition mode.
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.cxx
index 97258a625eb25364f4b11d58761c0c0914fe97bd..4d1b80914ceb8ea2380a9d46309c9aa19de5104f 100644 (file)
@@ -20,9 +20,7 @@
 #include "CurveCreator_Widget.h"
 #include "CurveCreator_TreeView.h"
 #include "CurveCreator_ICurve.hxx"
-//#include "CurveCreator_CurveEditor.hxx"
 #include "CurveCreator.hxx"
-//#include "CurveCreator_NewPointDlg.h"
 #include "CurveCreator_NewSectionDlg.h"
 #include "CurveCreator_Utils.h"
 #include "CurveCreator_UtilsICurve.hxx"
 #include <OCCViewer_ViewPort3d.h>
 #include "OCCViewer_Utilities.h"
 
-#include <BRep_Tool.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Vertex.hxx>
-#include <TopoDS_Wire.hxx>
-#include <TopoDS_Edge.hxx>
-#include <gp_Lin.hxx>
-#include <gp_Dir.hxx>
-#include <TopExp_Explorer.hxx>
-
-#include <GeomAPI_ProjectPointOnCurve.hxx>
-
-#include <AIS_ListOfInteractive.hxx>
-#include <AIS_ListIteratorOfListOfInteractive.hxx>
-#include <AIS_Shape.hxx>
-#include <AIS_LocalContext.hxx>
-#include <Geom_Point.hxx>
-#include <Geom_BSplineCurve.hxx>
-#include <Geom_Line.hxx>
-
 #include <QHBoxLayout>
 #include <QVBoxLayout>
 #include <QLabel>
@@ -71,7 +50,7 @@
 #include <QTableWidget>
 #include <QTime>
 
-#define MEASURE_TIME
+//#define MEASURE_TIME
 
 #ifdef MEASURE_TIME
 
@@ -99,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),
@@ -150,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() );
@@ -176,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()) );
@@ -199,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();
 
@@ -517,24 +502,6 @@ void CurveCreator_Widget::onModeChanged(bool checked)
   setLocalPointContext( aMode == ModificationMode, true );
 }
 
-void CurveCreator_Widget::onAddNewPoint(const CurveCreator::Coordinates& theCoords)
-{
-  if( !myCurve )
-    return;
-  //myCurve->addPoints(theCoords, mySection, myPointNum );
-  //mySectionView->pointsAdded( mySection, myPointNum );
-  //myPointNum++;
-  QList<int> aSections = mySectionView->getSelectedSections();
-  if( aSections.size() == 0 ){
-    return;
-  }
-  int aSection = aSections[0];
-  myCurve->addPoints(theCoords, aSection); // add to the end of section
-  mySectionView->pointsAdded( aSection, myCurve->getNbPoints( aSection ) );
-  updateActionsStates();
-  updateUndoRedo();
-}
-
 void CurveCreator_Widget::onNewSection()
 {
   if( !myCurve )
@@ -636,32 +603,6 @@ void CurveCreator_Widget::onModifySection()
   onCancelSection();
 }
 
-/*void CurveCreator_Widget::onEditPoint( int theSection, int thePoint )
-{
-  if( !myNewPointEditor || !myEdit )
-    return;
-  mySection = theSection;
-  myPointNum = thePoint;
-  QString aSectName = QString::fromStdString( myCurve->getSectionName(theSection));
-  myNewPointEditor->setEditMode(true);
-  myNewPointEditor->setSectionName(aSectName);
-  myNewPointEditor->setDimension( myCurve->getDimension() );
-  CurveCreator::Coordinates aCoords = myCurve->getCoordinates(theSection,thePoint);
-  myNewPointEditor->setCoordinates(aCoords);
-  emit subOperationStarted( myNewPointEditor );
-}
-
-void CurveCreator_Widget::onModifyPoint()
-{
-  if( !myEdit )
-    return;
-  CurveCreator::Coordinates aCoords = myNewPointEditor->getCoordinates();
-  myEdit->setCoordinates( aCoords, mySection, myPointNum );
-  mySectionView->pointDataChanged( mySection, myPointNum );
-  updateUndoRedo();
-  onCancelPoint();
-}*/
-
 void CurveCreator_Widget::onJoin()
 {
   if( !myCurve )
@@ -904,10 +845,10 @@ bool CurveCreator_Widget::removeEnabled()
 
 
 //=================================================================================
-// function : GeometryGUI::onGetCoordsByClick()
+// function : GeometryGUI::addCoordsByClick()
 // purpose  : Manage mouse press events in Additon mode
 //=================================================================================
-void CurveCreator_Widget::onGetCoordsByClick( QMouseEvent* pe )
+void CurveCreator_Widget::addCoordsByClick( QMouseEvent* pe )
 {
   if (pe->button() != Qt::LeftButton)
     return;
@@ -925,15 +866,6 @@ void CurveCreator_Widget::onGetCoordsByClick( QMouseEvent* pe )
     else
       ic->Select();       // New selection
 
-    /*TopoDS_Shape aShape;
-
-    ic->InitSelected();
-    if ( ic->MoreSelected() )
-      aShape = ic->SelectedShape();
-
-    if ( !aShape.IsNull() && aShape.ShapeType() == TopAbs_VERTEX )
-      aPnt = BRep_Tool::Pnt( TopoDS::Vertex( ic->SelectedShape() ) );
-    else*/
     {
       OCCViewer_ViewPort3d* vp = getViewPort();
       aPnt = CurveCreator_Utils::ConvertClickToPoint( pe->x(), pe->y(), vp->getView() );
@@ -945,8 +877,7 @@ void CurveCreator_Widget::onGetCoordsByClick( QMouseEvent* pe )
     if ( myCurve->getDimension() == 3 ) {
       aCoords.push_back( aPnt.Z() );
     }
-    onAddNewPoint(aCoords);
-//    myNewPointEditor->setCoordinates( aCoords );
+    addNewPoint(aCoords);
   }
 }
 
@@ -967,7 +898,7 @@ void CurveCreator_Widget::onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent
       break;
     }
     case AdditionMode: {
-      onGetCoordsByClick( theEvent );
+      addCoordsByClick( theEvent );
       break;
     }
     default:
@@ -1121,6 +1052,21 @@ void CurveCreator_Widget::removePoint()
   finishCurveModification( CurveCreator_ICurve::SectionToPointList() );
 }
 
+void CurveCreator_Widget::addNewPoint(const CurveCreator::Coordinates& theCoords)
+{
+  if( !myCurve )
+    return;
+  QList<int> aSections = mySectionView->getSelectedSections();
+  if( aSections.size() == 0 ){
+    return;
+  }
+  int aSection = aSections[0];
+  myCurve->addPoints(theCoords, aSection); // add to the end of section
+  mySectionView->pointsAdded( aSection, myCurve->getNbPoints( aSection ) );
+  updateActionsStates();
+  updateUndoRedo();
+}
+
 void CurveCreator_Widget::insertPointToSelectedSegment( const int theX,
                                                         const int theY )
 {
@@ -1135,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 );
@@ -1240,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);
@@ -1259,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();
 }