Salome HOME
Old development made for salome Hydro:
[modules/geom.git] / src / CurveCreator / CurveCreator_Widget.h
index 7f335e8dbbead8007badae375b3473458b09729c..3819c62e4e26070f7c6bc996e3928e22fd16f22d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2013-2014  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2013-2020  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
 #ifndef CURVECREATOR_WIDGET_H
 #define CURVECREATOR_WIDGET_H
 
-#include "CurveCreator_Curve.hxx"
+#include "CurveCreator_Macro.hxx"
 #include "CurveCreator.hxx"
+#include "CurveCreator_ICurve.hxx"
+
+#include <SUIT_ViewWindow.h>
+#include <OCCViewer_ViewWindow.h>
+
+#include <AIS_InteractiveObject.hxx>
+#include <AIS_InteractiveContext.hxx>
+#include <AIS_ListOfInteractive.hxx>
+#include <Geom_Curve.hxx>
+#include <V3d_View.hxx>
+#include <gp_Pnt.hxx>
 
 #include <QWidget>
 #include <QMap>
 
-#include <SUIT_ViewWindow.h>
+class CurveCreator_TableView;
+class CurveCreator_TreeView;
+class CurveCreator_NewSectionDlg;
+
+class OCCViewer_Viewer;
+class OCCViewer_ViewPort3d;
 
 class QAction;
 class QPixmap;
-class CurveCreator_CurveEditor;
-class CurveCreator_TreeView;
-class CurveCreator_NewPointDlg;
-class CurveCreator_NewSectionDlg;
 
 class CURVECREATOR_EXPORT CurveCreator_Widget : public QWidget
 {
-    Q_OBJECT
+  Q_OBJECT
+
 public:
-    explicit CurveCreator_Widget( QWidget* parent,
-                      CurveCreator_Curve *theCurve,
-                      Qt::WindowFlags fl=0 );
+  enum ActionFlags {
+    NoFlags              = 0x00000000,
+    DisableDetectionMode = 0x00000001,
+    DisableNewSection    = 0x00000002,
+    DisableClosedSection = 0x00000004,
+    DisableSetColor      = 0x00000008
+  };
 
-    void setCurve( CurveCreator_Curve* theCurve );
+  enum ActionMode {
+    NoneMode,
+    AdditionMode,
+    ModificationMode,
+    DetectionMode
+  };
 
-    QList<int> getSelectedSections();
-    QList< QPair< int, int > > getSelectedPoints();
+public:
+  explicit CurveCreator_Widget( QWidget* parent,
+                                CurveCreator_ICurve *theCurve,
+                                const int theActionFlags = NoFlags,
+                                const QStringList& theCoordTitles = QStringList(),
+                                Qt::WindowFlags fl=0);
+
+  // OCC viewer manipulation
+  void setOCCViewer( OCCViewer_Viewer* theViewer );
+
+  Handle(AIS_InteractiveContext) getAISContext();
+  OCCViewer_ViewPort3d* getViewPort();
+  int changeInteractionStyle( int theStyle );
+
+  void reset();
+  void setCurve( CurveCreator_ICurve* theCurve );
+
+  QList<int> getSelectedSections();
+  void setSelectedSections( const QList<int>& theSections );
 
-    bool isInstantSketchingEnabled() const;
-    void setInstantSketchingEnabled( const bool theState );
+  void  removeSelected();
+  bool  removeEnabled();
+
+  void setActionMode( const ActionMode& theMode );
+  ActionMode getActionMode() const;
+
+  void SetViewer2DMode(const bool To2D);
+
+  void setSelectedPoints( const CurveCreator_ICurve::SectionToPointList& =
+                               CurveCreator_ICurve::SectionToPointList() );
+
+  void updateLocalPointView();
+  void setLocalPointContext( const bool theOpen, const bool isUpdateTable = false );
 
 signals:
-    void selectionChanged();
-    void subOperationStarted( QWidget* );
-    void subOperationFinished( QWidget* );
+  void selectionChanged();
+  void subOperationStarted( QWidget*, bool );
+  void subOperationFinished( QWidget* );
 
 public slots:
+  void     onAdditionMode(bool checked);
+  void     onModificationMode(bool checked);
+  void     onDetectionMode(bool checked);
+  void     onModeChanged(bool checked);
+  void     onNewSection();
+  void     onSelectionChanged();
+  void     onAddNewSection();
+  void     onEditSection( int theSection );
+  void     onModifySection();
+  void     onCancelSection();
+  void     onJoin();
+  void     onBringTogether();
+  void     onRemove();
+  void     onSetColor();
+  void     onClearAll();
+  void     onJoinAll();
+  void     onSetSpline();
+  void     onSetPolyline();
+  void     onCloseSections();
+  void     onUncloseSections();
+  void     onUndo();
+  void     onRedo();
+  void     onUndoSettings();
+  void     onContextMenu(QPoint thePoint);
+
+  void     onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent );
+  void     onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent );
+  void     onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent );
+  void     onLastViewClosed( SUIT_ViewManager* theManager );
+
+  void     onMousePress( QMouseEvent* theEvent );
+  void     onMouseRelease( QMouseEvent* theEvent );
+  void     onMouseMove( QMouseEvent* theEvent );
+
+  void     onCellChanged( int theRow, int theColumn );
 
