X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetFactory.cpp;h=bd45e4ee04ae26eabd8b8a42cbde496e3f80423b;hb=f40895b4d881810ef7d19c27ce6e952d72353d2c;hp=0da092c300e1121ba9509b7dbe05a0a064c081dc;hpb=cc7dddbfef7793f198de90ec08978e07132e0237;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetFactory.cpp b/src/ModuleBase/ModuleBase_WidgetFactory.cpp index 0da092c30..bd45e4ee0 100644 --- a/src/ModuleBase/ModuleBase_WidgetFactory.cpp +++ b/src/ModuleBase/ModuleBase_WidgetFactory.cpp @@ -14,7 +14,7 @@ #include #include #include -#include +#include #include #include #include @@ -22,6 +22,12 @@ #include #include #include +#include +#include +#include + +#include +#include #include #include @@ -52,6 +58,7 @@ ModuleBase_WidgetFactory::ModuleBase_WidgetFactory(const std::string& theXmlRepr ModuleBase_WidgetFactory::~ModuleBase_WidgetFactory() { + delete myWidgetApi; } void ModuleBase_WidgetFactory::createWidget(QWidget* theParent) @@ -61,13 +68,12 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent) return; QVBoxLayout* aWidgetLay = new QVBoxLayout(theParent); - aWidgetLay->setContentsMargins(2, 2, 2, 2); do { //Iterate over each node std::string aWdgType = myWidgetApi->widgetType(); //Create a widget (doublevalue, groupbox, toolbox, etc. QWidget* aWidget = createWidgetByType(aWdgType, theParent); if (aWidget) { - if (!isInternalWidget(aWdgType)) { + if (!myWidgetApi->getBooleanAttribute(ATTRIBUTE_INTERNAL, false)) { aWidgetLay->addWidget(aWidget); } else { aWidget->setVisible(false); @@ -77,6 +83,7 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent) //if current widget is groupbox (container) process it's children recursively QString aGroupName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME)); createWidget(aWidget); + ModuleBase_Tools::adjustMargins(aWidget); QGroupBox* aGrBox = qobject_cast(aWidget); aGrBox->setTitle(aGroupName); } @@ -87,6 +94,7 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent) do { QString aPageName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME)); QWidget* aPage = new QWidget(aWidget); + ModuleBase_Tools::adjustMargins(aPage); createWidget(aPage); if (aWdgType == WDG_SWITCH) { ModuleBase_WidgetSwitch* aSwitch = qobject_cast(aWidget); @@ -115,6 +123,25 @@ QWidget* ModuleBase_WidgetFactory::labelControl(QWidget* theParent) return result; } +void ModuleBase_WidgetFactory::processAttributes() +{ + // register that this attribute in feature is not obligatory for the feature execution + // so, it is not needed for the standard validation mechanism + bool isObligatory = true; + bool isConcealment = false; + if( myWidgetApi ){ + isObligatory = myWidgetApi->getBooleanAttribute(ATTRIBUTE_OBLIGATORY, true); + isConcealment = myWidgetApi->getBooleanAttribute(ATTRIBUTE_CONCEALMENT, false); + } + boost::shared_ptr aSession = ModelAPI_Session::get(); + if (!isObligatory) { + aSession->validators()->registerNotObligatory(myParentId, myWidgetApi->widgetId()); + } + if(isConcealment) { + aSession->validators()->registerConcealment(myParentId, myWidgetApi->widgetId()); + } +} + QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType, QWidget* theParent) { @@ -125,8 +152,8 @@ QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType } else if (theType == WDG_INFO) { result = labelControl(theParent); - } else if (theType == WDG_SELECTOR) { - result = selectorControl(theParent); + } else if (theType == WDG_SHAPE_SELECTOR) { + result = shapeSelectorControl(theParent); } else if (theType == WDG_BOOLVALUE) { result = booleanControl(theParent); @@ -152,6 +179,12 @@ QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType } else if (theType == WDG_CHOICE) { result = choiceControl(theParent); + } else if (theType == WDG_STRINGVALUE) { + result = lineEditControl(theParent); + + } else if (theType == WDG_MULTISELECTOR) { + result = multiSelectorControl(theParent); + } else if (myWidgetApi->isContainerWidget() || myWidgetApi->isPagedWidget()) { result = createContainer(theType, theParent); } else { @@ -161,6 +194,10 @@ QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType if (!result) {qDebug("ModuleBase_WidgetFactory::fillWidget: find bad widget type");} #endif } + if (result) { + processAttributes(); + } + return result; } @@ -186,85 +223,65 @@ QWidget* ModuleBase_WidgetFactory::createContainer(const std::string& theType, Q QWidget* ModuleBase_WidgetFactory::doubleSpinBoxControl(QWidget* theParent) { - ModuleBase_WidgetDoubleValue* aDblWgt = new ModuleBase_WidgetDoubleValue(theParent, myWidgetApi, - myParentId); + ModuleBase_WidgetDoubleValue* aDblWgt = + new ModuleBase_WidgetDoubleValue(theParent, myWidgetApi, myParentId); myModelWidgets.append(aDblWgt); - return aDblWgt->getControl(); } QWidget* ModuleBase_WidgetFactory::pointSelectorControl(QWidget* theParent) { - ModuleBase_WidgetPoint2D* aWidget = new ModuleBase_WidgetPoint2D(theParent, myWidgetApi, - myParentId); + ModuleBase_WidgetPoint2D* aWidget = + new ModuleBase_WidgetPoint2D(theParent, myWidgetApi,myParentId); myModelWidgets.append(aWidget); return aWidget->getControl(); } QWidget* ModuleBase_WidgetFactory::featureSelectorControl(QWidget* theParent) { - ModuleBase_WidgetFeature* aWidget = new ModuleBase_WidgetFeature(theParent, myWidgetApi, - myParentId); + ModuleBase_WidgetFeature* aWidget = + new ModuleBase_WidgetFeature(theParent, myWidgetApi,myParentId); myModelWidgets.append(aWidget); return aWidget->getControl(); } QWidget* ModuleBase_WidgetFactory::featureOrAttributeSelectorControl(QWidget* theParent) { - ModuleBase_WidgetFeatureOrAttribute* aWidget = new ModuleBase_WidgetFeatureOrAttribute( - theParent, myWidgetApi, myParentId); + ModuleBase_WidgetFeatureOrAttribute* aWidget = + new ModuleBase_WidgetFeatureOrAttribute(theParent, myWidgetApi, myParentId); myModelWidgets.append(aWidget); return aWidget->getControl(); } QWidget* ModuleBase_WidgetFactory::doubleValueEditor(QWidget* theParent) { - ModuleBase_WidgetEditor* aWidget = new ModuleBase_WidgetEditor(theParent, myWidgetApi, - myParentId); + ModuleBase_WidgetEditor* aWidget = + new ModuleBase_WidgetEditor(theParent, myWidgetApi, myParentId); myModelWidgets.append(aWidget); return aWidget->getControl(); } -QString ModuleBase_WidgetFactory::qs(const std::string& theStdString) const -{ - return QString::fromStdString(theStdString); -} - -bool ModuleBase_WidgetFactory::isInternalWidget(const std::string& theType) -{ - std::string prop = myWidgetApi->getProperty(FEATURE_INTERNAL); - - std::transform(prop.begin(), prop.end(), prop.begin(), ::tolower); - if (prop.empty() || prop == "false" || prop == "0") { - return false; - } - return true; -} - -QWidget* ModuleBase_WidgetFactory::selectorControl(QWidget* theParent) +QWidget* ModuleBase_WidgetFactory::shapeSelectorControl(QWidget* theParent) { - ModuleBase_WidgetSelector* aSelector = new ModuleBase_WidgetSelector(theParent, myWorkshop, - myWidgetApi, myParentId); + ModuleBase_WidgetShapeSelector* aSelector = + new ModuleBase_WidgetShapeSelector(theParent, myWorkshop, myWidgetApi, myParentId); myModelWidgets.append(aSelector); return aSelector->getControl(); } QWidget* ModuleBase_WidgetFactory::booleanControl(QWidget* theParent) { - ModuleBase_WidgetBoolValue* aBoolWgt = new ModuleBase_WidgetBoolValue(theParent, myWidgetApi, - myParentId); + ModuleBase_WidgetBoolValue* aBoolWgt = + new ModuleBase_WidgetBoolValue(theParent, myWidgetApi, myParentId); myModelWidgets.append(aBoolWgt); - return aBoolWgt->getControl(); } QWidget* ModuleBase_WidgetFactory::point2dDistanceControl(QWidget* theParent) { - ModuleBase_WidgetPoint2dDistance* aDistWgt = new ModuleBase_WidgetPoint2dDistance(theParent, - myWidgetApi, - myParentId); + ModuleBase_WidgetPoint2dDistance* aDistWgt = + new ModuleBase_WidgetPoint2dDistance(theParent, myWidgetApi, myParentId); myModelWidgets.append(aDistWgt); - return aDistWgt->getControl(); } @@ -273,16 +290,34 @@ QWidget* ModuleBase_WidgetFactory::fileSelectorControl(QWidget* theParent) ModuleBase_WidgetFileSelector* aFileSelectorWgt = new ModuleBase_WidgetFileSelector(theParent, myWidgetApi, myParentId); myModelWidgets.append(aFileSelectorWgt); - return aFileSelectorWgt->getControl(); } QWidget* ModuleBase_WidgetFactory::choiceControl(QWidget* theParent) { - ModuleBase_WidgetChoice* aChoiceWgt = new ModuleBase_WidgetChoice(theParent, myWidgetApi, - myParentId); + ModuleBase_WidgetChoice* aChoiceWgt = + new ModuleBase_WidgetChoice(theParent, myWidgetApi,myParentId); myModelWidgets.append(aChoiceWgt); - return aChoiceWgt->getControl(); } +QWidget* ModuleBase_WidgetFactory::lineEditControl(QWidget* theParent) +{ + ModuleBase_WidgetLineEdit* aLineEditWgt = + new ModuleBase_WidgetLineEdit(theParent, myWidgetApi,myParentId); + myModelWidgets.append(aLineEditWgt); + return aLineEditWgt->getControl(); +} + +QWidget* ModuleBase_WidgetFactory::multiSelectorControl(QWidget* theParent) +{ + ModuleBase_WidgetMultiSelector* aMultiselectorWgt = + new ModuleBase_WidgetMultiSelector(theParent, myWorkshop, myWidgetApi,myParentId); + myModelWidgets.append(aMultiselectorWgt); + return aMultiselectorWgt->getControl(); +} + +QString ModuleBase_WidgetFactory::qs(const std::string& theStdString) const +{ + return QString::fromStdString(theStdString); +}