Salome HOME
36156c8ecf75e46073f152bc1c190fe32c29f2dc
[modules/shaper.git] / src / PartSet / PartSet_Module.h
1 #ifndef PartSet_Module_H
2 #define PartSet_Module_H
3
4 #include "PartSet.h"
5
6 #include <ModuleBase_IModule.h>
7 #include <ModuleBase_Definitions.h>
8 #include <ModuleBase_ViewerFilters.h>
9 #include <XGUI_Command.h>
10 #include <ModelAPI_Feature.h>
11 #include <ModelAPI_Attribute.h>
12 #include <ModelAPI_CompositeFeature.h>
13
14 #include <StdSelect_FaceFilter.hxx>
15 #include <TopoDS_Shape.hxx>
16
17 #include <QMap>
18 #include <QObject>
19
20 #include <string>
21
22 #include <memory>
23
24 class ModuleBase_Operation;
25 class ModuleBase_IViewWindow;
26
27 class PARTSET_EXPORT PartSet_Module : public ModuleBase_IModule
28 {
29 Q_OBJECT
30
31 /// Enumeration to specify the restart operation properties.
32 enum RestartingMode {
33   RM_None, /// the operation should not be restarted
34   RM_LastFeatureUse, /// the operation is restarted and use the previous feature for own initialization
35   RM_LastFeatureEmpty /// the operation is restarted and does not use the previous feature
36 };
37
38 public:
39   PartSet_Module(ModuleBase_IWorkshop* theWshop);
40   virtual ~PartSet_Module();
41
42   /// Creates custom widgets for property panel
43   virtual QWidget* createWidgetByType(const std::string& theType, QWidget* theParent,
44                                       Config_WidgetAPI* theWidgetApi, std::string theParentId,
45                                       QList<ModuleBase_ModelWidget*>& theModelWidgets);
46
47   /// Call back forlast tuning of property panel before operation performance
48   virtual void propertyPanelDefined(ModuleBase_Operation* theOperation);
49
50   QStringList sketchOperationIdList() const;
51
52 protected slots:
53   /// Called when previous operation is finished
54   virtual void onOperationComitted(ModuleBase_Operation* theOperation);
55
56   virtual void onOperationAborted(ModuleBase_Operation* theOperation);
57
58   virtual void onOperationStarted(ModuleBase_Operation* theOperation);
59
60   virtual void onOperationStopped(ModuleBase_Operation* theOperation);
61
62   /// Called when previous operation is finished
63   virtual void onSelectionChanged();
64
65   /// SLOT, that is called by mouse press in the viewer.
66   /// The mouse released point is sent to the current operation to be processed.
67   /// \param theEvent the mouse event
68   void onMousePressed(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent);
69
70   /// SLOT, that is called by mouse release in the viewer.
71   /// The mouse released point is sent to the current operation to be processed.
72   /// \param theEvent the mouse event
73   virtual void onMouseReleased(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent);
74   
75   /// SLOT, that is called by mouse move in the viewer.
76   /// The mouse moved point is sent to the current operation to be processed.
77   /// \param theEvent the mouse event
78   virtual void onMouseMoved(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent);
79
80   /// SLOT, that is called by key release in the viewer.
81   /// The mouse moved point is sent to the current operation to be processed.
82   /// \param theEvent the key event
83   void onKeyRelease(ModuleBase_IViewWindow* theWnd, QKeyEvent* theEvent);
84
85   /// SLOT, that is called by enter key released
86   /// Set a specific type of restarting the current operation
87   void onEnterReleased();
88
89   /// Launches the operation from current highlighting
90   void launchEditing();
91
92  protected:
93   /// Returns new instance of operation object (used in createOperation for customization)
94   virtual ModuleBase_Operation* getNewOperation(const std::string& theFeatureId);
95
96   /// Register validators for this module
97   virtual void registerValidators();
98
99  private slots:
100    void onVertexSelected(ObjectPtr theObject, const TopoDS_Shape& theShape);
101
102    void onPlaneSelected(const std::shared_ptr<GeomAPI_Pln>& thePln);
103
104  private:
105    /// Converts mouse position to 2d coordinates. 
106    /// Member myCurrentSketch has to be correctly defined
107   void get2dPoint(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent, 
108                   double& theX, double& theY);
109
110   /// Breaks sequense of automatically resterted operations
111   void breakOperationSequence();
112
113  private:
114    QString myLastOperationId;
115    FeaturePtr myLastFeature;
116
117    bool myIsDragging;
118    bool myDragDone;
119
120    // Automatical restarting mode flag
121    RestartingMode myRestartingMode;
122
123    double myCurX, myCurY;
124    CompositeFeaturePtr myCurrentSketch;
125    QList<FeaturePtr> myEditingFeatures;
126    QList<AttributePtr> myEditingAttr;
127
128    Handle(ModuleBase_ShapeInPlaneFilter) myPlaneFilter;
129   /// A filter which provides selection within a current document or whole PartSet
130   Handle(ModuleBase_ShapeDocumentFilter) myDocumentShapeFilter;
131 };
132
133 #endif