-protected slots:
-    void     onAdditionMode(bool checked);
-    void     onModificationMode(bool checked);
-    void     onDetectPoints(bool checked);
-    void     onModeChanged(bool checked);
-    void     onNewSection();
-    void     onSelectionChanged();
-    void     onAddNewPoint(const CurveCreator::Coordinates& theCoords);
-    void     onAddNewSection();
-    void     onEditSection( int theSection );
-    void     onEditPoint( int theSection, int thePoint );
-    void     onModifyPoint();
-    void     onModifySection();
-    void     onCancelPoint();
-    void     onCancelSection();
-    void     onJoin();
-    void     onRemove();
-    void     onMoveUp();
-    void     onMoveDown();
-    void     onClearAll();
-    void     onJoinAll();
-    void     onInsertSectionBefore();
-    void     onInsertSectionAfter();
-    void     onSetSpline();
-    void     onSetPolyline();
-    void     onCloseSections();
-    void     onUncloseSections();
-    void     onInsertPointBefore();
-    void     onInsertPointAfter();
-    void     onUndo();
-    void     onRedo();
-    void     onUndoSettings();
-    void     onContextMenu(QPoint thePoint);
-    void     onGetPointByClick( SUIT_ViewWindow*, QMouseEvent* );
-//    void     onPointSelect( SUIT_ViewWindow*, QMouseEvent* );
-    void     onPointDrag( SUIT_ViewWindow*, QMouseEvent* );
 protected:
-    enum ActionId{ UNDO_ID, REDO_ID, NEW_SECTION_ID, ADDITION_MODE_ID, REMOVE_ID, REMOVE_ALL_ID, JOIN_ID,
-                   JOIN_ALL_ID, UP_ID, DOWN_ID, INSERT_SECTION_BEFORE_ID, INSERT_SECTION_AFTER_ID,
-                   INSERT_POINT_BEFORE_ID, INSERT_POINT_AFTER_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 };
+  void     addCoordsByClick( QMouseEvent* );
+
+protected:
+  enum ActionId{ NONE_ID,
+                 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,
+                 BRING_TOGETHER_ID,
+                 SETCOLOR_ID
+  };
+
+public:
+  QAction* getAction(ActionId theId);
+  QAction* getAction(ActionMode theMode);
+
 private:
-    QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
-                           const QString& theToolTip, const QKeySequence& theShortcut );
-    QAction* getAction(ActionId theId);
-    void     updateUndoRedo();
+  OCCViewer_Viewer* getOCCViewer();
+
+  QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
+                         const QString& theToolTip, const QKeySequence& theShortcut );
+
+  void updateActionsStates();
+  void updateUndoRedo();
+
+  void removeSection();
+  void removePoint();
+  void addNewPoint(const CurveCreator::Coordinates& theCoords);
+  void insertPointToSelectedSegment( const int theXPosition,
+                                     const int theYPosition );
+  void moveSelectedPoints( const int theXPosition, const int theYPosition );
+
+  void setDragStarted( const bool theState, const QPoint& thePoint = QPoint() );
+
+  void getSelectedPoints( CurveCreator_ICurve::SectionToPointList& thePoints );
+
+  void stopActionMode();
+
+  void startCurveModification( CurveCreator_ICurve::SectionToPointList& thePoints,
+                               const bool theFillPoints = true );
+  void finishCurveModification( const CurveCreator_ICurve::SectionToPointList& thePoints =
+                                      CurveCreator_ICurve::SectionToPointList() );
+
+  // curve algorithm
+  int  findLocalPointIndex( int theSectionId, double theX, double theY );
+  void findSectionsToPoints( const double theX, const double theY,
+                             CurveCreator_ICurve::SectionToPointList& thePoints );
+  void convert( const CurveCreator_ICurve::SectionToPointList& thePoints,
+                QMap<int, QList<int> >& theConvPoints );
+
+  bool contains( const CurveCreator_ICurve::SectionToPointList& theList,
+                 const CurveCreator_ICurve::SectionToPoint& theValue ) const;
+
+protected:
+  // Boundary points of mouse to select the points
+  QPoint myStartPoint;
+  QPoint myEndPoint;
+
 private:
-    QMap<ActionId, QAction*>    myActionMap;
-    CurveCreator_Curve*         myCurve;
-    CurveCreator_CurveEditor*   myEdit;
-    CurveCreator_TreeView*      mySectionView;
-    CurveCreator_NewPointDlg*   myNewPointEditor;
-    CurveCreator_NewSectionDlg* myNewSectionEditor;
-    int                         mySection;
-    int                         myPointNum;
-    QPoint                      myDragStartPosition;
+  QMap<ActionId, QAction*>    myActionMap;
+  CurveCreator_ICurve*        myCurve;
+  CurveCreator_TreeView*      mySectionView;
+  CurveCreator_TableView*     myLocalPointView;
+  CurveCreator_ICurve::SectionToPointList myLocalPoints;
+  CurveCreator_NewSectionDlg* myNewSectionEditor;
+  OCCViewer_Viewer*           myOCCViewer;
+  int                         myLocalPointRowLimit;
+  int                         mySection;
+  int                         myPointNum;
+  bool                        myDragStarted;
+  QPoint                      myDragStartPosition;
+  int                         myDragInteractionStyle;
+  CurveCreator_ICurve::SectionToPointList myDragPoints;
+  QMap<CurveCreator_ICurve::SectionToPoint, CurveCreator::Coordinates> myInitialDragPointsCoords;
+  bool                        myDragged;
+  QByteArray                  myGuiState;
+  OCCViewer_ViewWindow::Mode2dType myOld2DMode;
 };
 
 #endif // CURVECREATOR_WIDGET_H