X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_WidgetOptionalBox.cpp;h=edfd91b3f46b2e0ad84a72c8a7f66fcfcf60f933;hb=97917d3698f5a2f7fc9596e7c755ff8f6751e373;hp=4a1f7e402ddc163760ba69d96c0dd5864a23abdb;hpb=2532fb2df83ee1ddd9ff3e8b381d3788eaa15b69;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_WidgetOptionalBox.cpp b/src/ModuleBase/ModuleBase_WidgetOptionalBox.cpp old mode 100755 new mode 100644 index 4a1f7e402..edfd91b3f --- a/src/ModuleBase/ModuleBase_WidgetOptionalBox.cpp +++ b/src/ModuleBase/ModuleBase_WidgetOptionalBox.cpp @@ -1,4 +1,4 @@ -// Copyright (C) 2014-2017 CEA/DEN, EDF R&D +// Copyright (C) 2014-2019 CEA/DEN, EDF R&D // // This library is free software; you can redistribute it and/or // modify it under the terms of the GNU Lesser General Public @@ -12,13 +12,14 @@ // // You should have received a copy of the GNU Lesser General Public // License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // #include #include +#include #include #include @@ -41,11 +42,19 @@ ModuleBase_WidgetOptionalBox::ModuleBase_WidgetOptionalBox(QWidget* theParent, myCheckBoxLayout(0), myCheckBoxWidget(0), myGroupBox(0), - myGroupBoxLayout(0) + myGroupBoxLayout(0), + myCheckGroup(0), + myCheckGroupLayout(0), + myCheckContent(0), + myCheckGroupBtn(0), + myEnableOnCheck(true) { myToolTip = theData->widgetTooltip(); myGroupTitle = theData->getProperty(CONTAINER_PAGE_NAME); + myHaveFrame = theData->getBooleanAttribute("has_frame", true); + myEnableOnCheck = theData->getBooleanAttribute("enable_on_check", true); + bool isChecked = theData->getBooleanAttribute(ATTR_DEFAULT, false); setDefaultValue(isChecked ? "true" : "false"); @@ -59,14 +68,19 @@ ModuleBase_WidgetOptionalBox::~ModuleBase_WidgetOptionalBox() QWidget* ModuleBase_WidgetOptionalBox::pageWidget() { - return myOptionType == GroupBox ? myGroupBox : (QWidget*)myCheckBoxFrame; + return myOptionType == GroupBox ? (myGroupBox? myGroupBox : myCheckGroup) : + (QWidget*)myCheckBoxFrame; } QList ModuleBase_WidgetOptionalBox::getControls() const { QList aControls; - if (myOptionType == GroupBox) - aControls.append(myGroupBox); + if (myOptionType == GroupBox) { + if (myGroupBox) + aControls.append(myGroupBox); + else + aControls.append(myCheckGroup); + } else aControls.append(myCheckBoxFrame); @@ -93,7 +107,7 @@ void ModuleBase_WidgetOptionalBox::placeModelWidget(ModuleBase_ModelWidget* theW setOptionType(CheckBox); myCheckBoxWidget = theWidget; /// check box frame becomes filled - myCheckBoxLayout->addWidget(theWidget); + myCheckBoxLayout->addWidget(theWidget, 1); } else { createControl(GroupBox); @@ -128,10 +142,15 @@ void ModuleBase_WidgetOptionalBox::placeWidget(QWidget* theWidget) #endif return; } - const int kCol = 0; - const int kRow = myGroupBoxLayout->count(); - myGroupBoxLayout->addWidget(theWidget, kRow, kCol); - myGroupBoxLayout->setRowStretch(kRow, 0); + if (myGroupBoxLayout) { + const int kCol = 0; + const int kRow = myGroupBoxLayout->count(); + myGroupBoxLayout->addWidget(theWidget, kRow, kCol); + myGroupBoxLayout->setRowStretch(kRow, 0); + } + else { + myCheckGroupLayout->addWidget(theWidget); + } } QLayout* ModuleBase_WidgetOptionalBox::pageLayout() @@ -143,20 +162,38 @@ void ModuleBase_WidgetOptionalBox::createControl(const OptionType& theType) { if (theType == GroupBox && !myGroupBox) { // group box: more than one model widget is inside - myGroupBox = new QGroupBox(this); - myGroupBox->setTitle(translate(myGroupTitle)); - myGroupBox->setVisible(false); - myGroupBox->setCheckable(true); - myGroupBox->setChecked(getDefaultValue() == "true"); - myGroupBox->setToolTip(translate(myToolTip)); - - myGroupBoxLayout = new QGridLayout(myGroupBox); - ModuleBase_Tools::zeroMargins(myGroupBoxLayout); - myGroupBox->setLayout(myGroupBoxLayout); - - // default vertical size policy is preferred - myMainLayout->addWidget(myGroupBox); - connect(myGroupBox, SIGNAL(clicked(bool)), this, SLOT(onPageClicked())); + if (myHaveFrame) { + myGroupBox = new QGroupBox(this); + myGroupBox->setTitle(translate(myGroupTitle)); + myGroupBox->setVisible(false); + myGroupBox->setCheckable(true); + myGroupBox->setChecked(getDefaultValue() == "true"); + myGroupBox->setToolTip(translate(myToolTip)); + + myGroupBoxLayout = new QGridLayout(myGroupBox); + ModuleBase_Tools::zeroMargins(myGroupBoxLayout); + myGroupBox->setLayout(myGroupBoxLayout); + + // default vertical size policy is preferred + myMainLayout->addWidget(myGroupBox); + connect(myGroupBox, SIGNAL(clicked(bool)), this, SLOT(onPageClicked())); + } + else { + myCheckGroup = new QWidget(this); + QVBoxLayout* aLayout = new QVBoxLayout(myCheckGroup); + ModuleBase_Tools::zeroMargins(aLayout); + + myCheckGroupBtn = new QCheckBox(translate(myGroupTitle), myCheckGroup); + aLayout->addWidget(myCheckGroupBtn); + + myCheckContent = new QWidget(myCheckGroup); + myCheckGroupLayout = new QVBoxLayout(myCheckContent); + ModuleBase_Tools::zeroMargins(myCheckGroupLayout); + aLayout->addWidget(myCheckContent); + + myMainLayout->addWidget(myCheckGroup); + connect(myCheckGroupBtn, SIGNAL(toggled(bool)), this, SLOT(onPageClicked())); + } } else if (theType == CheckBox && !myCheckBoxFrame) { myCheckBoxFrame = new QFrame(this); @@ -176,7 +213,12 @@ bool ModuleBase_WidgetOptionalBox::storeValueCustom() { DataPtr aData = myFeature->data(); AttributeStringPtr aStringAttr = aData->string(attributeID()); - aStringAttr->setValue(getCurrentValue() ? attributeID() : ""); + if (aStringAttr.get()) + aStringAttr->setValue(getCurrentValue() ? attributeID() : ""); + else { + AttributeBooleanPtr aBoolAtr = aData->boolean(attributeID()); + aBoolAtr->setValue(getCurrentValue()); + } updateObject(myFeature); @@ -187,8 +229,12 @@ bool ModuleBase_WidgetOptionalBox::restoreValueCustom() { DataPtr aData = myFeature->data(); AttributeStringPtr aStringAttr = aData->string(attributeID()); - setCurrentValue(!aStringAttr->value().empty()); - + if (aStringAttr.get()) + setCurrentValue(!aStringAttr->value().empty()); + else { + AttributeBooleanPtr aBoolAtr = aData->boolean(attributeID()); + setCurrentValue(aBoolAtr->value()); + } return true; } @@ -202,6 +248,8 @@ void ModuleBase_WidgetOptionalBox::setOptionType( myCheckBoxFrame->setVisible(!isGroupBox); if (myGroupBox) myGroupBox->setVisible(isGroupBox); + else if (myCheckContent) + myCheckGroup->setVisible(isGroupBox); } bool ModuleBase_WidgetOptionalBox::isCheckBoxFilled() const @@ -212,16 +260,24 @@ bool ModuleBase_WidgetOptionalBox::isCheckBoxFilled() const bool ModuleBase_WidgetOptionalBox::getCurrentValue() const { bool isGroupBox = myOptionType == GroupBox; - return isGroupBox ? myGroupBox->isChecked() : myCheckBox->isChecked(); + return isGroupBox ? (myGroupBox? myGroupBox->isChecked() : myCheckGroupBtn->isChecked()) : + myCheckBox->isChecked(); } void ModuleBase_WidgetOptionalBox::setCurrentValue(const bool& theValue) { bool isGroupBox = myOptionType == GroupBox; if (isGroupBox) { - bool isBlocked = myGroupBox->blockSignals(true); - myGroupBox->setChecked(theValue); - myGroupBox->blockSignals(isBlocked); + if (myGroupBox) { + bool isBlocked = myGroupBox->blockSignals(true); + myGroupBox->setChecked(theValue); + myGroupBox->blockSignals(isBlocked); + } + else { + bool isBlocked = myCheckGroupBtn->blockSignals(true); + myCheckGroupBtn->setChecked(theValue); + myCheckGroupBtn->blockSignals(isBlocked); + } } else { bool isBlocked = myCheckBox->blockSignals(true); @@ -234,18 +290,33 @@ void ModuleBase_WidgetOptionalBox::setCurrentValue(const bool& theValue) void ModuleBase_WidgetOptionalBox::updateControlsVisibility() { if (myOptionType == GroupBox) { - bool aChecked = myGroupBox->isChecked(); + bool aChecked = toEnableWidgets(); ModuleBase_Tools::adjustMargins(myGroupBoxLayout); - int aNbSubControls = myGroupBoxLayout->count(); + QLayout* aLayout = myGroupBoxLayout ? myGroupBoxLayout : (QLayout*)myCheckGroupLayout; + + int aNbSubControls = aLayout->count(); for (int i = 0; i < aNbSubControls; i++) { - QWidget* aWidget = myGroupBoxLayout->itemAt(i)->widget(); + QWidget* aWidget = aLayout->itemAt(i)->widget(); if (aWidget) aWidget->setEnabled(aChecked); } } else { - bool aChecked = myCheckBox->isChecked(); - myCheckBoxWidget->setEnabled(aChecked); + myCheckBoxWidget->setEnabled(toEnableWidgets()); } } + +bool ModuleBase_WidgetOptionalBox::toEnableWidgets() const +{ + bool aChecked; + if (myOptionType == GroupBox) + aChecked = myGroupBox ? myGroupBox->isChecked() : myCheckGroupBtn->isChecked(); + else + aChecked = myCheckBox->isChecked(); + + if (myEnableOnCheck) + return aChecked; + else + return !aChecked; +}