]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
Container widgets processing for the PropertyPanel added
authorsbh <sergey.belash@opencascade.com>
Thu, 17 Apr 2014 12:11:14 +0000 (16:11 +0400)
committersbh <sergey.belash@opencascade.com>
Thu, 17 Apr 2014 12:11:14 +0000 (16:11 +0400)
16 files changed:
src/Config/CMakeLists.txt
src/Config/Config_Common.h [new file with mode: 0644]
src/Config/Config_FeatureReader.cpp
src/Config/Config_Keywords.h
src/Config/Config_ModuleReader.cpp
src/Config/Config_WidgetAPI.cpp
src/Config/Config_WidgetAPI.h
src/Config/Config_WidgetReader.cpp
src/Config/Config_XMLReader.cpp
src/Config/Config_XMLReader.h
src/XGUI/CMakeLists.txt
src/XGUI/XGUI_SwitchWidget.cpp [new file with mode: 0644]
src/XGUI/XGUI_SwitchWidget.h [new file with mode: 0644]
src/XGUI/XGUI_WidgetFactory.cpp
src/XGUI/XGUI_WidgetFactory.h
src/XGUI/XGUI_Workshop.cpp

index f4f98b9d791d9f8090ba6f387f8f2dff3d3710fd..660990d30090fc1048badca036b8c31b609717bc 100644 (file)
@@ -12,6 +12,7 @@ SET(PROJECT_HEADERS
   Config_WidgetAPI.h
   Config_WidgetReader.h
   Config_PointerMessage.h
+  Config_Common.h
  )
  
 SET(PROJECT_SOURCES
diff --git a/src/Config/Config_Common.h b/src/Config/Config_Common.h
new file mode 100644 (file)
index 0000000..b4e2e5f
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Config_Common.h
+ *
+ *  Created on: Apr 17, 2014
+ *      Author: sbh
+ */
+
+#include <libxml/parser.h>
+#include <libxml/tree.h>
+
+//>> Forward declaration of xmlNodePtr.
+typedef struct _xmlNode xmlNode;
+typedef xmlNode *xmlNodePtr;
+struct _xmlNode;
+//<<
+
+//>> Forward declaration of xmlDocPtr.
+typedef struct _xmlDoc xmlDoc;
+typedef xmlDoc *xmlDocPtr;
+struct _xmlDoc;
+//<<
+
+/*
+ * Returns true if theNode is XML ELEMENT node (not a "text" node ie).
+ */
+static bool isElementNode(xmlNodePtr theNode)
+{
+  return theNode->type == XML_ELEMENT_NODE;
+}
+
+/*
+ * Returns true if theNode is XML node with a given name.
+
+ * Please note that this function should be called with NULL last argument.
+ * In example: isNode(aNode, "type1", ["type2", ...], NULL);
+ * ", NULL" is required to use unlimited number of arguments.
+ * TODO(sbh): find a way to simplify calling this method.
+ */
+static bool isNode(xmlNodePtr theNode, const char* theNodeName, ...)
+{
+  bool result = false;
+  const xmlChar* aName = theNode->name;
+  if (!aName || !isElementNode(theNode)) {
+    return false;
+  }
+  if (!xmlStrcmp(aName, (const xmlChar *) theNodeName)) {
+    return true;
+  }
+  va_list args; // define argument list variable
+  va_start(args, theNodeName); // init list; point to last defined argument
+  while(true) {
+    char *anArg = va_arg (args, char*); // get next argument
+    if (anArg == NULL)
+      break;
+    if (!xmlStrcmp(aName, (const xmlChar *) anArg)) {
+      va_end(args); // cleanup the system stack
+      return true;
+    }
+  }
+  va_end(args); // cleanup the system stack
+  return false;
+}
+
+
+/*
+ * Every xml node has child. Even if there is no explicit
+ * child nodes libxml gives the "Text node" as child.
+ *
+ * This method checks if real child nodes exist in the
+ * given node.
+ */
+static bool hasChild(xmlNodePtr theNode)
+{
+  xmlNodePtr aNode = theNode->children;
+  for(; aNode; aNode = aNode->next) {
+    if (isElementNode(theNode)) {
+      return true;
+    }
+  }
+  return false;
+}
index ddefe6df2dec201355a7337d6c4d19822e2ed85f..bb52b413fa964c3ecdf95c9b275ddd4a6a7b2fe6 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <Config_Keywords.h>
+#include <Config_Common.h>
 #include <Config_FeatureMessage.h>
 #include <Config_FeatureReader.h>
 #include <Event_Message.h>
index bd589d92dab20109e74022d01f68748a90463289..3c7bb936c57207f65388b778bd4703856b5aa299 100644 (file)
 const static char* NODE_WORKBENCH = "workbench";
 const static char* NODE_GROUP = "group";
 const static char* NODE_FEATURE = "feature";
-const static char* NODE_DOUBLE_WDG = "doublevalue";
+//Widgets
+const static char* WDG_DOUBLEVALUE = "doublevalue";
+//Widget containers
+const static char* WDG_GROUP = "groupbox";
+const static char* WDG_CHECK_GROUP = "check_groupbox";
+const static char* WDG_TOOLBOX = "toolbox";
+const static char* WDG_TOOLBOX_BOX = "box";
+const static char* WDG_SWITCH = "switch";
+const static char* WDG_SWITCH_CASE = "case";
+
 
 const static char* _ID = "id";
 //const static char* WORKBENCH_ID = "id";
@@ -31,6 +40,10 @@ const static char* DOUBLE_WDG_MAX = "max";
 const static char* DOUBLE_WDG_STEP = "step";
 const static char* DOUBLE_WDG_DFLT = "default";
 
+//toolbox/switch properties
+const static char* CONTAINER_PAGE_NAME = "title";
+
+
 /*
  * Hardcoded xml entities of plugins.xml
  */
index 4fbc7d98b7f57ac405b82dfaf54eefdfdc4a13ae..6153bd04dc727f5f761b870d6879f8e831a7edb1 100644 (file)
@@ -6,6 +6,7 @@
  */
 
 #include <Config_Keywords.h>
+#include <Config_Common.h>
 #include <Config_ModuleReader.h>
 #include <Config_FeatureReader.h>
 
index 80eb568111877703e67921312149ef32a20bc05a..9a77d778ac0825da41131e6ffc65a2ef0ea3c88c 100644 (file)
@@ -6,6 +6,8 @@
  */
 
 #include <Config_WidgetAPI.h>
+#include <Config_Keywords.h>
+#include <Config_Common.h>
 
 #include <libxml/parser.h>
 #include <libxml/tree.h>
@@ -14,7 +16,7 @@
 Config_WidgetAPI::Config_WidgetAPI(std::string theRawXml)
 {
   myDoc = xmlParseDoc(BAD_CAST theRawXml.c_str());
-  myCurrentNode = NULL;
+  myCurrentNode = xmlDocGetRootElement(myDoc);
 }
 
 
@@ -23,18 +25,38 @@ Config_WidgetAPI::~Config_WidgetAPI()
   xmlFreeDoc(myDoc);
 }
 
