1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 23*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.*; 24*b1cdbd2cSJim Jagielski import java.util.Vector; 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski /** 27*b1cdbd2cSJim Jagielski * The node type for the AccessibleTreeModel. 28*b1cdbd2cSJim Jagielski * This implements all the child-handling based on the appropriate 29*b1cdbd2cSJim Jagielski * NodeHandlers. Trivial nodes can be implemented by any Object 30*b1cdbd2cSJim Jagielski * type. 31*b1cdbd2cSJim Jagielski */ 32*b1cdbd2cSJim Jagielski class AccTreeNode 33*b1cdbd2cSJim Jagielski extends AccessibleTreeNode 34*b1cdbd2cSJim Jagielski { 35*b1cdbd2cSJim Jagielski class HandlerDescriptor 36*b1cdbd2cSJim Jagielski { HandlerDescriptor(NodeHandler aHandler)37*b1cdbd2cSJim Jagielski public HandlerDescriptor (NodeHandler aHandler) 38*b1cdbd2cSJim Jagielski { 39*b1cdbd2cSJim Jagielski maHandler = aHandler; 40*b1cdbd2cSJim Jagielski mnChildCount = -1; 41*b1cdbd2cSJim Jagielski } 42*b1cdbd2cSJim Jagielski public NodeHandler maHandler; 43*b1cdbd2cSJim Jagielski public int mnChildCount; 44*b1cdbd2cSJim Jagielski } 45*b1cdbd2cSJim Jagielski /// NodeHandlers for this node 46*b1cdbd2cSJim Jagielski private Vector maHandlers; 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski // The accessible context of this node. 49*b1cdbd2cSJim Jagielski private XAccessible mxAccessible; 50*b1cdbd2cSJim Jagielski private XAccessibleContext mxContext; 51*b1cdbd2cSJim Jagielski private XAccessibleComponent mxComponent; 52*b1cdbd2cSJim Jagielski private XAccessibleText mxText; 53*b1cdbd2cSJim Jagielski private XAccessibleTable mxTable; 54*b1cdbd2cSJim Jagielski AccTreeNode(XAccessible xAccessible, XAccessibleContext xContext, AccessibleTreeNode aParent)55*b1cdbd2cSJim Jagielski public AccTreeNode (XAccessible xAccessible, XAccessibleContext xContext, AccessibleTreeNode aParent) 56*b1cdbd2cSJim Jagielski { 57*b1cdbd2cSJim Jagielski this (xAccessible, xContext, xContext, aParent); 58*b1cdbd2cSJim Jagielski } 59*b1cdbd2cSJim Jagielski AccTreeNode(XAccessible xAccessible, XAccessibleContext xContext, Object aDisplay, AccessibleTreeNode aParent)60*b1cdbd2cSJim Jagielski public AccTreeNode (XAccessible xAccessible, XAccessibleContext xContext, Object aDisplay, AccessibleTreeNode aParent) 61*b1cdbd2cSJim Jagielski { 62*b1cdbd2cSJim Jagielski super (aDisplay, aParent); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski maHandlers = new Vector(5); 65*b1cdbd2cSJim Jagielski mxContext = xContext; 66*b1cdbd2cSJim Jagielski mxAccessible = xAccessible; 67*b1cdbd2cSJim Jagielski } 68*b1cdbd2cSJim Jagielski 69*b1cdbd2cSJim Jagielski /** Update the internal data extracted from the corresponding accessible 70*b1cdbd2cSJim Jagielski object. This is done by replacing every handler by a new one. An 71*b1cdbd2cSJim Jagielski update method at each handler would be better of course. 72*b1cdbd2cSJim Jagielski */ update()73*b1cdbd2cSJim Jagielski public void update () 74*b1cdbd2cSJim Jagielski { 75*b1cdbd2cSJim Jagielski for (int i=0; i<maHandlers.size(); i++) 76*b1cdbd2cSJim Jagielski { 77*b1cdbd2cSJim Jagielski System.out.println ("replacing handler " + i); 78*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = (HandlerDescriptor)maHandlers.get(i); 79*b1cdbd2cSJim Jagielski aDescriptor.maHandler = aDescriptor.maHandler.createHandler (mxContext); 80*b1cdbd2cSJim Jagielski aDescriptor.mnChildCount = 81*b1cdbd2cSJim Jagielski aDescriptor.maHandler.getChildCount (this); 82*b1cdbd2cSJim Jagielski } 83*b1cdbd2cSJim Jagielski } 84*b1cdbd2cSJim Jagielski getContext()85*b1cdbd2cSJim Jagielski public XAccessibleContext getContext () 86*b1cdbd2cSJim Jagielski { 87*b1cdbd2cSJim Jagielski return mxContext; 88*b1cdbd2cSJim Jagielski } 89*b1cdbd2cSJim Jagielski getComponent()90*b1cdbd2cSJim Jagielski public XAccessibleComponent getComponent () 91*b1cdbd2cSJim Jagielski { 92*b1cdbd2cSJim Jagielski if (mxComponent == null && mxContext != null) 93*b1cdbd2cSJim Jagielski mxComponent = (XAccessibleComponent)UnoRuntime.queryInterface( 94*b1cdbd2cSJim Jagielski XAccessibleComponent.class, mxContext); 95*b1cdbd2cSJim Jagielski return mxComponent; 96*b1cdbd2cSJim Jagielski } 97*b1cdbd2cSJim Jagielski getExtendedComponent()98*b1cdbd2cSJim Jagielski public XAccessibleExtendedComponent getExtendedComponent () 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski if (mxComponent == null) 101*b1cdbd2cSJim Jagielski getComponent(); 102*b1cdbd2cSJim Jagielski if (mxComponent != null) 103*b1cdbd2cSJim Jagielski return (XAccessibleExtendedComponent)UnoRuntime.queryInterface( 104*b1cdbd2cSJim Jagielski XAccessibleExtendedComponent.class, mxComponent); 105*b1cdbd2cSJim Jagielski else 106*b1cdbd2cSJim Jagielski return null; 107*b1cdbd2cSJim Jagielski } 108*b1cdbd2cSJim Jagielski getText()109*b1cdbd2cSJim Jagielski public XAccessibleText getText () 110*b1cdbd2cSJim Jagielski { 111*b1cdbd2cSJim Jagielski if (mxText == null && mxContext != null) 112*b1cdbd2cSJim Jagielski mxText = (XAccessibleText)UnoRuntime.queryInterface( 113*b1cdbd2cSJim Jagielski XAccessibleText.class, mxContext); 114*b1cdbd2cSJim Jagielski return mxText; 115*b1cdbd2cSJim Jagielski } 116*b1cdbd2cSJim Jagielski getEditText()117*b1cdbd2cSJim Jagielski public XAccessibleEditableText getEditText () 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski return (XAccessibleEditableText)UnoRuntime.queryInterface( 120*b1cdbd2cSJim Jagielski XAccessibleEditableText.class, mxContext); 121*b1cdbd2cSJim Jagielski } 122*b1cdbd2cSJim Jagielski getTable()123*b1cdbd2cSJim Jagielski public XAccessibleTable getTable () 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski if (mxTable == null && mxContext != null) 126*b1cdbd2cSJim Jagielski mxTable = (XAccessibleTable)UnoRuntime.queryInterface( 127*b1cdbd2cSJim Jagielski XAccessibleTable.class, mxContext); 128*b1cdbd2cSJim Jagielski return mxTable; 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski getAccessible()132*b1cdbd2cSJim Jagielski public XAccessible getAccessible() 133*b1cdbd2cSJim Jagielski { 134*b1cdbd2cSJim Jagielski if ((mxAccessible == null) && (mxContext != null)) 135*b1cdbd2cSJim Jagielski mxAccessible = (XAccessible)UnoRuntime.queryInterface( 136*b1cdbd2cSJim Jagielski XAccessible.class, mxContext); 137*b1cdbd2cSJim Jagielski return mxAccessible; 138*b1cdbd2cSJim Jagielski } 139*b1cdbd2cSJim Jagielski getSelection()140*b1cdbd2cSJim Jagielski public XAccessibleSelection getSelection () 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski return (XAccessibleSelection)UnoRuntime.queryInterface( 143*b1cdbd2cSJim Jagielski XAccessibleSelection.class, mxContext); 144*b1cdbd2cSJim Jagielski } 145*b1cdbd2cSJim Jagielski addHandler( NodeHandler aHandler )146*b1cdbd2cSJim Jagielski public void addHandler( NodeHandler aHandler ) 147*b1cdbd2cSJim Jagielski { 148*b1cdbd2cSJim Jagielski if (aHandler != null) 149*b1cdbd2cSJim Jagielski maHandlers.add (new HandlerDescriptor (aHandler)); 150*b1cdbd2cSJim Jagielski } 151*b1cdbd2cSJim Jagielski 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski /** iterate over handlers and return child sum */ getHandlerDescriptor(int i)154*b1cdbd2cSJim Jagielski protected HandlerDescriptor getHandlerDescriptor (int i) 155*b1cdbd2cSJim Jagielski { 156*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = (HandlerDescriptor)maHandlers.get(i); 157*b1cdbd2cSJim Jagielski if (aDescriptor.mnChildCount < 0) 158*b1cdbd2cSJim Jagielski aDescriptor.mnChildCount = 159*b1cdbd2cSJim Jagielski aDescriptor.maHandler.getChildCount (this); 160*b1cdbd2cSJim Jagielski return aDescriptor; 161*b1cdbd2cSJim Jagielski } 162*b1cdbd2cSJim Jagielski getChildCount()163*b1cdbd2cSJim Jagielski public int getChildCount() 164*b1cdbd2cSJim Jagielski { 165*b1cdbd2cSJim Jagielski int nChildCount = 0; 166*b1cdbd2cSJim Jagielski for (int i = 0; i < maHandlers.size(); i++) 167*b1cdbd2cSJim Jagielski { 168*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 169*b1cdbd2cSJim Jagielski nChildCount += aDescriptor.mnChildCount; 170*b1cdbd2cSJim Jagielski } 171*b1cdbd2cSJim Jagielski return nChildCount; 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski /** iterate over handlers until the child is found */ getChild(int nIndex)175*b1cdbd2cSJim Jagielski public AccessibleTreeNode getChild (int nIndex) 176*b1cdbd2cSJim Jagielski throws IndexOutOfBoundsException 177*b1cdbd2cSJim Jagielski { 178*b1cdbd2cSJim Jagielski if( nIndex >= 0 ) 179*b1cdbd2cSJim Jagielski { 180*b1cdbd2cSJim Jagielski for(int i = 0; i < maHandlers.size(); i++) 181*b1cdbd2cSJim Jagielski { 182*b1cdbd2cSJim Jagielski // check if this handler has the child, and if not 183*b1cdbd2cSJim Jagielski // search with next handler 184*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 185*b1cdbd2cSJim Jagielski if (nIndex < aDescriptor.mnChildCount) 186*b1cdbd2cSJim Jagielski return aDescriptor.maHandler.getChild (this, nIndex); 187*b1cdbd2cSJim Jagielski else 188*b1cdbd2cSJim Jagielski nIndex -= aDescriptor.mnChildCount; 189*b1cdbd2cSJim Jagielski } 190*b1cdbd2cSJim Jagielski } 191*b1cdbd2cSJim Jagielski else 192*b1cdbd2cSJim Jagielski throw new IndexOutOfBoundsException(); 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski // nothing found? 195*b1cdbd2cSJim Jagielski return null; 196*b1cdbd2cSJim Jagielski } 197*b1cdbd2cSJim Jagielski getChildNoCreate(int nIndex)198*b1cdbd2cSJim Jagielski public AccessibleTreeNode getChildNoCreate (int nIndex) 199*b1cdbd2cSJim Jagielski throws IndexOutOfBoundsException 200*b1cdbd2cSJim Jagielski { 201*b1cdbd2cSJim Jagielski if( nIndex >= 0 ) 202*b1cdbd2cSJim Jagielski { 203*b1cdbd2cSJim Jagielski for(int i = 0; i < maHandlers.size(); i++) 204*b1cdbd2cSJim Jagielski { 205*b1cdbd2cSJim Jagielski // check if this handler has the child, and if not 206*b1cdbd2cSJim Jagielski // search with next handler 207*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 208*b1cdbd2cSJim Jagielski if (nIndex < aDescriptor.mnChildCount) 209*b1cdbd2cSJim Jagielski return aDescriptor.maHandler.getChildNoCreate (this, nIndex); 210*b1cdbd2cSJim Jagielski else 211*b1cdbd2cSJim Jagielski nIndex -= aDescriptor.mnChildCount; 212*b1cdbd2cSJim Jagielski } 213*b1cdbd2cSJim Jagielski } 214*b1cdbd2cSJim Jagielski else 215*b1cdbd2cSJim Jagielski throw new IndexOutOfBoundsException(); 216*b1cdbd2cSJim Jagielski 217*b1cdbd2cSJim Jagielski // nothing found? 218*b1cdbd2cSJim Jagielski return null; 219*b1cdbd2cSJim Jagielski } 220*b1cdbd2cSJim Jagielski removeChild(int nIndex)221*b1cdbd2cSJim Jagielski public boolean removeChild (int nIndex) 222*b1cdbd2cSJim Jagielski throws IndexOutOfBoundsException 223*b1cdbd2cSJim Jagielski { 224*b1cdbd2cSJim Jagielski boolean bStatus = false; 225*b1cdbd2cSJim Jagielski if (nIndex >= 0) 226*b1cdbd2cSJim Jagielski { 227*b1cdbd2cSJim Jagielski for (int i=0; i<maHandlers.size(); i++) 228*b1cdbd2cSJim Jagielski { 229*b1cdbd2cSJim Jagielski // check if this handler has the child, and if not 230*b1cdbd2cSJim Jagielski // search with next handler 231*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 232*b1cdbd2cSJim Jagielski if (nIndex < aDescriptor.mnChildCount) 233*b1cdbd2cSJim Jagielski { 234*b1cdbd2cSJim Jagielski bStatus = aDescriptor.maHandler.removeChild (this, nIndex); 235*b1cdbd2cSJim Jagielski aDescriptor.mnChildCount = aDescriptor.maHandler.getChildCount (this); 236*b1cdbd2cSJim Jagielski break; 237*b1cdbd2cSJim Jagielski } 238*b1cdbd2cSJim Jagielski else 239*b1cdbd2cSJim Jagielski nIndex -= aDescriptor.mnChildCount; 240*b1cdbd2cSJim Jagielski } 241*b1cdbd2cSJim Jagielski } 242*b1cdbd2cSJim Jagielski else 243*b1cdbd2cSJim Jagielski throw new IndexOutOfBoundsException(); 244*b1cdbd2cSJim Jagielski 245*b1cdbd2cSJim Jagielski return bStatus; 246*b1cdbd2cSJim Jagielski } 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski indexOf(AccessibleTreeNode aNode)249*b1cdbd2cSJim Jagielski public int indexOf (AccessibleTreeNode aNode) 250*b1cdbd2cSJim Jagielski { 251*b1cdbd2cSJim Jagielski int nBaseIndex = 0; 252*b1cdbd2cSJim Jagielski if (aNode != null) 253*b1cdbd2cSJim Jagielski { 254*b1cdbd2cSJim Jagielski for (int i=0; i<maHandlers.size(); i++) 255*b1cdbd2cSJim Jagielski { 256*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 257*b1cdbd2cSJim Jagielski int nIndex = aDescriptor.maHandler.indexOf (aNode); 258*b1cdbd2cSJim Jagielski if (nIndex >= 0) 259*b1cdbd2cSJim Jagielski return nBaseIndex + nIndex; 260*b1cdbd2cSJim Jagielski else 261*b1cdbd2cSJim Jagielski nBaseIndex += aDescriptor.mnChildCount; 262*b1cdbd2cSJim Jagielski } 263*b1cdbd2cSJim Jagielski } 264*b1cdbd2cSJim Jagielski 265*b1cdbd2cSJim Jagielski return -1; 266*b1cdbd2cSJim Jagielski } 267*b1cdbd2cSJim Jagielski 268*b1cdbd2cSJim Jagielski /** this node is a leaf if have no handlers, or is those 269*b1cdbd2cSJim Jagielski handlers show no children */ isLeaf()270*b1cdbd2cSJim Jagielski public boolean isLeaf() 271*b1cdbd2cSJim Jagielski { 272*b1cdbd2cSJim Jagielski return (maHandlers.size() == 0);// || (getChildCount() == 0); 273*b1cdbd2cSJim Jagielski } 274*b1cdbd2cSJim Jagielski equals(Object aOther)275*b1cdbd2cSJim Jagielski public boolean equals (Object aOther) 276*b1cdbd2cSJim Jagielski { 277*b1cdbd2cSJim Jagielski return (this == aOther) || (aOther!=null && aOther.equals(mxContext)); 278*b1cdbd2cSJim Jagielski } 279*b1cdbd2cSJim Jagielski 280*b1cdbd2cSJim Jagielski 281*b1cdbd2cSJim Jagielski /** iterate over handlers until the child is found */ getActions(Vector aActions)282*b1cdbd2cSJim Jagielski public void getActions(Vector aActions) 283*b1cdbd2cSJim Jagielski { 284*b1cdbd2cSJim Jagielski for(int i = 0; i < maHandlers.size(); i++) 285*b1cdbd2cSJim Jagielski { 286*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 287*b1cdbd2cSJim Jagielski NodeHandler aHandler = aDescriptor.maHandler; 288*b1cdbd2cSJim Jagielski String[] aHandlerActions = aHandler.getActions (this); 289*b1cdbd2cSJim Jagielski for(int j = 0; j < aHandlerActions.length; j++ ) 290*b1cdbd2cSJim Jagielski { 291*b1cdbd2cSJim Jagielski aActions.add( aHandlerActions[j] ); 292*b1cdbd2cSJim Jagielski } 293*b1cdbd2cSJim Jagielski } 294*b1cdbd2cSJim Jagielski } 295*b1cdbd2cSJim Jagielski performAction( int nIndex )296*b1cdbd2cSJim Jagielski public void performAction( int nIndex ) 297*b1cdbd2cSJim Jagielski { 298*b1cdbd2cSJim Jagielski if( nIndex >= 0 ) 299*b1cdbd2cSJim Jagielski { 300*b1cdbd2cSJim Jagielski for(int i = 0; i < maHandlers.size(); i++) 301*b1cdbd2cSJim Jagielski { 302*b1cdbd2cSJim Jagielski // check if this handler has the child, and if not 303*b1cdbd2cSJim Jagielski // search with next handler 304*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 305*b1cdbd2cSJim Jagielski NodeHandler aHandler = aDescriptor.maHandler; 306*b1cdbd2cSJim Jagielski int nCount = aHandler.getActions(this).length; 307*b1cdbd2cSJim Jagielski if( nCount > nIndex ) 308*b1cdbd2cSJim Jagielski { 309*b1cdbd2cSJim Jagielski aHandler.performAction(this, nIndex ); 310*b1cdbd2cSJim Jagielski return; 311*b1cdbd2cSJim Jagielski } 312*b1cdbd2cSJim Jagielski else 313*b1cdbd2cSJim Jagielski nIndex -= nCount; 314*b1cdbd2cSJim Jagielski } 315*b1cdbd2cSJim Jagielski } 316*b1cdbd2cSJim Jagielski } 317*b1cdbd2cSJim Jagielski 318*b1cdbd2cSJim Jagielski /** Try to add the specified accessible object as new accessible child of the 319*b1cdbd2cSJim Jagielski AccessibleTreeHandler. 320*b1cdbd2cSJim Jagielski Note that child is used in another context than 321*b1cdbd2cSJim Jagielski it is used in the other methods of this class. 322*b1cdbd2cSJim Jagielski */ addAccessibleChild(XAccessible xChild)323*b1cdbd2cSJim Jagielski public AccessibleTreeNode addAccessibleChild (XAccessible xChild) 324*b1cdbd2cSJim Jagielski { 325*b1cdbd2cSJim Jagielski for(int i = 0; i < maHandlers.size(); i++) 326*b1cdbd2cSJim Jagielski { 327*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 328*b1cdbd2cSJim Jagielski if (aDescriptor.maHandler instanceof AccessibleTreeHandler) 329*b1cdbd2cSJim Jagielski { 330*b1cdbd2cSJim Jagielski AccessibleTreeHandler aHandler = (AccessibleTreeHandler)aDescriptor.maHandler; 331*b1cdbd2cSJim Jagielski AccessibleTreeNode aNode = aHandler.addAccessibleChild (this, xChild); 332*b1cdbd2cSJim Jagielski aDescriptor.mnChildCount = aHandler.getChildCount (this); 333*b1cdbd2cSJim Jagielski return aNode; 334*b1cdbd2cSJim Jagielski } 335*b1cdbd2cSJim Jagielski } 336*b1cdbd2cSJim Jagielski return null; 337*b1cdbd2cSJim Jagielski } 338*b1cdbd2cSJim Jagielski 339*b1cdbd2cSJim Jagielski /** Update the specified handlers. 340*b1cdbd2cSJim Jagielski @return 341*b1cdbd2cSJim Jagielski The returned array containes the indices of the updated children 342*b1cdbd2cSJim Jagielski and can be used to create a TreeModelEvent. 343*b1cdbd2cSJim Jagielski */ updateChildren(java.lang.Class class1)344*b1cdbd2cSJim Jagielski public Vector updateChildren (java.lang.Class class1) 345*b1cdbd2cSJim Jagielski { 346*b1cdbd2cSJim Jagielski return updateChildren (class1, null); 347*b1cdbd2cSJim Jagielski } 348*b1cdbd2cSJim Jagielski updateChildren(java.lang.Class class1, java.lang.Class class2)349*b1cdbd2cSJim Jagielski public Vector updateChildren (java.lang.Class class1, java.lang.Class class2) 350*b1cdbd2cSJim Jagielski { 351*b1cdbd2cSJim Jagielski Vector aChildIndices = new Vector(); 352*b1cdbd2cSJim Jagielski int nOffset = 0; 353*b1cdbd2cSJim Jagielski for(int i=0; i < maHandlers.size(); i++) 354*b1cdbd2cSJim Jagielski { 355*b1cdbd2cSJim Jagielski HandlerDescriptor aDescriptor = getHandlerDescriptor (i); 356*b1cdbd2cSJim Jagielski if ((class1.isInstance(aDescriptor.maHandler)) 357*b1cdbd2cSJim Jagielski || (class2 !=null && class2.isInstance(aDescriptor.maHandler))) 358*b1cdbd2cSJim Jagielski { 359*b1cdbd2cSJim Jagielski aDescriptor.maHandler.update(this); 360*b1cdbd2cSJim Jagielski // Get updated number of children. 361*b1cdbd2cSJim Jagielski int nChildCount = aDescriptor.maHandler.getChildCount (this); 362*b1cdbd2cSJim Jagielski aDescriptor.mnChildCount = nChildCount; 363*b1cdbd2cSJim Jagielski // Fill in the indices of the updated children. 364*b1cdbd2cSJim Jagielski for (int j=0; j<nChildCount; j++) 365*b1cdbd2cSJim Jagielski aChildIndices.add(new Integer(j+nOffset)); 366*b1cdbd2cSJim Jagielski } 367*b1cdbd2cSJim Jagielski nOffset += aDescriptor.mnChildCount; 368*b1cdbd2cSJim Jagielski } 369*b1cdbd2cSJim Jagielski return aChildIndices; 370*b1cdbd2cSJim Jagielski } 371*b1cdbd2cSJim Jagielski } 372