X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetFactory.cpp;h=d606c0bf74105eafd628df4f0118637d54d3fc83;hb=b25922145a97fccf8d2613d0ef52a283d3ce0987;hp=8f97d85de8bd810437bd06894d4c62d03cdc97d1;hpb=8f0712c06f339f4da39e951ca83e35b59e447018;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetFactory.cpp b/src/ModuleBase/ModuleBase_WidgetFactory.cpp index 8f97d85de..d606c0bf7 100644 --- a/src/ModuleBase/ModuleBase_WidgetFactory.cpp +++ b/src/ModuleBase/ModuleBase_WidgetFactory.cpp @@ -1,3 +1,5 @@ +// Copyright (C) 2014-20xx CEA/DEN, EDF R&D + /* * ModuleBase_WidgetFactory.cpp * @@ -9,14 +11,25 @@ #include #include -#include -#include +//#include +//#include #include #include -#include +#include #include #include -#include +//#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include #include #include @@ -40,31 +53,32 @@ ModuleBase_WidgetFactory::ModuleBase_WidgetFactory(const std::string& theXmlRepresentation, ModuleBase_IWorkshop* theWorkshop) - : myWorkshop(theWorkshop) + : myWorkshop(theWorkshop) { myWidgetApi = new Config_WidgetAPI(theXmlRepresentation); } ModuleBase_WidgetFactory::~ModuleBase_WidgetFactory() { + delete myWidgetApi; } void ModuleBase_WidgetFactory::createWidget(QWidget* theParent) { + myParentId = myWidgetApi->widgetId(); if (!myWidgetApi->toChildWidget()) return; QVBoxLayout* aWidgetLay = new QVBoxLayout(theParent); - aWidgetLay->setContentsMargins(2, 2, 2, 2); - do { //Iterate over each node + bool isStretchLayout = false; + 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(ATTR_INTERNAL, false)) { aWidgetLay->addWidget(aWidget); - } - else { + } else { aWidget->setVisible(false); } } @@ -72,6 +86,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); } @@ -83,34 +98,47 @@ void ModuleBase_WidgetFactory::createWidget(QWidget* theParent) QString aPageName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME)); QWidget* aPage = new QWidget(aWidget); createWidget(aPage); + ModuleBase_Tools::adjustMargins(aPage); if (aWdgType == WDG_SWITCH) { ModuleBase_WidgetSwitch* aSwitch = qobject_cast(aWidget); aSwitch->addPage(aPage, aPageName); - } else if (aWdgType == WDG_TOOLBOX){ + } else if (aWdgType == WDG_TOOLBOX) { QToolBox* aToolbox = qobject_cast(aWidget); aToolbox->addItem(aPage, aPageName); } - } while(myWidgetApi->toNextWidget()); + + } while (myWidgetApi->toNextWidget()); } - } while(myWidgetApi->toNextWidget()); + if (aWidget && !isStretchLayout) { + isStretchLayout = !hasExpandingControls(aWidget); + } + } while (myWidgetApi->toNextWidget()); + if (isStretchLayout) { + aWidgetLay->addStretch(1); + } theParent->setLayout(aWidgetLay); } -QWidget* ModuleBase_WidgetFactory::labelControl(QWidget* theParent) +bool ModuleBase_WidgetFactory::hasExpandingControls(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); - aLabelLay->addStretch(1); - result->setLayout(aLabelLay); + bool result = false; + QList aListToCheck; + aListToCheck << theParent; + ModuleBase_ModelWidget* aModelWidget = qobject_cast(theParent); + if(aModelWidget) { + aListToCheck << aModelWidget->getControls(); + } + foreach(QWidget* eachWidget, aListToCheck) { + QSizePolicy::Policy aVPolicy = eachWidget->sizePolicy().verticalPolicy(); + if(aVPolicy & QSizePolicy::ExpandFlag) { + result = true; + } + } return result; } -QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType, QWidget* theParent) +QWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType, + QWidget* theParent) { QWidget* result = NULL; if (theType == WDG_DOUBLEVALUE) { @@ -119,31 +147,36 @@ 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); - } else if (theType == WDG_POINT_SELECTOR) { - result = pointSelectorControl(theParent); - - } 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()) { + } else if (theType == WDG_FILE_SELECTOR) { + result = fileSelectorControl(theParent); + + } 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 { + result = myWorkshop->module()->createWidgetByType(theType, theParent, myWidgetApi, + myParentId, myModelWidgets); #ifdef _DEBUG - else { qDebug() << "ModuleBase_WidgetFactory::fillWidget: find bad widget type"; } + if (!result) {qDebug("ModuleBase_WidgetFactory::fillWidget: find bad widget type");} #endif + } return result; } @@ -156,83 +189,103 @@ QWidget* ModuleBase_WidgetFactory::createContainer(const std::string& theType, Q result = aGroupBox; } else if (theType == WDG_TOOLBOX) { result = new QToolBox(theParent); + // Dark-grey rounded tabs with button-like border #and bold font + QString css = "QToolBox::tab{background-color:#c8c8c8;" + "border-radius:5px;" + "border:1px inset;" + //"font-weight:700;" + "border-color:#fff #505050 #505050 #fff;}"; + result->setStyleSheet(css); + // default vertical size policy is preferred + QSizePolicy aSizePolicy = result->sizePolicy(); + aSizePolicy.setVerticalPolicy(QSizePolicy::MinimumExpanding); + result->setSizePolicy(aSizePolicy); } else if (theType == WDG_SWITCH) { result = new ModuleBase_WidgetSwitch(theParent); } else if (theType == WDG_TOOLBOX_BOX || theType == WDG_SWITCH_CASE) { + // Do nothing for "box" and "case" result = NULL; } #ifdef _DEBUG - else { qDebug() << "ModuleBase_WidgetFactory::fillWidget: find bad container type"; } + else {qDebug() << "ModuleBase_WidgetFactory::fillWidget: find bad container type";} #endif return result; } +QWidget* ModuleBase_WidgetFactory::labelControl(QWidget* theParent) +{ + ModuleBase_WidgetLabel* aWgt = + new ModuleBase_WidgetLabel(theParent, myWidgetApi, myParentId); + myModelWidgets.append(aWgt); + return aWgt; +} + QWidget* ModuleBase_WidgetFactory::doubleSpinBoxControl(QWidget* theParent) { - ModuleBase_WidgetDoubleValue* aDblWgt = new ModuleBase_WidgetDoubleValue(theParent, myWidgetApi); + ModuleBase_WidgetDoubleValue* aDblWgt = + new ModuleBase_WidgetDoubleValue(theParent, myWidgetApi, myParentId); myModelWidgets.append(aDblWgt); - - return aDblWgt->getControl(); + return aDblWgt; } -QWidget* ModuleBase_WidgetFactory::pointSelectorControl(QWidget* theParent) +QWidget* ModuleBase_WidgetFactory::doubleValueEditor(QWidget* theParent) { - ModuleBase_WidgetPoint2D* aWidget = new ModuleBase_WidgetPoint2D(theParent, myWidgetApi); + ModuleBase_WidgetEditor* aWidget = + new ModuleBase_WidgetEditor(theParent, myWidgetApi, myParentId); myModelWidgets.append(aWidget); - return aWidget->getControl(); + return aWidget; } -QWidget* ModuleBase_WidgetFactory::featureSelectorControl(QWidget* theParent) +QWidget* ModuleBase_WidgetFactory::shapeSelectorControl(QWidget* theParent) { - ModuleBase_WidgetFeature* aWidget = new ModuleBase_WidgetFeature(theParent, myWidgetApi); - myModelWidgets.append(aWidget); - return aWidget->getControl(); + ModuleBase_WidgetShapeSelector* aSelector = + new ModuleBase_WidgetShapeSelector(theParent, myWorkshop, myWidgetApi, myParentId); + myModelWidgets.append(aSelector); + return aSelector; } -QWidget* ModuleBase_WidgetFactory::doubleValueEditor(QWidget* theParent) +QWidget* ModuleBase_WidgetFactory::booleanControl(QWidget* theParent) { - ModuleBase_WidgetEditor* aWidget = new ModuleBase_WidgetEditor(theParent, myWidgetApi); - myModelWidgets.append(aWidget); - return 0; + ModuleBase_WidgetBoolValue* aBoolWgt = + new ModuleBase_WidgetBoolValue(theParent, myWidgetApi, myParentId); + myModelWidgets.append(aBoolWgt); + return aBoolWgt; } -QString ModuleBase_WidgetFactory::qs(const std::string& theStdString) const +QWidget* ModuleBase_WidgetFactory::fileSelectorControl(QWidget* theParent) { - return QString::fromStdString(theStdString); + ModuleBase_WidgetFileSelector* aFileSelectorWgt = + new ModuleBase_WidgetFileSelector(theParent, myWidgetApi, myParentId); + myModelWidgets.append(aFileSelectorWgt); + return aFileSelectorWgt; } -bool ModuleBase_WidgetFactory::isInternalWidget(const std::string& theType) +QWidget* ModuleBase_WidgetFactory::choiceControl(QWidget* theParent) { - 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; + ModuleBase_WidgetChoice* aChoiceWgt = + new ModuleBase_WidgetChoice(theParent, myWidgetApi,myParentId); + myModelWidgets.append(aChoiceWgt); + return aChoiceWgt; } -QWidget* ModuleBase_WidgetFactory::selectorControl(QWidget* theParent) +QWidget* ModuleBase_WidgetFactory::lineEditControl(QWidget* theParent) { - ModuleBase_WidgetSelector* aSelector = new ModuleBase_WidgetSelector(theParent, myWorkshop, myWidgetApi); - myModelWidgets.append(aSelector); - return aSelector->getControl(); + ModuleBase_WidgetLineEdit* aLineEditWgt = + new ModuleBase_WidgetLineEdit(theParent, myWidgetApi,myParentId); + myModelWidgets.append(aLineEditWgt); + return aLineEditWgt; } - -QWidget* ModuleBase_WidgetFactory::booleanControl(QWidget* theParent) +QWidget* ModuleBase_WidgetFactory::multiSelectorControl(QWidget* theParent) { - ModuleBase_WidgetBoolValue* aBoolWgt = new ModuleBase_WidgetBoolValue(theParent, myWidgetApi); - myModelWidgets.append(aBoolWgt); - - return aBoolWgt->getControl(); + ModuleBase_WidgetMultiSelector* aMultiselectorWgt = + new ModuleBase_WidgetMultiSelector(theParent, myWorkshop, myWidgetApi,myParentId); + myModelWidgets.append(aMultiselectorWgt); + return aMultiselectorWgt; } - -QWidget* ModuleBase_WidgetFactory::point2dDistanceControl(QWidget* theParent) +QString ModuleBase_WidgetFactory::qs(const std::string& theStdString) { - ModuleBase_WidgetPoint2dDistance* aDistWgt = new ModuleBase_WidgetPoint2dDistance(theParent, myWidgetApi); - myModelWidgets.append(aDistWgt); + return QString::fromStdString(theStdString); +} - return aDistWgt->getControl(); -} \ No newline at end of file