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