Salome HOME
Add a new 'moveSection' operation to change position of section in the list.
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.h
index 22d57e91198dcec4fb0fa43612fc274ee09fd1ba..f17cf3d17f567238a4f2f6fd6798965141e3740e 100644 (file)
 #include <QMap>
 
 #include <SUIT_ViewWindow.h>
+#include <AIS_InteractiveObject.hxx>
+
+#include <Geom_Curve.hxx>
+#include <V3d_View.hxx>
+#include <gp_Pnt.hxx>
 
 class OCCViewer_Viewer;
 
@@ -41,100 +46,142 @@ class CurveCreator_NewSectionDlg;
 
 class CURVECREATOR_EXPORT CurveCreator_Widget : public QWidget
 {
-    Q_OBJECT
+  Q_OBJECT
 public:
-    explicit CurveCreator_Widget( QWidget* parent,
-                      CurveCreator_ICurve *theCurve,
-                      Qt::WindowFlags fl=0 );
+  explicit CurveCreator_Widget( QWidget* parent,
+                                CurveCreator_ICurve *theCurve,
+                                Qt::WindowFlags fl=0 );
 
-    OCCViewer_Viewer* getOCCViewer();
+  void setOCCViewer( OCCViewer_Viewer* theViewer );
+  OCCViewer_Viewer* getOCCViewer();
 
-    //virtual bool eventFilter( QObject* theWatched, QEvent* theEvent );
+  //virtual bool eventFilter( QObject* theWatched, QEvent* theEvent );
 
-    //! Return unique section name
-    std::string getUniqSectionName(CurveCreator_ICurve* theCurve) const;
+  //! Return unique section name
+  std::string getUniqSectionName(CurveCreator_ICurve* theCurve) const;
 
-    void setCurve( CurveCreator_ICurve* theCurve );
+  void setCurve( CurveCreator_ICurve* theCurve );
 
-    QList<int> getSelectedSections();
-    QList< QPair< int, int > > getSelectedPoints();
+  QList<int> getSelectedSections();
+  QList< QPair< int, int > > getSelectedPoints();
 
 signals:
-    void selectionChanged();
-    void subOperationStarted( QWidget* );
-    void subOperationFinished( QWidget* );
+  void selectionChanged();
+  void subOperationStarted( QWidget* );
+  void subOperationFinished( QWidget* );
 
 public slots:
 
 protected slots:
-    void     onAdditionMode(bool checked);
-    void     onModificationMode(bool checked);
-    void     onDetectionMode(bool checked);
-    void     onModeChanged(bool checked);
-    void     onNewSection();
-    void     onSelectionChanged();
-    void     onAddNewPoint(const CurveCreator::Coordinates& theCoords);
-    void     onAddNewSection();
-    void     onEditSection( int theSection );
-    void     onModifySection();
-    void     onCancelSection();
-    void     onJoin();
-    void     onRemove();
-    void     onClearAll();
-    void     onJoinAll();
-    void     onSetSpline();
-    void     onSetPolyline();
-    void     onCloseSections();
-    void     onUncloseSections();
-    void     onUndo();
-    void     onRedo();
-    void     onUndoSettings();
-    void     onContextMenu(QPoint thePoint);
-    void     onGetCoordsByClick( SUIT_ViewWindow*, QMouseEvent* );
-    void     onPointSelect( SUIT_ViewWindow*, QMouseEvent* );
-    void     onPointDrag( SUIT_ViewWindow*, QMouseEvent* );
-    void     onLocalPointChanged( int theRow, int theColumn );
+  void     onAdditionMode(bool checked);
+  void     onModificationMode(bool checked);
+  void     onDetectionMode(bool checked);
+  void     onModeChanged(bool checked);
+  void     onNewSection();
+  void     onSelectionChanged();
+  void     onAddNewPoint(const CurveCreator::Coordinates& theCoords);
+  void     onAddNewSection();
+  void     onEditSection( int theSection );
+  void     onModifySection();
+  void     onCancelSection();
+  void     onJoin();
+  void     onRemove();
+  void     onClearAll();
+  void     onJoinAll();
+  void     onSetSpline();
+  void     onSetPolyline();
+  void     onCloseSections();
+  void     onUncloseSections();
+  void     onUndo();
+  void     onRedo();
+  void     onUndoSettings();
+  void     onContextMenu(QPoint thePoint);
+  void     onGetCoordsByClick( QMouseEvent* );
+
+  void     onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent );
+  void     onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent );
+  void     onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent );
+
+  void     onLocalPointChanged( int theRow, int theColumn );
+
 protected:
