import com.sun.star.uno.UnoRuntime; import com.sun.star.accessibility.XAccessible; import com.sun.star.accessibility.XAccessibleContext; import com.sun.star.accessibility.XAccessibleSelection; import com.sun.star.lang.IndexOutOfBoundsException; import javax.swing.*; import java.awt.*; import java.util.Vector; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; /** * Display a dialog with a list-box of children and select/deselect buttons */ class SelectionDialog extends JDialog implements ActionListener { public SelectionDialog (AccTreeNode aNode) { super (AccessibilityWorkBench.Instance()); maNode = aNode; Layout(); } /** build dialog */ protected void Layout () { setTitle( "Select" ); // vertical stacking of the elements Container aContent = getContentPane(); // label with explanation aContent.add( new JLabel( "Select/Deselect child elements" ), BorderLayout.NORTH ); // the JListBox maChildrenSelector = new JList (GetChildrenList()); maChildrenSelector.setPreferredSize (new Dimension (500,300)); aContent.add (maChildrenSelector, BorderLayout.CENTER); maChildrenSelector.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); JPanel aButtons = new JPanel(); aButtons.setLayout( new FlowLayout() ); JButton aButton; aButton = new JButton( "Select" ); aButton.setActionCommand( "Select" ); aButton.addActionListener( this ); aButtons.add( aButton ); aButton = new JButton( "Deselect" ); aButton.setActionCommand( "Deselect" ); aButton.addActionListener( this ); aButtons.add( aButton ); aButton = new JButton( "Select all" ); aButton.setActionCommand( "Select all" ); aButton.addActionListener( this ); aButtons.add( aButton ); aButton = new JButton( "Clear Selection" ); aButton.setActionCommand( "Clear Selection" ); aButton.addActionListener( this ); aButtons.add( aButton ); aButton = new JButton( "Close" ); aButton.setActionCommand( "Close" ); aButton.addActionListener( this ); aButtons.add( aButton ); // add Panel with buttons aContent.add( aButtons, BorderLayout.SOUTH ); setSize( getPreferredSize() ); } /** Get a list of all children */ private Vector GetChildrenList () { mxSelection = maNode.getSelection(); XAccessibleContext xContext = maNode.getContext(); int nCount = xContext.getAccessibleChildCount(); Vector aChildVector = new Vector(); for(int i = 0; i < nCount; i++) { try { XAccessible xChild = xContext.getAccessibleChild(i); XAccessibleContext xChildContext = xChild.getAccessibleContext(); aChildVector.add( i + " " + xChildContext.getAccessibleName()); } catch( IndexOutOfBoundsException e ) { aChildVector.add( "ERROR: IndexOutOfBoundsException" ); } } return aChildVector; } void close () { hide(); dispose(); } void select() { try { mxSelection.selectAccessibleChild (maChildrenSelector.getSelectedIndex()); } catch( IndexOutOfBoundsException e ) { JOptionPane.showMessageDialog( AccessibilityWorkBench.Instance(), "Can't select: IndexOutofBounds", "Error in selectAccessibleChild", JOptionPane.ERROR_MESSAGE); } } void deselect() { try { mxSelection.deselectAccessibleChild( maChildrenSelector.getSelectedIndex()); } catch( IndexOutOfBoundsException e ) { JOptionPane.showMessageDialog( AccessibilityWorkBench.Instance(), "Can't deselect: IndexOutofBounds", "Error in deselectAccessibleChild", JOptionPane.ERROR_MESSAGE); } } void selectAll() { mxSelection.selectAllAccessibleChildren(); } void clearSelection() { mxSelection.clearAccessibleSelection(); } public void actionPerformed(ActionEvent e) { String sCommand = e.getActionCommand(); if( "Close".equals( sCommand ) ) close(); else if ( "Select".equals( sCommand ) ) select(); else if ( "Deselect".equals( sCommand ) ) deselect(); else if ( "Clear Selection".equals( sCommand ) ) clearSelection(); else if ( "Select all".equals( sCommand ) ) selectAll(); } private JList maChildrenSelector; private XAccessibleSelection mxSelection; private AccTreeNode maNode; }