kexi
scriptIO.cpp00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "scriptIO.h"
00021 #include "formscript.h"
00022 #include "kexievents.h"
00023
00024 #include "form.h"
00025 #include "objecttree.h"
00026
00027 #include "main/scriptcontainer.h"
00028
00029 bool
00030 ScriptIO::saveFormEvents(QDomNode &parentNode, FormScript *formScript)
00031 {
00032 QDomDocument domDoc = parentNode.ownerDocument();
00033
00034
00035 if(!formScript->getCode().isEmpty()) {
00036 QDomElement script = domDoc.createElement("script");
00037 script.setAttribute("language", formScript->scriptContainer()->getInterpreterName());
00038 parentNode.appendChild(script);
00039 QDomText scriptCode = domDoc.createTextNode(formScript->getCode());
00040 script.appendChild(scriptCode);
00041 }
00042
00043
00044 if(!formScript->eventList()->isEmpty())
00045 saveEventList(formScript->eventList(), parentNode);
00046 return true;
00047 }
00048
00049 bool
00050 ScriptIO::loadFormEvents(QDomNode &parentNode, Form *form, ScriptManager *manager)
00051 {
00052 QDomElement script = parentNode.namedItem("script").toElement();
00053 QDomElement events = parentNode.namedItem("events").toElement();
00054
00055
00056 FormScript *formScript = new FormScript(form, manager);
00057 if(!script.isNull()) {
00058 formScript->scriptContainer()->setInterpreterName(script.attribute("language"));
00059 formScript->setCode(script.text());
00060 }
00061
00062
00063 if(!events.isNull()) {
00064 for(QDomNode n = events.firstChild(); !n.isNull(); n = n.nextSibling())
00065 loadEvent(n, formScript->eventList(), form);
00066 }
00067 return true;
00068 }
00069
00070 bool
00071 ScriptIO::saveAllEventsForWidget(QObject *widget, FormScript *formScript, QDomNode &node)
00072 {
00073 EventList *l = formScript->eventList()->allEventsForObject(widget);
00074 saveEventList(l, node);
00075 return true;
00076 }
00077
00078 void
00079 ScriptIO::saveEvent(Event *event, QDomNode &parentNode)
00080 {
00081 if(!event)
00082 return;
00083
00084 QDomDocument domDoc = parentNode.ownerDocument();
00085 QDomElement eventNode = domDoc.createElement("event");
00086 eventNode.setAttribute("type", event->type());
00087 parentNode.appendChild(eventNode);
00088
00089 switch(event->type()) {
00090 case Event::Slot: {
00091 QDomElement sender = domDoc.createElement("sender");
00092 eventNode.appendChild(sender);
00093 QDomText senderText = domDoc.createTextNode(event->sender() ? event->sender()->name() : "");
00094 sender.appendChild(senderText);
00095
00096 QDomElement signal = domDoc.createElement("signal");
00097 eventNode.appendChild(signal);
00098 QDomText signalText = domDoc.createTextNode(event->signal());
00099 signal.appendChild(signalText);
00100
00101 QDomElement receiver = domDoc.createElement("receiver");
00102 eventNode.appendChild(receiver);
00103 QDomText receiverText = domDoc.createTextNode(event->receiver() ? event->receiver()->name() : "");
00104 receiver.appendChild(receiverText);
00105
00106 QDomElement slot = domDoc.createElement("slot");
00107 eventNode.appendChild(slot);
00108 QDomText slotText = domDoc.createTextNode(event->slot());
00109 slot.appendChild(slotText);
00110 break;
00111 }
00112
00113 case Event::UserFunction: {
00114 QDomElement sender = domDoc.createElement("sender");
00115 eventNode.appendChild(sender);
00116 QDomText senderText = domDoc.createTextNode(event->sender() ? event->sender()->name() : "");
00117 sender.appendChild(senderText);
00118
00119 QDomElement signal = domDoc.createElement("signal");
00120 eventNode.appendChild(signal);
00121 QDomText signalText = domDoc.createTextNode(event->signal());
00122 signal.appendChild(signalText);
00123
00124 QDomElement function = domDoc.createElement("function");
00125 eventNode.appendChild(function);
00126 QDomText functionText = domDoc.createTextNode(event->slot());
00127 function.appendChild(functionText);
00128 break;
00129 }
00130
00131 case Event::Action:
00132
00133 break;
00134
00135 default:
00136 break;
00137 }
00138 }
00139
00140 void
00141 ScriptIO::saveEventList(EventList *list, QDomNode &parentNode)
00142 {
00143 if(!list || list->isEmpty())
00144 return;
00145
00146 QDomDocument domDoc = parentNode.ownerDocument();
00147 QDomElement events = domDoc.createElement("events");
00148 parentNode.appendChild(events);
00149
00150 QValueListConstIterator<Event*> endIt = list->constEnd();
00151 for(QValueListConstIterator<Event*> it = list->constBegin(); it != endIt; ++it)
00152 saveEvent((*it), events);
00153 }
00154
00155 void
00156 ScriptIO::loadEvent(QDomNode &node, EventList *list, Form *form)
00157 {
00158 int type = node.toElement().attribute("type").toInt();
00159 Event *event = new Event();
00160
00161 switch(type) {
00162 case Event::Slot: {
00163 ObjectTreeItem *sender = form->objectTree()->lookup(node.namedItem("sender").toElement().text());
00164 event->setSender(sender ? sender->widget() : 0);
00165 event->setSignal(node.namedItem("signal").toElement().text().local8Bit());
00166 ObjectTreeItem *receiver = form->objectTree()->lookup(node.namedItem("receiver").toElement().text());
00167 event->setReceiver(receiver ? receiver->widget() : 0);
00168 event->setSlot(node.namedItem("slot").toElement().text().local8Bit());
00169 event->setType(Event::Slot);
00170 break;
00171 }
00172
00173 case Event::UserFunction: {
00174 ObjectTreeItem *sender = form->objectTree()->lookup(node.namedItem("sender").toElement().text());
00175 event->setSender(sender ? sender->widget() : 0);
00176 event->setSignal(node.namedItem("signal").toElement().text().local8Bit());
00177 event->setSlot(node.namedItem("function").toElement().text().local8Bit());
00178 event->setType(Event::UserFunction);
00179 break;
00180 }
00181 default: break;
00182 }
00183
00184 list->addEvent(event);
00185 }
00186
|