X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROCurveCreator%2FCurveCreator_Widget.cxx;h=b595c2217d16d73f6481aae0e861c8dc92027260;hb=09d10e66ba0fac5353c8d1f138055fc6fe86fb65;hp=42bbaf6cc909fe516c7a3a812c1ba1fa7df01f37;hpb=3a18ec73b8f92e150d5f4c772bf122ed2ca1ecef;p=modules%2Fhydro.git diff --git a/src/HYDROCurveCreator/CurveCreator_Widget.cxx b/src/HYDROCurveCreator/CurveCreator_Widget.cxx index 42bbaf6c..b595c221 100644 --- a/src/HYDROCurveCreator/CurveCreator_Widget.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Widget.cxx @@ -79,6 +79,7 @@ CurveCreator_Widget::CurveCreator_Widget(QWidget* parent, CurveCreator_ICurve *theCurve, const int theActionFlags, + const QStringList& theCoordTitles, Qt::WindowFlags fl, int theLocalPointRowLimit ) : QWidget(parent), myNewSectionEditor(NULL), myCurve(theCurve), mySection(0), @@ -100,7 +101,7 @@ CurveCreator_Widget::CurveCreator_Widget(QWidget* parent, connect( mySectionView, SIGNAL(sectionEntered(int)), this, SLOT(onEditSection(int)) ); connect( mySectionView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(onContextMenu(QPoint)) ); - myLocalPointView = new CurveCreator_TableView( myCurve, this ); + myLocalPointView = new CurveCreator_TableView( myCurve, this, theCoordTitles ); connect( myLocalPointView, SIGNAL( cellChanged( int, int ) ), this, SLOT( onCellChanged( int, int ) ) ); @@ -367,7 +368,9 @@ void CurveCreator_Widget::updateActionsStates() } break; case ModificationMode: { - anEnabledAct << CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID << SET_SECTIONS_POLYLINE_ID << SET_SECTIONS_SPLINE_ID; + if ( myNewSectionEditor->isEnableClosed() ) + anEnabledAct << CLOSE_SECTIONS_ID << UNCLOSE_SECTIONS_ID; + anEnabledAct << SET_SECTIONS_POLYLINE_ID << SET_SECTIONS_SPLINE_ID; int aSectCnt = myCurve->getNbSections(); if( aSectCnt > 0 ) anEnabledAct << CLEAR_ALL_ID; @@ -575,50 +578,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 ) @@ -665,13 +624,26 @@ void CurveCreator_Widget::onJoin() } stopActionMode(); - int aMainSect = aSections[0]; - int aMainSectSize = myCurve->getNbPoints(aMainSect); - for( int i = 1 ; i < aSections.size() ; i++ ){ - int aSectNum = aSections[i] - (i-1); - myCurve->join( aMainSect, aSectNum ); - mySectionView->sectionsRemoved( aSectNum ); + std::list aSectionsToJoin; + 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 ) ) + { + std::list::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(); } @@ -708,7 +680,13 @@ void CurveCreator_Widget::onJoinAll() if( !myCurve ) return; stopActionMode(); - myCurve->join( 0, myCurve->getNbSections()-1 ); + + std::list aSectionsToJoin; + for( int i = 0, aNb = myCurve->getNbSections(); i < aNb ; i++ ){ + aSectionsToJoin.push_back( i ); + } + bool aRes = myCurve->join( aSectionsToJoin ); + mySectionView->reset(); updateActionsStates(); updateUndoRedo(); @@ -862,6 +840,13 @@ QList CurveCreator_Widget::getSelectedSections() return mySectionView->getSelectedSections(); } +void CurveCreator_Widget::setSelectedSections( const QList& theSections ) +{ + mySectionView->setSelectedSections( theSections ); + updateActionsStates(); + updateUndoRedo(); +} + /** * According to the widget state, performs the remove action */ @@ -885,6 +870,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() @@ -933,6 +967,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 @@ -1028,10 +1065,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(); } /** @@ -1145,6 +1188,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(); } @@ -1183,6 +1227,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++ ) { @@ -1207,6 +1252,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 );