Salome HOME
Save for a list of the local selected points.
[modules/hydro.git] / src / HYDROCurveCreator / CurveCreator_Widget.h
index 2ca9f1d6190832091d02603068ad1821a67ac67a..e3ac5af039514bd3cfe7040676abe86229b6a670 100644 (file)
 #ifndef CURVECREATOR_WIDGET_H
 #define CURVECREATOR_WIDGET_H
 
-//#include "CurveCreator_ICurve.hxx"
-#include "CurveCreator.hxx"
 #include "CurveCreator_Macro.hxx"
+#include "CurveCreator.hxx"
+#include "CurveCreator_ICurve.hxx"
 
 #include <QWidget>
 #include <QMap>
 
 #include <SUIT_ViewWindow.h>
 #include <AIS_InteractiveObject.hxx>
+#include <AIS_InteractiveContext.hxx>
 
 #include <Geom_Curve.hxx>
 #include <V3d_View.hxx>
 #include <gp_Pnt.hxx>
+#include <TopoDS_Vertex.hxx> // TODO - remove
 
 class OCCViewer_Viewer;
+class OCCViewer_ViewPort3d;
+
+class AIS_ListOfInteractive;
 
 class QAction;
 class QPixmap;
-class QTableWidget;
-class CurveCreator_ICurve;
+class CurveCreator_TableView;
 class CurveCreator_TreeView;
 class CurveCreator_NewPointDlg;
 class CurveCreator_NewSectionDlg;
@@ -50,21 +54,26 @@ class CURVECREATOR_EXPORT CurveCreator_Widget : public QWidget
 public:
   explicit CurveCreator_Widget( QWidget* parent,
                                 CurveCreator_ICurve *theCurve,
-                                Qt::WindowFlags fl=0 );
+                                Qt::WindowFlags fl=0,
+                                int theLocalPointRowLimit = 20);
 
+  // OCC viewer manipulation
   void setOCCViewer( OCCViewer_Viewer* theViewer );
-  OCCViewer_Viewer* getOCCViewer();
-
-  //virtual bool eventFilter( QObject* theWatched, QEvent* theEvent );
 
-  //! Return unique section name
-  std::string getUniqSectionName(CurveCreator_ICurve* theCurve) const;
+  Handle(AIS_InteractiveContext) getAISContext();
+  OCCViewer_ViewPort3d* getViewPort();
+  int changeInteractionStyle( int theStyle );
+  void setObjectsSelected(const AIS_ListOfInteractive& theList);
 
+  void reset();
   void setCurve( CurveCreator_ICurve* theCurve );
 
   QList<int> getSelectedSections();
   QList< QPair< int, int > > getSelectedPoints();
 
+  void  removeSelected();
+  bool  removeEnabled();
+
 signals:
   void selectionChanged();
   void subOperationStarted( QWidget* );
@@ -101,6 +110,11 @@ protected slots:
   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 );
 
@@ -130,16 +144,16 @@ protected:
     DetectionMode
   };
 
-  typedef QPair< int, int > SectionToPoint;
-  typedef QList< SectionToPoint > SectionToPointList;
-
 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;
 
-  void     updateUndoRedo();
+  void updateActionsStates();
+  void updateUndoRedo();
 
   void removeSection();
   void removePoint();
@@ -148,49 +162,45 @@ private:
   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( SectionToPointList& thePoints );
-  void setSelectedPonts( const SectionToPointList& = SectionToPointList() );
+  void getSelectedPoints( CurveCreator_ICurve::SectionToPointList& thePoints );
+  bool isIntersectVertexToPoint( const TopoDS_Vertex& theVertex,
+                               const CurveCreator_ICurve::SectionToPoint& theSToPoint );
+  void setSelectedPoints( const CurveCreator_ICurve::SectionToPointList& =
+                               CurveCreator_ICurve::SectionToPointList() );
 
-  void startCurveModification( SectionToPointList& thePoints,
+  void startCurveModification( CurveCreator_ICurve::SectionToPointList& thePoints,
                                const bool theFillPoints = true );
-  void finishCurveModification( const SectionToPointList& thePoints );
+  void finishCurveModification( const CurveCreator_ICurve::SectionToPointList& thePoints = 
+                                      CurveCreator_ICurve::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,
+                             CurveCreator_ICurve::SectionToPointList& thePoints );
+  void convert( const CurveCreator_ICurve::SectionToPointList& thePoints,
                 QMap<int, QList<int> >& theConvPoints );
 
-  // OCC algorithm
-  bool pointOnObject( Handle(AIS_InteractiveObject) theObject,
-                      const int theX, const int theY,
-                      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 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;
-  SectionToPointList          myDragPoints;
+  CurveCreator_ICurve::SectionToPointList myDragPoints;
   bool                        myDragged;
   QByteArray                  myGuiState;
 };