1 #include "vvSaveState.h"
2 #include "vvMainWindow.h"
3 #include "vvToolCreatorBase.h"
4 #include "vvToolBaseBase.h"
9 #include <QTreeWidgetItem>
10 #include <QXmlStreamWriter>
15 //------------------------------------------------------------------------------
16 vvSaveState::vvSaveState() : m_XmlWriter(new QXmlStreamWriter), m_File(new QFile)
19 //------------------------------------------------------------------------------
21 //------------------------------------------------------------------------------
22 vvSaveState::~vvSaveState()
25 //------------------------------------------------------------------------------
28 //------------------------------------------------------------------------------
29 void vvSaveState::Run(vvMainWindow* vvWindow, const std::string& file)
33 m_File->setFileName(file.c_str());
35 m_File->open(QIODevice::Text | QIODevice::ReadWrite);
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");
48 m_XmlWriter->writeEndDocument();
49 m_XmlWriter->writeEndElement();
51 //------------------------------------------------------------------------------
54 //------------------------------------------------------------------------------
55 void vvSaveState::SaveGlobals()
57 m_XmlWriter->writeStartElement("Globals");
58 m_XmlWriter->writeEndElement();
60 //------------------------------------------------------------------------------
63 //------------------------------------------------------------------------------
64 void vvSaveState::SaveTree()
66 QTreeWidget* tree = m_Window->GetTree();
67 QTreeWidgetItem* item;
69 m_XmlWriter->writeStartElement("Images");
70 for (int i = 0; i < tree->topLevelItemCount(); i++) {
71 item = tree->topLevelItem(i);
74 m_XmlWriter->writeEndElement();
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);
81 m_XmlWriter->writeEndElement();
83 //------------------------------------------------------------------------------
86 //------------------------------------------------------------------------------
87 void vvSaveState::SaveImage(const QTreeWidgetItem* item, int index)
89 const vvSlicerManager * slicerManager = m_Window->GetSlicerManagers()[index];
90 m_XmlWriter->writeStartElement("Image");
92 std::ostringstream valueStr;
95 m_XmlWriter->writeAttribute("Index", valueStr.str().c_str());
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));
102 m_XmlWriter->writeTextElement("Window", QString::number(slicerManager->GetColorWindow()));
103 m_XmlWriter->writeTextElement("Level", QString::number(slicerManager->GetColorLevel()));
106 QTreeWidgetItem* item_child;
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);
120 m_XmlWriter->writeEndElement();
122 //------------------------------------------------------------------------------
125 //------------------------------------------------------------------------------
126 void vvSaveState::SaveFusion(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
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();
138 //------------------------------------------------------------------------------
141 //------------------------------------------------------------------------------
142 void vvSaveState::SaveOverlay(const QTreeWidgetItem* item, const vvSlicerManager* vvManager)
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();
153 //------------------------------------------------------------------------------
156 //------------------------------------------------------------------------------
157 void vvSaveState::SaveVector(const QTreeWidgetItem* item)
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();
164 //------------------------------------------------------------------------------
166 //------------------------------------------------------------------------------
167 void vvSaveState::SaveLink(const vvSlicerManager* vvManager)
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());
180 m_XmlWriter->writeEndElement();
183 //------------------------------------------------------------------------------
185 //------------------------------------------------------------------------------
186 void vvSaveState::SaveGUI()
188 m_XmlWriter->writeStartElement("GUI");
189 m_XmlWriter->writeEndElement();
191 //------------------------------------------------------------------------------
194 //------------------------------------------------------------------------------
195 void vvSaveState::SaveTools()
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();
212 m_XmlWriter->writeEndElement();
214 //------------------------------------------------------------------------------