X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FPartSet%2FPartSet_WidgetPoint2d.cpp;h=e8555daed568bdede8f07571dcff437dc0255852;hb=417aaae9c4c335cad27eaf82458d8c09bb263cc6;hp=6e78ed9d7c39d8c7c5b4403415b7c5e5b1e6a1f6;hpb=8da5ddb2feeb29c481a51530a435be524bf720e9;p=modules%2Fshaper.git diff --git a/src/PartSet/PartSet_WidgetPoint2d.cpp b/src/PartSet/PartSet_WidgetPoint2d.cpp index 6e78ed9d7..e8555daed 100644 --- a/src/PartSet/PartSet_WidgetPoint2d.cpp +++ b/src/PartSet/PartSet_WidgetPoint2d.cpp @@ -64,13 +64,15 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, << SketchPlugin_Circle::ID().c_str(); } - // the control should accept the focus, so the boolen flag is corrected to be true + // the control should accept the focus, so the boolean 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); myGroupBox->setFlat(false); + bool aAcceptVariables = theData->getBooleanAttribute(DOUBLE_WDG_ACCEPT_EXPRESSIONS, true); + QGridLayout* aGroupLay = new QGridLayout(myGroupBox); ModuleBase_Tools::adjustMargins(aGroupLay); aGroupLay->setSpacing(2); @@ -81,6 +83,7 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, aGroupLay->addWidget(aLabel, 0, 0); myXSpin = new ModuleBase_ParamSpinBox(myGroupBox); + myXSpin->setAcceptVariables(aAcceptVariables); myXSpin->setMinimum(-DBL_MAX); myXSpin->setMaximum(DBL_MAX); myXSpin->setToolTip(tr("X")); @@ -94,6 +97,7 @@ PartSet_WidgetPoint2D::PartSet_WidgetPoint2D(QWidget* theParent, aGroupLay->addWidget(aLabel, 1, 0); myYSpin = new ModuleBase_ParamSpinBox(myGroupBox); + myYSpin->setAcceptVariables(aAcceptVariables); myYSpin->setMinimum(-DBL_MAX); myYSpin->setMaximum(DBL_MAX); myYSpin->setToolTip(tr("Y")); @@ -144,12 +148,13 @@ bool PartSet_WidgetPoint2D::setSelection(QList& theValues, double aX, aY; if (getPoint2d(aView, aShape, aX, aY)) { isDone = setPoint(aX, aY); + PartSet_Tools::setConstraints(mySketch, feature(), attributeID(), aX, aY); } } else if (canBeActivatedByMove()) { if (feature()->getKind() == SketchPlugin_Line::ID()) { FeaturePtr aFeature = std::dynamic_pointer_cast(aValue.object()); - // Initialise new line with first point equal to end of previous + // Initialize new line with first point equal to end of previous if (aFeature.get()) { std::shared_ptr aData = aFeature->data(); std::shared_ptr aPoint = @@ -286,6 +291,14 @@ bool PartSet_WidgetPoint2D::canBeActivatedByMove() void PartSet_WidgetPoint2D::deactivate() { + // the value of the control should be stored to model if it was not + // initialized yet. It is important when we leave this control by Tab key. + // It should not be performed by the widget activation as the preview + // is visualized with default value. Line point is moved to origin. + AttributePtr anAttribute = myFeature->data()->attribute(attributeID()); + if (anAttribute && !anAttribute->isInitialized()) + storeValue(); + ModuleBase_ModelWidget::deactivate(); ModuleBase_IViewer* aViewer = myWorkshop->viewer(); disconnect(aViewer, SIGNAL(mouseMove(ModuleBase_IViewWindow*, QMouseEvent*)), @@ -370,10 +383,17 @@ void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMous else { if (getPoint2d(aView, aShape, aX, aY)) setPoint(aX, aY); - bool anOrphanPoint = isOrphanPoint(aSelectedFeature, mySketch, aX, aY); + else + setValueState(Stored); // in case of edge selection, Apply state should also be updated + bool anOrphanPoint = aShape.ShapeType() == TopAbs_VERTEX || + isOrphanPoint(aSelectedFeature, mySketch, aX, aY); setConstraintWith(aObject); - if (!anOrphanPoint) + // fignal updated should be flushed in order to visualize possible created external objects + // e.g. selection of trihedron axis when input end arc point + updateObject(feature()); + if (!anOrphanPoint && !anExternal) emit vertexSelected(); + emit focusOutWidget(this); } } @@ -395,8 +415,10 @@ void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMous PartSet_Tools::setConstraints(mySketch, feature(), attributeID(), aX, aY); } else if (aShape.ShapeType() == TopAbs_EDGE) { - if (MyFeaturesForCoincedence.contains(myFeature->getKind().c_str())) + if (MyFeaturesForCoincedence.contains(myFeature->getKind().c_str())) { setConstraintWith(aObject); + setValueState(Stored); // in case of edge selection, Apply state should also be updated + } } // it is important to perform updateObject() in order to the current value is // processed by Sketch Solver. Test case: line is created from a previous point @@ -405,7 +427,7 @@ void PartSet_WidgetPoint2D::onMouseRelease(ModuleBase_IViewWindow* theWnd, QMous // points of the line becomes less than the tolerance. Validator of the line returns // false, the line will be aborted, but sketch stays valid. updateObject(feature()); - if (!anOrphanPoint) + if (!anOrphanPoint && !anExternal) emit vertexSelected(); emit focusOutWidget(this); } @@ -496,6 +518,10 @@ bool PartSet_WidgetPoint2D::isFeatureContainsPoint(const FeaturePtr& theFeature, return aPointIsFound; } +void PartSet_WidgetPoint2D::initializeValueByActivate() +{ +} + /*void PartSet_WidgetPoint2D::onValuesChanged() { emit valuesChanged(); @@ -503,14 +529,10 @@ bool PartSet_WidgetPoint2D::isFeatureContainsPoint(const FeaturePtr& theFeature, bool PartSet_WidgetPoint2D::processEnter() { - //bool isModified = myXSpin->isModified() || myYSpin->isModified(); bool isModified = getValueState() == ModifiedInPP; if (isModified) { - bool isXModified = myXSpin->hasFocus();//myXSpin->isModified(); + bool isXModified = myXSpin->hasFocus(); emit valuesChanged(); - //onValuesChanged(); - //myXSpin->clearModified(); - //myYSpin->clearModified(); if (isXModified) myXSpin->selectAll(); else