*/
#include <ModuleBase_WidgetFactory.h>
+#include <ModuleBase_IconFactory.h>
#include <ModuleBase_Operation.h>
#include <ModuleBase_OperationDescription.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_PageWidget.h>
#include <ModuleBase_WidgetExprEditor.h>
#include <ModuleBase_WidgetCreatorFactory.h>
+#include <ModuleBase_WidgetAction.h>
#include <ModelAPI_Validator.h>
#include <ModelAPI_Session.h>
delete myWidgetApi;
}
-void ModuleBase_WidgetFactory::createWidget(ModuleBase_PageBase* thePage)
+void ModuleBase_WidgetFactory::createWidget(ModuleBase_PageBase* thePage, bool alignToTop)
{
std::string aWType = myWidgetApi->widgetType();
if (aWType == NODE_FEATURE) {
- QWidget* aPanel = createPanel(thePage->pageWidget());
- if (aPanel) {
- thePage->addWidget(aPanel);
- thePage->alignToTop();
+ // if XML definition of the feature contains the next key, the widgets should not be created,
+ // but a specific panel should be made. However, to provide persistent of the panel values,
+ // we need to get into the panel the feature of the operation. As a result this panel should
+ // be created after the feature creating(create operation). The method setPanel() of this
+ // class is used for this. Here, we just return to avoid the widgets creation.
+ std::string aPanelName = myWidgetApi->getProperty(PROPERTY_PANEL_ID);
+ if (!aPanelName.empty())
return;
- }
}
if (!myWidgetApi->toChildWidget())
if (myWidgetApi->isPagedWidget()) {
//If current widget is toolbox or switch-casebox then fetch all
//it's pages recursively and setup into the widget.
- myWidgetApi->toChildWidget();
- do {
- QString aPageName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
- QString aCaseId = qs(myWidgetApi->getProperty(_ID));
- ModuleBase_PageBase* aPage = new ModuleBase_PageWidget(aWidget);
- createWidget(aPage);
- 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 (myWidgetApi->toChildWidget()) {
+ do {
+ QString aPageName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
+ QString aCaseId = qs(myWidgetApi->getProperty(_ID));
+ ModuleBase_PageBase* aPage = new ModuleBase_PageWidget(aWidget);
+ createWidget(aPage);
+ 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 = ModuleBase_IconFactory::loadPixmap( anIconPath );
+ aContainer->addPage( aPage, aPageName, aCaseId, anIcon );
+ }
+ } while (myWidgetApi->toNextWidget());
+ }
}
}
} while (myWidgetApi->toNextWidget());
- thePage->alignToTop();
+ if (alignToTop)
+ thePage->alignToTop();
+}
+
+void ModuleBase_WidgetFactory::createPanel(ModuleBase_PageBase* thePage,
+ const FeaturePtr& theFeature)
+{
+ std::string aPanelName = myWidgetApi->getProperty(PROPERTY_PANEL_ID);
+ if (!aPanelName.empty() && ModuleBase_WidgetCreatorFactory::get()->hasPanelWidget(aPanelName)) {
+ QWidget* aPanel = ModuleBase_WidgetCreatorFactory::get()->createPanelByType(aPanelName,
+ thePage->pageWidget(), theFeature);
+ thePage->addWidget(aPanel);
+ thePage->alignToTop();
+ }
}
void ModuleBase_WidgetFactory::createWidget(ModuleBase_PageBase* thePage,
if (theAttributeId.empty() && myWidgetApi->isPagedWidget()) {
//If current widget is toolbox or switch-casebox then fetch all
//it's pages recursively and setup into the widget.
- myWidgetApi->toChildWidget();
- do {
- getGreedAttribute(theAttributeId);
- } while (theAttributeId.empty() && myWidgetApi->toNextWidget());
+ if (myWidgetApi->toChildWidget()) {
+ do {
+ getGreedAttribute(theAttributeId);
+ } while (theAttributeId.empty() && myWidgetApi->toNextWidget());
+ }
}
}
} while (theAttributeId.empty() && myWidgetApi->toNextWidget());
if (!theFound && myWidgetApi->isPagedWidget()) {
//If current widget is toolbox or switch-casebox then fetch all
//it's pages recursively and setup into the widget.
- myWidgetApi->toChildWidget();
- do {
- moveToWidgetId(theWidgetId, theFound);
- } while (!theFound && myWidgetApi->toNextWidget());
+ if (myWidgetApi->toChildWidget()) {
+ do {
+ moveToWidgetId(theWidgetId, theFound);
+ } while (!theFound && myWidgetApi->toNextWidget());
+ }
}
}
} while (!theFound && myWidgetApi->toNextWidget());
}
-QWidget* ModuleBase_WidgetFactory::createPanel(QWidget* theParent)
-{
- QWidget* aPanel = 0;
- std::string aPanelName = myWidgetApi->getProperty(PROPERTY_PANEL_ID);
- if (!aPanelName.empty() && ModuleBase_WidgetCreatorFactory::get()->hasPanelWidget(aPanelName))
- aPanel = ModuleBase_WidgetCreatorFactory::get()->createPanel(aPanelName, theParent);
- return aPanel;
-}
-
ModuleBase_PageBase* ModuleBase_WidgetFactory::createPageByType(const std::string& theType,
QWidget* theParent)
{
if (theType == WDG_INFO) {
result = new ModuleBase_WidgetLabel(theParent, myWidgetApi);
- } else if (theType == WDG_ERRORINFO) {
- result = new ModuleBase_WidgetErrorLabel(theParent, myWidgetApi);
} else if (theType == WDG_DOUBLEVALUE) {
result = new ModuleBase_WidgetDoubleValue(theParent, myWidgetApi);
} else if (theType == WDG_INTEGERVALUE) {
theType == NODE_VALIDATOR) {
// Do nothing for "box" and "case"
result = NULL;
+ } else if (theType == WDG_ACTION) {
+ result = new ModuleBase_WidgetAction(theParent, myWidgetApi);
} else {
result = myWorkshop->module()->createWidgetByType(theType, theParent, myWidgetApi);
if (!result)