Salome HOME
Copyright update 2022
[modules/yacs.git] / src / genericgui / SceneElementaryNodeItem.cxx
index 40d4b4d339f1672db1b019c909eb0db04e4cb317..848fda6fd1e087d6fc60b5cb4e7814ea82c15ae9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2014  CEA/DEN, EDF R&D
+// Copyright (C) 2006-2022  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
@@ -187,10 +187,12 @@ void SceneElementaryNodeItem::popupMenu(QWidget *caller, const QPoint &globalPos
   m.popupMenu(caller, globalPos);
 }
 
-void SceneElementaryNodeItem::reorganizeShrinkExpand()
+void SceneElementaryNodeItem::reorganizeShrinkExpand(ShrinkMode theShrinkMode)
 {
   DEBTRACE("SceneElementaryNodeItem::reorganizeShrinkExpand " << isExpanded() << " "  << _label.toStdString());
-  shrinkExpandRecursive(isExpanded(), true);
+  if (theShrinkMode != CurrentNode)
+    return;
+  shrinkExpandRecursive(!isExpanded(), true, theShrinkMode);
   if (Scene::_autoComputeLinks)
     {
       SubjectProc* subproc = QtGuiContext::getQtCurrent()->getSubjectProc();
@@ -200,30 +202,48 @@ void SceneElementaryNodeItem::reorganizeShrinkExpand()
     }
 }
 
-void SceneElementaryNodeItem::shrinkExpandRecursive(bool isExpanding, bool fromHere)
+void SceneElementaryNodeItem::shrinkExpandRecursive(bool toExpand, bool fromHere, ShrinkMode theShrinkMode)
 {
-  DEBTRACE("SceneElementaryNodeItem::shrinkExpandRecursive " << isExpanding << " " << fromHere << " "  << isExpanded() << " " << _label.toStdString());
-  if (isExpanding)
-    {
+  DEBTRACE("SceneElementaryNodeItem::shrinkExpandRecursive " << toExpand << " " << fromHere << " "  << isExpanded() << " " << _label.toStdString());
+  
+  bool toChangeShrinkState = false;
+  switch (theShrinkMode) {
+  case CurrentNode:
+    if (fromHere)
+      toChangeShrinkState = true;
+    break;
+  case ChildrenNodes:
+    if (fromHere)
+      toChangeShrinkState = true;
+    break;
+  case ElementaryNodes:
+    toChangeShrinkState = true;
+    break;
+  }
+  if (toChangeShrinkState && toExpand != isExpanded())
+    setExpanded(toExpand);
+
+  if (toExpand) {
+    if (toChangeShrinkState) {
       _ancestorShrinked = false;
+      _shownState = expandShown;
+    } else {
       if (isExpanded())
         _shownState = expandShown;
       else
         _shownState = shrinkShown;
     }
-  else
-    {
-      if (fromHere)
-        _shownState = shrinkShown;
-      else
-        {
-          _ancestorShrinked = true;
-          _shownState = shrinkHidden;
-        }
+  } else {
+    if (fromHere || theShrinkMode==ElementaryNodes) {
+      _shownState = shrinkShown;
+    } else {
+      _ancestorShrinked = true;
+      _shownState = shrinkHidden;
     }
+  }
 
   if (_shownState == shrinkHidden) // shrink of ancestor
-    setPos(0 ,0);
+    setPos(00);
   else
     setPos(_expandedPos);