-void Config_WidgetAPI::reset()
+bool Config_WidgetAPI::toNextWidget()
 {
-  xmlNodePtr aRoot = xmlDocGetRootElement(myDoc);
-  if(aRoot) {
-    myCurrentNode = aRoot->children;
+  //Skip all non-element node, stop if next node is null
+  xmlNodePtr aNextNode = myCurrentNode;
+  do {
+    aNextNode = aNextNode->next;
+  } while(aNextNode && !isElementNode(aNextNode));
+
+  if(!aNextNode) {
+    toParentWidget();
+    return false;
   }
+  myCurrentNode = aNextNode;
+  return true;
 }
 
-bool Config_WidgetAPI::nextWidget()
+bool Config_WidgetAPI::toChildWidget()
+{
+  if(myCurrentNode && hasChild(myCurrentNode)) {
+    myCurrentNode = myCurrentNode->children;
+    while(!isElementNode(myCurrentNode)) {
+      myCurrentNode = myCurrentNode->next;
+    } 
+    return true;
+  }
+  return false;
+}
+
+bool Config_WidgetAPI::toParentWidget()
 {
   if(myCurrentNode) {
-    myCurrentNode = myCurrentNode->next;
+    myCurrentNode = myCurrentNode->parent;
   }
   return myCurrentNode != NULL;
 }
@@ -48,6 +70,18 @@ std::string Config_WidgetAPI::widgetType()
   return result;
 }
 
