Salome HOME
mergefrom branch BR_V511_PR tag mergeto_trunk_03feb09
[modules/yacs.git] / src / genericgui / VisitorSaveGuiSchema.cxx
diff --git a/src/genericgui/VisitorSaveGuiSchema.cxx b/src/genericgui/VisitorSaveGuiSchema.cxx
new file mode 100644 (file)
index 0000000..335b511
--- /dev/null
@@ -0,0 +1,82 @@
+//  Copyright (C) 2006-2008  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.
+//
+//  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 "VisitorSaveGuiSchema.hxx"
+#include "Proc.hxx"
+#include "QtGuiContext.hxx"
+#include "guiObservers.hxx"
+#include "SceneItem.hxx"
+
+#include <cassert>
+
+//#define _DEVDEBUG_
+#include "YacsTrace.hxx"
+
+using namespace std;
+using namespace YACS::HMI;
+using namespace YACS::ENGINE;
+
+VisitorSaveGuiSchema::VisitorSaveGuiSchema(YACS::ENGINE::Proc* proc)
+  : VisitorSaveSalomeSchema(proc), _proc(proc)
+{
+  DEBTRACE("VisitorSaveGuiSchema::VisitorSaveGuiSchema");
+}
+
+VisitorSaveGuiSchema::~VisitorSaveGuiSchema()
+{
+  DEBTRACE("VisitorSaveGuiSchema::~VisitorSaveGuiSchema");
+}
+
+void VisitorSaveGuiSchema::visitProc()
+{
+  DEBTRACE("VisitorSaveGuiSchema::visitProc");
+  VisitorSaveSalomeSchema::visitProc(_proc);
+  writePresentation();
+}
+
+void VisitorSaveGuiSchema::writePresentation()
+{
+  DEBTRACE("VisitorSaveGuiSchema::writePresentation");
+  set<Node*> nodeSet = getAllNodes(_proc);
+
+  for (set<Node*>::iterator iter = nodeSet.begin(); iter != nodeSet.end(); ++iter)
+  {
+    Node* node = *iter;
+    SubjectNode * snode = QtGuiContext::getQtCurrent()->_mapOfSubjectNode[node];
+    SceneItem* item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[snode];
+    assert(item);
+    writeItem(_proc->getChildName(node), item);
+  }
+
+  SubjectNode * sproc = QtGuiContext::getQtCurrent()->getSubjectProc();
+  SceneItem* item = QtGuiContext::getQtCurrent()->_mapOfSceneItem[sproc];
+  assert(item);
+  writeItem("__ROOT__", item);
+}
+
+ void VisitorSaveGuiSchema::writeItem(std::string name, SceneItem* item)
+{
+  int depth = 1;
+  _out << indent(depth) << "<presentation";
+  _out                  << " name=\""  << name               << "\"";
+  _out                  << " x=\""     << item->x()          << "\"";
+  _out                  << " y=\""     << item->y()          << "\"";
+  _out                  << " width=\"" << item->getWidth()   << "\"";
+  _out                  << " height=\""<< item->getHeight()  << "\"";
+  _out                  << "/>" << endl;
+}