]> Creatis software - clitk.git/blob - vv/vvSaveState.cxx
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
[clitk.git] / vv / vvSaveState.cxx
1 #include "vvSaveState.h"
2 #include "vvMainWindow.h"
3
4 #include <QDir>
5 #include <QFile>
6 #include <QTreeWidget>
7 #include <QTreeWidgetItem>
8 #include <QXmlStreamWriter>
9
10 #include <cassert>
11 #include <string>
12
13 vvSaveState::vvSaveState() : m_XmlWriter(new QXmlStreamWriter), m_File(new QFile)
14 {
15 }
16
17 vvSaveState::~vvSaveState()
18 {
19 }
20
21 void vvSaveState::Run(vvMainWindow* vvWindow, const std::string& file)
22 {
23   assert(vvWindow);
24
25   m_File->setFileName(file.c_str());
26   m_File->remove();
27   m_File->open(QIODevice::Text | QIODevice::ReadWrite);
28   
29   m_Window = vvWindow;
30
31   m_XmlWriter->setDevice(m_File.get());
32   m_XmlWriter->setAutoFormatting(true);
33   m_XmlWriter->setAutoFormattingIndent(2);
34   m_XmlWriter->writeStartDocument();
35   m_XmlWriter->writeStartElement("VVState");
36   SaveGlobals();
37   SaveGUI();
38   SaveTree();
39   m_XmlWriter->writeEndDocument();
40   m_XmlWriter->writeEndElement();
41 }
42
43 void vvSaveState::SaveGlobals()
44 {
45   m_XmlWriter->writeStartElement("Globals");
46   m_XmlWriter->writeEndElement();
47 }
48
49 void vvSaveState::SaveTree()
50 {
51   QTreeWidget* tree = m_Window->GetTree();
52   QTreeWidgetItem* item;
53   
54   m_XmlWriter->writeStartElement("Images");
55   for (int i = 0; i < tree->topLevelItemCount(); i++) {
56     item = tree->topLevelItem(i);
57     SaveImage(item, i);
58   }
59   m_XmlWriter->writeEndElement();
60 }
61
62 void vvSaveState::SaveImage(const QTreeWidgetItem* item, int index)
63 {
64   const vvSlicerManager * slicerManager = m_Window->GetSlicerManagers()[index];
65   m_XmlWriter->writeStartElement("Image");
66
67   std::ostringstream indexStr;
68   indexStr.str("");
69   indexStr << index;
70   m_XmlWriter->writeAttribute("Index", indexStr.str().c_str());
71
72   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
73   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
74
75   QTreeWidgetItem* item_child;
76   std::string role;
77   for (int i = 0; i < item->childCount(); i++) {
78     item_child = item->child(i);
79     role = item_child->data(1,Qt::UserRole).toString().toStdString();
80     if (role == "fusion")
81       SaveFusion(item_child, slicerManager);
82     else if (role == "overlay")
83       SaveOverlay(item_child, slicerManager);
84     else if (role == "vector")
85       SaveVector(item_child);
86   }
87
88   m_XmlWriter->writeEndElement();
89 }
90
91 void vvSaveState::SaveFusion(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
92 {
93   m_XmlWriter->writeStartElement("Fusion");
94   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
95   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
96   m_XmlWriter->writeTextElement("FusionOpacity", QString::number(vvManager->GetFusionOpacity()));
97   m_XmlWriter->writeTextElement("FusionThresholdOpacity", QString::number(vvManager->GetFusionThresholdOpacity()));
98   m_XmlWriter->writeTextElement("FusionColorMap", QString::number(vvManager->GetFusionColorMap()));
99   m_XmlWriter->writeTextElement("FusionWindow", QString::number(vvManager->GetFusionWindow()));
100   m_XmlWriter->writeTextElement("FusionLevel", QString::number(vvManager->GetFusionLevel()));
101   m_XmlWriter->writeEndElement();
102 }
103
104 void vvSaveState::SaveOverlay(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
105 {
106   m_XmlWriter->writeStartElement("Overlay");
107   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
108   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
109   m_XmlWriter->writeTextElement("OverlayColorWindow", QString::number(vvManager->GetOverlayColorWindow()));
110   m_XmlWriter->writeTextElement("OverlayColorLevel", QString::number(vvManager->GetOverlayColorLevel()));
111   m_XmlWriter->writeTextElement("LinkOverlayWindowLevel", QString::number(vvManager->GetLinkOverlayWindowLevel()));
112   m_XmlWriter->writeTextElement("OverlayColor", QString::number(vvManager->GetOverlayColor()));
113   m_XmlWriter->writeEndElement();
114 }
115
116 void vvSaveState::SaveVector(const QTreeWidgetItem* item)
117 {
118   m_XmlWriter->writeStartElement("Vector");
119   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
120   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
121   m_XmlWriter->writeEndElement();
122 }
123
124 void vvSaveState::SaveGUI()
125 {
126   m_XmlWriter->writeStartElement("GUI");
127   m_XmlWriter->writeEndElement();
128 }
129