]> SALOME platform Git repositories - modules/shaper.git/blob - src/PartSet/PartSet_Module.h
Salome HOME
An improvement to process 'Enter' button click in the PartSet module.
[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   None, /// the operation should not be restarted
34   LastFeatureUse, /// the operation is restarted and use the previous feature for own initialization
35   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 enter key released
81   /// Set a specific type of restarting the current operation
82   void onEnterReleased();
83
84   /// Launches the operation from current highlighting
85   void launchEditing();
86
87  protected:
88   /// Returns new instance of operation object (used in createOperation for customization)
89   virtual ModuleBase_Operation* getNewOperation(const std::string& theFeatureId);
90
91   /// Register validators for this module
92   virtual void registerValidators();
93
94  private slots:
95    void onVertexSelected(ObjectPtr theObject, const TopoDS_Shape& theShape);
96
97    void onPlaneSelected(const std::shared_ptr<GeomAPI_Pln>& thePln);
98
99  private:
100    /// Converts mouse position to 2d coordinates. 
101    /// Member myCurrentSketch has to be correctly defined
102   void get2dPoint(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent, 
103                   double& theX, double& theY);
104
105   /// Breaks sequense of automatically resterted operations
106   void breakOperationSequence();
107
108  private:
109    QString myLastOperationId;
110    FeaturePtr myLastFeature;
111
112    bool myIsDragging;
113    bool myDragDone;
114
115    // Automatical restarting mode flag
116    RestartingMode myRestartingMode;
117
118    double myCurX, myCurY;
119    CompositeFeaturePtr myCurrentSketch;
120    QList<FeaturePtr> myEditingFeatures;
121    QList<AttributePtr> myEditingAttr;
122
123    Handle(ModuleBase_ShapeInPlaneFilter) myPlaneFilter;
124   /// A filter which provides selection within a current document or whole PartSet
125   Handle(ModuleBase_ShapeDocumentFilter) myDocumentShapeFilter;
126 };
127
128 #endif