+bool Config_WidgetAPI::isContainerWidget()
+{
+  return isNode(myCurrentNode, WDG_GROUP, WDG_CHECK_GROUP,
+                               NULL);
+}
+
+bool Config_WidgetAPI::isPagedWidget()
+{
+  return isNode(myCurrentNode, WDG_TOOLBOX, WDG_SWITCH,
+                               NULL);
+}
+
 std::string Config_WidgetAPI::getProperty(const char* thePropName)
 {
   std::string result = "";
@@ -77,28 +111,3 @@ std::string Config_WidgetAPI::widgetLabel()
 {
   return getProperty("label");
 }
-
-bool Config_WidgetAPI::isNode(xmlNodePtr theNode, const char* theNodeName, ...)
-{
-  bool result = false;
-  const xmlChar* aName = theNode->name;
-  if (!aName || theNode->type != XML_ELEMENT_NODE)
-    return false;
-
-  if (!xmlStrcmp(aName, (const xmlChar *) theNodeName))
-    return true;
-
-  va_list args; // define argument list variable
-  va_start(args, theNodeName); // init list; point to last defined argument
-  while(true) {
-    char *anArg = va_arg (args, char*); // get next argument
-    if (anArg == NULL)
-      break;
-    if (!xmlStrcmp(aName, (const xmlChar *) anArg)) {
-      va_end(args); // cleanup the system stack
-      return true;
-    }
-  }
-  va_end(args); // cleanup the system stack
-  return false;
-}
index c98888f12339d66b223378151118d86268d4e099..4030ff257a204b12e70af6d7c14cdbd6f4677f10 100644 (file)
@@ -32,10 +32,13 @@ public:
   Config_WidgetAPI(std::string theRawXml);
   virtual ~Config_WidgetAPI();
 
-  void reset();
-  bool nextWidget();
+  bool toNextWidget();
+  bool toChildWidget();
+  bool toParentWidget();
 
   std::string widgetType();
+  bool isContainerWidget();
+  bool isPagedWidget();
 
   std::string widgetId();
   std::string widgetIcon();
@@ -44,9 +47,6 @@ public:
 
   std::string getProperty(const char* thePropName);
 
-protected:
-  bool isNode(xmlNodePtr theNode, const char* name, ...);
-
 private:
   xmlDocPtr myDoc;
   xmlNodePtr myCurrentNode;
index 032acb000dba27983941511ed518c3670bd3d68c..d78539982efcad4919069ff6cd211e6c04cbd390 100644 (file)
@@ -7,6 +7,7 @@
 
 #include <Config_WidgetReader.h>
 #include <Config_Keywords.h>
+#include <Config_Common.h>
 
 #include <libxml/parser.h>
 #include <libxml/tree.h>
index 085871fdd66d6549a75c15f18104596611fb63e5..002c9df493ab611ef9d22774d6147ce70e2800e3 100644 (file)
@@ -141,48 +141,3 @@ std::string Config_XMLReader::getProperty(xmlNodePtr theNode, const char* name)
   return result;
 }
 
