001: /*
002: * This file is not part of the ItsNat framework.
003: *
004: * Original source code use and closed source derivatives are authorized
005: * to third parties with no restriction or fee.
006: * The original source code is owned by the author.
007: *
008: * This program is distributed AS IS in the hope that it will be useful,
009: * but WITHOUT ANY WARRANTY; without even the implied warranty of
010: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
011: *
012: * Author: Jose Maria Arranz Santamaria
013: * (C) Innowhere Software Services S.L., Spanish company, year 2007
014: */
015:
016: package org.itsnat.feashow.features.core.serverevts;
017:
018: import org.itsnat.core.ItsNatDocument;
019: import org.itsnat.core.event.UserEvent;
020: import org.itsnat.feashow.FeatureTreeNode;
021: import org.w3c.dom.Document;
022: import org.w3c.dom.Element;
023: import org.w3c.dom.events.DocumentEvent;
024: import org.w3c.dom.events.Event;
025: import org.w3c.dom.events.EventListener;
026: import org.w3c.dom.events.EventTarget;
027: import org.w3c.dom.events.MouseEvent;
028: import org.w3c.dom.views.AbstractView;
029: import org.w3c.dom.views.DocumentView;
030:
031: public class ServerEventsNotBrowserTreeNode extends FeatureTreeNode
032: implements EventListener {
033: protected Element linkElem;
034: protected Element[] buttonElems;
035: protected Element userButton;
036:
037: public ServerEventsNotBrowserTreeNode() {
038: }
039:
040: public void startExamplePanel() {
041: ItsNatDocument itsNatDoc = getItsNatDocument();
042: Document doc = itsNatDoc.getDocument();
043:
044: this .linkElem = (Element) doc.getElementById("linkId");
045: itsNatDoc.addEventListener((EventTarget) linkElem, "click",
046: this , false);
047:
048: this .buttonElems = new Element[3];
049: for (int i = 0; i < buttonElems.length; i++)
050: buttonElems[i] = doc.getElementById("buttonId" + i);
051: for (int i = 0; i < buttonElems.length; i++)
052: itsNatDoc.addEventListener((EventTarget) buttonElems[i],
053: "click", this , false);
054:
055: this .userButton = doc.getElementById("userButtonId");
056: itsNatDoc.addUserEventListener((EventTarget) userButton,
057: "myEvent", this );
058: }
059:
060: public void endExamplePanel() {
061: ItsNatDocument itsNatDoc = getItsNatDocument();
062:
063: itsNatDoc.removeEventListener((EventTarget) linkElem, "click",
064: this , false);
065: this .linkElem = null;
066:
067: for (int i = 0; i < buttonElems.length; i++)
068: itsNatDoc.removeEventListener((EventTarget) buttonElems[i],
069: "click", this , false);
070: this .buttonElems = null;
071:
072: itsNatDoc.removeUserEventListener((EventTarget) userButton,
073: "myEvent", this );
074: this .userButton = null;
075: }
076:
077: public void handleEvent(Event evt) {
078: EventTarget currTarget = evt.getCurrentTarget();
079: if (currTarget == linkElem) {
080: fireEventsFromServer();
081: } else {
082: log("Clicked: "
083: + ((Element) currTarget).getAttribute("value"));
084: }
085: }
086:
087: public void fireEventsFromServer() {
088: ItsNatDocument itsNatDoc = getItsNatDocument();
089: DocumentEvent docEvent = (DocumentEvent) itsNatDoc;
090:
091: AbstractView view = ((DocumentView) itsNatDoc).getDefaultView();
092:
093: for (int i = 0; i < buttonElems.length; i++) {
094: MouseEvent event = (MouseEvent) docEvent
095: .createEvent("MouseEvents");
096: event.initMouseEvent("click", true, true, view, 0, 0, 0, 0,
097: 0, false, false, false, false,
098: (short) 0/*left button*/, null);
099:
100: Element buttonElem = buttonElems[i];
101: EventTarget buttonElemEnh = (EventTarget) itsNatDoc
102: .getItsNatNode(buttonElem);
103:
104: buttonElemEnh.dispatchEvent(event);
105: // Alternative: itsNatDoc.dispatchEvent((EventTarget)buttonElem,event);
106: }
107:
108: UserEvent userEvt = (UserEvent) docEvent
109: .createEvent("itsnat:UserEvents");
110: userEvt.initEvent("itsnat:user:myEvent", false, false);
111:
112: EventTarget userButtonEnh = (EventTarget) itsNatDoc
113: .getItsNatNode(userButton);
114:
115: userButtonEnh.dispatchEvent(userEvt);
116: }
117: }
|