-// File: PartSet_WidgetPoint2dDistance.h
+// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
+
+// File: PartSet_WidgetPoint2dDistance.cpp
// Created: 23 June 2014
// Author: Vitaly Smetannikov
#include "PartSet_WidgetPoint2dDistance.h"
#include "PartSet_Tools.h"
+#include "PartSet_LockApplyMgr.h"
-#include <ModuleBase_WidgetValueFeature.h>
-#include <ModuleBase_DoubleSpinBox.h>
+#include <ModuleBase_ParamSpinBox.h>
+#include <ModuleBase_IWorkshop.h>
#include <ModuleBase_IViewWindow.h>
-
-#include <XGUI_ViewerProxy.h>
-#include <XGUI_Workshop.h>
+#include <ModuleBase_IViewer.h>
+#include <ModuleBase_Tools.h>
#include <GeomAPI_Pnt2d.h>
#include <Config_WidgetAPI.h>
#include <QMouseEvent>
PartSet_WidgetPoint2dDistance::PartSet_WidgetPoint2dDistance(QWidget* theParent,
- const Config_WidgetAPI* theData,
- const std::string& theParentId)
- : ModuleBase_WidgetDoubleValue(theParent, theData, theParentId)
+ ModuleBase_IWorkshop* theWorkshop,
+ const Config_WidgetAPI* theData,
+ const std::string& theParentId)
+ : ModuleBase_WidgetDoubleValue(theParent, theData, theParentId), myWorkshop(theWorkshop)
{
+ myLockApplyMgr = new PartSet_LockApplyMgr(theParent, myWorkshop);
+
myFirstPntName = theData->getProperty("first_point");
+
+ // Reconnect to local slot
+ disconnect(mySpinBox, SIGNAL(valueChanged(double)), this, SIGNAL(valuesChanged()));
+ connect(mySpinBox, SIGNAL(valueChanged(double)), this, SLOT(onValuesChanged()));
}
PartSet_WidgetPoint2dDistance::~PartSet_WidgetPoint2dDistance()
{
}
-//bool PartSet_WidgetPoint2dDistance::setValue(ModuleBase_WidgetValue* theValue)
-//{
-// bool isDone = false;
-//
-// if (theValue) {
-// ModuleBase_WidgetValueFeature* aFeatureValue =
-// dynamic_cast<ModuleBase_WidgetValueFeature*>(theValue);
-// if (aFeatureValue) {
-// std::shared_ptr<GeomAPI_Pnt2d> aPnt = aFeatureValue->point();
-// ObjectPtr aObject = aFeatureValue->object();
-// FeaturePtr aFeature = std::dynamic_pointer_cast<ModelAPI_Feature>(aObject);
-// if (aFeature && aPnt) {
-// setPoint(aFeature, aPnt);
-// isDone = true;
-// }
-// }
-// }
-// return isDone;
-//}
-
void PartSet_WidgetPoint2dDistance::setPoint(FeaturePtr theFeature,
const std::shared_ptr<GeomAPI_Pnt2d>& thePnt)
{
if (!aPoint)
return;
- double aRadius = thePnt->distance(aPoint->pnt());
+ double aValue = computeValue(aPoint->pnt(), thePnt);
AttributeDoublePtr aReal = aData->real(attributeID());
- if (aReal && (aReal->value() != aRadius)) {
- aReal->setValue(aRadius);
- mySpinBox->setValue(aRadius);
+ if (aReal && (aReal->value() != aValue)) {
+ aReal->setValue(aValue);
+
+ ModuleBase_Tools::setSpinValue(mySpinBox, aValue);
+ storeValue();
}
}
-void PartSet_WidgetPoint2dDistance::activate()
+double PartSet_WidgetPoint2dDistance::computeValue(const std::shared_ptr<GeomAPI_Pnt2d>& theFirstPnt,
+ const std::shared_ptr<GeomAPI_Pnt2d>& theCurrentPnt)
{
- XGUI_ViewerProxy* aViewer = myWorkshop->viewer();
- connect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)),
+ return theCurrentPnt->distance(theFirstPnt);
+}
+
+void PartSet_WidgetPoint2dDistance::activateCustom()
+{
+ ModuleBase_IViewer* aViewer = myWorkshop->viewer();
+ connect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)),
this, SLOT(onMouseMove(ModuleBase_IViewWindow*, QMouseEvent*)));
connect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)),
this, SLOT(onMouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)));
+
+ myLockApplyMgr->activate();
}
void PartSet_WidgetPoint2dDistance::deactivate()
this, SLOT(onMouseMove(ModuleBase_IViewWindow*, QMouseEvent*)));
disconnect(aViewer, SIGNAL(mouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)),
this, SLOT(onMouseRelease(ModuleBase_IViewWindow*, QMouseEvent*)));
+
+ myLockApplyMgr->deactivate();
}
void PartSet_WidgetPoint2dDistance::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
{
+ // the contex menu release by the right button should not be processed by this widget
+ if (theEvent->button() != Qt::LeftButton)
+ return;
+
+ if (mySpinBox->hasVariable())
+ return;
+
gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWnd->v3dView());
double aX, aY;
void PartSet_WidgetPoint2dDistance::onMouseMove(ModuleBase_IViewWindow* theWnd, QMouseEvent* theEvent)
{
+ if (isEditingMode())
+ return;
+
+ if (mySpinBox->hasVariable())
+ return;
+
gp_Pnt aPoint = PartSet_Tools::convertClickToPoint(theEvent->pos(), theWnd->v3dView());
double aX, aY;
setPoint(feature(), aPnt);
}
+void PartSet_WidgetPoint2dDistance::onValuesChanged()
+{
+ myLockApplyMgr->valuesChanged();
+ emit valuesChanged();
+}