-/*
- * Returns true if theNode is XML node with a given name.
- */
-bool Config_XMLReader::isNode(xmlNodePtr theNode, const char* theNodeName, ...)
-{
-  bool result = false;
-  const xmlChar* aName = theNode->name;
-  if (!aName || theNode->type != XML_ELEMENT_NODE) {
-    return false;
-  }
-  if (!xmlStrcmp(aName, (const xmlChar *) theNodeName)) {
-    return true;
-  }
-  va_list args; // define argument list variable
-  va_start(args, theNodeName); // init list; point to last defined argument
-  while(true) {
-    char *anArg = va_arg (args, char*); // get next argument
-    if (anArg == NULL)
-      break;
-    if (!xmlStrcmp(aName, (const xmlChar *) anArg)) {
-      va_end(args); // cleanup the system stack
-      return true;
-    }
-  }
-  va_end(args); // cleanup the system stack
-  return false;
-}
-
-/*
- * Every xml node has child. Even if there is no explicit
- * child nodes libxml gives the "Text node" as child.
- *
- * This method checks if real child nodes exist in the
- * given node.
- */
-bool Config_XMLReader::hasChild(xmlNodePtr theNode)
-{
-  xmlNodePtr aNode = theNode->children;
-  for(; aNode; aNode = aNode->next) {
-    if (aNode->type != XML_ELEMENT_NODE) {
-      return true;
-    }
-  }
-  return false;
-}
index 95d3ea651c49b4df5c83fd46d133d30b2f1b423e..a44d49364a9cb8d4c95b60ea1d62ca8f06fe9146 100644 (file)
@@ -47,14 +47,6 @@ protected:
 
   xmlNodePtr node(void* theNode);
   std::string getProperty(xmlNodePtr theNode, const char* property);
-  /*
-   * Please note that this function should be called with NULL last argument. 
-   * In example: isNode(aNode, "type1", ["type2", ...], NULL);
-   * ", NULL" is required to use unlimited number of arguments.
-   * TODO(sbh): find a way to simplify calling this method.
-   */
-  bool isNode(xmlNodePtr theNode, const char* name, ...);
-  bool hasChild(xmlNodePtr theNode);
 
 protected:
   std::string myDocumentPath;
