-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathstate.cpp
112 lines (106 loc) · 2.99 KB
/
state.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/**********************************************************
* *
* @ Juan Domingo, 2023 *
* *
* This program is under GNU license *
* *
**********************************************************/
#include "state.h"
State::State()
{
StateName="";
HTMLFileName="";
CfileName="";
pos.setX(100);
pos.setY(100);
}
State::State(QString SName,QString SFile,QString co,unsigned px,unsigned py,StateType s)
{
StateName= ( SName!=FORBIDDEN_STATE_NAME ) ? SName : "Didn't you have a better name?";
HTMLFileName=CfileName=SFile;
if ( CfileName.endsWith(".html") )
CfileName.replace(".html",DEFAULT_CPP_EXTENSION);
else
CfileName += DEFAULT_CPP_EXTENSION;
pos.setX(px);
pos.setY(py);
Comments=co;
Stype=s;
}
void State::SetHTMLFile(QString file)
{
HTMLFileName=CfileName=file;
if ( CfileName.endsWith(".html") )
CfileName.replace(".html",DEFAULT_CPP_EXTENSION);
else
CfileName += DEFAULT_CPP_EXTENSION;
}
State::State(QDomNode node)
{
for (QDomNode secnode = node.firstChild(); !secnode.isNull(); secnode = secnode.nextSibling())
{
QDomElement el = secnode.toElement();
//cout << el.tagName().toStdString() << " --> " << el.text().toStdString() << endl;
if (el.tagName()=="StateName")
StateName=el.text();
if (el.tagName()=="HTMLFile")
{
HTMLFileName=el.text();
CfileName=HTMLFileName;
if ( CfileName.endsWith(".html") )
CfileName.replace(".html",DEFAULT_CPP_EXTENSION);
else
CfileName += DEFAULT_CPP_EXTENSION;
}
if (el.tagName()=="StateComments")
Comments=el.text();
if (el.tagName()=="StatePosition")
{
QDomNode ternode=secnode.firstChild();
QString tag=ternode.toElement().tagName();
int d1=ternode.toElement().text().toInt();
ternode=ternode.nextSibling();
int d2=ternode.toElement().text().toInt();
ternode=ternode.nextSibling();
if (tag=="y")
{
int dummy=d1;
d1=d2;
d2=dummy;
}
pos.setX(d1);
pos.setY(d2);
}
if (el.tagName()=="StateType")
{
if (el.text()=="Initial")
Stype=Initial;
if (el.text()=="Terminal")
Stype=Terminal;
if (el.text()=="Intermediate")
Stype=Intermediate;
}
}
}
void State::SaveToXML(QTextStream &out)
{
out << " <State>\n";
out << " <StateName>" << StateName << "</StateName>\n";
out << " <HTMLFile>" << HTMLFileName << "</HTMLFile>\n";
out << " <StatePosition>\n";
out << " <x>" << pos.x() << "</x>\n";
out << " <y>" << pos.y() << "</y>\n";
out << " </StatePosition>\n";
out << " <StateType>";
switch (Stype)
{
case Initial: out << "Initial"; break;
case Terminal: out << "Terminal"; break;
case Intermediate: out << "Intermediate"; break;
case NO_TYPE: out << "NO_TYPE"; break;
}
out << "</StateType>\n";
if (!Comments.isEmpty())
out << " <StateComments>" << Comments << "</StateComments>\n";
out << " </State>\n";
}