Salome HOME
Issue #1393 Angle constraint : incorrect angle displayed. solution: arc's passed...
[modules/shaper.git] / src / PartSet / PartSet_WidgetPoint2dDistance.h
index 7d6a497c6058f55a89af09552decfa518f6ce373..55825c4b648b2a8baf5b0e0dc9d99eaed6b73feb 100644 (file)
@@ -13,7 +13,7 @@
 #include <ModelAPI_CompositeFeature.h>
 
 class GeomAPI_Pnt2d;
-class XGUI_Workshop;
+class ModuleBase_IWorkshop;
 class ModuleBase_IViewWindow;
 class QMouseEvent;
 
@@ -40,32 +40,30 @@ Q_OBJECT
  public:
   /// Constructor
   /// \param theParent the parent object
+  /// \param theWorkshop a current workshop
   /// \param theData the widget configuation. The attribute of the model widget is obtained from
-  /// \param theParentId is Id of a parent of the current attribute
-  PartSet_WidgetPoint2dDistance(QWidget* theParent, const Config_WidgetAPI* theData,
-                                   const std::string& theParentId);
+  PartSet_WidgetPoint2dDistance(QWidget* theParent, ModuleBase_IWorkshop* theWorkshop,
+                                const Config_WidgetAPI* theData);
 
   virtual ~PartSet_WidgetPoint2dDistance();
 
-  /// Fills the widget with default values
-  virtual void reset();
+  /// Checks if the selection presentation is valid in widget 
+  /// \param theValue a selected presentation in the view
+  /// \return a boolean value
+  virtual bool isValidSelectionCustom(const std::shared_ptr<ModuleBase_ViewerPrs>& theValue);
 
   /// The methiod called when widget is deactivated
   virtual void deactivate();
 
-  /// Returns workshop
-  XGUI_Workshop* workshop() const { return myWorkshop; }
-
-  /// Set workshop
-  /// \param theWork a pointer to workshop
-  void setWorkshop(XGUI_Workshop* theWork) { myWorkshop = theWork; }
-
   /// \returns the sketch instance
   CompositeFeaturePtr sketch() const { return mySketch; }
 
   /// Set sketch instance
   void setSketch(CompositeFeaturePtr theSketch) { mySketch = theSketch; }
 
+  /// Returns true if the event is processed.
+  virtual bool processEnter();
+
 public slots:
    /// Process of mouse move
    /// \param theWnd a pointer to a window
@@ -79,21 +77,43 @@ public slots:
   void onMouseRelease(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent);
 
 protected:
+  /// Store current value in cashed value
+  void storeCurentValue();
+
+  /// Restore cashed value in the model attribute
+  /// \return boolean state if the restored feature shoud be hidden
+  bool restoreCurentValue();
+
+  /// Fills the widget with default values
+  /// \return true if the widget current value is reset
+  virtual bool resetCustom();
+
   /// The methiod called when widget is activated
   virtual void activateCustom();
 
   /// Set the second point which defines a value in the widget as a distance with a first point defined by feature
   void setPoint(FeaturePtr theFeature, const std::shared_ptr<GeomAPI_Pnt2d>& thePnt);
 
-private slots:
-  /// Process values changed event
-  void onValuesChanged();
+  /// Compute the distance between points
+  /// \param theFirstPnt a point value of the out point attribute
+  /// \param theCurrentPnt a point of the current widget
+  /// \return a double value
+  virtual double computeValue(const std::shared_ptr<GeomAPI_Pnt2d>& theFirstPnt,
+                              const std::shared_ptr<GeomAPI_Pnt2d>& theCurrentPnt);
 
- private:
-  XGUI_Workshop* myWorkshop;
+protected:
+  /// A reference to workshop
+  ModuleBase_IWorkshop* myWorkshop;
+  
+  /// A name of the first point
   std::string myFirstPntName;
 
+  /// Reference to sketch
   CompositeFeaturePtr mySketch;
+
+  bool myValueIsCashed; /// boolean state if the value is cashed during value state change
+  bool myIsFeatureVisibleInCash; /// boolean value if the feature was visible when cash if filled
+  double myValueInCash; /// the cashed X value during value state change
 };
 
 #endif