index c77c1ce446ab01c4c52f5297b721976efce7d0a2..a10e48e68a257f42fa17832ca4e0aaed9c3ebf64 100644 (file)
@@ -23,6 +23,7 @@ SET(PROJECT_HEADERS
        XGUI_ObjectsBrowser.h
     XGUI_DataTreeModel.h
     XGUI_SelectionMgr.h
+    XGUI_SwitchWidget.h
 )
 
 SET(PROJECT_AUTOMOC 
@@ -47,6 +48,7 @@ SET(PROJECT_SOURCES
        XGUI_PartDataModel.cpp
        XGUI_ObjectsBrowser.cpp
     XGUI_SelectionMgr.cpp
+    XGUI_SwitchWidget.cpp
 )
 
 SET(PROJECT_RESOURCES 
diff --git a/src/XGUI/XGUI_SwitchWidget.cpp b/src/XGUI/XGUI_SwitchWidget.cpp
new file mode 100644 (file)
index 0000000..bfa71fe
--- /dev/null
@@ -0,0 +1,125 @@
+/*
+ * XGUI_SwitchWidget.cpp
+ *
+ *  Created on: Apr 16, 2014
+ *      Author: sbh
+ */
+
+#include <XGUI_SwitchWidget.h>
+
+#include <QComboBox>
+#include <QVBoxLayout>
+#include <QSpacerItem>
+
+XGUI_SwitchWidget::XGUI_SwitchWidget(QWidget* parent)
+: QFrame(parent)
+{
+  myMainLay = new QVBoxLayout(this);
+  myMainLay->setContentsMargins(2, 4, 2, 2);
+  myCombo = new QComboBox(this);
+  myCombo->hide();
+  myMainLay->addWidget(myCombo);
+  this->setFrameShape(QFrame::StyledPanel);
+  connect(myCombo, SIGNAL(currentIndexChanged(int)),
+          this, SLOT(setCurrentIndex(int)));
+  connect(myCombo, SIGNAL(currentIndexChanged(int)),
+          this, SIGNAL(currentPageChanged(int)));
+
+}
+
+XGUI_SwitchWidget::~XGUI_SwitchWidget()
+{
+}
+
+int XGUI_SwitchWidget::addPage(QWidget* theWidget, const QString& theName)
+{
+  return insertPage(count(), theWidget, theName);
+}
+
+int XGUI_SwitchWidget::count() const
+{
+  return myCombo->count();
+}
+
+int XGUI_SwitchWidget::currentIndex() const
+{
+  return myCombo->currentIndex();
+}
+
+QWidget* XGUI_SwitchWidget::currentWidget() const
+{
+  int idx = currentIndex();
+  return myCases[idx];
+}
+
+int XGUI_SwitchWidget::indexOf(QWidget* theWidget) const
+{
+  return myCases.indexOf(theWidget);
+}
+
+int XGUI_SwitchWidget::insertPage(int theIndex, QWidget* theWidget, const QString& theName)
+{
+  int index = theIndex < count() ? theIndex : count();
+  if(count() == 0)
+    myCombo->show();
+  myCombo->insertItem(index, theName);
+  myCases.insert(index, theWidget);
+  myMainLay->addWidget(theWidget);
+  setCurrentIndex(theIndex);
+  return index;
+}
+
+bool XGUI_SwitchWidget::isPageEnabled(int index) const
+{
+  return myCases[index]->isEnabled();
+}
+
+QString XGUI_SwitchWidget::pageText(int index) const
+{
+  return myCombo->itemText(index);
+}
+
+QString XGUI_SwitchWidget::pageToolTip(int index) const
+{
+  return myCases[index]->toolTip();
+}
+
+void XGUI_SwitchWidget::removePage(int index)
+{
+  myCombo->removeItem(index);
+  myCases.removeAt(index);
+  if (count() == 0) {
+    myCombo->hide();
+  }
+}
+
+void XGUI_SwitchWidget::setPageEnabled(int index, bool enabled)
+{
+  myCases[index]->setEnabled(enabled);
+}
+
+void XGUI_SwitchWidget::setPageName(int index, const QString& theName)
+{
+  myCombo->setItemText(index, theName);
+}
+
+void XGUI_SwitchWidget::setPageToolTip(int index, const QString& toolTip)
+{
+  myCases[index]->setToolTip(toolTip);
+}
+
+void XGUI_SwitchWidget::setCurrentIndex(int index)
+{
+  myCombo->setCurrentIndex(index);
+  refresh();
+}
+
+void XGUI_SwitchWidget::refresh()
+{
+  foreach(QWidget* eachWidget, myCases) {
+    eachWidget->setVisible(false);
+  }
+  if(currentIndex() >= myCases.count())
+    return;
+  myCases[currentIndex()]->setVisible(true);
+}
diff --git a/src/XGUI/XGUI_SwitchWidget.h b/src/XGUI/XGUI_SwitchWidget.h
new file mode 100644 (file)
index 0000000..0fa6fcc
--- /dev/null
@@ -0,0 +1,53 @@
+/*
+ * XGUI_SwitchWidget.h
+ *
+ *  Created on: Apr 16, 2014
+ *      Author: sbh
+ */
+
+#ifndef XGUI_SWITCHWIDGET_H_
+#define XGUI_SWITCHWIDGET_H_
+
+#include <XGUI.h>
+#include <QFrame>
+
+class QComboBox;
+class QVBoxLayout;
+
+class XGUI_EXPORT XGUI_SwitchWidget: public QFrame
+{
+  Q_OBJECT
+public:
+  XGUI_SwitchWidget(QWidget* parent = NULL);
+  virtual ~XGUI_SwitchWidget();
+
+  int addPage(QWidget * theWidget, const QString & theName);
+  int count() const;
+  int currentIndex() const;
+  QWidget * currentWidget() const;
+  int indexOf(QWidget * theWidget) const;
+  int insertPage(int index, QWidget * theWidget, const QString & theName);
+  bool isPageEnabled(int index) const;
+  QString pageText(int index) const;
+  QString pageToolTip(int index) const;
+  void removePage(int index);
+  void setPageEnabled(int index, bool enabled);
+  void setPageName(int index, const QString & text);
+  void setPageToolTip(int index, const QString & toolTip);
+
+public slots:
+  void setCurrentIndex(int index);
+
+signals:
+  void currentPageChanged(int);
+
+protected:
+  void refresh();
+
+private:
+  QVBoxLayout* myMainLay;
+  QComboBox* myCombo;
+  QWidgetList myCases;
+};
+
+#endif /* XGUI_SWITCHWIDGET_H_ */
index eeb6c10cde969231a91c81b772ac563ba28c4ff1..bd08442a4d5dbdfe7f35158bdae17c865ec6d1e7 100644 (file)
@@ -6,8 +6,10 @@
  */
 
 #include <XGUI_WidgetFactory.h>
-#include <ModuleBase_Operation.h>
 
+#include <XGUI_SwitchWidget.h>
+
+#include <ModuleBase_Operation.h>
 #include <Config_Keywords.h>
 #include <Config_WidgetAPI.h>
 
@@ -17,6 +19,8 @@
 #include <QMetaProperty>
 #include <QLabel>
 #include <QPixmap>
+#include <QGroupBox>
+#include <QToolBox>
 
 #ifdef _DEBUG
 #include <QDebug>
@@ -33,33 +37,83 @@ XGUI_WidgetFactory::~XGUI_WidgetFactory()
 {
 }
 
-void XGUI_WidgetFactory::fillWidget(QWidget* theParent)
+void XGUI_WidgetFactory::createWidget(QWidget* theParent)
 {
-  myWidgetApi->reset();
-  if (theParent->layout()) {
-    theParent->layout()->deleteLater();
-  }
+  if (!myWidgetApi->toChildWidget())
+    return;
 
   QVBoxLayout* aWidgetLay = new QVBoxLayout(theParent);
-  aWidgetLay->setContentsMargins(0, 0, 0, 0);
-  do {
+  aWidgetLay->setContentsMargins(2, 2, 2, 2);
+  do { //Iterate over each node
     std::string aWdgType = myWidgetApi->widgetType();
-    QWidget* aWidget = NULL;
-    if (aWdgType == NODE_DOUBLE_WDG) {
-      aWidget = doubleSpinBoxWidget();
-    } else {
-      #ifdef _DEBUG
-      qDebug() << "XGUI_WidgetFactory::fillWidget: find bad widget type";
-      #endif
-    }
+    //Create a widget (doublevalue, groupbox, toolbox, etc.
+    QWidget* aWidget = createWidgetByType(aWdgType, theParent);
     if (aWidget) {
       aWidgetLay->addWidget(aWidget);
     }
-  } while(myWidgetApi->nextWidget());
+    if (myWidgetApi->isContainerWidget()) {
+      //if current widget is groupbox (container) process it's children recursively
+      QString aGroupName = qs(myWidgetApi->getProperty(CONTAINER_PAGE_NAME));
+      createWidget(aWidget);
+      QGroupBox* aGrBox = qobject_cast<QGroupBox*>(aWidget);
+      aGrBox->setTitle(aGroupName);
+    }
+    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));
+        QWidget* aPage = new QWidget(aWidget);
+        createWidget(aPage);
+        if (aWdgType == WDG_SWITCH) {
+          XGUI_SwitchWidget* aSwitch = qobject_cast<XGUI_SwitchWidget*>(aWidget);
+          aSwitch->addPage(aPage, aPageName);
+        } else if (aWdgType == WDG_TOOLBOX){
+          QToolBox* aToolbox = qobject_cast<QToolBox*>(aWidget);
+          aToolbox->addItem(aPage, aPageName);
+        }
+      } while(myWidgetApi->toNextWidget());
+    }
+  } while(myWidgetApi->toNextWidget());
   theParent->setLayout(aWidgetLay);
 }
 
