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.ClientDocument;
019: import org.itsnat.core.ItsNatDocument;
020: import org.itsnat.core.event.UserEvent;
021: import org.itsnat.feashow.FeatureTreeNode;
022: import org.w3c.dom.Document;
023: import org.w3c.dom.Element;
024: import org.w3c.dom.events.DocumentEvent;
025: import org.w3c.dom.events.Event;
026: import org.w3c.dom.events.EventListener;
027: import org.w3c.dom.events.EventTarget;
028: import org.w3c.dom.events.MouseEvent;
029: import org.w3c.dom.views.AbstractView;
030: import org.w3c.dom.views.DocumentView;
031:
032: public class ServerEventsUsingBrowserTreeNode extends FeatureTreeNode
033: implements EventListener {
034: protected Element linkElem;
035: protected Element[] buttonElems;
036: protected Element userButton;
037:
038: public ServerEventsUsingBrowserTreeNode() {
039: }
040:
041: public void startExamplePanel() {
042: ItsNatDocument itsNatDoc = getItsNatDocument();
043: Document doc = itsNatDoc.getDocument();
044:
045: this .linkElem = (Element) doc.getElementById("linkId");
046: itsNatDoc.addEventListener((EventTarget) linkElem, "click",
047: this , false);
048:
049: this .buttonElems = new Element[3];
050: for (int i = 0; i < buttonElems.length; i++)
051: buttonElems[i] = doc.getElementById("buttonId" + i);
052: for (int i = 0; i < buttonElems.length; i++)
053: itsNatDoc.addEventListener((EventTarget) buttonElems[i],
054: "click", this , false);
055:
056: this .userButton = doc.getElementById("userButtonId");
057: itsNatDoc.addUserEventListener((EventTarget) userButton,
058: "myEvent", this );
059: userButton
060: .setAttribute("onclick",
061: "document.getItsNatDoc().fireUserEvent(this,'myEvent');");
062: }
063:
064: public void endExamplePanel() {
065: ItsNatDocument itsNatDoc = getItsNatDocument();
066:
067: itsNatDoc.removeEventListener((EventTarget) linkElem, "click",
068: this , false);
069: this .linkElem = null;
070:
071: for (int i = 0; i < buttonElems.length; i++)
072: itsNatDoc.removeEventListener((EventTarget) buttonElems[i],
073: "click", this , false);
074: this .buttonElems = null;
075:
076: itsNatDoc.removeUserEventListener((EventTarget) userButton,
077: "myEvent", this );
078: this .userButton = null;
079: }
080:
081: public void handleEvent(Event evt) {
082: EventTarget currTarget = evt.getCurrentTarget();
083: if (currTarget == linkElem) {
084: fireEventsFromServer();
085: } else {
086: log("Clicked: "
087: + ((Element) currTarget).getAttribute("value"));
088: }
089: }
090:
091: public void fireEventsFromServer() {
092: final ItsNatDocument itsNatDoc = getItsNatDocument();
093: final DocumentEvent docEvent = (DocumentEvent) itsNatDoc;
094:
095: Runnable dispCode = new Runnable() {
096: public void run() {
097: for (int i = 0; i < buttonElems.length; i++) {
098: Element buttonElem;
099: EventTarget buttonElemEnh;
100: MouseEvent mouseEvt;
101: synchronized (itsNatDoc) {
102: AbstractView view = ((DocumentView) itsNatDoc)
103: .getDefaultView();
104:
105: mouseEvt = (MouseEvent) docEvent
106: .createEvent("MouseEvents");
107: mouseEvt.initMouseEvent("click", true, true,
108: view, 0, 0, 0, 0, 0, false, false,
109: false, false,
110: (short) 0/*left button*/, null);
111:
112: buttonElem = buttonElems[i];
113: buttonElemEnh = (EventTarget) itsNatDoc
114: .getItsNatNode(buttonElem);
115: }
116:
117: buttonElemEnh.dispatchEvent(mouseEvt);
118: // Alternative: itsNatDoc.dispatchEvent((EventTarget)buttonElem,mouseEvt);
119: }
120:
121: EventTarget userButtonEnh;
122: UserEvent userEvt;
123: synchronized (itsNatDoc) {
124: userEvt = (UserEvent) docEvent
125: .createEvent("itsnat:UserEvents");
126: userEvt.initEvent("itsnat:user:myEvent", false,
127: false);
128:
129: userButtonEnh = (EventTarget) itsNatDoc
130: .getItsNatNode(userButton);
131: }
132:
133: userButtonEnh.dispatchEvent(userEvt);
134: }
135: };
136: ClientDocument client = itsNatDoc.getClientDocumentOwner();
137: client.startEventDispatcherThread(dispCode);
138: }
139: }
|