X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetPoint2d.cpp;h=d2c65a27f018a24c843d8e9a7c1fcc4d4b6f0b0f;hb=c55b14977783111c8b418b416c7f6c2fa545c5e5;hp=34560cdc4713f53140e91604857c3568563658a2;hpb=7e85caf42f4f1b8f04444afc76a039036f27de9f;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index 34560cdc4..d2c65a27f 100644 --- a/src/PartSet/PartSet_WidgetPoint2d.cpp +++ b/src/PartSet/PartSet_WidgetPoint2d.cpp @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include @@ -54,6 +54,8 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, const std::string& theParentId) : ModuleBase_ModelWidget(theParent, theData, theParentId) { + // the control should accept the focus, so the boolen flag is corrected to be true + myIsObligatory = true; //myOptionParam = theData->getProperty(PREVIOUS_FEATURE_PARAM); QString aPageName = QString::fromStdString(theData->getProperty(CONTAINER_PAGE_NAME)); myGroupBox = new QGroupBox(aPageName, theParent); @@ -68,14 +70,13 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, aLabel->setPixmap(QPixmap(":pictures/x_point.png")); aGroupLay->addWidget(aLabel, 0, 0); - myXSpin = new ModuleBase_DoubleSpinBox(myGroupBox); + myXSpin = new ModuleBase_ParamSpinBox(myGroupBox); myXSpin->setMinimum(-DBL_MAX); myXSpin->setMaximum(DBL_MAX); myXSpin->setToolTip(tr("X")); aGroupLay->addWidget(myXSpin, 0, 1); connect(myXSpin, SIGNAL(valueChanged(double)), this, SLOT(onValuesChanged())); - connect(myXSpin, SIGNAL(valueChanged(double)), this, SIGNAL(controlValuesChanged())); } { QLabel* aLabel = new QLabel(myGroupBox); @@ -83,14 +84,35 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, aLabel->setPixmap(QPixmap(":pictures/y_point.png")); aGroupLay->addWidget(aLabel, 1, 0); - myYSpin = new ModuleBase_DoubleSpinBox(myGroupBox); + myYSpin = new ModuleBase_ParamSpinBox(myGroupBox); myYSpin->setMinimum(-DBL_MAX); myYSpin->setMaximum(DBL_MAX); myYSpin->setToolTip(tr("Y")); aGroupLay->addWidget(myYSpin, 1, 1); connect(myYSpin, SIGNAL(valueChanged(double)), this, SLOT(onValuesChanged())); - connect(myYSpin, SIGNAL(valueChanged(double)), this, SIGNAL(controlValuesChanged())); + } + QVBoxLayout* aLayout = new QVBoxLayout(this); + ModuleBase_Tools::zeroMargins(aLayout); + aLayout->addWidget(myGroupBox); + setLayout(aLayout); +} + +void PartSet_WidgetPoint2D::reset() +{ + if (isComputedDefault()) { + //return; + if (myFeature->compute(myAttributeID)) + restoreValue(); + } + else { + bool isOk; + double aDefValue = QString::fromStdString(getDefaultValue()).toDouble(&isOk); + // it is important to block the spin box control in order to do not through out the + // locking of the validating state. + ModuleBase_Tools::setSpinValue(myXSpin, isOk ? aDefValue : 0.0); + ModuleBase_Tools::setSpinValue(myYSpin, isOk ? aDefValue : 0.0); + storeValueCustom(); } } @@ -116,21 +138,15 @@ bool PartSet_WidgetPoint2D::setPoint(double theX, double theY) return false; if (fabs(theY) >= MaxCoordinate) return false; - bool isBlocked = this->blockSignals(true); - myXSpin->blockSignals(true); - myXSpin->setValue(theX); - myXSpin->blockSignals(false); - myYSpin->blockSignals(true); - myYSpin->setValue(theY); - myYSpin->blockSignals(false); - this->blockSignals(isBlocked); + ModuleBase_Tools::setSpinValue(myXSpin, theX); + ModuleBase_Tools::setSpinValue(myYSpin, theY); - emit valuesChanged(); + storeValue(); return true; } -bool PartSet_WidgetPoint2D::storeValue() const +bool PartSet_WidgetPoint2D::storeValueCustom() const { std::shared_ptr aData = myFeature->data(); if (!aData) // can be on abort of sketcher element @@ -166,21 +182,10 @@ bool PartSet_WidgetPoint2D::restoreValue() double _X = aPoint->x(); double _Y = aPoint->y(); #endif - bool isBlocked = this->blockSignals(true); - myXSpin->blockSignals(true); - myXSpin->setValue(aPoint->x()); - myXSpin->blockSignals(false); - - myYSpin->blockSignals(true); - myYSpin->setValue(aPoint->y()); - myYSpin->blockSignals(false); - this->blockSignals(isBlocked); - return true; -} -QWidget* PartSet_WidgetPoint2D::getControl() const -{ - return myGroupBox; + ModuleBase_Tools::setSpinValue(myXSpin, aPoint->x()); + ModuleBase_Tools::setSpinValue(myYSpin, aPoint->y()); + return true; } QList PartSet_WidgetPoint2D::getControls() const @@ -202,6 +207,8 @@ void PartSet_WidgetPoint2D::activateCustom() QIntList aModes; aModes << TopAbs_VERTEX; + if (isEditingMode()) + aModes << TopAbs_EDGE; myWorkshop->moduleConnector()->activateSubShapesSelection(aModes); } @@ -237,6 +244,10 @@ bool PartSet_WidgetPoint2D::getPoint2d(const Handle(V3d_View)& theView, void PartSet_WidgetPoint2D::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; + XGUI_Selection* aSelection = myWorkshop->selector()->selection(); Handle(V3d_View) aView = theWnd->v3dView(); // TODO: This fragment doesn't work because bug in OCC Viewer. It can be used after fixing. @@ -251,8 +262,11 @@ void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMous if (aSelectedFeature.get() != NULL) { std::shared_ptr aSPFeature = std::dynamic_pointer_cast(aSelectedFeature); - if ((!aSPFeature) && (!aShape.IsNull())) - PartSet_Tools::createFixedObjectByExternal(aShape, aObject, mySketch); + if ((!aSPFeature) && (!aShape.IsNull())) { + ResultPtr aFixedObject = PartSet_Tools::findFixedObjectByExternal(aShape, aObject, mySketch); + if (!aFixedObject.get()) + aFixedObject = PartSet_Tools::createFixedObjectByExternal(aShape, aObject, mySketch); + } } double aX, aY; if (getPoint2d(aView, aShape, aX, aY)) {