1*1b0aaa91SAndrew Rist /**************************************************************
2*1b0aaa91SAndrew Rist  *
3*1b0aaa91SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*1b0aaa91SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*1b0aaa91SAndrew Rist  * distributed with this work for additional information
6*1b0aaa91SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*1b0aaa91SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*1b0aaa91SAndrew Rist  * "License"); you may not use this file except in compliance
9*1b0aaa91SAndrew Rist  * with the License.  You may obtain a copy of the License at
10*1b0aaa91SAndrew Rist  *
11*1b0aaa91SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*1b0aaa91SAndrew Rist  *
13*1b0aaa91SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*1b0aaa91SAndrew Rist  * software distributed under the License is distributed on an
15*1b0aaa91SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*1b0aaa91SAndrew Rist  * KIND, either express or implied.  See the License for the
17*1b0aaa91SAndrew Rist  * specific language governing permissions and limitations
18*1b0aaa91SAndrew Rist  * under the License.
19*1b0aaa91SAndrew Rist  *
20*1b0aaa91SAndrew Rist  *************************************************************/
21*1b0aaa91SAndrew Rist 
22cdf0e10cSrcweir 
23cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime;
24cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext;
25cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleAction;
26cdf0e10cSrcweir import com.sun.star.lang.IndexOutOfBoundsException;
27cdf0e10cSrcweir 
28cdf0e10cSrcweir class AccessibleActionHandler
29cdf0e10cSrcweir     extends NodeHandler
30cdf0e10cSrcweir {
createHandler(XAccessibleContext xContext)31cdf0e10cSrcweir     public NodeHandler createHandler (XAccessibleContext xContext)
32cdf0e10cSrcweir     {
33cdf0e10cSrcweir         XAccessibleAction xEComponent =
34cdf0e10cSrcweir             (XAccessibleAction) UnoRuntime.queryInterface (
35cdf0e10cSrcweir                 XAccessibleAction.class, xContext);
36cdf0e10cSrcweir         if (xEComponent != null)
37cdf0e10cSrcweir             return new AccessibleActionHandler (xEComponent);
38cdf0e10cSrcweir         else
39cdf0e10cSrcweir             return null;
40cdf0e10cSrcweir     }
41cdf0e10cSrcweir 
AccessibleActionHandler()42cdf0e10cSrcweir     public AccessibleActionHandler ()
43cdf0e10cSrcweir     {
44cdf0e10cSrcweir     }
45cdf0e10cSrcweir 
AccessibleActionHandler(XAccessibleAction xAction)46cdf0e10cSrcweir     public AccessibleActionHandler (XAccessibleAction xAction)
47cdf0e10cSrcweir     {
48cdf0e10cSrcweir         if (xAction != null)
49cdf0e10cSrcweir             maChildList.setSize (1 + xAction.getAccessibleActionCount());
50cdf0e10cSrcweir     }
51cdf0e10cSrcweir 
getAction(AccTreeNode aParent)52cdf0e10cSrcweir     protected static XAccessibleAction getAction (AccTreeNode aParent)
53cdf0e10cSrcweir     {
54cdf0e10cSrcweir         return (XAccessibleAction) UnoRuntime.queryInterface (
55cdf0e10cSrcweir             XAccessibleAction.class, aParent.getContext());
56cdf0e10cSrcweir     }
57cdf0e10cSrcweir 
createChild( AccessibleTreeNode aParent, int nIndex)58cdf0e10cSrcweir     public AccessibleTreeNode createChild (
59cdf0e10cSrcweir         AccessibleTreeNode aParent,
60cdf0e10cSrcweir         int nIndex)
61cdf0e10cSrcweir     {
62cdf0e10cSrcweir         AccessibleTreeNode aChild = null;
63cdf0e10cSrcweir 
64cdf0e10cSrcweir         if (aParent instanceof AccTreeNode)
65cdf0e10cSrcweir         {
66cdf0e10cSrcweir             XAccessibleAction xAction = getAction ((AccTreeNode)aParent);
67cdf0e10cSrcweir             if( xAction != null )
68cdf0e10cSrcweir             {
69cdf0e10cSrcweir                 if (nIndex == 0)
70cdf0e10cSrcweir                     aChild = new StringNode ("Number of actions: " + xAction.getAccessibleActionCount(),
71cdf0e10cSrcweir                         aParent);
72cdf0e10cSrcweir                 else
73cdf0e10cSrcweir                 {
74cdf0e10cSrcweir                     nIndex -= 1;
75cdf0e10cSrcweir                     try
76cdf0e10cSrcweir                     {
77cdf0e10cSrcweir                         aChild = new AccessibleActionNode (
78cdf0e10cSrcweir                             "Action " + nIndex + " : "
79cdf0e10cSrcweir                             + xAction.getAccessibleActionDescription (nIndex),
80cdf0e10cSrcweir                             aParent,
81cdf0e10cSrcweir                             nIndex);
82cdf0e10cSrcweir                     }
83cdf0e10cSrcweir                     catch( IndexOutOfBoundsException e )
84cdf0e10cSrcweir                     {
85cdf0e10cSrcweir                         aChild = new StringNode ("ERROR", aParent);
86cdf0e10cSrcweir                     }
87cdf0e10cSrcweir                 }
88cdf0e10cSrcweir             }
89cdf0e10cSrcweir         }
90cdf0e10cSrcweir 
91cdf0e10cSrcweir         return aChild;
92cdf0e10cSrcweir     }
93cdf0e10cSrcweir }
94