#include <ModuleBase_Operation.h>
#include <ModuleBase_OperationDescription.h>
-//#include <ModuleBase_WidgetFeatureOrAttribute.h>
-//#include <ModuleBase_WidgetFeature.h>
#include <ModuleBase_WidgetEditor.h>
#include <ModuleBase_WidgetSwitch.h>
#include <ModuleBase_WidgetShapeSelector.h>
#include <ModuleBase_WidgetDoubleValue.h>
+#include <ModuleBase_WidgetIntValue.h>
#include <ModuleBase_WidgetBoolValue.h>
-//#include <ModuleBase_WidgetPoint2dDistance.h>
#include <ModuleBase_WidgetFileSelector.h>
#include <ModuleBase_WidgetChoice.h>
#include <ModuleBase_IWorkshop.h>
#include <ModuleBase_WidgetLineEdit.h>
#include <ModuleBase_WidgetMultiSelector.h>
#include <ModuleBase_WidgetLabel.h>
+#include <ModuleBase_WidgetErrorLabel.h>
#include <ModuleBase_WidgetToolbox.h>
#include <ModuleBase_PageBase.h>
#include <ModuleBase_PageGroupBox.h>
+#include <ModuleBase_WidgetCheckGroupBox.h>
#include <ModuleBase_PageWidget.h>
+#include <ModuleBase_WidgetExprEditor.h>
+#include <ModuleBase_WidgetCreatorFactory.h>
#include <ModelAPI_Validator.h>
#include <ModelAPI_Session.h>
if (!myWidgetApi->toChildWidget())
return;
- //bool isStretchLayout = false;
- QWidget* aPageWidget = dynamic_cast<QWidget*>(thePage);
- if(!aPageWidget) {
- #ifdef _DEBUG
- std::cout << "ModuleBase_WidgetFactory::createWidget: can not reinterpret_cast thePage" << std::endl;
- #endif
- }
do { //Iterate over each node
std::string aWdgType = myWidgetApi->widgetType();
// Create PageGroup TODO: extract
- if (myWidgetApi->isGroupBoxWidget()) {
+ if (myWidgetApi->isGroupBoxWidget() ||
+ ModuleBase_WidgetCreatorFactory::get()->hasPageWidget(aWdgType)) {
+
//if current widget is groupbox (container) process it's children recursively
- QString aGroupName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
- ModuleBase_PageGroupBox* aPage = new ModuleBase_PageGroupBox(aPageWidget);
- aPage->setTitle(aGroupName);
+ ModuleBase_PageBase* aPage = createPageByType(aWdgType, thePage->pageWidget());
+
createWidget(aPage);
thePage->addPageWidget(aPage);
} else {
// Create a ModelWidget
- ModuleBase_ModelWidget* aWidget = createWidgetByType(aWdgType, aPageWidget);
+ ModuleBase_ModelWidget* aWidget = createWidgetByType(aWdgType, thePage->pageWidget());
if (aWidget) {
if (!myWidgetApi->getBooleanAttribute(ATTR_INTERNAL, false)) {
thePage->addModelWidget(aWidget);
QString aCaseId = qs(myWidgetApi->getProperty(_ID));
ModuleBase_PageBase* aPage = new ModuleBase_PageWidget(aWidget);
createWidget(aPage);
- QWidget* aCasePageWidget = dynamic_cast<QWidget*>(aPage);
- if (aWdgType == WDG_SWITCH) {
- ModuleBase_WidgetSwitch* aSwitch = qobject_cast<ModuleBase_WidgetSwitch*>(aWidget);
- aSwitch->addPage(aCasePageWidget, aPageName);
- } else if (aWdgType == WDG_TOOLBOX) {
- ModuleBase_WidgetToolbox* aToolbox = qobject_cast<ModuleBase_WidgetToolbox*>(aWidget);
- aToolbox->addPage(aCasePageWidget, aPageName, aCaseId);
+ if (aWdgType == WDG_SWITCH || aWdgType == WDG_TOOLBOX) {
+ ModuleBase_PagedContainer* aContainer = qobject_cast<ModuleBase_PagedContainer*>(aWidget);
+
+ QString anIconPath = qs( myWidgetApi->getProperty( CONTAINER_PAGE_ICON ) );
+ QPixmap anIcon( anIconPath );
+ aContainer->addPage( aPage, aPageName, aCaseId, anIcon );
}
} while (myWidgetApi->toNextWidget());
}
}
-// if (aWidget && !isStretchLayout) {
-// isStretchLayout = !hasExpandingControls(aWidget);
-// }
} while (myWidgetApi->toNextWidget());
-// if (isStretchLayout) {
-// aWidgetLay->addStretch(1);
-// }
+
+ thePage->alignToTop();
}
-bool ModuleBase_WidgetFactory::hasExpandingControls(QWidget* theParent)
+ModuleBase_PageBase* ModuleBase_WidgetFactory::createPageByType(const std::string& theType,
+ QWidget* theParent)
{
- bool result = false;
- QList<QWidget *> aListToCheck;
- aListToCheck << theParent;
- ModuleBase_ModelWidget* aModelWidget = qobject_cast<ModuleBase_ModelWidget*>(theParent);
- if(aModelWidget) {
- aListToCheck << aModelWidget->getControls();
+ ModuleBase_PageBase* aResult = NULL;
+
+ if (theType == WDG_GROUP) {
+ QString aGroupName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
+ ModuleBase_PageGroupBox* aPage = new ModuleBase_PageGroupBox(theParent);
+ aPage->setTitle(aGroupName);
+ aResult = aPage;
}
- foreach(QWidget* eachWidget, aListToCheck) {
- QSizePolicy::Policy aVPolicy = eachWidget->sizePolicy().verticalPolicy();
- if(aVPolicy & QSizePolicy::ExpandFlag) {
- result = true;
- }
+ else if (theType == WDG_CHECK_GROUP) {
+ QString aGroupName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
+ ModuleBase_WidgetCheckGroupBox* aPage = new ModuleBase_WidgetCheckGroupBox(theParent,
+ myWidgetApi, myParentId);
+ aPage->setTitle(aGroupName);
+ aResult = aPage;
}
- return result;
+ if (!aResult)
+ aResult = ModuleBase_WidgetCreatorFactory::get()->createPageByType(theType, theParent,
+ myWidgetApi, myParentId);
+
+ ModuleBase_ModelWidget* aWidget = dynamic_cast<ModuleBase_ModelWidget*>(aResult);
+ if (aWidget)
+ myModelWidgets.append(aWidget);
+
+ return aResult;
}
-ModuleBase_ModelWidget* ModuleBase_WidgetFactory
-::createWidgetByType(const std::string& theType, QWidget* theParent)
+ModuleBase_ModelWidget* ModuleBase_WidgetFactory::createWidgetByType(const std::string& theType,
+ QWidget* theParent)
{
ModuleBase_ModelWidget* result = NULL;
if (theType == WDG_INFO) {
result = new ModuleBase_WidgetLabel(theParent, myWidgetApi, myParentId);
-
+ } else if (theType == WDG_ERRORINFO) {
+ result = new ModuleBase_WidgetErrorLabel(theParent, myWidgetApi, myParentId);
} else if (theType == WDG_DOUBLEVALUE) {
result = new ModuleBase_WidgetDoubleValue(theParent, myWidgetApi, myParentId);
-
+ } else if (theType == WDG_INTEGERVALUE) {
+ result = new ModuleBase_WidgetIntValue(theParent, myWidgetApi, myParentId);
} else if (theType == WDG_SHAPE_SELECTOR) {
- result = new ModuleBase_WidgetShapeSelector(theParent, myWorkshop, myWidgetApi, myParentId);
-
+ result = new ModuleBase_WidgetShapeSelector(theParent, myWorkshop, myWidgetApi, myParentId);
} else if (theType == WDG_BOOLVALUE) {
result = new ModuleBase_WidgetBoolValue(theParent, myWidgetApi, myParentId);
-
- } else if (theType == WDG_DOUBLEVALUE_EDITOR) {
- result = new ModuleBase_WidgetEditor(theParent, myWidgetApi, myParentId);
-
+ //} else if (theType == WDG_DOUBLEVALUE_EDITOR) {
+ // result = new ModuleBase_WidgetEditor(theParent, myWidgetApi, myParentId);
} else if (theType == WDG_FILE_SELECTOR) {
result = new ModuleBase_WidgetFileSelector(theParent, myWidgetApi, myParentId);
-
} else if (theType == WDG_CHOICE) {
- result = new ModuleBase_WidgetChoice(theParent, myWidgetApi,myParentId);
-
+ result = new ModuleBase_WidgetChoice(theParent, myWidgetApi, myParentId);
} else if (theType == WDG_STRINGVALUE) {
- result = new ModuleBase_WidgetLineEdit(theParent, myWidgetApi,myParentId);
-
+ std::string aPlaceHolder = myWidgetApi->getProperty( WDG_PLACE_HOLDER );
+ result = new ModuleBase_WidgetLineEdit( theParent, myWidgetApi, myParentId, aPlaceHolder );
+ } else if (theType == WDG_EXPR_EDITOR) {
+ std::string aPlaceHolder = myWidgetApi->getProperty( WDG_PLACE_HOLDER );
+ result = new ModuleBase_WidgetExprEditor( theParent, myWidgetApi, myParentId, aPlaceHolder );
} else if (theType == WDG_MULTISELECTOR) {
- result = new ModuleBase_WidgetMultiSelector(theParent, myWorkshop, myWidgetApi,myParentId);
-
+ result = new ModuleBase_WidgetMultiSelector(theParent, myWorkshop, myWidgetApi, myParentId);
} else if (theType == WDG_TOOLBOX) {
result = new ModuleBase_WidgetToolbox(theParent, myWidgetApi, myParentId);
-
} else if (theType == WDG_SWITCH) {
result = new ModuleBase_WidgetSwitch(theParent, myWidgetApi, myParentId);
- return result;
-
- } else if (theType == WDG_TOOLBOX_BOX || theType == WDG_SWITCH_CASE) {
+ } else if (theType == WDG_TOOLBOX_BOX || theType == WDG_SWITCH_CASE ||
+ theType == NODE_VALIDATOR) {
// Do nothing for "box" and "case"
result = NULL;
} else {
- result = myWorkshop->module()->createWidgetByType(theType, theParent, myWidgetApi,
- myParentId);
-#ifdef _DEBUG
- if (!result) {qDebug("ModuleBase_WidgetFactory::fillWidget: find bad widget type");}
-#endif
+ result = myWorkshop->module()->createWidgetByType(theType, theParent, myWidgetApi, myParentId);
+ if (!result)
+ result = ModuleBase_WidgetCreatorFactory::get()->createWidgetByType(theType, theParent,
+ myWidgetApi, myParentId, myWorkshop);
+ #ifdef _DEBUG
+ if (!result) {
+ qDebug("ModuleBase_WidgetFactory::fillWidget: find bad widget type %s", theType.c_str());
+ }
+ #endif
}
- if (result) {
+ if (result)
myModelWidgets.append(result);
- }
return result;
}