scriptIO.cpp
1/* This file is part of the KDE project
2 Copyright (C) 2004 Cedric Pasteur <cedric.pasteur@free.fr>
3
4 This library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Library General Public
6 License as published by the Free Software Foundation; either
7 version 2 of the License, or (at your option) any later version.
8
9 This library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Library General Public License for more details.
13
14 You should have received a copy of the GNU Library General Public License
15 along with this library; see the file COPYING.LIB. If not, write to
16 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
17 * Boston, MA 02110-1301, USA.
18*/
19
20#include "scriptIO.h"
21#include "formscript.h"
22#include "kexievents.h"
23
24#include "form.h"
25#include "objecttree.h"
26// Kross includes
27#include "main/scriptcontainer.h"
28
29bool
31{
32 TQDomDocument domDoc = parentNode.ownerDocument();
33
34 // Save the form's code
35 if(!formScript->getCode().isEmpty()) {
36 TQDomElement script = domDoc.createElement("script");
37 script.setAttribute("language", formScript->scriptContainer()->getInterpreterName());
38 parentNode.appendChild(script);
39 TQDomText scriptCode = domDoc.createTextNode(formScript->getCode());
40 script.appendChild(scriptCode);
41 }
42
43 // Save all form events
44 if(!formScript->eventList()->isEmpty())
45 saveEventList(formScript->eventList(), parentNode);
46 return true;
47}
48
49bool
50ScriptIO::loadFormEvents(TQDomNode &parentNode, Form *form, ScriptManager *manager)
51{
52 TQDomElement script = parentNode.namedItem("script").toElement();
53 TQDomElement events = parentNode.namedItem("events").toElement();
54
55 // Load script code
56 FormScript *formScript = new FormScript(form, manager);
57 if(!script.isNull()) {
58 formScript->scriptContainer()->setInterpreterName(script.attribute("language"));
59 formScript->setCode(script.text());
60 }
61
62 // Load all events in the EventList
63 if(!events.isNull()) {
64 for(TQDomNode n = events.firstChild(); !n.isNull(); n = n.nextSibling())
65 loadEvent(n, formScript->eventList(), form);
66 }
67 return true;
68}
69
70bool
72{
73 EventList *l = formScript->eventList()->allEventsForObject(widget);
74 saveEventList(l, node);
75 return true;
76}
77
78void
79ScriptIO::saveEvent(Event *event, TQDomNode &parentNode)
80{
81 if(!event)
82 return;
83
84 TQDomDocument domDoc = parentNode.ownerDocument();
85 TQDomElement eventNode = domDoc.createElement("event");
86 eventNode.setAttribute("type", event->type());
87 parentNode.appendChild(eventNode);
88
89 switch(event->type()) {
90 case Event::Slot: {
91 TQDomElement sender = domDoc.createElement("sender");
92 eventNode.appendChild(sender);
93 TQDomText senderText = domDoc.createTextNode(event->sender() ? event->sender()->name() : "");
94 sender.appendChild(senderText);
95
96 TQDomElement signal = domDoc.createElement("signal");
97 eventNode.appendChild(signal);
98 TQDomText signalText = domDoc.createTextNode(event->signal());
99 signal.appendChild(signalText);
100
101 TQDomElement receiver = domDoc.createElement("receiver");
102 eventNode.appendChild(receiver);
103 TQDomText receiverText = domDoc.createTextNode(event->receiver() ? event->receiver()->name() : "");
104 receiver.appendChild(receiverText);
105
106 TQDomElement slot = domDoc.createElement("slot");
107 eventNode.appendChild(slot);
108 TQDomText slotText = domDoc.createTextNode(event->slot());
109 slot.appendChild(slotText);
110 break;
111 }
112
113 case Event::UserFunction: {
114 TQDomElement sender = domDoc.createElement("sender");
115 eventNode.appendChild(sender);
116 TQDomText senderText = domDoc.createTextNode(event->sender() ? event->sender()->name() : "");
117 sender.appendChild(senderText);
118
119 TQDomElement signal = domDoc.createElement("signal");
120 eventNode.appendChild(signal);
121 TQDomText signalText = domDoc.createTextNode(event->signal());
122 signal.appendChild(signalText);
123
124 TQDomElement function = domDoc.createElement("function");
125 eventNode.appendChild(function);
126 TQDomText functionText = domDoc.createTextNode(event->slot());
127 function.appendChild(functionText);
128 break;
129 }
130
131 case Event::Action:
132 // !\todo
133 break;
134
135 default:
136 break;
137 }
138}
139
140void
141ScriptIO::saveEventList(EventList *list, TQDomNode &parentNode)
142{
143 if(!list || list->isEmpty())
144 return;
145
146 TQDomDocument domDoc = parentNode.ownerDocument();
147 TQDomElement events = domDoc.createElement("events");
148 parentNode.appendChild(events);
149
150 TQValueListConstIterator<Event*> endIt = list->constEnd();
151 for(TQValueListConstIterator<Event*> it = list->constBegin(); it != endIt; ++it)
152 saveEvent((*it), events);
153}
154
155void
156ScriptIO::loadEvent(TQDomNode &node, EventList *list, Form *form)
157{
158 int type = node.toElement().attribute("type").toInt();
159 Event *event = new Event();
160
161 switch(type) {
162 case Event::Slot: {
163 ObjectTreeItem *sender = form->objectTree()->lookup(node.namedItem("sender").toElement().text());
164 event->setSender(sender ? sender->widget() : 0);
165 event->setSignal(node.namedItem("signal").toElement().text().local8Bit());
166 ObjectTreeItem *receiver = form->objectTree()->lookup(node.namedItem("receiver").toElement().text());
167 event->setReceiver(receiver ? receiver->widget() : 0);
168 event->setSlot(node.namedItem("slot").toElement().text().local8Bit());
169 event->setType(Event::Slot);
170 break;
171 }
172
173 case Event::UserFunction: {
174 ObjectTreeItem *sender = form->objectTree()->lookup(node.namedItem("sender").toElement().text());
175 event->setSender(sender ? sender->widget() : 0);
176 event->setSignal(node.namedItem("signal").toElement().text().local8Bit());
177 event->setSlot(node.namedItem("function").toElement().text().local8Bit());
178 event->setType(Event::UserFunction);
179 break;
180 }
181 default: break;
182 }
183
184 list->addEvent(event);
185}
186
A simple class to store events.
Definition kexievents.h:39
int type()
Event types.
Definition kexievents.h:49
A class that stores the code and events related to a single form.
Definition formscript.h:45
A simple class representing a form.
Definition form.h:136
ObjectTree * objectTree() const
Definition form.h:167
An item representing a widget Holds the properties of a widget (classname, name, parent,...
Definition objecttree.h:59
ObjectTreeItem * lookup(const TQString &name)
static bool saveFormEvents(TQDomNode &parentNode, FormScript *script)
Definition scriptIO.cpp:30
static bool saveAllEventsForWidget(TQObject *widget, FormScript *fscript, TQDomNode &node)
Definition scriptIO.cpp:71
static bool loadFormEvents(TQDomNode &parentNode, Form *form, ScriptManager *manager)
Definition scriptIO.cpp:50
type * findParent(TQObject *o, const char *className, TQObject *&prevPrev)