Salome HOME
OCC functionality moving out from the widget
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Curve.hxx
index 656b312b06dc683e84287132a4f45c5f5e196588..0baf0775c6081b12948f5cedc59bf28f9a7275d7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2013  CEA/DEN, EDF R&D, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #include "CurveCreator_Macro.hxx"
 #include "CurveCreator.hxx"
 #include "CurveCreator_Diff.hxx"
+#include "CurveCreator_AISCurve.hxx"
+
+#include <AIS_Point.hxx>
+#include <AIS_Line.hxx>
+#include <AIS_InteractiveObject.hxx>
 
 #include <list>
+#include <map>
 
 struct CurveCreator_Section;
-class CurveCreator_Listener;
+class CurveCreator_Displayer;
 
 /**
  *  The CurveCreator_Curve object is represented as one or more sets of
@@ -43,7 +49,7 @@ class CurveCreator_Listener;
  */
 class CURVECREATOR_EXPORT CurveCreator_Curve : public CurveCreator_ICurve
 {
-private:
+protected:
   typedef std::list<CurveCreator_Diff> ListDiff;
 
 public:
@@ -62,11 +68,14 @@ public:
   //! Return unique section name
   virtual std::string getUniqSectionName() const;
 
-  //! Set curve creator listener object
-  virtual void setListener( CurveCreator_Listener* theWatcher );
+  //! Set curve creator Displayer object
+  virtual void setDisplayer( CurveCreator_Displayer* theDisplayer );
 
-  //! Remove curve creator listener object
-  virtual void removeListener();
+  //! Return curve creator Displayer object
+  CurveCreator_Displayer* getDisplayer();
+
+  //! Remove curve creator Displayer object
+  virtual void removeDisplayer();
 
   /** Set depth of undo operations (unlimited if \a theDepth is -1
    *  or disabled if \a theDepth is 0)
@@ -85,6 +94,15 @@ public:
    */
   virtual int toICoord(const int theIPnt) const;
 
+  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
@@ -92,6 +110,15 @@ protected:
    */
   virtual bool addEmptyDiff();
 
+  Handle_AIS_Point getAISPoint( int theISection, int theIPoint ) const;
+  Handle_AIS_Line  getAISLine( int theISection, int theIPoint1, int theIPoint2 ) const;
+public: // temporary
+  void getCoordinates( int theISection, int theIPoint, double& theX, double& theY, double& theZ ) const;
+protected:  // temporary
+  void redisplayCurve();
+
+  void convert( const SectionToPointList &thePoints,
+                std::map<int, std::list<int> > &theConvPoints );
 
 public:
   /************   Implementation of INTERFACE methods   ************/
@@ -117,9 +144,14 @@ public:
   /***           Section methods               ***/
   /***********************************************/
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool clearInternal();
   //! Clear the polyline (remove all sections)
   virtual bool clear();
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool joinInternal( const int theISectionTo = -1, 
+                             const int theISectionFrom = -1 );
   //! Join range of sections to one section (join all sections if -1 is passed in one of arguments)
   virtual bool join( const int theISectionTo = -1, 
                      const int theISectionFrom = -1 );
@@ -127,23 +159,32 @@ public:
   //! Get number of sections
   virtual int getNbSections() const;
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual int addSectionInternal( const std::string &theName, 
+                                  const CurveCreator::SectionType theType,
+                                  const bool theIsClosed,
+                                  const CurveCreator::Coordinates &thePoints);
   //! Add a new section.
   virtual int addSection( const std::string &theName, 
                            const CurveCreator::SectionType theType,
                            const bool theIsClosed );
-
   //! Add a new section.
   virtual int addSection( const std::string &theName, 
                            const CurveCreator::SectionType theType,
                            const bool theIsClosed,
                            const CurveCreator::Coordinates &thePoints);
-
+  
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool removeSectionInternal( const int theISection );
   //! Removes the given sections.
   virtual bool removeSection( const int theISection );
 
   //! Get "closed" flag of the specified section
   virtual bool isClosed( const int theISection ) const;
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool setClosedInternal( const int theISection, 
+                                  const bool theIsClosed );
   /**
    *  Set "closed" flag of the specified section (all sections if
    *  \a theISection is -1).
@@ -154,6 +195,9 @@ public:
   //! Returns specifyed section name
   virtual std::string getSectionName( const int theISection ) const;
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool setSectionNameInternal( const int theISection, 
+                                       const std::string& theName );
   /** Set name of the specified section */
   virtual bool setSectionName( const int theISection, 
                                const std::string& theName );
@@ -161,6 +205,9 @@ public:
   //! Get type of the specified section
   virtual CurveCreator::SectionType getSectionType( const int theISection ) const;
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool setSectionTypeInternal( const int theISection, 
+                                       const CurveCreator::SectionType theType );
   /**
    *  Set type of the specified section (or all sections
    *  if \a theISection is -1).
@@ -173,6 +220,8 @@ public:
   /***           Point methods                 ***/
   /***********************************************/
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool addPointsInternal( const CurveCreator::SectionsMap &theSectionsMap );
   /**
    *  Add one point to the specified section starting from the given theIPnt index
    *  (or at the end of points if \a theIPnt is -1).
@@ -181,14 +230,24 @@ public:
                           const int theISection,
                           const int theIPnt = -1 );
 
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool setPointInternal( const CurveCreator::SectionsMap &theSectionsMap );
    //! Set coordinates of specified point
   virtual bool setPoint( const int theISection,
                          const int theIPnt,
                          const CurveCreator::Coordinates& theNewCoords );
 
+  //! Set coordinates of specified points from different sections
+  virtual bool setSeveralPoints( const SectionToPointCoordsList &theSectionToPntCoords);
+
+  //! For internal use only! Undo/Redo are not used here.
+  virtual bool removePointsInternal( const SectionToPointList &thePoints );
   /** Remove point with given id */
   virtual bool removePoint( const int theISection, const int theIPnt = -1 );
 
+  //! Remove several points from different sections with given ids
+  virtual bool removeSeveralPoints( const SectionToPointList &theSectionToPntIDs);
+
   //! Get coordinates of specified point
   virtual CurveCreator::Coordinates getPoint( const int theISection, 
                                               const int theIPnt ) const;
@@ -209,14 +268,14 @@ public:
   /***********************************************/
   /***       Presentation methods              ***/
   /***********************************************/
-//  virtual TopoDS_Wire constructWire() const;
+  virtual ListAISObjects constructWire() const;
 
 public:
-
+  Handle(CurveCreator_AISCurve)   myAISCurve;
   bool                            myIsLocked;
   CurveCreator::Sections          mySections;   //!< curve data
   CurveCreator::Dimension         myDimension;  //!< curve dimension
-  CurveCreator_Listener*          myListener;   //!< listener
+  CurveCreator_Displayer*         myDisplayer;  //!< curve displayer
 
 private: