X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FModuleBase%2FModuleBase_IPropertyPanel.cpp;h=a3ba9012a1afad3bd0b127ed05c442d55de630fb;hb=50a8df0c6a66da8067b16155e5ae39f8f26a7ebc;hp=0a87a74c838943d7ac01623d9f3a38c3e125d149;hpb=cbde248859fb0072f6012907391ea90cfc254574;p=modules%2Fshaper.git diff --git a/src/ModuleBase/ModuleBase_IPropertyPanel.cpp b/src/ModuleBase/ModuleBase_IPropertyPanel.cpp index 0a87a74c8..a3ba9012a 100644 --- a/src/ModuleBase/ModuleBase_IPropertyPanel.cpp +++ b/src/ModuleBase/ModuleBase_IPropertyPanel.cpp @@ -1,18 +1,50 @@ -// Copyright (C) 2014-20xx CEA/DEN, EDF R&D - -/* - * ModuleBase_IPropertyPanel.cpp - * - * Created on: Oct 01, 2014 - * Author: vsv - */ +// 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 +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. +// +// 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 +// +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// #include "ModuleBase_IPropertyPanel.h" #include "ModuleBase_ModelWidget.h" +#include "ModuleBase_ToolBox.h" + +#include +#include -ModuleBase_IPropertyPanel::ModuleBase_IPropertyPanel(QWidget* theParent) : QDockWidget(theParent), myIsEditing(false) +ModuleBase_IPropertyPanel::ModuleBase_IPropertyPanel(QWidget* theParent) + : QDockWidget(theParent), myIsEditing(false) { +} +ModuleBase_ModelWidget* ModuleBase_IPropertyPanel::modelWidget( + const std::string& theAttributeId) const +{ + ModuleBase_ModelWidget* aWidget = 0; + QList aWidgets = modelWidgets(); + ModelAPI_ValidatorsFactory* aValidators = ModelAPI_Session::get()->validators(); + for (QList::const_iterator anIt = aWidgets.begin(); + anIt != aWidgets.end() && !aWidget; anIt++) { + ModuleBase_ModelWidget* aCurrentWidget = *anIt; + if (aCurrentWidget->attributeID() == theAttributeId && + aCurrentWidget->canAcceptFocus() && + aValidators->isCase(aCurrentWidget->feature(), aCurrentWidget->attributeID())) + aWidget = aCurrentWidget; + } + + return aWidget; } ModuleBase_ModelWidget* ModuleBase_IPropertyPanel::findFirstAcceptingValueWidget() @@ -21,16 +53,39 @@ ModuleBase_ModelWidget* ModuleBase_IPropertyPanel::findFirstAcceptingValueWidget } ModuleBase_ModelWidget* ModuleBase_IPropertyPanel::findFirstAcceptingValueWidget( - const QList& theWidgets) + const QList& theWidgets) { ModuleBase_ModelWidget* aFirstWidget = 0; + ModelAPI_ValidatorsFactory* aValidators = ModelAPI_Session::get()->validators(); + ModuleBase_ModelWidget* aWgt; QList::const_iterator aWIt; + bool isOffToolBox = false; for (aWIt = theWidgets.begin(); aWIt != theWidgets.end() && !aFirstWidget; ++aWIt) { aWgt = (*aWIt); - if (aWgt->canSetValue()) - aFirstWidget = aWgt; + if (!aValidators->isCase(aWgt->feature(), aWgt->attributeID())) + continue; // this attribute is not participated in the current case + + if (!aWgt->canAcceptFocus()) + continue; + + /// workaround for the same attributes used in different stacked widgets(attribute types) + if (ModuleBase_ToolBox::isOffToolBoxParent(aWgt)) + continue; + + aFirstWidget = aWgt; } return aFirstWidget; } + +bool ModuleBase_IPropertyPanel::isModified() const +{ + bool isModified = false; + QList aWidgets = modelWidgets(); + foreach(ModuleBase_ModelWidget* aWgt, aWidgets) { + bool aRes = aWgt->isModified(); + isModified |= aRes; + } + return isModified; +}