-QWidget* XGUI_WidgetFactory::doubleSpinBoxWidget()
+QWidget* XGUI_WidgetFactory::createWidgetByType(const std::string& theType, QWidget* theParent)
+{
+  QWidget* result = NULL;
+  if (theType == WDG_DOUBLEVALUE) {
+    result = doubleSpinBoxControl();
+  } else if (myWidgetApi->isContainerWidget() || myWidgetApi->isPagedWidget()) {
+    result = createContainer(theType, theParent);
+  }
+#ifdef _DEBUG
+  else { qDebug() << "XGUI_WidgetFactory::fillWidget: find bad widget type"; }
+#endif
+  return result;
+}
+
+QWidget* XGUI_WidgetFactory::createContainer(const std::string& theType, QWidget* theParent)
+{
+  QWidget* result = NULL;
+  if (theType == WDG_GROUP || theType == WDG_CHECK_GROUP) {
+    QGroupBox* aGroupBox = new QGroupBox(theParent);
+    aGroupBox->setCheckable(theType == WDG_CHECK_GROUP);
+    result = aGroupBox;
+  } else if (theType == WDG_TOOLBOX) {
+    result = new QToolBox(theParent);
+  } else if (theType == WDG_SWITCH) {
+    result = new XGUI_SwitchWidget(theParent);
+  } else if (theType == WDG_TOOLBOX_BOX || theType == WDG_SWITCH_CASE) {
+    result = NULL;
+  }
+#ifdef _DEBUG
+  else { qDebug() << "XGUI_WidgetFactory::fillWidget: find bad container type"; }
+#endif
+  return result;
+}
+
+QWidget* XGUI_WidgetFactory::doubleSpinBoxControl()
 {
   QWidget* result = new QWidget();
   QHBoxLayout* aControlLay = new QHBoxLayout(result);
@@ -99,14 +153,14 @@ QWidget* XGUI_WidgetFactory::doubleSpinBoxWidget()
   aControlLay->addWidget(aBox);
   aControlLay->setStretch(1, 1);
   result->setLayout(aControlLay);
-  connectWidget(aBox, NODE_DOUBLE_WDG);
+  connectWidget(aBox, WDG_DOUBLEVALUE);
   return result;
 }
 
