]> SALOME platform Git repositories - modules/hydro.git/commitdiff
Salome HOME
Add a new 'moveSection' operation to change position of section in the list.
authorakl <akl@opencascade.com>
Tue, 19 Nov 2013 17:09:58 +0000 (17:09 +0000)
committerakl <akl@opencascade.com>
Tue, 19 Nov 2013 17:09:58 +0000 (17:09 +0000)
src/HYDROCurveCreator/CurveCreator_Curve.cxx
src/HYDROCurveCreator/CurveCreator_Curve.hxx
src/HYDROCurveCreator/CurveCreator_Operation.cxx

index 69b0c38d4fc207f525c5bbc4949f1ba4c95cdfd8..f27cfb2ef807efd86750ec8da738cab674fd5be5 100644 (file)
@@ -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   ************/
 
 /***********************************************/
index 551fc9734c1977394b2651621d48824fe36e75e6..f9e415884ca273883a370f966a5f7822b03eeea3 100644 (file)
@@ -91,6 +91,13 @@ public:
 
   ListAISObjects constructSection( int theISection ) const;
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool moveSectionInternal(const int theISection,
+                           const int theNewIndex);
+  //! Move section to new position in list
+  virtual bool moveSection(const int theISection,
+                   const int theNewIndex);
+
 protected:
   /** This method updates all undo/redo information required to be updated
    *  after curve modification operation. It returns false if undo/redo
index 7e87af79fd0e1e302d0d2c96609fe8d61bd0f3a3..ce73d1ccfe4abe52c9b046c0952a2aa2da5c8a15 100644 (file)
@@ -321,6 +321,9 @@ void CurveCreator_Operation::apply(CurveCreator_Curve *theCurve)
       case CurveCreator_Operation::SetClosed:
         theCurve->setClosedInternal((pInt[0] != 0), pInt[1]);
         break;
+      case CurveCreator_Operation::MoveSection:
+        theCurve->moveSectionInternal(pInt[0], pInt[1]);
+        break;
       case CurveCreator_Operation::Join:
         if (myPData == NULL) {
           theCurve->joinInternal();