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.domutils;
017:
018: import java.util.Collections;
019: import java.util.Comparator;
020: import org.itsnat.core.ItsNatDocument;
021: import org.itsnat.core.domutil.ElementListFree;
022: import org.itsnat.core.event.NodePropertyTransport;
023: import org.itsnat.feashow.FeatureTreeNode;
024: import org.w3c.dom.Document;
025: import org.w3c.dom.Element;
026: import org.w3c.dom.Text;
027: import org.w3c.dom.events.Event;
028: import org.w3c.dom.events.EventListener;
029: import org.w3c.dom.events.EventTarget;
030: import org.w3c.dom.html.HTMLInputElement;
031:
032: public class FreeElementListTreeNode extends FeatureTreeNode implements
033: EventListener {
034: protected ElementListFree elemList;
035: protected Element sortButton;
036: protected Element rotateButton;
037: protected Element shuffleButton;
038: protected HTMLInputElement masterCheckBox;
039:
040: public FreeElementListTreeNode() {
041: }
042:
043: public void startExamplePanel() {
044: ItsNatDocument itsNatDoc = getItsNatDocument();
045: Document doc = itsNatDoc.getDocument();
046:
047: this .sortButton = doc.getElementById("sortId");
048: itsNatDoc.addEventListener((EventTarget) sortButton, "click",
049: this , false);
050:
051: this .rotateButton = doc.getElementById("rotateId");
052: itsNatDoc.addEventListener((EventTarget) rotateButton, "click",
053: this , false);
054:
055: this .shuffleButton = doc.getElementById("shuffleId");
056: itsNatDoc.addEventListener((EventTarget) shuffleButton,
057: "click", this , false);
058:
059: this .masterCheckBox = (HTMLInputElement) doc
060: .getElementById("masterId");
061: itsNatDoc.addEventListener((EventTarget) masterCheckBox,
062: "click", this , false, new NodePropertyTransport(
063: "checked", boolean.class));
064:
065: boolean master = masterCheckBox.getChecked();
066: Element parent = doc.getElementById("elementListId");
067: this .elemList = itsNatDoc.createElementListFree(parent, master);
068:
069: elemList.addElement(createElement("Madrid"));
070: elemList.addElement(createElement("Sevilla"));
071: elemList.addElement(createElement("Segovia"));
072: elemList.addElement(createElement("Barcelona"));
073: elemList.addElement(createElement("Valencia"));
074: elemList.addElement(createElement("Oviedo"));
075: }
076:
077: public Element createElement(String text) {
078: ItsNatDocument itsNatDoc = getItsNatDocument();
079: Document doc = itsNatDoc.getDocument();
080: Element itemElem = doc.createElement("li");
081: itemElem.appendChild(doc.createTextNode(text));
082: return itemElem;
083: }
084:
085: public void endExamplePanel() {
086: this .elemList = null;
087: this .sortButton = null;
088: this .rotateButton = null;
089: this .shuffleButton = null;
090: this .masterCheckBox = null;
091: }
092:
093: public void handleEvent(Event evt) {
094: EventTarget currTarget = evt.getCurrentTarget();
095: if (currTarget == sortButton) {
096: Collections.sort(elemList, NodeComparator.SINGLETON);
097: } else if (currTarget == rotateButton) {
098: Collections.rotate(elemList, 1);
099: } else if (currTarget == shuffleButton) {
100: Collections.shuffle(elemList);
101: } else if (currTarget == masterCheckBox) {
102: boolean master = masterCheckBox.getChecked();
103: if (master != elemList.isMaster()) {
104: ItsNatDocument itsNatDoc = getItsNatDocument();
105: elemList = itsNatDoc.createElementListFree(elemList
106: .getParentElement(), master);
107: }
108: }
109: }
110:
111: public static class NodeComparator implements Comparator {
112: public static final NodeComparator SINGLETON = new NodeComparator();
113:
114: public int compare(Object o1, Object o2) {
115: Element li1 = (Element) o1;
116: Text text1 = (Text) li1.getFirstChild();
117:
118: Element li2 = (Element) o2;
119: Text text2 = (Text) li2.getFirstChild();
120:
121: return text1.getData().compareTo(text2.getData());
122: }
123: }
124: }
|