001: /*
002: ItsNat Java Web Application Framework
003: Copyright (C) 2007 Innowhere Software Services S.L., Spanish Company
004: Author: Jose Maria Arranz Santamaria
005:
006: This program is free software: you can redistribute it and/or modify
007: it under the terms of the GNU Affero General Public License as published by
008: the Free Software Foundation, either version 3 of the License, or
009: (at your option) any later version. See the GNU Affero General Public
010: License for more details. See the copy of the GNU Affero General Public License
011: included in this program. If not, see <http://www.gnu.org/licenses/>.
012: */
013:
014: package org.itsnat.comp.ui;
015:
016: import javax.swing.tree.TreePath;
017: import org.itsnat.core.ItsNatUserData;
018: import org.w3c.dom.Element;
019:
020: /**
021: * Contains visual information of a tree node.
022: *
023: * <p>This interface is the "componentized" version of
024: * {@link org.itsnat.core.domutil.ElementTreeNode} and
025: * follows a similar philosophy. The objective is similar to {@link ItsNatListCellUI}
026: * applied to tree nodes. Child index, row, tree path, deep level etc are tolerant
027: * to tree changes (are automatically updated).</p>
028: *
029: * @author Jose Maria Arranz Santamaria
030: * @see ItsNatTreeUI#getItsNatTreeCellUIFromRow(int)
031: * @see ItsNatTreeUI#getItsNatTreeCellUIFromNode(org.w3c.dom.Node)
032: */
033: public interface ItsNatTreeCellUI extends ItsNatUserData {
034: /**
035: * Returns the parent tree UI this object belongs to.
036: *
037: * @return the parent tree UI.
038: */
039: public ItsNatTreeUI getItsNatTreeUI();
040:
041: /**
042: * Returns the parent tree node UI of this node.
043: *
044: * @return the parent tree node UI.
045: */
046: public ItsNatTreeCellUI getTreeNodeUIParent();
047:
048: /**
049: * Returns an array with tree node UI objects from this node to the top most (usually the root).
050: *
051: * <p>Element at 0 is the top most node; if this tree is not rootless 0 element
052: * is the root, otherwise is the top most parent node containing this node.</p>
053: *
054: * @return an array with this object and any parent tree node UI.
055: */
056: public ItsNatTreeCellUI[] getTreeNodeUIPath();
057:
058: /**
059: * Returns the parent element containing this tree node.
060: *
061: * @return the parent element of this node.
062: * @see ItsNatTreeUI#getParentElementFromRow(int)
063: */
064: public Element getParentElement();
065:
066: /**
067: * Returns the content element of this tree node.
068: *
069: * @return the content element of this node.
070: * @see ItsNatTreeUI#getContentElementFromRow(int)
071: */
072: public Element getContentElement();
073:
074: /**
075: * Returns the handle element of this tree node.
076: *
077: * @return the handle element of this node.
078: * @see ItsNatTreeUI#getHandleElementFromRow(int)
079: */
080: public Element getHandleElement();
081:
082: /**
083: * Returns the icon element of this tree node.
084: *
085: * @return the icon element of this node.
086: * @see ItsNatTreeUI#getIconElementFromRow(int)
087: */
088: public Element getIconElement();
089:
090: /**
091: * Returns the label element of this tree node.
092: *
093: * @return the label element of this node.
094: * @see ItsNatTreeUI#getLabelElementFromRow(int)
095: */
096: public Element getLabelElement();
097:
098: /**
099: * Returns the zero based index of this node as a child relative to the parent.
100: *
101: * @return the index of this node relative to the parent. -1 if this node is a root or a top most node (rootless tree).
102: */
103: public int getIndex();
104:
105: /**
106: * Returns the number of direct child nodes of this node.
107: *
108: * @return the number of child nodes.
109: */
110: public int getChildCount();
111:
112: /**
113: * Returns the direct child tree node UI at the specified position.
114: *
115: * @param index zero based index of the child node position.
116: * @return the child tree node.
117: */
118: public ItsNatTreeCellUI getChildItsNatTreeCellUIAt(int index);
119:
120: /**
121: * Returns the row index of this node seeing the tree as a list. 0 if this node
122: * is the root regardless this tree is rootless or not (if rootless never returns 0
123: * because root node has not markup/tree node UI).
124: *
125: * @return the row index of this node seeing the tree as a list.
126: * @see ItsNatTreeUI#getItsNatTreeCellUIFromRow(int)
127: */
128: public int getRow();
129:
130: /**
131: * Sets the new expand state.
132: *
133: * <p>Current implementation does not perform DOM changes and only serves
134: * to save expand state. Future versions might use this method to render
135: * visually the markup effect of the expansion/collapse.</p>
136: *
137: * <p>Expand state of child or parent nodes is not affected.</p>
138: *
139: * @param expandState the new state.
140: * @see #isExpanded()
141: * @see org.itsnat.comp.ItsNatTree#expandNode(javax.swing.tree.TreePath)
142: * @see org.itsnat.comp.ItsNatTree#collapseNode(javax.swing.tree.TreePath)
143: */
144: public void expand(boolean expandState);
145:
146: /**
147: * Returns the current expand state.
148: *
149: * @return the current expand state, true by default.
150: * @see #expand(boolean)
151: * @see org.itsnat.comp.ItsNatTree#isExpandedNode(javax.swing.tree.TreePath)
152: */
153: public boolean isExpanded();
154:
155: /**
156: * Returns the deep (number of parents) of this node. If this node is root
157: * or a top most (rootless case) returns 0.
158: *
159: * @return the deep level of this node.
160: */
161: public int getDeepLevel();
162:
163: /**
164: * Returns the tree path of this node.
165: *
166: * @return the tree path.
167: */
168: public TreePath getTreePath();
169: }
|