1*cdf0e10cSrcweir import com.sun.star.uno.UnoRuntime; 2*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessible; 3*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleContext; 4*cdf0e10cSrcweir import com.sun.star.accessibility.XAccessibleSelection; 5*cdf0e10cSrcweir import com.sun.star.lang.IndexOutOfBoundsException; 6*cdf0e10cSrcweir 7*cdf0e10cSrcweir import javax.swing.*; 8*cdf0e10cSrcweir import java.awt.*; 9*cdf0e10cSrcweir import java.util.Vector; 10*cdf0e10cSrcweir import java.awt.event.ActionListener; 11*cdf0e10cSrcweir import java.awt.event.ActionEvent; 12*cdf0e10cSrcweir 13*cdf0e10cSrcweir 14*cdf0e10cSrcweir 15*cdf0e10cSrcweir 16*cdf0e10cSrcweir /** 17*cdf0e10cSrcweir * Display a dialog with a list-box of children and select/deselect buttons 18*cdf0e10cSrcweir */ 19*cdf0e10cSrcweir class SelectionDialog extends JDialog 20*cdf0e10cSrcweir implements ActionListener 21*cdf0e10cSrcweir { 22*cdf0e10cSrcweir public SelectionDialog (AccTreeNode aNode) 23*cdf0e10cSrcweir { 24*cdf0e10cSrcweir super (AccessibilityWorkBench.Instance()); 25*cdf0e10cSrcweir 26*cdf0e10cSrcweir maNode = aNode; 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir Layout(); 29*cdf0e10cSrcweir } 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir /** build dialog */ 32*cdf0e10cSrcweir protected void Layout () 33*cdf0e10cSrcweir { 34*cdf0e10cSrcweir setTitle( "Select" ); 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir // vertical stacking of the elements 37*cdf0e10cSrcweir Container aContent = getContentPane(); 38*cdf0e10cSrcweir 39*cdf0e10cSrcweir // label with explanation 40*cdf0e10cSrcweir aContent.add( new JLabel( "Select/Deselect child elements" ), 41*cdf0e10cSrcweir BorderLayout.NORTH ); 42*cdf0e10cSrcweir 43*cdf0e10cSrcweir // the JListBox 44*cdf0e10cSrcweir maChildrenSelector = new JList (GetChildrenList()); 45*cdf0e10cSrcweir maChildrenSelector.setPreferredSize (new Dimension (500,300)); 46*cdf0e10cSrcweir aContent.add (maChildrenSelector, BorderLayout.CENTER); 47*cdf0e10cSrcweir maChildrenSelector.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir JPanel aButtons = new JPanel(); 50*cdf0e10cSrcweir aButtons.setLayout( new FlowLayout() ); 51*cdf0e10cSrcweir 52*cdf0e10cSrcweir JButton aButton; 53*cdf0e10cSrcweir 54*cdf0e10cSrcweir aButton = new JButton( "Select" ); 55*cdf0e10cSrcweir aButton.setActionCommand( "Select" ); 56*cdf0e10cSrcweir aButton.addActionListener( this ); 57*cdf0e10cSrcweir aButtons.add( aButton ); 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir aButton = new JButton( "Deselect" ); 60*cdf0e10cSrcweir aButton.setActionCommand( "Deselect" ); 61*cdf0e10cSrcweir aButton.addActionListener( this ); 62*cdf0e10cSrcweir aButtons.add( aButton ); 63*cdf0e10cSrcweir 64*cdf0e10cSrcweir aButton = new JButton( "Select all" ); 65*cdf0e10cSrcweir aButton.setActionCommand( "Select all" ); 66*cdf0e10cSrcweir aButton.addActionListener( this ); 67*cdf0e10cSrcweir aButtons.add( aButton ); 68*cdf0e10cSrcweir 69*cdf0e10cSrcweir aButton = new JButton( "Clear Selection" ); 70*cdf0e10cSrcweir aButton.setActionCommand( "Clear Selection" ); 71*cdf0e10cSrcweir aButton.addActionListener( this ); 72*cdf0e10cSrcweir aButtons.add( aButton ); 73*cdf0e10cSrcweir 74*cdf0e10cSrcweir aButton = new JButton( "Close" ); 75*cdf0e10cSrcweir aButton.setActionCommand( "Close" ); 76*cdf0e10cSrcweir aButton.addActionListener( this ); 77*cdf0e10cSrcweir aButtons.add( aButton ); 78*cdf0e10cSrcweir 79*cdf0e10cSrcweir // add Panel with buttons 80*cdf0e10cSrcweir aContent.add( aButtons, BorderLayout.SOUTH ); 81*cdf0e10cSrcweir 82*cdf0e10cSrcweir setSize( getPreferredSize() ); 83*cdf0e10cSrcweir } 84*cdf0e10cSrcweir 85*cdf0e10cSrcweir /** Get a list of all children 86*cdf0e10cSrcweir */ 87*cdf0e10cSrcweir private Vector GetChildrenList () 88*cdf0e10cSrcweir { 89*cdf0e10cSrcweir mxSelection = maNode.getSelection(); 90*cdf0e10cSrcweir 91*cdf0e10cSrcweir XAccessibleContext xContext = maNode.getContext(); 92*cdf0e10cSrcweir int nCount = xContext.getAccessibleChildCount(); 93*cdf0e10cSrcweir Vector aChildVector = new Vector(); 94*cdf0e10cSrcweir for(int i = 0; i < nCount; i++) 95*cdf0e10cSrcweir { 96*cdf0e10cSrcweir try 97*cdf0e10cSrcweir { 98*cdf0e10cSrcweir XAccessible xChild = xContext.getAccessibleChild(i); 99*cdf0e10cSrcweir XAccessibleContext xChildContext = xChild.getAccessibleContext(); 100*cdf0e10cSrcweir aChildVector.add( i + " " + xChildContext.getAccessibleName()); 101*cdf0e10cSrcweir } 102*cdf0e10cSrcweir catch( IndexOutOfBoundsException e ) 103*cdf0e10cSrcweir { 104*cdf0e10cSrcweir aChildVector.add( "ERROR: IndexOutOfBoundsException" ); 105*cdf0e10cSrcweir } 106*cdf0e10cSrcweir } 107*cdf0e10cSrcweir return aChildVector; 108*cdf0e10cSrcweir } 109*cdf0e10cSrcweir 110*cdf0e10cSrcweir 111*cdf0e10cSrcweir void close () 112*cdf0e10cSrcweir { 113*cdf0e10cSrcweir hide(); 114*cdf0e10cSrcweir dispose(); 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir 117*cdf0e10cSrcweir void select() 118*cdf0e10cSrcweir { 119*cdf0e10cSrcweir try 120*cdf0e10cSrcweir { 121*cdf0e10cSrcweir mxSelection.selectAccessibleChild (maChildrenSelector.getSelectedIndex()); 122*cdf0e10cSrcweir } 123*cdf0e10cSrcweir catch( IndexOutOfBoundsException e ) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir JOptionPane.showMessageDialog( AccessibilityWorkBench.Instance(), 126*cdf0e10cSrcweir "Can't select: IndexOutofBounds", 127*cdf0e10cSrcweir "Error in selectAccessibleChild", 128*cdf0e10cSrcweir JOptionPane.ERROR_MESSAGE); 129*cdf0e10cSrcweir } 130*cdf0e10cSrcweir } 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir void deselect() 133*cdf0e10cSrcweir { 134*cdf0e10cSrcweir try 135*cdf0e10cSrcweir { 136*cdf0e10cSrcweir mxSelection.deselectAccessibleChild( 137*cdf0e10cSrcweir maChildrenSelector.getSelectedIndex()); 138*cdf0e10cSrcweir } 139*cdf0e10cSrcweir catch( IndexOutOfBoundsException e ) 140*cdf0e10cSrcweir { 141*cdf0e10cSrcweir JOptionPane.showMessageDialog( AccessibilityWorkBench.Instance(), 142*cdf0e10cSrcweir "Can't deselect: IndexOutofBounds", 143*cdf0e10cSrcweir "Error in deselectAccessibleChild", 144*cdf0e10cSrcweir JOptionPane.ERROR_MESSAGE); 145*cdf0e10cSrcweir } 146*cdf0e10cSrcweir } 147*cdf0e10cSrcweir 148*cdf0e10cSrcweir void selectAll() 149*cdf0e10cSrcweir { 150*cdf0e10cSrcweir mxSelection.selectAllAccessibleChildren(); 151*cdf0e10cSrcweir } 152*cdf0e10cSrcweir 153*cdf0e10cSrcweir void clearSelection() 154*cdf0e10cSrcweir { 155*cdf0e10cSrcweir mxSelection.clearAccessibleSelection(); 156*cdf0e10cSrcweir } 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir 159*cdf0e10cSrcweir 160*cdf0e10cSrcweir public void actionPerformed(ActionEvent e) 161*cdf0e10cSrcweir { 162*cdf0e10cSrcweir String sCommand = e.getActionCommand(); 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir if( "Close".equals( sCommand ) ) 165*cdf0e10cSrcweir close(); 166*cdf0e10cSrcweir else if ( "Select".equals( sCommand ) ) 167*cdf0e10cSrcweir select(); 168*cdf0e10cSrcweir else if ( "Deselect".equals( sCommand ) ) 169*cdf0e10cSrcweir deselect(); 170*cdf0e10cSrcweir else if ( "Clear Selection".equals( sCommand ) ) 171*cdf0e10cSrcweir clearSelection(); 172*cdf0e10cSrcweir else if ( "Select all".equals( sCommand ) ) 173*cdf0e10cSrcweir selectAll(); 174*cdf0e10cSrcweir } 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir private JList maChildrenSelector; 177*cdf0e10cSrcweir private XAccessibleSelection mxSelection; 178*cdf0e10cSrcweir private AccTreeNode maNode; 179*cdf0e10cSrcweir } 180