insilmaril@566
|
1 |
#include "xml-freemind.h"
|
insilmaril@566
|
2 |
|
insilmaril@566
|
3 |
#include <QMessageBox>
|
insilmaril@566
|
4 |
#include <QColor>
|
insilmaril@566
|
5 |
#include <QTextStream>
|
insilmaril@566
|
6 |
#include <iostream>
|
insilmaril@566
|
7 |
|
insilmaril@749
|
8 |
#include "branchitem.h"
|
insilmaril@566
|
9 |
#include "misc.h"
|
insilmaril@566
|
10 |
#include "settings.h"
|
insilmaril@566
|
11 |
#include "linkablemapobj.h"
|
insilmaril@566
|
12 |
#include "version.h"
|
insilmaril@566
|
13 |
|
insilmaril@666
|
14 |
//static FloatObj *lastFloat;
|
insilmaril@566
|
15 |
static OrnamentedObj *lastOO;
|
insilmaril@566
|
16 |
|
insilmaril@566
|
17 |
extern Settings settings;
|
insilmaril@566
|
18 |
extern QString vymVersion;
|
insilmaril@566
|
19 |
|
insilmaril@566
|
20 |
extern QString flagsPath;
|
insilmaril@566
|
21 |
|
insilmaril@574
|
22 |
bool parseFreemindHandler::startDocument()
|
insilmaril@566
|
23 |
{
|
insilmaril@566
|
24 |
errorProt = "";
|
insilmaril@566
|
25 |
state = StateInit;
|
insilmaril@566
|
26 |
laststate = StateInit;
|
insilmaril@566
|
27 |
stateStack.clear();
|
insilmaril@566
|
28 |
stateStack.append(StateInit);
|
insilmaril@566
|
29 |
isVymPart=false;
|
insilmaril@566
|
30 |
return true;
|
insilmaril@566
|
31 |
}
|
insilmaril@566
|
32 |
|
insilmaril@566
|
33 |
|
insilmaril@574
|
34 |
QString parseFreemindHandler::parseHREF(QString href)
|
insilmaril@566
|
35 |
{
|
insilmaril@566
|
36 |
QString type=href.section(":",0,0);
|
insilmaril@566
|
37 |
QString path=href.section(":",1,1);
|
insilmaril@566
|
38 |
if (!tmpDir.endsWith("/"))
|
insilmaril@566
|
39 |
return tmpDir + "/" + path;
|
insilmaril@566
|
40 |
else
|
insilmaril@566
|
41 |
return tmpDir + path;
|
insilmaril@566
|
42 |
}
|
insilmaril@566
|
43 |
|
insilmaril@574
|
44 |
bool parseFreemindHandler::startElement ( const QString&, const QString&,
|
insilmaril@566
|
45 |
const QString& eName, const QXmlAttributes& atts )
|
insilmaril@566
|
46 |
{
|
insilmaril@566
|
47 |
QColor col;
|
insilmaril@566
|
48 |
/* Testing
|
insilmaril@660
|
49 |
cout << "startElement <"<< qPrintable(eName)
|
insilmaril@566
|
50 |
<<"> state="<<state
|
insilmaril@566
|
51 |
<<" laststate="<<stateStack.last()
|
insilmaril@566
|
52 |
<<" loadMode="<<loadMode
|
insilmaril@660
|
53 |
// <<" line="<<qPrintable (QXmlDefaultHandler::lineNumber())
|
insilmaril@566
|
54 |
<<endl;
|
insilmaril@566
|
55 |
*/
|
insilmaril@566
|
56 |
stateStack.append (state);
|
insilmaril@566
|
57 |
if ( state == StateInit && (eName == "map") )
|
insilmaril@566
|
58 |
{
|
insilmaril@566
|
59 |
state = StateMap;
|
insilmaril@566
|
60 |
if (!atts.value( "version").isEmpty() )
|
insilmaril@566
|
61 |
{
|
insilmaril@566
|
62 |
QString v="0.8.0";
|
insilmaril@566
|
63 |
if (!checkVersion(atts.value("version"),v))
|
insilmaril@566
|
64 |
QMessageBox::warning( 0, "Warning: Version Problem" ,
|
insilmaril@566
|
65 |
"<h3>Freemind map is newer than version " +v +" </h3>"
|
insilmaril@566
|
66 |
"<p>The map you are just trying to load was "
|
insilmaril@566
|
67 |
"saved using freemind " +atts.value("version")+". "
|
insilmaril@566
|
68 |
"The version of this vym can parse freemind " + v +".");
|
insilmaril@566
|
69 |
}
|
insilmaril@746
|
70 |
//FIXME-3 TreeItem *ti=model->first(); // this will be NULL !!!
|
insilmaril@746
|
71 |
TreeItem *ti=NULL;
|
insilmaril@741
|
72 |
|
insilmaril@740
|
73 |
BranchObj *bo;
|
insilmaril@740
|
74 |
if (ti->getType()==TreeItem::MapCenter)
|
insilmaril@740
|
75 |
bo=(BranchObj*)(ti->getLMO());
|
insilmaril@740
|
76 |
else
|
insilmaril@740
|
77 |
qWarning ("parseFreeMindHandler::startElement no mapCenter!!");
|
insilmaril@740
|
78 |
|
insilmaril@746
|
79 |
//cout <<"model="<<model<<" first="<<model->first()<<endl;
|
insilmaril@740
|
80 |
|
insilmaril@753
|
81 |
lastBranchItem=model->createBranch();
|
insilmaril@740
|
82 |
|
insilmaril@753
|
83 |
//FIXME-3 lastBranch->move2RelPos (200,0);
|
insilmaril@753
|
84 |
lastBranchItem->setHeading (" ");
|
insilmaril@753
|
85 |
//FIXME-3 lastBranch->move2RelPos (-200,0);
|
insilmaril@753
|
86 |
lastBranchItem->setHeading (" ");
|
insilmaril@753
|
87 |
lastBranchItem=(BranchItem*)lastBranchItem->parent();
|
insilmaril@566
|
88 |
|
insilmaril@566
|
89 |
} else if ( eName == "node" && (state == StateMap || state == StateNode ))
|
insilmaril@566
|
90 |
{
|
insilmaril@566
|
91 |
if (!atts.value( "POSITION").isEmpty() )
|
insilmaril@566
|
92 |
{
|
insilmaril@566
|
93 |
if (atts.value ("POSITION")=="left")
|
insilmaril@566
|
94 |
{
|
insilmaril@647
|
95 |
model->select ("bo:1");
|
insilmaril@750
|
96 |
lastBranchItem=model->getSelectedBranchItem();
|
insilmaril@750
|
97 |
if (lastBranchItem)
|
insilmaril@750
|
98 |
{
|
insilmaril@750
|
99 |
lastBranchItem=model->createBranch();
|
insilmaril@566
|
100 |
readNodeAttr (atts);
|
insilmaril@566
|
101 |
}
|
insilmaril@566
|
102 |
} else if (atts.value ("POSITION")=="right")
|
insilmaril@566
|
103 |
{
|
insilmaril@647
|
104 |
model->select ("bo:0");
|
insilmaril@750
|
105 |
lastBranchItem=model->getSelectedBranchItem();
|
insilmaril@750
|
106 |
if (lastBranchItem)
|
insilmaril@750
|
107 |
{
|
insilmaril@750
|
108 |
lastBranchItem=model->createBranch();
|
insilmaril@566
|
109 |
readNodeAttr (atts);
|
insilmaril@566
|
110 |
}
|
insilmaril@566
|
111 |
}
|
insilmaril@566
|
112 |
} else
|
insilmaril@566
|
113 |
{
|
insilmaril@566
|
114 |
if (state!=StateMap)
|
insilmaril@566
|
115 |
{
|
insilmaril@750
|
116 |
lastBranchItem=model->createBranch();
|
insilmaril@566
|
117 |
}
|
insilmaril@566
|
118 |
readNodeAttr (atts);
|
insilmaril@566
|
119 |
}
|
insilmaril@566
|
120 |
state=StateNode;
|
insilmaril@566
|
121 |
} else if ( eName == "font" && state == StateNode)
|
insilmaril@566
|
122 |
{
|
insilmaril@566
|
123 |
state=StateFont;
|
insilmaril@566
|
124 |
} else if ( eName == "edge" && state == StateNode)
|
insilmaril@566
|
125 |
{
|
insilmaril@566
|
126 |
state=StateEdge;
|
insilmaril@566
|
127 |
} else if ( eName == "hook" && state == StateNode)
|
insilmaril@566
|
128 |
{
|
insilmaril@566
|
129 |
state=StateHook;
|
insilmaril@566
|
130 |
} else if ( eName == "icon" && state == StateNode)
|
insilmaril@566
|
131 |
{
|
insilmaril@566
|
132 |
state=StateIcon;
|
insilmaril@566
|
133 |
if (!atts.value("BUILTIN").isEmpty() )
|
insilmaril@566
|
134 |
{
|
insilmaril@566
|
135 |
QString f=atts.value("BUILTIN");
|
insilmaril@566
|
136 |
QString v;
|
insilmaril@566
|
137 |
if (f=="help")
|
insilmaril@566
|
138 |
v="questionmark";
|
insilmaril@566
|
139 |
else if (f=="messagebox_warning")
|
insilmaril@566
|
140 |
v="freemind-warning";
|
insilmaril@566
|
141 |
else if (f=="idea")
|
insilmaril@566
|
142 |
v="lamp";
|
insilmaril@566
|
143 |
else if (f=="button_ok")
|
insilmaril@566
|
144 |
v="hook-green";
|
insilmaril@566
|
145 |
else if (f=="button_cancel")
|
insilmaril@566
|
146 |
v="cross-red";
|
insilmaril@566
|
147 |
else if (f.contains("full-"))
|
insilmaril@574
|
148 |
v=f.replace("full-","freemind-priority-");
|
insilmaril@566
|
149 |
else if (f=="back")
|
insilmaril@566
|
150 |
v="freemind-back";
|
insilmaril@566
|
151 |
else if (f=="forward")
|
insilmaril@566
|
152 |
v="freemind-forward";
|
insilmaril@566
|
153 |
else if (f=="attach")
|
insilmaril@566
|
154 |
v="freemind-attach";
|
insilmaril@566
|
155 |
else if (f=="ksmiletris")
|
insilmaril@566
|
156 |
v="smiley-good"; //
|
insilmaril@566
|
157 |
else if (f=="clanbomber")
|
insilmaril@566
|
158 |
v="freemind-clanbomber";
|
insilmaril@566
|
159 |
else if (f=="desktop_new")
|
insilmaril@566
|
160 |
v="freemind-desktopnew";
|
insilmaril@566
|
161 |
else if (f=="flag")
|
insilmaril@566
|
162 |
v="freemind-flag";
|
insilmaril@566
|
163 |
else if (f=="gohome")
|
insilmaril@566
|
164 |
v="freemind-gohome";
|
insilmaril@566
|
165 |
else if (f=="kaddressbook")
|
insilmaril@566
|
166 |
v="freemind-kaddressbook";
|
insilmaril@566
|
167 |
else if (f=="knotify")
|
insilmaril@566
|
168 |
v="freemind-knotify";
|
insilmaril@566
|
169 |
else if (f=="korn")
|
insilmaril@566
|
170 |
v="freemind-korn";
|
insilmaril@566
|
171 |
else if (f=="Mail")
|
insilmaril@566
|
172 |
v="freemind-mail";
|
insilmaril@566
|
173 |
else if (f=="password")
|
insilmaril@566
|
174 |
v="freemind-password";
|
insilmaril@566
|
175 |
else if (f=="pencil")
|
insilmaril@566
|
176 |
v="freemind-pencil";
|
insilmaril@566
|
177 |
else if (f=="stop")
|
insilmaril@566
|
178 |
v="freemind-stop";
|
insilmaril@566
|
179 |
else if (f=="wizard")
|
insilmaril@566
|
180 |
v="freemind-wizard";
|
insilmaril@566
|
181 |
else if (f=="xmag")
|
insilmaril@566
|
182 |
v="freemind-xmag";
|
insilmaril@566
|
183 |
else if (f=="bell")
|
insilmaril@566
|
184 |
v="freemind-bell";
|
insilmaril@566
|
185 |
else if (f=="bookmark")
|
insilmaril@566
|
186 |
v="freemind-bookmark";
|
insilmaril@566
|
187 |
else if (f=="penguin")
|
insilmaril@566
|
188 |
v="freemind-penguin";
|
insilmaril@566
|
189 |
else if (f=="licq")
|
insilmaril@566
|
190 |
v="freemind-licq";
|
insilmaril@566
|
191 |
|
insilmaril@753
|
192 |
//FIXME-3 lastBranch->activateStandardFlag( v);
|
insilmaril@566
|
193 |
}
|
insilmaril@566
|
194 |
} else if ( eName == "arrowlink" && state == StateNode)
|
insilmaril@566
|
195 |
{
|
insilmaril@566
|
196 |
state=StateArrowLink;
|
insilmaril@566
|
197 |
} else if ( eName == "cloud" && state == StateNode)
|
insilmaril@566
|
198 |
{
|
insilmaril@566
|
199 |
state=StateCloud;
|
insilmaril@566
|
200 |
} else if ( eName == "text" && state == StateHook)
|
insilmaril@566
|
201 |
{
|
insilmaril@566
|
202 |
state=StateText;
|
insilmaril@566
|
203 |
} else
|
insilmaril@566
|
204 |
return false; // Error
|
insilmaril@566
|
205 |
return true;
|
insilmaril@566
|
206 |
}
|
insilmaril@566
|
207 |
|
insilmaril@666
|
208 |
bool parseFreemindHandler::endElement ( const QString&, const QString&, const QString&)
|
insilmaril@566
|
209 |
{
|
insilmaril@566
|
210 |
/* Testing
|
insilmaril@660
|
211 |
cout << "endElement </" <<qPrintable(eName)
|
insilmaril@566
|
212 |
<<"> state=" <<state
|
insilmaril@566
|
213 |
<<" laststate=" <<laststate
|
insilmaril@566
|
214 |
<<" stateStack="<<stateStack.last()
|
insilmaril@566
|
215 |
<<endl;
|
insilmaril@566
|
216 |
*/
|
insilmaril@566
|
217 |
switch ( state )
|
insilmaril@566
|
218 |
{
|
insilmaril@566
|
219 |
case StateNode:
|
insilmaril@753
|
220 |
lastBranchItem=(BranchItem*)lastBranchItem->parent();
|
insilmaril@566
|
221 |
break;
|
insilmaril@566
|
222 |
default:
|
insilmaril@566
|
223 |
break;
|
insilmaril@566
|
224 |
}
|
insilmaril@566
|
225 |
state=stateStack.takeLast();
|
insilmaril@566
|
226 |
return true;
|
insilmaril@566
|
227 |
}
|
insilmaril@566
|
228 |
|
insilmaril@574
|
229 |
bool parseFreemindHandler::characters ( const QString& ch)
|
insilmaril@566
|
230 |
{
|
insilmaril@660
|
231 |
//cout << "characters \""<<qPrintable(ch)<<"\" state="<<state <<" laststate="<<laststate<<endl;
|
insilmaril@566
|
232 |
|
insilmaril@566
|
233 |
QString ch_org=quotemeta (ch);
|
insilmaril@566
|
234 |
QString ch_simplified=ch.simplifyWhiteSpace();
|
insilmaril@566
|
235 |
if ( ch_simplified.isEmpty() ) return true;
|
insilmaril@566
|
236 |
|
insilmaril@566
|
237 |
switch ( state )
|
insilmaril@566
|
238 |
{
|
insilmaril@566
|
239 |
case StateInit: break;
|
insilmaril@566
|
240 |
case StateMap: break;
|
insilmaril@566
|
241 |
case StateNode: break;
|
insilmaril@566
|
242 |
case StateCloud: break;
|
insilmaril@566
|
243 |
case StateEdge: break;
|
insilmaril@566
|
244 |
case StateIcon: break;
|
insilmaril@566
|
245 |
case StateArrowLink: break;
|
insilmaril@566
|
246 |
case StateFont: break;
|
insilmaril@566
|
247 |
case StateHook: break;
|
insilmaril@566
|
248 |
case StateText:
|
insilmaril@753
|
249 |
lastBranchItem->setNote (ch_simplified);
|
insilmaril@566
|
250 |
break;
|
insilmaril@566
|
251 |
default:
|
insilmaril@566
|
252 |
return false;
|
insilmaril@566
|
253 |
}
|
insilmaril@566
|
254 |
return true;
|
insilmaril@566
|
255 |
}
|
insilmaril@566
|
256 |
|
insilmaril@574
|
257 |
QString parseFreemindHandler::errorString()
|
insilmaril@566
|
258 |
{
|
insilmaril@574
|
259 |
return "the document is not in the Freemind file format";
|
insilmaril@566
|
260 |
}
|
insilmaril@566
|
261 |
|
insilmaril@753
|
262 |
bool parseFreemindHandler::readNodeAttr (const QXmlAttributes& a) //FIXME-3
|
insilmaril@566
|
263 |
{
|
insilmaril@763
|
264 |
//lastOO=lastBranch;
|
insilmaril@763
|
265 |
//lastBranchItem=(BranchItem*)(lastBranch->getTreeItem() );
|
insilmaril@566
|
266 |
|
insilmaril@566
|
267 |
if (a.value( "FOLDED")=="true" )
|
insilmaril@749
|
268 |
lastBranchItem->toggleScroll();
|
insilmaril@763
|
269 |
/*
|
insilmaril@566
|
270 |
if (!a.value( "TEXT").isEmpty() )
|
insilmaril@566
|
271 |
lastBranch->setHeading (a.value ("TEXT"));
|
insilmaril@566
|
272 |
|
insilmaril@566
|
273 |
if (!a.value( "COLOR").isEmpty() )
|
insilmaril@566
|
274 |
lastBranch->setColor (QColor (a.value ("COLOR")));
|
insilmaril@566
|
275 |
|
insilmaril@566
|
276 |
if (!a.value( "LINK").isEmpty() )
|
insilmaril@566
|
277 |
lastBranch->setURL (a.value ("LINK"));
|
insilmaril@753
|
278 |
*/
|
insilmaril@566
|
279 |
return true;
|
insilmaril@566
|
280 |
}
|
insilmaril@566
|
281 |
|
insilmaril@566
|
282 |
|