Salome HOME
another z layer for hilight presentation
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.h
index 43fdb492fbc398e53fbd5ac11f2e3f506006e0ea..31b4db039e842234c039fda0e007ce125c1378f1 100644 (file)
@@ -34,6 +34,7 @@
 #include <Geom_Curve.hxx>
 #include <V3d_View.hxx>
 #include <gp_Pnt.hxx>
+#include <TopoDS_Vertex.hxx> // TODO - remove
 
 class OCCViewer_Viewer;
 class OCCViewer_ViewPort3d;
@@ -42,7 +43,7 @@ class AIS_ListOfInteractive;
 
 class QAction;
 class QPixmap;
-class QTableWidget;
+class CurveCreator_TableView;
 class CurveCreator_TreeView;
 class CurveCreator_NewPointDlg;
 class CurveCreator_NewSectionDlg;
@@ -50,10 +51,29 @@ class CurveCreator_NewSectionDlg;
 class CURVECREATOR_EXPORT CurveCreator_Widget : public QWidget
 {
   Q_OBJECT
+
+public:
+  enum ActionFlags {
+    NoFlags              = 0x00000000,
+    DisableDetectionMode = 0x00000001,
+    DisableNewSection    = 0x00000002,
+    DisableClosedSection = 0x00000004
+  };
+
+  enum ActionMode {
+    NoneMode,
+    AdditionMode,
+    ModificationMode,
+    DetectionMode
+  };
+
 public:
   explicit CurveCreator_Widget( QWidget* parent,
                                 CurveCreator_ICurve *theCurve,
-                                Qt::WindowFlags fl=0 );
+                                const int theActionFlags = NoFlags,
+                                const QStringList& theCoordTitles = QStringList(),
+                                Qt::WindowFlags fl=0,
+                                int theLocalPointRowLimit = 20);
 
   // OCC viewer manipulation
   void setOCCViewer( OCCViewer_Viewer* theViewer );
@@ -61,24 +81,22 @@ public:
   Handle(AIS_InteractiveContext) getAISContext();
   OCCViewer_ViewPort3d* getViewPort();
   int changeInteractionStyle( int theStyle );
-  void setObjectsSelected(const AIS_ListOfInteractive& theList);
 
   void reset();
-
-  //! Return unique section name
-  std::string getUniqSectionName(CurveCreator_ICurve* theCurve) const;
-
   void setCurve( CurveCreator_ICurve* theCurve );
 
   QList<int> getSelectedSections();
-  QList< QPair< int, int > > getSelectedPoints();
+  void setSelectedSections( const QList<int>& theSections );
 
   void  removeSelected();
   bool  removeEnabled();
 
+  void setActionMode( const ActionMode& theMode );
+  ActionMode getActionMode() const;
+
 signals:
   void selectionChanged();
-  void subOperationStarted( QWidget* );
+  void subOperationStarted( QWidget*, bool );
   void subOperationFinished( QWidget* );
 
 public slots:
@@ -90,7 +108,6 @@ protected slots:
   void     onModeChanged(bool checked);
   void     onNewSection();
   void     onSelectionChanged();
-  void     onAddNewPoint(const CurveCreator::Coordinates& theCoords);
   void     onAddNewSection();
   void     onEditSection( int theSection );
   void     onModifySection();
@@ -107,7 +124,6 @@ protected slots:
   void     onRedo();
   void     onUndoSettings();
   void     onContextMenu(QPoint thePoint);
-  void     onGetCoordsByClick( QMouseEvent* );
 
   void     onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent );
   void     onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent );
@@ -121,7 +137,11 @@ protected slots:
   void     onCellChanged( int theRow, int theColumn );
 
 protected:
-  enum ActionId{ UNDO_ID, 
+  void     addCoordsByClick( QMouseEvent* );
+
+protected:
+  enum ActionId{ NONE_ID,
+                 UNDO_ID, 
                  REDO_ID, 
                  NEW_SECTION_ID, 
                  ADDITION_MODE_ID, 
@@ -139,38 +159,34 @@ protected:
                  DETECTION_MODE_ID 
   };
 
-  enum ActionMode {
-    NoneMode,
-    AdditionMode,
-    ModificationMode,
-    DetectionMode
-  };
-
 private:
   OCCViewer_Viewer* getOCCViewer();
 
   QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
                          const QString& theToolTip, const QKeySequence& theShortcut );
   QAction* getAction(ActionId theId);
-  ActionMode getActionMode() const;
+  QAction* getAction(ActionMode theMode);
 
-  void     updateUndoRedo();
+  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 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( CurveCreator_ICurve::SectionToPointList& thePoints );
-  void setSelectedPonts( const CurveCreator_ICurve::SectionToPointList& =
+  void getSelectedPoints( CurveCreator_ICurve::SectionToPointList& thePoints );
+  void setSelectedPoints( const CurveCreator_ICurve::SectionToPointList& =
                                CurveCreator_ICurve::SectionToPointList() );
 
+  void stopActionMode();
+
   void startCurveModification( CurveCreator_ICurve::SectionToPointList& thePoints,
                                const bool theFillPoints = true );
   void finishCurveModification( const CurveCreator_ICurve::SectionToPointList& thePoints = 
@@ -183,28 +199,29 @@ private:
   void convert( const CurveCreator_ICurve::SectionToPointList& thePoints,
                 QMap<int, QList<int> >& theConvPoints );
 
-  // local point view table methods
-  int getSectionId( const int theRowId ) const;
-  int getPointId( const int theRowId ) const;
-
   bool contains( const CurveCreator_ICurve::SectionToPointList& theList,
                  const CurveCreator_ICurve::SectionToPoint& theValue ) const;
 
 private:
   QMap<ActionId, QAction*>    myActionMap;
-  CurveCreator_ICurve*         myCurve;
+  CurveCreator_ICurve*        myCurve;
   CurveCreator_TreeView*      mySectionView;
-  QTableWidget*               myLocalPointView;
+  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;
+  int                         myPressedX;
+  int                         myPressedY;
 };
 
 #endif // CURVECREATOR_WIDGET_H