Salome HOME
14ec4befe06571e9f7a043611676e8ea93cbae0c
[modules/yacs.git] / src / genericgui / SceneProcItem.cxx
1 // Copyright (C) 2006-2014  CEA/DEN, EDF R&D
2 //
3 // This library is free software; you can redistribute it and/or
4 // modify it under the terms of the GNU Lesser General Public
5 // License as published by the Free Software Foundation; either
6 // version 2.1 of the License, or (at your option) any later version.
7 //
8 // This library is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 // Lesser General Public License for more details.
12 //
13 // You should have received a copy of the GNU Lesser General Public
14 // License along with this library; if not, write to the Free Software
15 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19
20 #include "SceneProcItem.hxx"
21 #include "Menus.hxx"
22 #include "SceneLinkItem.hxx"
23 #include "QtGuiContext.hxx"
24 #include "Scene.hxx"
25 #include "Resource.hxx"
26
27
28 //#define _DEVDEBUG_
29 #include "YacsTrace.hxx"
30
31 using namespace std;
32 using namespace YACS::ENGINE;
33 using namespace YACS::HMI;
34
35 SceneProcItem::SceneProcItem(QGraphicsScene *scene, SceneItem *parent,
36                              QString label, Subject *subject)
37   : SceneBlocItem(scene, parent, label, subject)
38 {
39   DEBTRACE("SceneProcItem::SceneProcItem " <<label.toStdString());
40 //   _height = 2000;
41 //   _width = 2000;
42 //   setGeometryOptimization(false);
43 }
44
45 SceneProcItem::~SceneProcItem()
46 {
47 }
48
49 void SceneProcItem::popupMenu(QWidget *caller, const QPoint &globalPos)
50 {
51   ProcMenu m;
52   m.popupMenu(caller, globalPos);
53 }
54
55 void SceneProcItem::reorganizeShrinkExpand() {
56   if (_children.size() == 0)
57     return;
58   bool isExpanding = true;
59   DEBTRACE("SceneProcItem::reorganizeShrinkExpand " << _expanded << " " << _label.toStdString());
60   for (list<AbstractSceneItem*>::const_iterator it=_children.begin(); it!=_children.end(); ++it)
61     {
62       SceneItem* item = dynamic_cast<SceneItem*>(*it);
63       SceneNodeItem *sni = dynamic_cast<SceneNodeItem*>(item);
64       if (sni->isExpanded()) {
65           isExpanding = false;
66           break;
67       }
68     }
69   for (list<AbstractSceneItem*>::const_iterator it=_children.begin(); it!=_children.end(); ++it)
70     {
71       SceneItem* item = dynamic_cast<SceneItem*>(*it);
72       SceneNodeItem *sni = dynamic_cast<SceneNodeItem*>(item);
73       if (!isExpanding && sni->isExpanded()) {
74         sni->setExpanded(false);
75         item->shrinkExpandRecursive(false, true);
76         DEBTRACE("------------------------------- Hide " << item->getLabel().toStdString());
77       }
78       if (isExpanding && !sni->isExpanded()) {
79         sni->setExpanded(true);
80         item->shrinkExpandRecursive(true, false);
81         DEBTRACE("------------------------------- Show " << item->getLabel().toStdString());
82       }
83       item->shrinkExpandLink(isExpanding);
84     }
85   _ancestorShrinked = !isExpanding;
86   _width = _expandedWidth;
87   _height = _expandedHeight;
88   _shownState = expandShown;
89   adjustHeader();
90   rebuildLinks();
91 }
92