-    enum ActionId{ UNDO_ID, 
-                   REDO_ID, 
-                   NEW_SECTION_ID, 
-                   ADDITION_MODE_ID, 
-                   REMOVE_ID, 
-                   REMOVE_ALL_ID, 
-                   JOIN_ID,
-                   JOIN_ALL_ID, 
-                   CLOSE_SECTIONS_ID, 
-                   UNCLOSE_SECTIONS_ID,
-                   SET_SECTIONS_POLYLINE_ID, 
-                   SET_SECTIONS_SPLINE_ID, 
-                   CLEAR_ALL_ID, 
-                   SEPARATOR_ID, 
-                   MODIFICATION_MODE_ID, 
-                   DETECTION_MODE_ID 
-    };
+  enum ActionId{ UNDO_ID, 
+                 REDO_ID, 
+                 NEW_SECTION_ID, 
+                 ADDITION_MODE_ID, 
+                 REMOVE_ID, 
+                 REMOVE_ALL_ID, 
+                 JOIN_ID,
+                 JOIN_ALL_ID, 
+                 CLOSE_SECTIONS_ID, 
+                 UNCLOSE_SECTIONS_ID,
+                 SET_SECTIONS_POLYLINE_ID, 
+                 SET_SECTIONS_SPLINE_ID, 
+                 CLEAR_ALL_ID, 
+                 SEPARATOR_ID, 
+                 MODIFICATION_MODE_ID, 
+                 DETECTION_MODE_ID 
+  };
+
+  enum ActionMode {
+    NoneMode,
+    AdditionMode,
+    ModificationMode,
+    DetectionMode
+  };
+
 private:
-    QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
-                           const QString& theToolTip, const QKeySequence& theShortcut );
-    QAction* getAction(ActionId theId);
-    void     updateUndoRedo();
-    int      findLocalPointIndex( int theSectionId, float theX, float theY );
-    void     updateLocalPointView();
-    void     setLocalPointContext( const bool theOpen );
-    void     addLocalPointToTable( const double theX, const double theY );
-
-    void getSelectedPonts( const int theSectionId, QList<int>& thePoints );
-    void setSelectedPonts( const int theSectionId, const QList<int>& thePoints );
+  QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
+                         const QString& theToolTip, const QKeySequence& theShortcut );
+  QAction* getAction(ActionId theId);
+  ActionMode getActionMode() const;
+
+  void     updateUndoRedo();
+
+  void removeSection();
+  void removePoint();
+  void insertPointToSelectedSegment( const int theXPosition,
+                                     const int theYPosition );
+  void moveSelectedPoints( const int theXPosition, const int theYPosition );
+  void updateLocalPointView();
+  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 startCurveModification( QList<int>& thePoints, const bool theFillPoints = true );
+  void finishCurveModification( const QList<int>& thePoints );
+
+  // curve algorithm
+  int  findLocalPointIndex( int theSectionId, float theX, float theY );
+  void findSections( int thePointId, QList<int>& theSections );
+
+  // OCC algorithm
+  bool pointOnObject( Handle(AIS_InteractiveObject) theObject,
+                      const int theX, const int theY,
+                      gp_Pnt& thePoint, int& thePoint1, int& thePoint2 );
+  bool hasProjectPointOnCurve( const int theX, const int theY,
+                               const Handle(Geom_Curve)& theCurve,
+                               Standard_Real& theParameter );
 
 private:
-    QMap<ActionId, QAction*>    myActionMap;
-    CurveCreator_ICurve*         myCurve;
-    CurveCreator_TreeView*      mySectionView;
-    QTableWidget*               myLocalPointView;
-    CurveCreator_NewSectionDlg* myNewSectionEditor;
-    int                         mySection;
-    int                         myPointNum;
-    QPoint                      myDragStartPosition;
-    QByteArray                  myGuiState;
+  QMap<ActionId, QAction*>    myActionMap;
+  CurveCreator_ICurve*         myCurve;
+  CurveCreator_TreeView*      mySectionView;
+  QTableWidget*               myLocalPointView;
+  CurveCreator_NewSectionDlg* myNewSectionEditor;
+  OCCViewer_Viewer*           myOCCViewer;
+  int                         mySection;
+  int                         myPointNum;
+  bool                        myDragStarted;
+  QPoint                      myDragStartPosition;
+  int                         myDragInteractionStyle;
+  QList<int>                  myDragPoints;
+  bool                        myDragged;
+  QByteArray                  myGuiState;
 };
 
 #endif // CURVECREATOR_WIDGET_H