-bool XGUI_WidgetFactory::connectWidget(QWidget* theWidget, const QString& theType)
+bool XGUI_WidgetFactory::connectWidget(QWidget* theWidget,  const QString& theType)
 {
   bool result = false;
-  if (theType == NODE_DOUBLE_WDG) {
+  if (theType == WDG_DOUBLEVALUE) {
     result = QObject::connect(theWidget, SIGNAL(valueChanged(double)), 
                               myOperation, SLOT(storeReal(double)));
   }
index 99ab978b379d1b9bb8a81e5793cf16bf04415710..27a65fa430c3ce215d6787b6ed62e35d134b45b8 100644 (file)
@@ -21,18 +21,22 @@ public:
   XGUI_WidgetFactory(ModuleBase_Operation*);
   virtual ~XGUI_WidgetFactory();
 
-  void fillWidget(QWidget* theParent);
+  void createWidget(QWidget* theParent);
 
 protected:
-  QWidget* doubleSpinBoxWidget();
-
+  //Widgets
+  QWidget* doubleSpinBoxControl();
+  QWidget* createWidgetByType(const std::string& theType, QWidget* theParent = NULL);
+  QWidget* createContainer(const std::string& theType, QWidget* theParent = NULL);
   bool connectWidget(QWidget*, const QString&);
 
-private:
   QString qs(const std::string& theStdString) const;
 
+private:
   Config_WidgetAPI* myWidgetApi;
   ModuleBase_Operation*   myOperation;
+
+
 };
 
 #endif /* XGUI_WIDGETFACTORY_H_ */
index 25e3c14b124f724ebe8e58ef08f73a4e4f7ed860..58d5a87c1f5fdb0a9c14a76095575fd0e6f2a00c 100644 (file)
@@ -211,7 +211,7 @@ void XGUI_Workshop::fillPropertyPanel(ModuleBase_Operation* theOperation)
   qDeleteAll(aPropWidget->children());
   theOperation->start();
   XGUI_WidgetFactory aFactory = XGUI_WidgetFactory(theOperation);
-  aFactory.fillWidget(aPropWidget);
+  aFactory.createWidget(aPropWidget);
 }
 
 void XGUI_Workshop::setCurrentOperation(ModuleBase_Operation* theOperation)