X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;ds=sidebyside;f=src%2FModuleBase%2FModuleBase_WidgetFactory.cpp;h=a88a3086063388ad47af60ad03e314a8f52d1f54;hb=96c062912cdd3eff24d2d28ab75769f26e0d84cd;hp=ecfe258e6646956c15f132d5ddb9f6a5a6b0fdcc;hpb=dc4b9ee9f5445b39bcaeb3b7f05627774e343ffa;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetFactory.cpp b/src/ModuleBase/ModuleBase_WidgetFactory.cpp index ecfe258e6..a88a30860 100644 --- a/src/ModuleBase/ModuleBase_WidgetFactory.cpp +++ b/src/ModuleBase/ModuleBase_WidgetFactory.cpp @@ -7,12 +7,16 @@ #include -#include #include #include #include +#include +#include #include -#include +#include +#include +#include +#include #include #include @@ -26,7 +30,6 @@ #include #include #include -#include #ifdef _DEBUG #include @@ -35,11 +38,11 @@ #include #include -ModuleBase_WidgetFactory::ModuleBase_WidgetFactory(ModuleBase_Operation* theOperation, ModuleBase_IWorkshop* theWorkshop) - : myOperation(theOperation), myWorkshop(theWorkshop) +ModuleBase_WidgetFactory::ModuleBase_WidgetFactory(const std::string& theXmlRepresentation, + ModuleBase_IWorkshop* theWorkshop) + : myWorkshop(theWorkshop) { - QString aXml = myOperation->getDescription()->xmlRepresentation(); - myWidgetApi = new Config_WidgetAPI(aXml.toStdString()); + myWidgetApi = new Config_WidgetAPI(theXmlRepresentation); } ModuleBase_WidgetFactory::~ModuleBase_WidgetFactory() @@ -58,7 +61,11 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent) //Create a widget (doublevalue, groupbox, toolbox, etc. QWidget* aWidget = createWidgetByType(aWdgType, theParent); if (aWidget) { - aWidgetLay->addWidget(aWidget); + if (!isInternalWidget(aWdgType)) { + aWidgetLay->addWidget(aWidget); + } + else + aWidget->setVisible(false); } if (myWidgetApi->isContainerWidget()) { //if current widget is groupbox (container) process it's children recursively @@ -93,6 +100,7 @@ QWidget* ModuleBase_WidgetFactory::labelControl(QWidget* theParent) QWidget* result = new QWidget(theParent); QVBoxLayout* aLabelLay = new QVBoxLayout(result); QLabel* aLabel = new QLabel(result); + aLabel->setWordWrap(true); aLabel->setText(qs(myWidgetApi->getProperty(INFO_WDG_TEXT))); aLabel->setToolTip(qs(myWidgetApi->getProperty(INFO_WDG_TOOLTIP))); aLabelLay->addWidget(aLabel); @@ -105,7 +113,7 @@ QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType { QWidget* result = NULL; if (theType == WDG_DOUBLEVALUE) { - result = doubleSpinBoxControl(); + result = doubleSpinBoxControl(theParent); } else if (theType == WDG_INFO) { result = labelControl(theParent); @@ -119,7 +127,17 @@ QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType } else if (theType == WDG_POINT_SELECTOR) { result = pointSelectorControl(theParent); - } else if (myWidgetApi->isContainerWidget() || myWidgetApi->isPagedWidget()) { + } else if (theType == WDG_FEATURE_SELECTOR) { + result = featureSelectorControl(theParent); + + } else if (theType == WDG_DOUBLEVALUE_EDITOR) { + result = doubleValueEditor(theParent); + + } else if (theType == WDG_POINT2D_DISTANCE) { + result = point2dDistanceControl(theParent); + + } + else if (myWidgetApi->isContainerWidget() || myWidgetApi->isPagedWidget()) { result = createContainer(theType, theParent); } #ifdef _DEBUG @@ -148,76 +166,33 @@ QWidget* ModuleBase_WidgetFactory::createContainer(const std::string& theType, Q return result; } -QWidget* ModuleBase_WidgetFactory::doubleSpinBoxControl() +QWidget* ModuleBase_WidgetFactory::doubleSpinBoxControl(QWidget* theParent) { - QWidget* result = new QWidget(); - QHBoxLayout* aControlLay = new QHBoxLayout(result); - aControlLay->setContentsMargins(0, 0, 0, 0); - QString aLabelText = qs(myWidgetApi->widgetLabel()); - QString aLabelIcon = qs(myWidgetApi->widgetIcon()); - QLabel* aLabel = new QLabel(aLabelText); - aLabel->setPixmap(QPixmap(aLabelIcon)); - - aControlLay->addWidget(aLabel); - QDoubleSpinBox* aBox = new QDoubleSpinBox(result); - QString anObjName = QString::fromStdString(myWidgetApi->widgetId()); - aBox->setObjectName(anObjName); - bool isOk = false; - std::string aProp = myWidgetApi->getProperty(DOUBLE_WDG_MIN); - double aMinVal = qs(aProp).toDouble(&isOk); - if (isOk) { - aBox->setMinimum(aMinVal); - } else { - aBox->setMinimum(-DBL_MAX); - } - aProp = myWidgetApi->getProperty(DOUBLE_WDG_MAX); - double aMaxVal = qs(aProp).toDouble(&isOk); - if (isOk) { - aBox->setMaximum(aMaxVal); - } else { - aBox->setMaximum(DBL_MAX); - } - aProp = myWidgetApi->getProperty(DOUBLE_WDG_STEP); - double aStepVal = qs(aProp).toDouble(&isOk); - if (isOk) { - aBox->setSingleStep(aStepVal); - } - aProp = myWidgetApi->getProperty(DOUBLE_WDG_DFLT); - double aDefVal = qs(aProp).toDouble(&isOk); - if (isOk) { - aBox->setValue(aDefVal); - } - QString aTTip = qs(myWidgetApi->widgetTooltip()); - aBox->setToolTip(aTTip); - aControlLay->addWidget(aBox); - aControlLay->setStretch(1, 1); - result->setLayout(aControlLay); - connectWidget(aBox, WDG_DOUBLEVALUE); - return result; + ModuleBase_WidgetDoubleValue* aDblWgt = new ModuleBase_WidgetDoubleValue(theParent, myWidgetApi); + myModelWidgets.append(aDblWgt); + + return aDblWgt->getControl(); } QWidget* ModuleBase_WidgetFactory::pointSelectorControl(QWidget* theParent) { - ModuleBase_WidgetPoint2D* aWidget = new ModuleBase_WidgetPoint2D(theParent, - qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME)), - myWidgetApi->widgetId()); - connectWidget(aWidget, WDG_POINT_SELECTOR); + ModuleBase_WidgetPoint2D* aWidget = new ModuleBase_WidgetPoint2D(theParent, myWidgetApi); myModelWidgets.append(aWidget); return aWidget->getControl(); } -bool ModuleBase_WidgetFactory::connectWidget(QObject* theWidget, const QString& theType) +QWidget* ModuleBase_WidgetFactory::featureSelectorControl(QWidget* theParent) { - bool result = false; - if (theType == WDG_DOUBLEVALUE) { - result = QObject::connect(theWidget, SIGNAL(valueChanged(double)), - myOperation, SLOT(storeReal(double))); - } - if (theType == WDG_POINT_SELECTOR) { - result = QObject::connect(theWidget, SIGNAL(valuesChanged()), - myOperation, SLOT(storeCustomValue())); - } - return result; + ModuleBase_WidgetFeature* aWidget = new ModuleBase_WidgetFeature(theParent, myWidgetApi); + myModelWidgets.append(aWidget); + return aWidget->getControl(); +} + +QWidget* ModuleBase_WidgetFactory::doubleValueEditor(QWidget* theParent) +{ + ModuleBase_WidgetEditor* aWidget = new ModuleBase_WidgetEditor(theParent, myWidgetApi); + myModelWidgets.append(aWidget); + return 0; } QString ModuleBase_WidgetFactory::qs(const std::string& theStdString) const @@ -225,13 +200,20 @@ 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) { - ModuleBase_SelectorWidget* aSelector = new ModuleBase_SelectorWidget(theParent, myWorkshop, myWidgetApi); - - QObject::connect(aSelector, SIGNAL(valuesChanged()), myOperation, SLOT(storeCustomValue())); - + ModuleBase_WidgetSelector* aSelector = new ModuleBase_WidgetSelector(theParent, myWorkshop, myWidgetApi); myModelWidgets.append(aSelector); return aSelector->getControl(); } @@ -239,12 +221,17 @@ QWidget* ModuleBase_WidgetFactory::selectorControl(QWidget* theParent) QWidget* ModuleBase_WidgetFactory::booleanControl(QWidget* theParent) { - QString aText = qs(myWidgetApi->widgetLabel()); - QString aToolTip = qs(myWidgetApi->widgetTooltip()); - QString aDefault = qs(myWidgetApi->getProperty("default")); - - QCheckBox* aRes = new QCheckBox(aText, theParent); - aRes->setToolTip(aToolTip); - aRes->setChecked(aDefault == "true"); - return aRes; + ModuleBase_WidgetBoolValue* aBoolWgt = new ModuleBase_WidgetBoolValue(theParent, myWidgetApi); + myModelWidgets.append(aBoolWgt); + + return aBoolWgt->getControl(); +} + + +QWidget* ModuleBase_WidgetFactory::point2dDistanceControl(QWidget* theParent) +{ + ModuleBase_WidgetPoint2dDistance* aDistWgt = new ModuleBase_WidgetPoint2dDistance(theParent, myWidgetApi); + myModelWidgets.append(aDistWgt); + + return aDistWgt->getControl(); } \ No newline at end of file