1 /*
2  * This file is part of the LibreOffice project.
3  *
4  * This Source Code Form is subject to the terms of the Mozilla Public
5  * License, v. 2.0. If a copy of the MPL was not distributed with this
6  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
7  *
8  * This file incorporates work covered by the following license notice:
9  *
10  *   Licensed to the Apache Software Foundation (ASF) under one or more
11  *   contributor license agreements. See the NOTICE file distributed
12  *   with this work for additional information regarding copyright
13  *   ownership. The ASF licenses this file to you under the Apache
14  *   License, Version 2.0 (the "License"); you may not use this file
15  *   except in compliance with the License. You may obtain a copy of
16  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
17  */
18 
19 import com.sun.star.accessibility.XAccessible;
20 import com.sun.star.accessibility.XAccessibleContext;
21 import com.sun.star.accessibility.XAccessibleStateSet;
22 import tools.NameProvider;
23 
24 class AccessibleContextHandler
25     extends NodeHandler
26 {
27     @Override
createHandler(XAccessibleContext xContext)28     public NodeHandler createHandler (XAccessibleContext xContext)
29     {
30         if (xContext != null)
31             return new AccessibleContextHandler (xContext);
32         else
33             return null;
34     }
35 
AccessibleContextHandler()36     public AccessibleContextHandler ()
37     {
38         super ();
39     }
40 
AccessibleContextHandler(XAccessibleContext xContext)41     private AccessibleContextHandler (XAccessibleContext xContext)
42     {
43         super();
44         if (xContext != null)
45             maChildList.setSize (4);
46     }
47 
48     @Override
createChild(AccessibleTreeNode aParent, int nIndex)49     public AccessibleTreeNode createChild (AccessibleTreeNode aParent, int nIndex)
50     {
51         XAccessibleContext xContext = null;
52         if (aParent instanceof AccTreeNode)
53             xContext = ((AccTreeNode)aParent).getContext();
54 
55         String sChild = "";
56         if (xContext != null)
57         {
58             switch( nIndex )
59             {
60                 case 0:
61                     sChild = "Description: " +
62                         xContext.getAccessibleDescription();
63                     break;
64                 case 1:
65                     int nRole = xContext.getAccessibleRole();
66                     sChild = "Role: " + nRole + " (" + NameProvider.getRoleName(nRole) + ")";
67                     break;
68                 case 2:
69                     XAccessible xParent = xContext.getAccessibleParent();
70                     sChild = "Has parent: " + (xParent!=null ? "yes" : "no");
71                     break;
72                 case 3:
73                     sChild = "";
74                     XAccessibleStateSet xStateSet =
75                         xContext.getAccessibleStateSet();
76                     if (xStateSet != null)
77                     {
78                         for (short i=0; i<=30; i++)
79                         {
80                             if (xStateSet.contains (i))
81                             {
82                                 if (sChild.compareTo ("") != 0)
83                                     sChild += ", ";
84                                 sChild += NameProvider.getStateName(i);
85                             }
86                         }
87                     }
88                     else
89                         sChild += "no state set";
90                     sChild = "State set: " + sChild;
91             }
92         }
93         return new StringNode (sChild, aParent);
94     }
95 }
96