X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FHYDROCurveCreator%2FCurveCreator_Curve.cxx;h=f27cfb2ef807efd86750ec8da738cab674fd5be5;hb=cab84b2968166d7b7b8673765307403b1f571a5b;hp=c1b66d58f9c2fb66b28069b1383fff80bba88e86;hpb=254aba54a085eac64aa4ec13f1d46beac722a252;p=modules%2Fhydro.git diff --git a/src/HYDROCurveCreator/CurveCreator_Curve.cxx b/src/HYDROCurveCreator/CurveCreator_Curve.cxx index c1b66d58..f27cfb2e 100644 --- a/src/HYDROCurveCreator/CurveCreator_Curve.cxx +++ b/src/HYDROCurveCreator/CurveCreator_Curve.cxx @@ -347,6 +347,48 @@ void CurveCreator_Curve::redisplayCurve() } } +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::moveSectionInternal(const int theISection, + const int theNewIndex) +{ + bool res = false; + if (theISection != theNewIndex) { + CurveCreator_Section *aSection = mySections.at(theISection); + + // Remove section + CurveCreator::Sections::iterator anIter = mySections.begin() + theISection; + + mySections.erase(anIter); + + // Insert section. + anIter = mySections.begin() + theNewIndex; + mySections.insert(anIter, aSection); + res = true; + } + return res; +} + +//======================================================================= +// function: moveSection +// purpose: +//======================================================================= +bool CurveCreator_Curve::moveSection(const int theISection, + const int theNewIndex) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::MoveSection, + theISection, theNewIndex); + } + + // Update the curve. + res = moveSectionInternal(theISection, theNewIndex); + finishOperation(); + return res; +} + /************ Implementation of INTERFACE methods ************/ /***********************************************/ @@ -396,11 +438,8 @@ bool CurveCreator_Curve::redo() /***********************************************/ /*** Section methods ***/ /***********************************************/ -//======================================================================= -// function: clear -// purpose: -//======================================================================= -bool CurveCreator_Curve::clear() +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::clearInternal() { // erase curve from the viewer if( myDisplayer ) @@ -418,29 +457,55 @@ bool CurveCreator_Curve::clear() return true; } +//======================================================================= +// function: clear +// purpose: +//======================================================================= +bool CurveCreator_Curve::clear() +{ + bool res = false; + startOperation(); + // Set the difference. + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::Clear); + } + res = clearInternal(); + finishOperation(); + return res; +} + +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::joinInternal( const int theISectionTo, + const int theISectionFrom ) +{ + bool res = false; + CurveCreator_Section *aSection1 = mySections.at(theISectionTo); + CurveCreator_Section *aSection2 = mySections.at(theISectionFrom); + + aSection1->myPoints.insert(aSection1->myPoints.end(), + aSection2->myPoints.begin(), + aSection2->myPoints.end()); + + res = removeSection(theISectionFrom); + redisplayCurve(); + return res; +} + //! Join range of sections to one section (join all sections if -1 is passed in one of arguments) bool CurveCreator_Curve::join( const int theISectionTo, - const int theISectionFrom ) + const int theISectionFrom ) { + bool res = false; if (theISectionTo != theISectionFrom) { startOperation(); if (addEmptyDiff()) myListDiffs.back().init(this, CurveCreator_Operation::Join, theISectionTo, theISectionFrom); - CurveCreator_Section *aSection1 = mySections.at(theISectionTo); - CurveCreator_Section *aSection2 = mySections.at(theISectionFrom); - - aSection1->myPoints.insert(aSection1->myPoints.end(), - aSection2->myPoints.begin(), - aSection2->myPoints.end()); - - removeSection(theISectionFrom); - redisplayCurve(); + res = joinInternal( theISectionTo, theISectionFrom ); finishOperation(); - return true; } - return false; + return res; } //! Get number of sections @@ -449,7 +514,7 @@ int CurveCreator_Curve::getNbSections() const return mySections.size(); } -//! For internal use only! Undo/Redo is not used here. +//! For internal use only! Undo/Redo are not used here. int CurveCreator_Curve::addSectionInternal (const std::string& theName, const CurveCreator::SectionType theType, const bool theIsClosed, const CurveCreator::Coordinates &thePoints) @@ -513,6 +578,7 @@ int CurveCreator_Curve::addSection return resISection; } +//! For internal use only! Undo/Redo are not used here. bool CurveCreator_Curve::removeSectionInternal( const int theISection ) { if (theISection == -1) { @@ -571,12 +637,9 @@ bool CurveCreator_Curve::isClosed( const int theISection ) const return mySections.at(theISection)->myIsClosed; } -/** - * Set "closed" flag of the specified section (all sections if - * \a theISection is -1). - */ -bool CurveCreator_Curve::setClosed( const int theISection, - const bool theIsClosed ) +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setClosedInternal( const int theISection, + const bool theIsClosed ) { if (theISection == -1) { int aSize = mySections.size(); @@ -593,6 +656,25 @@ bool CurveCreator_Curve::setClosed( const int theISection, return true; } +/** + * Set "closed" flag of the specified section (all sections if + * \a theISection is -1). + */ +bool CurveCreator_Curve::setClosed( const int theISection, + const bool theIsClosed ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::SetClosed, + theIsClosed, theISection); + } + res = setClosedInternal( theISection, theIsClosed ); + finishOperation(); + return res; +} + //! Returns specified section name std::string CurveCreator_Curve::getSectionName( const int theISection ) const { @@ -601,15 +683,32 @@ std::string CurveCreator_Curve::getSectionName( const int theISection ) const return ""; } -/** Set name of the specified section */ -bool CurveCreator_Curve::setSectionName - ( const int theISection, const std::string& theName ) +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setSectionNameInternal( const int theISection, + const std::string& theName ) { + bool res = false; if( ( theISection >= 0 ) && ( theISection < mySections.size() )){ mySections.at(theISection)->myName = theName; - return true; + res = true; + } + return res; +} + +/** Set name of the specified section */ +bool CurveCreator_Curve::setSectionName( const int theISection, + const std::string& theName ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::RenameSection, + theName, theISection); } - return false; + res = setSectionNameInternal( theISection, theName ); + finishOperation(); + return res; } //! Get type of the specified section @@ -619,12 +718,9 @@ CurveCreator::SectionType CurveCreator_Curve::getSectionType return mySections.at(theISection)->myType; } -/** - * Set type of the specified section (or all sections - * if \a theISection is -1). - */ -bool CurveCreator_Curve::setSectionType( const int theISection, - const CurveCreator::SectionType theType ) +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setSectionTypeInternal( const int theISection, + const CurveCreator::SectionType theType ) { if (theISection == -1) { int i = 0; @@ -643,12 +739,33 @@ bool CurveCreator_Curve::setSectionType( const int theISection, return true; } +/** + * Set type of the specified section (or all sections + * if \a theISection is -1). + */ +bool CurveCreator_Curve::setSectionType( const int theISection, + const CurveCreator::SectionType theType ) +{ + bool res = false; + startOperation(); + // Set the difference. + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::SetType, + theType, theISection); + } + + res = setSectionTypeInternal( theISection, theType ); + + finishOperation(); + return res; +} + /***********************************************/ /*** Point methods ***/ /***********************************************/ -//! For internal use only! Undo/Redo is not used here. +//! For internal use only! Undo/Redo are not used here. bool CurveCreator_Curve::addPointsInternal( const CurveCreator::Coordinates& theCoords, const std::vector &theISections, const std::vector &theIPnts ) @@ -705,20 +822,12 @@ bool CurveCreator_Curve::addPoints( const CurveCreator::Coordinates& theCoords, return res; } -//! Set coordinates of specified point -bool CurveCreator_Curve::setPoint( const int theISection, - const int theIPnt, - const CurveCreator::Coordinates& theNewCoords ) +//! For internal use only! Undo/Redo are not used here. +bool CurveCreator_Curve::setPointInternal( const int theISection, + const int theIPnt, + const CurveCreator::Coordinates& theNewCoords ) { - // Set the difference. - startOperation(); - if (addEmptyDiff()) { - myListDiffs.back().init(this, CurveCreator_Operation::SetCoordinates, - theNewCoords, theISection, theIPnt); - } - bool res = false; - // Update the curve. if (theNewCoords.size() == myDimension) { CurveCreator_Section *aSection = mySections.at(theISection); @@ -730,12 +839,28 @@ bool CurveCreator_Curve::setPoint( const int theISection, res = true; } + return res; +} +//! Set coordinates of specified point +bool CurveCreator_Curve::setPoint( const int theISection, + const int theIPnt, + const CurveCreator::Coordinates& theNewCoords ) +{ + bool res = false; + // Set the difference. + startOperation(); + if (addEmptyDiff()) { + myListDiffs.back().init(this, CurveCreator_Operation::SetCoordinates, + theNewCoords, theISection, theIPnt); + } + res = setPointInternal( theISection, theIPnt, theNewCoords ); finishOperation(); return res; } +//! For internal use only! Undo/Redo are not used here. bool CurveCreator_Curve::removePointsInternal( const std::vector &theISections, const std::vector &theIPnts ) {