-// Copyright (C) 2014-2019 CEA/DEN, EDF R&D
+// Copyright (C) 2014-2020 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
#include <QGridLayout>
#include <QWidget>
#include <QAction>
+#include <QScrollArea>
#ifdef _DEBUG
#include <iostream>
XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent, XGUI_OperationMgr* theMgr)
: ModuleBase_IPropertyPanel(theParent),
+ myPanelPage(NULL),
myActiveWidget(NULL),
myPreselectionWidget(NULL),
myInternalActiveWidget(NULL),
- myPanelPage(NULL),
myOperationMgr(theMgr)
{
setWindowTitle(tr("Property Panel"));
- QAction* aViewAct = toggleViewAction();
+ MAYBE_UNUSED QAction* aViewAct = toggleViewAction();
setObjectName(PROP_PANEL);
setStyleSheet("::title { position: relative; padding-left: 5px; text-align: left center }");
QStringList aBtnNames;
aBtnNames << QString(PROP_PANEL_HELP)
- << QString(PROP_PANEL_OK)
- << QString(PROP_PANEL_OK_PLUS)
- << QString(PROP_PANEL_CANCEL);
+ << QString(PROP_PANEL_OK)
+ << QString(PROP_PANEL_OK_PLUS)
+ << QString(PROP_PANEL_CANCEL);
foreach(QString eachBtnName, aBtnNames) {
QToolButton* aBtn = new QToolButton(aFrm);
aBtn->setObjectName(eachBtnName);
}
}
+
const QList<ModuleBase_ModelWidget*>& XGUI_PropertyPanel::modelWidgets() const
{
return myWidgets;
if (theFeature->isAction() || !theFeature->data())
return;
+ ModuleBase_Operation* anOperation = myOperationMgr->currentOperation();
if (myWidgets.empty()) {
- ModuleBase_Operation* anOperation = myOperationMgr->currentOperation();
QString aXmlRepr = anOperation->getDescription()->xmlRepresentation();
ModuleBase_WidgetFactory aFactory(aXmlRepr.toStdString(), myOperationMgr->workshop());
- aFactory.createPanel(contentWidget(), theFeature);
- /// Apply button should be update if the feature was modified by the panel
+ ModuleBase_PageBase* aPage = contentWidget();
+ aFactory.createPanel(aPage, theFeature);
+ // update model widgets if exist
+ setModelWidgets(aPage->modelWidgets());
+ // Apply button should be update if the feature was modified by the panel
myOperationMgr->onValidateOperation();
}
- updateApplyPlusButton(theFeature);
+ ModuleBase_OperationFeature* aFeatureOp =
+ dynamic_cast<ModuleBase_OperationFeature*>(anOperation);
+ if (aFeatureOp && (!aFeatureOp->isEditOperation()))
+ updateApplyPlusButton(theFeature);
+ else
+ findButton(PROP_PANEL_OK_PLUS)->setVisible(false);
}
void XGUI_PropertyPanel::updateApplyPlusButton(FeaturePtr theFeature)
}
}
else if (anItem->layout()) {
- QLayout* aLayout = anItem->layout();
- for (int i = 0, aCount = aLayout->count(); i < aCount; i++) {
- QLayoutItem* anItem = aLayout->itemAt(i);
- QWidget* aWidget = anItem ? anItem->widget() : 0;
- if (aWidget) {
- if (aWidget->isVisible()) {
- if (aWidget->focusPolicy() != Qt::NoFocus)
- theWidgets.append(aWidget);
- findDirectChildren(aWidget, theWidgets, false);
+ QLayout* anItemLayout = anItem->layout();
+ for (int it = 0, cnt = anItemLayout->count(); it < cnt; it++) {
+ QLayoutItem* aCurItem = anItemLayout->itemAt(it);
+ QWidget* aCurWidget = aCurItem ? aCurItem->widget() : 0;
+ if (aCurWidget) {
+ if (aCurWidget->isVisible()) {
+ if (aCurWidget->focusPolicy() != Qt::NoFocus)
+ theWidgets.append(aCurWidget);
+ findDirectChildren(aCurWidget, theWidgets, false);
}
}
else {
ModuleBase_ModelWidget* aNewFocusMWidget = ModuleBase_ModelWidget::findModelWidget(this,
aNewFocusWidget);
if (aNewFocusMWidget) {
- if (aFocusMWidget) {
+ if (aFocusMWidget && (aFocusMWidget != aNewFocusMWidget)) {
aFocusMWidget->setHighlighted(false);
}
aNewFocusMWidget->emitFocusInWidget();