// Copyright (C) 2014-20xx CEA/DEN, EDF R&D
-// File: ModuleBase_WidgetShapeSelector.h
+// File: ModuleBase_WidgetShapeSelector.cpp
// Created: 2 June 2014
// Author: Vitaly Smetannikov
#include <ModuleBase_Tools.h>
#include <ModuleBase_FilterFactory.h>
#include <ModuleBase_Filter.h>
-
-#include <GeomValidators_ShapeType.h>
+#include <ModuleBase_IModule.h>
#include <Config_WidgetAPI.h>
#include <Events_Loop.h>
#include <Events_Message.h>
#include <GeomAPI_Interface.h>
#include <GeomAPI_Shape.h>
-#include <GeomValidators_Tools.h>
#include <ModelAPI_AttributeReference.h>
#include <ModelAPI_Data.h>
#include <ModelAPI_AttributeRefAttr.h>
#include <ModelAPI_Validator.h>
#include <ModelAPI_AttributeValidator.h>
-#include <ModelAPI_ShapeValidator.h>
#include <Config_WidgetAPI.h>
#include <Events_Error.h>
QString aToolTip = QString::fromStdString(theData->widgetTooltip());
myTextLine = new QLineEdit(this);
+ QString anObjName = QString::fromStdString(attributeID());
+ myTextLine->setObjectName(anObjName);
myTextLine->setReadOnly(true);
myTextLine->setToolTip(aToolTip);
myTextLine->installEventFilter(this);
aLayout->addRow(myLabel, myTextLine);
+ myLabel->setToolTip(aToolTip);
std::string aTypes = theData->getProperty("shape_types");
myShapeTypes = QString(aTypes.c_str()).split(' ', QString::SkipEmptyParts);
GeomShapePtr theShape)
{
DataPtr aData = myFeature->data();
- AttributeReferencePtr aRef = aData->reference(attributeID());
- if (aRef) {
+ std::string aType = aData->attribute(attributeID())->attributeType();
+ if (aType == ModelAPI_AttributeReference::typeId()) {
+ AttributeReferencePtr aRef = aData->reference(attributeID());
ObjectPtr aObject = aRef->value();
if (!(aObject && aObject->isSame(theSelectedObject))) {
aRef->setValue(theSelectedObject);
}
- } else {
+ } else if (aType == ModelAPI_AttributeRefAttr::typeId()) {
AttributeRefAttrPtr aRefAttr = aData->refattr(attributeID());
- if (aRefAttr) {
+
+ AttributePtr anAttribute = myWorkshop->module()->findAttribute(theSelectedObject, theShape);
+ if (anAttribute.get())
+ aRefAttr->setAttr(anAttribute);
+ else {
ObjectPtr aObject = aRefAttr->object();
if (!(aObject && aObject->isSame(theSelectedObject))) {
aRefAttr->setObject(theSelectedObject);
}
- } else {
- AttributeSelectionPtr aSelectAttr = aData->selection(attributeID());
- ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theSelectedObject);
- if (aSelectAttr.get() != NULL) {
- aSelectAttr->setValue(aResult, theShape);
- }
+ }
+ } else if (aType == ModelAPI_AttributeSelection::typeId()) {
+ AttributeSelectionPtr aSelectAttr = aData->selection(attributeID());
+ ResultPtr aResult = std::dynamic_pointer_cast<ModelAPI_Result>(theSelectedObject);
+ if (aSelectAttr.get() != NULL) {
+ aSelectAttr->setValue(aResult, theShape);
}
}
}
DataPtr aData = myFeature->data();
AttributePtr anAttribute = myFeature->attribute(attributeID());
- ObjectPtr anObject = GeomValidators_Tools::getObject(anAttribute);
+ ObjectPtr anObject = ModuleBase_Tools::getObject(anAttribute);
TopoDS_Shape aShape;
std::shared_ptr<GeomAPI_Shape> aShapePtr = getShape();
if (aShapePtr.get()) {
}
//********************************************************************
-bool ModuleBase_WidgetShapeSelector::restoreValue()
+bool ModuleBase_WidgetShapeSelector::restoreValueCustom()
{
bool isBlocked = this->blockSignals(true);
updateSelectionName();
if (!aData->isValid())
return aShape;
- AttributeSelectionPtr aSelect = aData->selection(attributeID());
- if (aSelect)
- aShape = aSelect->value();
+ std::string aType = aData->attribute(attributeID())->attributeType();
+ if (aType == ModelAPI_AttributeReference::typeId()) {
+ } else if (aType == ModelAPI_AttributeRefAttr::typeId()) {
+ AttributeRefAttrPtr aRefAttr = aData->refattr(attributeID());
+ aShape = myWorkshop->module()->findShape(aRefAttr);
+ } else if (aType == ModelAPI_AttributeSelection::typeId()) {
+ AttributeSelectionPtr aSelectAttr = aData->selection(attributeID());
+ aShape = aSelectAttr->value();
+ }
return aShape;
}
isNameUpdated = true;
}
if (!isNameUpdated) {
- ObjectPtr anObject = GeomValidators_Tools::getObject(myFeature->attribute(attributeID()));
+ ObjectPtr anObject = ModuleBase_Tools::getObject(myFeature->attribute(attributeID()));
if (anObject.get() != NULL) {
std::string aName = anObject->data()->name();
myTextLine->setText(QString::fromStdString(aName));
AttributeRefAttrPtr aRefAttr = aData->refattr(attributeID());
if (aRefAttr && aRefAttr->attr().get() != NULL) {
//myIsObject = aRefAttr->isObject();
- AttributePtr anAttr = aRefAttr->attr();
- if (anAttr.get() != NULL) {
- std::stringstream aName;
- aName <<anAttr->owner()->data()->name()<<"/"<<anAttr->id();
- myTextLine->setText(QString::fromStdString(aName.str()));
- }
+ std::string anAttrName = generateName(aRefAttr->attr());
+ myTextLine->setText(QString::fromStdString(anAttrName));
}
else {
myTextLine->setText(getDefaultValue().c_str());
//********************************************************************
void ModuleBase_WidgetShapeSelector::storeAttributeValue()
{
+ ModuleBase_WidgetValidated::storeAttributeValue();
+
DataPtr aData = myFeature->data();
AttributePtr anAttribute = myFeature->attribute(attributeID());
- myObject = GeomValidators_Tools::getObject(anAttribute);
+ myObject = ModuleBase_Tools::getObject(anAttribute);
myShape = getShape();
myRefAttribute = AttributePtr();
myIsObject = false;
//********************************************************************
void ModuleBase_WidgetShapeSelector::restoreAttributeValue(bool theValid)
{
+ ModuleBase_WidgetValidated::restoreAttributeValue(theValid);
+
DataPtr aData = myFeature->data();
AttributePtr anAttribute = myFeature->attribute(attributeID());