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