| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| import java.util.Vector; |
| |
| |
| /** |
| * Map an arbitrary object into parts of a tree node. |
| */ |
| abstract class NodeHandler |
| { |
| /** This vector is used as cache for the child objects. |
| */ |
| protected Vector maChildList; |
| |
| |
| public abstract NodeHandler createHandler ( |
| com.sun.star.accessibility.XAccessibleContext xContext); |
| |
| public NodeHandler () |
| { |
| maChildList = new Vector (); |
| } |
| |
| /** Clear the cache of child objects. |
| */ |
| public void clear () |
| { |
| synchronized (maChildList) |
| { |
| maChildList = new Vector (); |
| } |
| } |
| |
| /** This factory method creates an individual handler for the specified |
| object that may hold information to accelerate the access to its children. |
| */ |
| // public abstract NodeHandler createHandler (Object aObject); |
| |
| /** return the number of children this object has */ |
| public int getChildCount(Object aObject) |
| { |
| synchronized (maChildList) |
| { |
| return maChildList.size(); |
| } |
| } |
| |
| /** |
| * return a child object. Complex |
| * children have to be AccTreeNode instances. |
| * @see AccTreeNode |
| */ |
| public AccessibleTreeNode getChild (AccessibleTreeNode aParent, int nIndex) |
| { |
| synchronized (maChildList) |
| { |
| AccessibleTreeNode aChild = (AccessibleTreeNode)maChildList.get(nIndex); |
| if (aChild == null) |
| { |
| aChild = createChild (aParent, nIndex); |
| if (aChild == null) |
| aChild = new StringNode ("could not create child", aParent); |
| maChildList.setElementAt (aChild, nIndex); |
| } |
| return aChild; |
| } |
| } |
| |
| public AccessibleTreeNode getChildNoCreate (AccessibleTreeNode aParent, int nIndex) |
| { |
| synchronized (maChildList) |
| { |
| return (AccessibleTreeNode)maChildList.get(nIndex); |
| } |
| } |
| |
| /** Remove the specified child from the list of children. |
| */ |
| public boolean removeChild (AccessibleTreeNode aNode, int nIndex) |
| { |
| try |
| { |
| synchronized (maChildList) |
| { |
| System.out.println (" removing child at position " + nIndex + ": " |
| + maChildList.elementAt (nIndex)); |
| maChildList.remove (nIndex); |
| } |
| } |
| catch (Exception e) |
| { |
| return false; |
| } |
| return true; |
| } |
| |
| public int indexOf (AccessibleTreeNode aNode) |
| { |
| synchronized (maChildList) |
| { |
| return maChildList.indexOf (aNode); |
| } |
| } |
| |
| /** Create a child object for the specified data. This method is called |
| usually from getChild and put there into the cache. |
| */ |
| public abstract AccessibleTreeNode createChild ( |
| AccessibleTreeNode aParent, int nIndex); |
| |
| // |
| // The following methods support editing of children and actions. |
| // They have default implementations for no actions and read-only. |
| // |
| |
| /** May this child be changed? */ |
| public boolean isChildEditable (AccessibleTreeNode aNode, int nIndex) |
| { |
| return false; |
| } |
| |
| /** change this child's value */ |
| // public void setChild(Object aObject, int nIndex) { } |
| |
| |
| /** get names of suported actions */ |
| public String[] getActions (AccessibleTreeNode aNode) |
| { |
| return new String[] {}; |
| } |
| |
| /** perform action */ |
| public void performAction (AccessibleTreeNode aNode, int nIndex) |
| { |
| } |
| |
| /** Update all children. |
| */ |
| public void update (AccessibleTreeNode aNode) |
| { |
| } |
| } |