Salome HOME
Merge remote-tracking branch 'remotes/origin/master' into CEA_2019
[modules/shaper.git] / src / XGUI / XGUI_PropertyPanel.cpp
old mode 100755 (executable)
new mode 100644 (file)
index bc172e5..4138cc2
@@ -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
 //
 // 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<mailto:webmaster.salome@opencascade.com>
+// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 //
 
 #include <XGUI_ActionsMgr.h>
@@ -36,6 +35,7 @@
 #include <ModuleBase_WidgetFactory.h>
 #include <ModuleBase_OperationDescription.h>
 #include <ModuleBase_Events.h>
+#include <ModuleBase_IModule.h>
 #include <ModuleBase_IWorkshop.h>
 
 #include <Events_Loop.h>
@@ -66,6 +66,7 @@ XGUI_PropertyPanel::XGUI_PropertyPanel(QWidget* theParent, XGUI_OperationMgr* th
     : ModuleBase_IPropertyPanel(theParent),
     myActiveWidget(NULL),
     myPreselectionWidget(NULL),
+    myInternalActiveWidget(NULL),
     myPanelPage(NULL),
     myOperationMgr(theMgr)
 {
@@ -154,8 +155,10 @@ void XGUI_PropertyPanel::cleanContent()
   myPanelPage->clearPage();
   myActiveWidget = NULL;
   emit propertyPanelDeactivated();
-  myOperationMgr->workshop()->selectionActivate()->updateSelectionModes();
-  myOperationMgr->workshop()->selectionActivate()->updateSelectionFilters();
+  // VSV: It seems that this code is not necessary:
+  //      it is called on propertyPanelDeactivated() event
+  //myOperationMgr->workshop()->selectionActivate()->updateSelectionModes();
+  //myOperationMgr->workshop()->selectionActivate()->updateSelectionFilters();
 #ifdef DEBUG_ACTIVE_WIDGET
   std::cout << "myActiveWidget = NULL" << std::endl;
 #endif
@@ -204,7 +207,7 @@ void XGUI_PropertyPanel::updateContentWidget(FeaturePtr theFeature)
     eachWidget->restoreValue();
   }
   // the repaint is used here to immediately react in GUI to the values change.
-  repaint();
+  update();
 }
 
 void XGUI_PropertyPanel::createContentPanel(FeaturePtr theFeature)
@@ -224,9 +227,28 @@ void XGUI_PropertyPanel::createContentPanel(FeaturePtr theFeature)
     /// Apply button should be update if the feature was modified by the panel
     myOperationMgr->onValidateOperation();
   }
-  std::shared_ptr<Config_FeatureMessage> aFeatureInfo =
-    myOperationMgr->workshop()->featureInfo(theFeature->getKind().c_str());
-  findButton(PROP_PANEL_OK_PLUS)->setVisible(aFeatureInfo->isApplyContinue());
+  updateApplyPlusButton(theFeature);
+}
+
+void XGUI_PropertyPanel::updateApplyPlusButton(FeaturePtr theFeature)
+{
+  if (theFeature.get()) {
+    std::shared_ptr<Config_FeatureMessage> aFeatureInfo =
+      myOperationMgr->workshop()->featureInfo(theFeature->getKind().c_str());
+    if (aFeatureInfo.get()) {
+      findButton(PROP_PANEL_OK_PLUS)->setVisible(aFeatureInfo->isApplyContinue());
+      return;
+    }
+  }
+  findButton(PROP_PANEL_OK_PLUS)->setVisible(false);
+}
+
+ModuleBase_ModelWidget* XGUI_PropertyPanel::activeWidget(const bool isUseCustomWidget) const
+{
+  if (isUseCustomWidget && myInternalActiveWidget)
+    return myInternalActiveWidget;
+
+  return myActiveWidget;
 }
 
 void XGUI_PropertyPanel::activateNextWidget(ModuleBase_ModelWidget* theWidget)
@@ -273,7 +295,6 @@ void XGUI_PropertyPanel::activateNextWidget(ModuleBase_ModelWidget* theWidget,
 
   QList<ModuleBase_ModelWidget*>::const_iterator anIt = myWidgets.begin(), aLast = myWidgets.end();
   bool isFoundWidget = false;
-  ModuleBase_Tools::activateWindow(this, "XGUI_PropertyPanel::activateNextWidget()");
   for (; anIt != aLast; anIt++) {
     ModuleBase_ModelWidget* aCurrentWidget = *anIt;
     if (isFoundWidget || !theWidget) {
@@ -391,8 +412,8 @@ bool XGUI_PropertyPanel::focusNextPrevChild(bool theIsNext)
 #endif
   ModuleBase_ModelWidget* aFocusMWidget = ModuleBase_ModelWidget::findModelWidget(this,
                                                                          aFocusWidget);
-  if (aFocusMWidget)
-    aFocusMWidget->setHighlighted(false);
+  //if (aFocusMWidget)
+  //  aFocusMWidget->setHighlighted(false);
 
   QWidget* aNewFocusWidget = 0;
   if (aFocusWidget) {
@@ -448,9 +469,13 @@ bool XGUI_PropertyPanel::focusNextPrevChild(bool theIsNext)
 
     ModuleBase_ModelWidget* aNewFocusMWidget = ModuleBase_ModelWidget::findModelWidget(this,
                                                                               aNewFocusWidget);
-    if (aNewFocusMWidget)
+    if (aNewFocusMWidget) {
+      if (aFocusMWidget) {
+        aFocusMWidget->setHighlighted(false);
+      }
       aNewFocusMWidget->emitFocusInWidget();
-    isChangedFocus = true;
+      isChangedFocus = true;
+    }
   }
   return isChangedFocus;
 }
@@ -564,10 +589,6 @@ void XGUI_PropertyPanel::setupActions(XGUI_ActionsMgr* theMgr)
     QAction* anAct = theMgr->operationStateAction(aActionIds.at(i));
     aBtn->setDefaultAction(anAct);
   }
-  QToolButton* aBtn = findButton(PROP_PANEL_OK);
-  connect(aBtn->defaultAction(), SIGNAL(triggered(bool)), this, SLOT(onAcceptData()));
-  aBtn = findButton(PROP_PANEL_OK_PLUS);
-  connect(aBtn->defaultAction(), SIGNAL(triggered(bool)), this, SLOT(onAcceptData()));
 }
 
 void XGUI_PropertyPanel::onAcceptData()
@@ -577,6 +598,25 @@ void XGUI_PropertyPanel::onAcceptData()
   }
 }
 
+void XGUI_PropertyPanel::setInternalActiveWidget(ModuleBase_ModelWidget* theWidget)
+{
+  if (theWidget)
+  {
+    myInternalActiveWidget = theWidget;
+    emit propertyPanelActivated();
+  }
+  else
+  {
+    if (myInternalActiveWidget)
+    {
+      delete myInternalActiveWidget;
+      myInternalActiveWidget = 0;
+    }
+    emit propertyPanelDeactivated();
+  }
+  myOperationMgr->workshop()->selectionActivate()->updateSelectionModes();
+  myOperationMgr->workshop()->selectionActivate()->updateSelectionFilters();
+}
 
 ModuleBase_ModelWidget* XGUI_PropertyPanel::preselectionWidget() const
 {