summaryrefslogtreecommitdiff
path: root/toolkit/test/accessibility/AccessibilityTreeModelBase.java
blob: b15379e7d994640f63832f628f93d15f2552c0b0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
 * This file is part of the LibreOffice project.
 *
 * This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
 *
 * This file incorporates work covered by the following license notice:
 *
 *   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 .
 */

import java.util.ArrayList;

import javax.swing.event.TreeModelListener;
import javax.swing.tree.TreeModel;
import javax.swing.tree.TreePath;

public class AccessibilityTreeModelBase
    implements TreeModel
{
    public AccessibilityTreeModelBase ()
    {
        setRoot (null);
        maTMListeners = new ArrayList<TreeModelListener>();
    }

    public synchronized void addTreeModelListener(TreeModelListener l)
    {
        maTMListeners.add(l);
    }

    public synchronized void removeTreeModelListener(TreeModelListener l)
    {
        maTMListeners.remove(l);
    }

    public synchronized int getChildCount(Object aParent)
    {
        return (aParent instanceof AccessibleTreeNode) ?
            ((AccessibleTreeNode)aParent).getChildCount() : 0;
    }

    public synchronized Object getChild (Object aParent, int nIndex)
    {
        Object aChild = null;
        try
        {
            if (aParent != null && aParent instanceof AccessibleTreeNode)
                aChild = ((AccessibleTreeNode)aParent).getChild(nIndex);
            else
                System.out.println ("getChild called for unknown parent node");
        }
        catch (com.sun.star.lang.IndexOutOfBoundsException e)
        {
            aChild = ("no child " + nIndex + " from " + aParent + ": " + e);
        }
        return aChild;
    }

    public synchronized Object getChildNoCreate (Object aParent, int nIndex)
    {
        Object aChild = null;
        try
        {
            if (aParent != null && aParent instanceof AccessibleTreeNode)
                aChild = ((AccessibleTreeNode)aParent).getChildNoCreate(nIndex);
            else
                System.out.println ("getChild called for unknown parent node");
        }
        catch (com.sun.star.lang.IndexOutOfBoundsException e)
        { }
        return aChild;
    }

    /** iterate over all children and look for child */
    public synchronized int getIndexOfChild (Object aParent, Object aChild)
    {
        int nIndex = -1;
        try
        {
            if ((aParent instanceof AccessibleTreeNode) && (aChild instanceof AccessibleTreeNode))
            {
                AccessibleTreeNode aParentNode = (AccessibleTreeNode) aParent;
                AccessibleTreeNode aChildNode = (AccessibleTreeNode) aChild;

                int nChildCount = aParentNode.getChildCount();
                for( int i = 0; i < nChildCount; i++ )
                {
                    if (aChildNode.equals (aParentNode.getChild (i)))
                    {
                        nIndex = i;
                        break;
                    }
                }
            }
        }
        catch (com.sun.star.lang.IndexOutOfBoundsException e)
        {
            // Return -1 by falling through.
        }

        // not found?
        return nIndex;
    }

    public boolean isLeaf (Object aNode)
    {
        return (aNode instanceof AccessibleTreeNode) ?
            ((AccessibleTreeNode)aNode).isLeaf() : true;
    }



    public synchronized Object getRoot()
    {
        return maRoot;
    }

    public void valueForPathChanged(TreePath path, Object newValue)
    { }

    protected synchronized void setRoot (AccessibleTreeNode aRoot)
    {
        maRoot = aRoot;
    }


    // The list of TreeModelListener objects.
    protected ArrayList<TreeModelListener> maTMListeners;

    // The root node of the tree.  Use setRoot to change it.
    private AccessibleTreeNode maRoot = null;
}