1 // Copyright (C) 2013 CEA/DEN, EDF R&D, OPEN CASCADE
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License.
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11 // Lesser General Public License for more details.
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
20 #ifndef CURVECREATOR_WIDGET_H
21 #define CURVECREATOR_WIDGET_H
23 #include "CurveCreator_Macro.hxx"
24 #include "CurveCreator.hxx"
25 #include "CurveCreator_ICurve.hxx"
30 #include <SUIT_ViewWindow.h>
31 #include <AIS_InteractiveObject.hxx>
32 #include <AIS_InteractiveContext.hxx>
34 #include <Geom_Curve.hxx>
35 #include <V3d_View.hxx>
37 #include <TopoDS_Vertex.hxx> // TODO - remove
39 class OCCViewer_Viewer;
40 class OCCViewer_ViewPort3d;
42 class AIS_ListOfInteractive;
46 class CurveCreator_TableView;
47 class CurveCreator_TreeView;
48 class CurveCreator_NewPointDlg;
49 class CurveCreator_NewSectionDlg;
51 class CURVECREATOR_EXPORT CurveCreator_Widget : public QWidget
58 DisableDetectionMode = 0x00000001,
59 DisableNewSection = 0x00000002,
60 DisableClosedSection = 0x00000004
64 explicit CurveCreator_Widget( QWidget* parent,
65 CurveCreator_ICurve *theCurve,
66 const int theActionFlags = NoFlags,
68 int theLocalPointRowLimit = 20);
70 // OCC viewer manipulation
71 void setOCCViewer( OCCViewer_Viewer* theViewer );
73 Handle(AIS_InteractiveContext) getAISContext();
74 OCCViewer_ViewPort3d* getViewPort();
75 int changeInteractionStyle( int theStyle );
78 void setCurve( CurveCreator_ICurve* theCurve );
80 QList<int> getSelectedSections();
82 void removeSelected();
86 void selectionChanged();
87 void subOperationStarted( QWidget*, bool );
88 void subOperationFinished( QWidget* );
93 void onAdditionMode(bool checked);
94 void onModificationMode(bool checked);
95 void onDetectionMode(bool checked);
96 void onModeChanged(bool checked);
98 void onSelectionChanged();
99 void onAddNewSection();
100 void onEditSection( int theSection );
101 void onModifySection();
102 void onCancelSection();
108 void onSetPolyline();
109 void onCloseSections();
110 void onUncloseSections();
113 void onUndoSettings();
114 void onContextMenu(QPoint thePoint);
116 void onMousePress( SUIT_ViewWindow*, QMouseEvent* theEvent );
117 void onMouseRelease( SUIT_ViewWindow*, QMouseEvent* theEvent );
118 void onMouseMove( SUIT_ViewWindow*, QMouseEvent* theEvent );
119 void onLastViewClosed( SUIT_ViewManager* theManager );
121 void onMousePress( QMouseEvent* theEvent );
122 void onMouseRelease( QMouseEvent* theEvent );
123 void onMouseMove( QMouseEvent* theEvent );
125 void onCellChanged( int theRow, int theColumn );
128 void addCoordsByClick( QMouseEvent* );
131 enum ActionId{ NONE_ID,
142 SET_SECTIONS_POLYLINE_ID,
143 SET_SECTIONS_SPLINE_ID,
146 MODIFICATION_MODE_ID,
158 OCCViewer_Viewer* getOCCViewer();
160 QAction* createAction( ActionId theId, const QString& theName, const QPixmap& theImage,
161 const QString& theToolTip, const QKeySequence& theShortcut );
162 QAction* getAction(ActionId theId);
163 QAction* getAction(ActionMode theMode);
165 void setActionMode( const ActionMode& theMode );
166 ActionMode getActionMode() const;
168 void updateActionsStates();
169 void updateUndoRedo();
171 void removeSection();
173 void addNewPoint(const CurveCreator::Coordinates& theCoords);
174 void insertPointToSelectedSegment( const int theXPosition,
175 const int theYPosition );
176 void moveSelectedPoints( const int theXPosition, const int theYPosition );
177 void updateLocalPointView();
178 void setLocalPointContext( const bool theOpen, const bool isUpdateTable = false );
180 void setDragStarted( const bool theState, const QPoint& thePoint = QPoint() );
182 void getSelectedPoints( CurveCreator_ICurve::SectionToPointList& thePoints );
183 void setSelectedPoints( const CurveCreator_ICurve::SectionToPointList& =
184 CurveCreator_ICurve::SectionToPointList() );
186 void stopActionMode();
188 void startCurveModification( CurveCreator_ICurve::SectionToPointList& thePoints,
189 const bool theFillPoints = true );
190 void finishCurveModification( const CurveCreator_ICurve::SectionToPointList& thePoints =
191 CurveCreator_ICurve::SectionToPointList() );
194 int findLocalPointIndex( int theSectionId, float theX, float theY );
195 void findSectionsToPoints( const double theX, const double theY,
196 CurveCreator_ICurve::SectionToPointList& thePoints );
197 void convert( const CurveCreator_ICurve::SectionToPointList& thePoints,
198 QMap<int, QList<int> >& theConvPoints );
200 bool contains( const CurveCreator_ICurve::SectionToPointList& theList,
201 const CurveCreator_ICurve::SectionToPoint& theValue ) const;
204 QMap<ActionId, QAction*> myActionMap;
205 CurveCreator_ICurve* myCurve;
206 CurveCreator_TreeView* mySectionView;
207 CurveCreator_TableView* myLocalPointView;
208 CurveCreator_ICurve::SectionToPointList myLocalPoints;
209 CurveCreator_NewSectionDlg* myNewSectionEditor;
210 OCCViewer_Viewer* myOCCViewer;
211 int myLocalPointRowLimit;
215 QPoint myDragStartPosition;
216 int myDragInteractionStyle;
217 CurveCreator_ICurve::SectionToPointList myDragPoints;
218 QMap<CurveCreator_ICurve::SectionToPoint, CurveCreator::Coordinates> myInitialDragPointsCoords;
220 QByteArray myGuiState;
225 #endif // CURVECREATOR_WIDGET_H