1*cdf0e10cSrcweir import javax.swing.tree.TreeModel; 2*cdf0e10cSrcweir import javax.swing.event.TreeModelListener; 3*cdf0e10cSrcweir import javax.swing.tree.TreePath; 4*cdf0e10cSrcweir import javax.swing.event.TreeModelEvent; 5*cdf0e10cSrcweir import java.util.Vector; 6*cdf0e10cSrcweir 7*cdf0e10cSrcweir public class AccessibilityTreeModelBase 8*cdf0e10cSrcweir implements TreeModel 9*cdf0e10cSrcweir { 10*cdf0e10cSrcweir public AccessibilityTreeModelBase () 11*cdf0e10cSrcweir { 12*cdf0e10cSrcweir setRoot (null); 13*cdf0e10cSrcweir maTMListeners = new Vector(); 14*cdf0e10cSrcweir } 15*cdf0e10cSrcweir 16*cdf0e10cSrcweir public synchronized void addTreeModelListener(TreeModelListener l) 17*cdf0e10cSrcweir { 18*cdf0e10cSrcweir maTMListeners.add(l); 19*cdf0e10cSrcweir } 20*cdf0e10cSrcweir 21*cdf0e10cSrcweir public synchronized void removeTreeModelListener(TreeModelListener l) 22*cdf0e10cSrcweir { 23*cdf0e10cSrcweir maTMListeners.remove(l); 24*cdf0e10cSrcweir } 25*cdf0e10cSrcweir 26*cdf0e10cSrcweir public synchronized int getChildCount(Object aParent) 27*cdf0e10cSrcweir { 28*cdf0e10cSrcweir return (aParent instanceof AccessibleTreeNode) ? 29*cdf0e10cSrcweir ((AccessibleTreeNode)aParent).getChildCount() : 0; 30*cdf0e10cSrcweir } 31*cdf0e10cSrcweir 32*cdf0e10cSrcweir public synchronized Object getChild (Object aParent, int nIndex) 33*cdf0e10cSrcweir { 34*cdf0e10cSrcweir Object aChild = null; 35*cdf0e10cSrcweir try 36*cdf0e10cSrcweir { 37*cdf0e10cSrcweir if (aParent != null && aParent instanceof AccessibleTreeNode) 38*cdf0e10cSrcweir aChild = ((AccessibleTreeNode)aParent).getChild(nIndex); 39*cdf0e10cSrcweir else 40*cdf0e10cSrcweir System.out.println ("getChild called for unknown parent node"); 41*cdf0e10cSrcweir } 42*cdf0e10cSrcweir catch (com.sun.star.lang.IndexOutOfBoundsException e) 43*cdf0e10cSrcweir { 44*cdf0e10cSrcweir aChild = ("no child " + nIndex + " from " + aParent + ": " + e); 45*cdf0e10cSrcweir } 46*cdf0e10cSrcweir return aChild; 47*cdf0e10cSrcweir } 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir public synchronized Object getChildNoCreate (Object aParent, int nIndex) 50*cdf0e10cSrcweir { 51*cdf0e10cSrcweir Object aChild = null; 52*cdf0e10cSrcweir try 53*cdf0e10cSrcweir { 54*cdf0e10cSrcweir if (aParent != null && aParent instanceof AccessibleTreeNode) 55*cdf0e10cSrcweir aChild = ((AccessibleTreeNode)aParent).getChildNoCreate(nIndex); 56*cdf0e10cSrcweir else 57*cdf0e10cSrcweir System.out.println ("getChild called for unknown parent node"); 58*cdf0e10cSrcweir } 59*cdf0e10cSrcweir catch (com.sun.star.lang.IndexOutOfBoundsException e) 60*cdf0e10cSrcweir { } 61*cdf0e10cSrcweir return aChild; 62*cdf0e10cSrcweir } 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir /** iterate over all children and look for child */ 65*cdf0e10cSrcweir public synchronized int getIndexOfChild (Object aParent, Object aChild) 66*cdf0e10cSrcweir { 67*cdf0e10cSrcweir int nIndex = -1; 68*cdf0e10cSrcweir try 69*cdf0e10cSrcweir { 70*cdf0e10cSrcweir if ((aParent instanceof AccessibleTreeNode) && (aChild instanceof AccessibleTreeNode)) 71*cdf0e10cSrcweir { 72*cdf0e10cSrcweir AccessibleTreeNode aParentNode = (AccessibleTreeNode) aParent; 73*cdf0e10cSrcweir AccessibleTreeNode aChildNode = (AccessibleTreeNode) aChild; 74*cdf0e10cSrcweir 75*cdf0e10cSrcweir int nChildCount = aParentNode.getChildCount(); 76*cdf0e10cSrcweir for( int i = 0; i < nChildCount; i++ ) 77*cdf0e10cSrcweir { 78*cdf0e10cSrcweir if (aChildNode.equals (aParentNode.getChild (i))) 79*cdf0e10cSrcweir { 80*cdf0e10cSrcweir nIndex = i; 81*cdf0e10cSrcweir break; 82*cdf0e10cSrcweir } 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir } 86*cdf0e10cSrcweir catch (com.sun.star.lang.IndexOutOfBoundsException e) 87*cdf0e10cSrcweir { 88*cdf0e10cSrcweir // Return -1 by falling through. 89*cdf0e10cSrcweir } 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir // not found? 92*cdf0e10cSrcweir return nIndex; 93*cdf0e10cSrcweir } 94*cdf0e10cSrcweir 95*cdf0e10cSrcweir public boolean isLeaf (Object aNode) 96*cdf0e10cSrcweir { 97*cdf0e10cSrcweir return (aNode instanceof AccessibleTreeNode) ? 98*cdf0e10cSrcweir ((AccessibleTreeNode)aNode).isLeaf() : true; 99*cdf0e10cSrcweir } 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir 103*cdf0e10cSrcweir public synchronized Object getRoot() 104*cdf0e10cSrcweir { 105*cdf0e10cSrcweir return maRoot; 106*cdf0e10cSrcweir } 107*cdf0e10cSrcweir 108*cdf0e10cSrcweir public void valueForPathChanged(TreePath path, Object newValue) 109*cdf0e10cSrcweir { } 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir protected synchronized void setRoot (AccessibleTreeNode aRoot) 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir maRoot = aRoot; 114*cdf0e10cSrcweir } 115*cdf0e10cSrcweir 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir // The list of TreeModelListener objects. 118*cdf0e10cSrcweir protected Vector maTMListeners; 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir // The root node of the tree. Use setRoot to change it. 121*cdf0e10cSrcweir private AccessibleTreeNode maRoot = null; 122*cdf0e10cSrcweir } 123