Salome HOME
Remove functionality by popup menu and the keyboard button "Delete".
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.h
index bbc58f69476e2420b5c202a6229ef57848b1ae59..225e864d49a06aac4b0ff31b7f95b1492c5eb3f7 100644 (file)
 #include <SUIT_ViewWindow.h>
 #include <AIS_InteractiveObject.hxx>
 
+#include <Geom_Curve.hxx>
+#include <V3d_View.hxx>
+#include <gp_Pnt.hxx>
+
 class OCCViewer_Viewer;
 
 class QAction;
@@ -61,6 +65,9 @@ public:
   QList<int> getSelectedSections();
   QList< QPair< int, int > > getSelectedPoints();
 
+  void  removeSelected();
+  bool  removeEnabled();
+
 signals:
   void selectionChanged();
   void subOperationStarted( QWidget* );
@@ -98,7 +105,7 @@ protected slots:
   void     onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent );
   void     onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent );
 
-  void     onLocalPointChanged( int theRow, int theColumn );
+  void     onCellChanged( int theRow, int theColumn );
 
 protected:
   enum ActionId{ UNDO_ID, 
@@ -120,12 +127,15 @@ protected:
   };
 
   enum ActionMode {
+    NoneMode,
     AdditionMode,
     ModificationMode,
-    DetectionMode,
-    NoneMode
+    DetectionMode
   };
 
+  typedef std::pair< int, int > SectionToPoint;
+  typedef std::deque< SectionToPoint > SectionToPointList;
+
 private:
   QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
                          const QString& theToolTip, const QKeySequence& theShortcut );
@@ -136,25 +146,42 @@ private:
 
   void removeSection();
   void removePoint();
-  bool insertPointToSelectedSegment( const int theXPosition,
+  void insertPointToSelectedSegment( const int theXPosition,
                                      const int theYPosition );
+  void moveSelectedPoints( const int theXPosition, const int theYPosition );
   void updateLocalPointView();
-  void setLocalPointContext( const bool theOpen );
+  void setLocalPointContext( const bool theOpen, const bool isUpdateTable = false );
   void addLocalPointToTable( const double theX, const double theY );
 
   void setDragStarted( const bool theState, const QPoint& thePoint = QPoint() );
 
-  void getSelectedPonts( const int theSectionId, QList<int>& thePoints );
-  void setSelectedPonts( const int theSectionId, const QList<int>& thePoints = QList<int>() );
+  void getSelectedPonts( SectionToPointList& thePoints );
+  void setSelectedPonts( const SectionToPointList& = SectionToPointList() );
 
+  void startCurveModification( SectionToPointList& thePoints,
+                               const bool theFillPoints = true );
+  void finishCurveModification( const SectionToPointList& thePoints = SectionToPointList() );
 
   // curve algorithm
   int  findLocalPointIndex( int theSectionId, float theX, float theY );
+  void findSectionsToPoints( const double theX, const double theY,
+                             SectionToPointList& thePoints );
+  void convert( const SectionToPointList& thePoints,
+                QMap<int, QList<int> >& theConvPoints );
 
   // OCC algorithm
   bool pointOnObject( Handle(AIS_InteractiveObject) theObject,
                       const int theX, const int theY,
-                      gp_Pnt& thePoint, int& thePoint1, int& thePoint2 );
+                      gp_Pnt& thePoint, gp_Pnt& thePoint1, gp_Pnt& thePoint2 );
+  bool hasProjectPointOnCurve( const int theX, const int theY,
+                               const Handle(Geom_Curve)& theCurve,
+                               Standard_Real& theParameter );
+
+  // local point view table methods
+  int getSectionId( const int theRowId ) const;
+  int getPointId( const int theRowId ) const;
+
+  bool contains( const SectionToPointList& theList, const SectionToPoint& theValue ) const;
 
 private:
   QMap<ActionId, QAction*>    myActionMap;
@@ -166,8 +193,10 @@ private:
   int                         mySection;
   int                         myPointNum;
   bool                        myDragStarted;
-  QList<int>                  myDragPoints;
   QPoint                      myDragStartPosition;
+  int                         myDragInteractionStyle;
+  SectionToPointList          myDragPoints;
+  bool                        myDragged;
   QByteArray                  myGuiState;
 };