]> SALOME platform Git repositories - modules/shaper.git/commitdiff
Salome HOME
#1658 New widget supporting nested option buttons
authornds <nds@opencascade.com>
Tue, 12 Jul 2016 12:51:29 +0000 (15:51 +0300)
committernds <nds@opencascade.com>
Wed, 13 Jul 2016 09:10:29 +0000 (12:10 +0300)
src/ModuleBase/ModuleBase_WidgetCheckGroupBox.cpp
src/ModuleBase/ModuleBase_WidgetCheckGroupBox.h

index 05b0fc43f7dbec5e94218b5f0bb7f6bb25c55ad2..a2bf7d60e580a62fbf4495f1fb1cbdf553f1edf2 100755 (executable)
@@ -24,16 +24,18 @@ ModuleBase_WidgetCheckGroupBox::ModuleBase_WidgetCheckGroupBox(QWidget* theParen
 {
   QString aToolTip = QString::fromStdString(theData->widgetTooltip());
   bool isChecked = theData->getBooleanAttribute(ATTR_DEFAULT, false);
+  setDefaultValue(isChecked ? "true" : "false");
 
   QVBoxLayout* aMainLayout = new QVBoxLayout(this);
   ModuleBase_Tools::zeroMargins(aMainLayout);
+  aMainLayout->setMargin(2);
   myGroupBox = new QGroupBox(this);
   myGroupBox->setCheckable(true);
   myGroupBox->setToolTip(aToolTip);
   myGroupBox->setChecked(isChecked);
 
   myMainLayout = new QGridLayout(myGroupBox);
-  ModuleBase_Tools::adjustMargins(myMainLayout);
+  ModuleBase_Tools::zeroMargins(myMainLayout);
   myGroupBox->setLayout(myMainLayout);
 
   // default vertical size policy is preferred
@@ -66,6 +68,7 @@ QList<QWidget*> ModuleBase_WidgetCheckGroupBox::getControls() const
 void ModuleBase_WidgetCheckGroupBox::onPageClicked()
 {
   storeValue();
+  updatePagesVisibility();
 }
 
 void ModuleBase_WidgetCheckGroupBox::addPageStretch()
@@ -82,6 +85,7 @@ void ModuleBase_WidgetCheckGroupBox::placeModelWidget(ModuleBase_ModelWidget* th
   myMainLayout->addWidget(theWidget, kRow, kCol, Qt::AlignTop);// | Qt::AlignLeft);
   myMainLayout->setRowStretch(kRow, 0);
 
+  theWidget->setVisible(myGroupBox->isChecked());
 }
 
 void ModuleBase_WidgetCheckGroupBox::placeWidget(QWidget* theWidget)
@@ -121,7 +125,25 @@ bool ModuleBase_WidgetCheckGroupBox::restoreValueCustom()
 
   bool isBlocked = myGroupBox->blockSignals(true);
   myGroupBox->setChecked(!aStringAttr->value().empty());
+  updatePagesVisibility();
   myGroupBox->blockSignals(isBlocked);
 
   return true;
 }
+
+void ModuleBase_WidgetCheckGroupBox::updatePagesVisibility()
+{
+  bool aVisible = myGroupBox->isChecked();
+
+  if (aVisible)
+    ModuleBase_Tools::zeroMargins(myMainLayout);
+  else
+    ModuleBase_Tools::adjustMargins(myMainLayout);
+
+  int aNbSubControls = myMainLayout->count();
+  for (int i = 0; i < aNbSubControls; i++) {
+    QWidget* aWidget = myMainLayout->itemAt(i)->widget();
+    if (aWidget)
+      aWidget->setVisible(aVisible);
+  }
+}
index 4e0dd398362471456d151be14ad09670d0ac128a..5cf821eef2f77a81808eae1c904b48c4f6625020 100755 (executable)
@@ -73,6 +73,11 @@ protected:
   virtual bool restoreValueCustom();
   /// Methods to be redefined from ModuleBase_ModelWidget: end
 
+private:
+  /// Makes the children page of the group box visible if the checked state is on
+  /// otherwise, make the sub-pages is not visible.
+  void updatePagesVisibility();
+
 private:
   QGroupBox* myGroupBox;
   QGridLayout* myMainLayout; ///< page's layout