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