]> Creatis software - clitk.git/blob - vv/vvSaveState.cxx
Debug RTStruct conversion with empty struc
[clitk.git] / vv / vvSaveState.cxx
1 #include "vvSaveState.h"
2 #include "vvMainWindow.h"
3 #include "vvToolCreatorBase.h"
4 #include "vvToolBaseBase.h"
5
6 #include <QDir>
7 #include <QFile>
8 #include <QTreeWidget>
9 #include <QTreeWidgetItem>
10 #include <QXmlStreamWriter>
11
12 #include <cassert>
13 #include <string>
14
15 //------------------------------------------------------------------------------
16 vvSaveState::vvSaveState() : m_XmlWriter(new QXmlStreamWriter), m_File(new QFile)
17 {
18 }
19 //------------------------------------------------------------------------------
20
21 //------------------------------------------------------------------------------
22 vvSaveState::~vvSaveState()
23 {
24 }
25 //------------------------------------------------------------------------------
26
27
28 //------------------------------------------------------------------------------
29 void vvSaveState::Run(vvMainWindow* vvWindow, const std::string& file)
30 {
31   assert(vvWindow);
32
33   m_File->setFileName(file.c_str());
34   m_File->remove();
35   m_File->open(QIODevice::Text | QIODevice::ReadWrite);
36   
37   m_Window = vvWindow;
38
39   m_XmlWriter->setDevice(m_File.get());
40   m_XmlWriter->setAutoFormatting(true);
41   m_XmlWriter->setAutoFormattingIndent(2);
42   m_XmlWriter->writeStartDocument();
43   m_XmlWriter->writeStartElement("VVState");
44   SaveGlobals();
45   SaveGUI();
46   SaveTree();
47   SaveTools();
48   m_XmlWriter->writeEndDocument();
49   m_XmlWriter->writeEndElement();
50 }
51 //------------------------------------------------------------------------------
52
53
54 //------------------------------------------------------------------------------
55 void vvSaveState::SaveGlobals()
56 {
57   m_XmlWriter->writeStartElement("Globals");
58   m_XmlWriter->writeEndElement();
59 }
60 //------------------------------------------------------------------------------
61
62
63 //------------------------------------------------------------------------------
64 void vvSaveState::SaveTree()
65 {
66   QTreeWidget* tree = m_Window->GetTree();
67   QTreeWidgetItem* item;
68   
69   m_XmlWriter->writeStartElement("Images");
70   for (int i = 0; i < tree->topLevelItemCount(); i++) {
71     item = tree->topLevelItem(i);
72     SaveImage(item, i);
73   }
74   m_XmlWriter->writeEndElement();
75
76   m_XmlWriter->writeStartElement("Links");
77   for (int i = 0; i < tree->topLevelItemCount(); i++) {
78     const vvSlicerManager * slicerManager = m_Window->GetSlicerManagers()[i];
79     SaveLink(slicerManager);
80   }
81   m_XmlWriter->writeEndElement();
82 }
83 //------------------------------------------------------------------------------
84
85
86 //------------------------------------------------------------------------------
87 void vvSaveState::SaveImage(const QTreeWidgetItem* item, int index)
88 {
89   const vvSlicerManager * slicerManager = m_Window->GetSlicerManagers()[index];
90   m_XmlWriter->writeStartElement("Image");
91
92   std::ostringstream valueStr;
93   valueStr.str("");
94   valueStr << index;
95   m_XmlWriter->writeAttribute("Index", valueStr.str().c_str());
96
97   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
98   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
99   int preset = slicerManager->GetPreset();
100   m_XmlWriter->writeTextElement("Preset", QString::number(preset));
101   if (preset == 6) {
102     m_XmlWriter->writeTextElement("Window", QString::number(slicerManager->GetColorWindow()));
103     m_XmlWriter->writeTextElement("Level", QString::number(slicerManager->GetColorLevel()));
104   }
105   
106   QTreeWidgetItem* item_child;
107   std::string role;
108   for (int i = 0; i < item->childCount(); i++) {
109     item_child = item->child(i);
110     role = item_child->data(1,Qt::UserRole).toString().toStdString();
111     if (role == "fusion")
112       SaveFusion(item_child, slicerManager);
113     else if (role == "overlay")
114       SaveOverlay(item_child, slicerManager);
115     else if (role == "vector")
116       SaveVector(item_child);
117   }
118
119   // End
120   m_XmlWriter->writeEndElement();
121 }
122 //------------------------------------------------------------------------------
123
124
125 //------------------------------------------------------------------------------
126 void vvSaveState::SaveFusion(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
127 {
128   m_XmlWriter->writeStartElement("Fusion");
129   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
130   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
131   m_XmlWriter->writeTextElement("FusionOpacity", QString::number(vvManager->GetFusionOpacity()));
132   m_XmlWriter->writeTextElement("FusionThresholdOpacity", QString::number(vvManager->GetFusionThresholdOpacity()));
133   m_XmlWriter->writeTextElement("FusionColorMap", QString::number(vvManager->GetFusionColorMap()));
134   m_XmlWriter->writeTextElement("FusionWindow", QString::number(vvManager->GetFusionWindow()));
135   m_XmlWriter->writeTextElement("FusionLevel", QString::number(vvManager->GetFusionLevel()));
136   m_XmlWriter->writeEndElement();
137 }
138 //------------------------------------------------------------------------------
139
140
141 //------------------------------------------------------------------------------
142 void vvSaveState::SaveOverlay(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
143 {
144   m_XmlWriter->writeStartElement("Overlay");
145   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
146   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
147   m_XmlWriter->writeTextElement("OverlayColorWindow", QString::number(vvManager->GetOverlayColorWindow()));
148   m_XmlWriter->writeTextElement("OverlayColorLevel", QString::number(vvManager->GetOverlayColorLevel()));
149   m_XmlWriter->writeTextElement("LinkOverlayWindowLevel", QString::number(vvManager->GetLinkOverlayWindowLevel()));
150   m_XmlWriter->writeTextElement("OverlayColor", QString::number(vvManager->GetOverlayColor()));
151   m_XmlWriter->writeEndElement();
152 }
153 //------------------------------------------------------------------------------
154
155
156 //------------------------------------------------------------------------------
157 void vvSaveState::SaveVector(const QTreeWidgetItem* item)
158 {
159   m_XmlWriter->writeStartElement("Vector");
160   std::string filename = item->data(0, Qt::UserRole).toString().toStdString();
161   m_XmlWriter->writeTextElement("FileName", QDir::current().absoluteFilePath(filename.c_str()));
162   m_XmlWriter->writeEndElement();
163 }
164 //------------------------------------------------------------------------------
165
166 //------------------------------------------------------------------------------
167 void vvSaveState::SaveLink(const vvSlicerManager* vvManager)
168 {
169   typedef std::list<std::string> LinkListType;
170   LinkListType links = vvManager->GetLinks();
171   if (!links.empty()) {
172     std::string my_id = vvManager->GetId();
173     m_XmlWriter->writeStartElement("LinkedFrom");
174     m_XmlWriter->writeAttribute("Id", my_id.c_str());
175     LinkListType::iterator i;
176     for (i = links.begin(); i != links.end(); i++) {
177       std::string link_id = *i;
178       m_XmlWriter->writeTextElement("LinkedTo", link_id.c_str());
179     }
180     m_XmlWriter->writeEndElement();
181   }
182 }
183 //------------------------------------------------------------------------------
184
185 //------------------------------------------------------------------------------
186 void vvSaveState::SaveGUI()
187 {
188   m_XmlWriter->writeStartElement("GUI");
189   m_XmlWriter->writeEndElement();
190 }
191 //------------------------------------------------------------------------------
192
193
194 //------------------------------------------------------------------------------
195 void vvSaveState::SaveTools()
196 {
197
198   m_XmlWriter->writeStartElement("Tools");
199   // Check if a tool is open and need to be store
200   std::vector<vvToolCreatorBase *> & v = vvToolManager::GetInstance()->GetListOfTools();
201   for(uint i=0; i<v.size(); i++) {
202     std::vector<vvToolBaseBase*> & t = v[i]->GetListOfTool();
203     for(uint j=0; j<t.size(); j++) {
204       std::string name = v[i]->mToolName.toStdString();
205       m_XmlWriter->writeStartElement(name.c_str());
206       m_XmlWriter->writeTextElement("ToolType_Index", QString::number(i));
207       m_XmlWriter->writeTextElement("Tool_Index", QString::number(j));
208       t[j]->SaveState(m_XmlWriter);
209       m_XmlWriter->writeEndElement();
210     }
211   }
212   m_XmlWriter->writeEndElement();
213 }
214 //------------------------------------------------------------------------------