blob: 32195960fb45d6aa48a33650aa6ed043f7f19720 [file] [log] [blame]
/**************************************************************
*
* 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)
{
}
}