1
/* This file is part of the KDE project
2
Copyright (C) 2004 Cedric Pasteur <cedric.pasteur@free.fr>
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.
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.
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.
21
#include "formscript.h"
22
#include "kexievents.h"
25
#include "objecttree.h"
27
#include "main/scriptcontainer.h"
30
ScriptIO::saveFormEvents(QDomNode &parentNode, FormScript *formScript)
32
QDomDocument domDoc = parentNode.ownerDocument();
34
// Save the form's code
35
if (!formScript->getCode().isEmpty()) {
36
QDomElement script = domDoc.createElement("script");
37
script.setAttribute("language", formScript->scriptContainer()->getInterpreterName());
38
parentNode.appendChild(script);
39
QDomText scriptCode = domDoc.createTextNode(formScript->getCode());
40
script.appendChild(scriptCode);
43
// Save all form events
44
if (!formScript->eventList()->isEmpty())
45
saveEventList(formScript->eventList(), parentNode);
50
ScriptIO::loadFormEvents(QDomNode &parentNode, Form *form, ScriptManager *manager)
52
QDomElement script = parentNode.firstChildElement("script");
53
QDomElement events = parentNode.firstChildElement("events");
56
FormScript *formScript = new FormScript(form, manager);
57
if (!script.isNull()) {
58
formScript->scriptContainer()->setInterpreterName(script.attribute("language"));
59
formScript->setCode(script.text());
62
// Load all events in the EventList
63
if (!events.isNull()) {
64
for (QDomNode n = events.firstChild(); !n.isNull(); n = n.nextSibling())
65
loadEvent(n, formScript->eventList(), form);
71
ScriptIO::saveAllEventsForWidget(QObject *widget, FormScript *formScript, QDomNode &node)
73
EventList *l = formScript->eventList()->allEventsForObject(widget);
74
saveEventList(l, node);
79
ScriptIO::saveEvent(Event *event, QDomNode &parentNode)
84
QDomDocument domDoc = parentNode.ownerDocument();
85
QDomElement eventNode = domDoc.createElement("event");
86
eventNode.setAttribute("type", event->type());
87
parentNode.appendChild(eventNode);
89
switch (event->type()) {
91
QDomElement sender = domDoc.createElement("sender");
92
eventNode.appendChild(sender);
93
QDomText senderText = domDoc.createTextNode(event->sender() ? event->sender()->name() : "");
94
sender.appendChild(senderText);
96
QDomElement signal = domDoc.createElement("signal");
97
eventNode.appendChild(signal);
98
QDomText signalText = domDoc.createTextNode(event->signal());
99
signal.appendChild(signalText);
101
QDomElement receiver = domDoc.createElement("receiver");
102
eventNode.appendChild(receiver);
103
QDomText receiverText = domDoc.createTextNode(event->receiver() ? event->receiver()->name() : "");
104
receiver.appendChild(receiverText);
106
QDomElement slot = domDoc.createElement("slot");
107
eventNode.appendChild(slot);
108
QDomText slotText = domDoc.createTextNode(event->slot());
109
slot.appendChild(slotText);
113
case Event::UserFunction: {
114
QDomElement sender = domDoc.createElement("sender");
115
eventNode.appendChild(sender);
116
QDomText senderText = domDoc.createTextNode(event->sender() ? event->sender()->name() : "");
117
sender.appendChild(senderText);
119
QDomElement signal = domDoc.createElement("signal");
120
eventNode.appendChild(signal);
121
QDomText signalText = domDoc.createTextNode(event->signal());
122
signal.appendChild(signalText);
124
QDomElement function = domDoc.createElement("function");
125
eventNode.appendChild(function);
126
QDomText functionText = domDoc.createTextNode(event->slot());
127
function.appendChild(functionText);
141
ScriptIO::saveEventList(EventList *list, QDomNode &parentNode)
143
if (!list || list->isEmpty())
146
QDomDocument domDoc = parentNode.ownerDocument();
147
QDomElement events = domDoc.createElement("events");
148
parentNode.appendChild(events);
150
foreach (Event* e, *list) {
151
saveEvent(e, events);
156
ScriptIO::loadEvent(QDomNode &node, EventList *list, Form *form)
158
int type = node.toElement().attribute("type").toInt();
159
Event *event = new Event();
163
ObjectTreeItem *sender = form->objectTree()->lookup(node.firstChildElement("sender").text());
164
event->setSender(sender ? sender->widget() : 0);
165
event->setSignal(node.firstChildElement("signal").text().toLocal8Bit());
166
ObjectTreeItem *receiver = form->objectTree()->lookup(node.firstChildElement("receiver").text());
167
event->setReceiver(receiver ? receiver->widget() : 0);
168
event->setSlot(node.firstChildElement("slot").text().toLocal8Bit());
169
event->setType(Event::Slot);
173
case Event::UserFunction: {
174
ObjectTreeItem *sender = form->objectTree()->lookup(node.firstChildElement("sender").text());
175
event->setSender(sender ? sender->widget() : 0);
176
event->setSignal(node.firstChildElement("signal").text().toLocal8Bit());
177
event->setSlot(node.firstChildElement("function").text().toLocal8Bit());
178
event->setType(Event::UserFunction);
184
list->addEvent(event);