| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| 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; |
| } |