xref: /trunk/main/toolkit/test/accessibility/AccessibleCellHandler.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 
2 import com.sun.star.uno.UnoRuntime;
3 import com.sun.star.accessibility.XAccessibleContext;
4 import com.sun.star.accessibility.XAccessibleTable;
5 import com.sun.star.accessibility.XAccessible;
6 
7 
8 class AccessibleCellHandler extends NodeHandler
9 {
10     public NodeHandler createHandler (XAccessibleContext xContext)
11     {
12         AccessibleCellHandler aCellHandler = null;
13         if (xContext != null)
14         {
15             XAccessible xParent = xContext.getAccessibleParent();
16             if (xParent != null)
17             {
18                 XAccessibleTable xTable =
19                     (XAccessibleTable) UnoRuntime.queryInterface (
20                         XAccessibleTable.class, xParent.getAccessibleContext());
21                 if (xTable != null)
22                     aCellHandler = new AccessibleCellHandler (xTable);
23             }
24         }
25         return aCellHandler;
26 
27     }
28 
29     public AccessibleCellHandler ()
30     {
31     }
32 
33     public AccessibleCellHandler (XAccessibleTable xTable)
34     {
35         if (xTable != null)
36             maChildList.setSize (8);
37     }
38 
39     protected static XAccessibleTable getTable(Object aObject)
40     {
41         return (XAccessibleTable) UnoRuntime.queryInterface (
42             XAccessibleTable.class, aObject);
43     }
44 
45     public AccessibleTreeNode createChild (AccessibleTreeNode aParent, int nIndex)
46     {
47         AccessibleTreeNode aChild = null;
48         XAccessibleTable xTable = null;
49         XAccessibleContext xContext = null;
50         AccessibleTreeNode aGrandParent = aParent.getParent();
51         if (aGrandParent instanceof AccTreeNode)
52         {
53             xTable = ((AccTreeNode)aGrandParent).getTable();
54             xContext = ((AccTreeNode)aGrandParent).getContext();
55         }
56         if (aParent instanceof AccTreeNode)
57         {
58             xContext = ((AccTreeNode)aParent).getContext();
59         }
60         try
61         {
62             if( xTable != null && xContext != null )
63             {
64                 switch( nIndex )
65                 {
66                     case 0:
67                         {
68                             int nChild = xContext.getAccessibleIndexInParent();
69                             int nRow = xTable.getAccessibleRow( nChild );
70 
71                             aChild = new StringNode ("# table row: " + nRow, aParent);
72                         }
73                         break;
74                     case 1:
75                         {
76                             int nChild = xContext.getAccessibleIndexInParent();
77                             int nCol = xTable.getAccessibleColumn( nChild );
78 
79                             aChild = new StringNode ("# table column: " + nCol, aParent);
80                         }
81                         break;
82                     case 2:
83                         {
84                             int nChild = xContext.getAccessibleIndexInParent();
85                             int nRow = xTable.getAccessibleRow( nChild );
86                             int nCol = xTable.getAccessibleColumn( nChild );
87                             int nExt = xTable.getAccessibleRowExtentAt( nRow, nCol );
88 
89                             aChild = new StringNode ("# table row extend: " + nExt, aParent);
90                         }
91                         break;
92                      case 3:
93                         {
94                             int nChild = xContext.getAccessibleIndexInParent();
95                             int nRow = xTable.getAccessibleRow( nChild );
96                             int nCol = xTable.getAccessibleColumn( nChild );
97                             int nExt = xTable.getAccessibleColumnExtentAt( nRow, nCol );
98 
99                             aChild = new StringNode ("# table column extend: " + nExt, aParent);
100                         }
101                         break;
102                      case 4:
103                         {
104                             int nChild = xContext.getAccessibleIndexInParent();
105                             int nRow = xTable.getAccessibleRow( nChild );
106                             int nCol = xTable.getAccessibleColumn( nChild );
107                             XAccessible xChild =
108                                 xTable.getAccessibleCellAt( nRow, nCol );
109 
110                             aChild = new StringNode ("# cell name retrieved from table: " + xChild.getAccessibleContext().getAccessibleName(), aParent);
111                         }
112                         break;
113                      case 5:
114                         {
115                             int nChild = xContext.getAccessibleIndexInParent();
116                             int nRow = xTable.getAccessibleRow( nChild );
117                             int nCol = xTable.getAccessibleColumn( nChild );
118                             boolean bSelected =
119                                 xTable.isAccessibleSelected( nRow, nCol );
120 
121                             aChild = new StringNode ("cell is selected: " + bSelected, aParent);
122                         }
123                         break;
124                      case 6:
125                         {
126                             int nChild = xContext.getAccessibleIndexInParent();
127                             int nRow = xTable.getAccessibleRow( nChild );
128                             boolean bSelected =
129                                 xTable.isAccessibleRowSelected( nRow );
130 
131                             aChild = new StringNode ("table row is selected: " + bSelected, aParent);
132                         }
133                         break;
134                      case 7:
135                         {
136                             int nChild = xContext.getAccessibleIndexInParent();
137                             int nCol = xTable.getAccessibleColumn( nChild );
138                             boolean bSelected =
139                                 xTable.isAccessibleColumnSelected( nCol );
140 
141                             aChild = new StringNode ("table column is selected: " + bSelected, aParent);
142                         }
143                         break;
144                     default:
145                         aChild = new StringNode ("unknown child index " + nIndex, aParent);
146                 }
147             }
148         }
149         catch (Exception e)
150         {
151             // Return empty child.
152         }
153 
154         return aChild;
155     }
156 }
157