1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski import com.sun.star.uno.UnoRuntime; 23*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.XAccessible; 24*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.XAccessibleContext; 25*b1cdbd2cSJim Jagielski import com.sun.star.accessibility.XAccessibleSelection; 26*b1cdbd2cSJim Jagielski import com.sun.star.lang.IndexOutOfBoundsException; 27*b1cdbd2cSJim Jagielski 28*b1cdbd2cSJim Jagielski import javax.swing.*; 29*b1cdbd2cSJim Jagielski import java.awt.*; 30*b1cdbd2cSJim Jagielski import java.util.Vector; 31*b1cdbd2cSJim Jagielski import java.awt.event.ActionListener; 32*b1cdbd2cSJim Jagielski import java.awt.event.ActionEvent; 33*b1cdbd2cSJim Jagielski 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski 36*b1cdbd2cSJim Jagielski 37*b1cdbd2cSJim Jagielski /** 38*b1cdbd2cSJim Jagielski * Display a dialog with a list-box of children and select/deselect buttons 39*b1cdbd2cSJim Jagielski */ 40*b1cdbd2cSJim Jagielski class SelectionDialog extends JDialog 41*b1cdbd2cSJim Jagielski implements ActionListener 42*b1cdbd2cSJim Jagielski { SelectionDialog(AccTreeNode aNode)43*b1cdbd2cSJim Jagielski public SelectionDialog (AccTreeNode aNode) 44*b1cdbd2cSJim Jagielski { 45*b1cdbd2cSJim Jagielski super (AccessibilityWorkBench.Instance()); 46*b1cdbd2cSJim Jagielski 47*b1cdbd2cSJim Jagielski maNode = aNode; 48*b1cdbd2cSJim Jagielski 49*b1cdbd2cSJim Jagielski Layout(); 50*b1cdbd2cSJim Jagielski } 51*b1cdbd2cSJim Jagielski 52*b1cdbd2cSJim Jagielski /** build dialog */ Layout()53*b1cdbd2cSJim Jagielski protected void Layout () 54*b1cdbd2cSJim Jagielski { 55*b1cdbd2cSJim Jagielski setTitle( "Select" ); 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski // vertical stacking of the elements 58*b1cdbd2cSJim Jagielski Container aContent = getContentPane(); 59*b1cdbd2cSJim Jagielski 60*b1cdbd2cSJim Jagielski // label with explanation 61*b1cdbd2cSJim Jagielski aContent.add( new JLabel( "Select/Deselect child elements" ), 62*b1cdbd2cSJim Jagielski BorderLayout.NORTH ); 63*b1cdbd2cSJim Jagielski 64*b1cdbd2cSJim Jagielski // the JListBox 65*b1cdbd2cSJim Jagielski maChildrenSelector = new JList (GetChildrenList()); 66*b1cdbd2cSJim Jagielski maChildrenSelector.setPreferredSize (new Dimension (500,300)); 67*b1cdbd2cSJim Jagielski aContent.add (maChildrenSelector, BorderLayout.CENTER); 68*b1cdbd2cSJim Jagielski maChildrenSelector.setSelectionMode (ListSelectionModel.SINGLE_SELECTION); 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski JPanel aButtons = new JPanel(); 71*b1cdbd2cSJim Jagielski aButtons.setLayout( new FlowLayout() ); 72*b1cdbd2cSJim Jagielski 73*b1cdbd2cSJim Jagielski JButton aButton; 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski aButton = new JButton( "Select" ); 76*b1cdbd2cSJim Jagielski aButton.setActionCommand( "Select" ); 77*b1cdbd2cSJim Jagielski aButton.addActionListener( this ); 78*b1cdbd2cSJim Jagielski aButtons.add( aButton ); 79*b1cdbd2cSJim Jagielski 80*b1cdbd2cSJim Jagielski aButton = new JButton( "Deselect" ); 81*b1cdbd2cSJim Jagielski aButton.setActionCommand( "Deselect" ); 82*b1cdbd2cSJim Jagielski aButton.addActionListener( this ); 83*b1cdbd2cSJim Jagielski aButtons.add( aButton ); 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski aButton = new JButton( "Select all" ); 86*b1cdbd2cSJim Jagielski aButton.setActionCommand( "Select all" ); 87*b1cdbd2cSJim Jagielski aButton.addActionListener( this ); 88*b1cdbd2cSJim Jagielski aButtons.add( aButton ); 89*b1cdbd2cSJim Jagielski 90*b1cdbd2cSJim Jagielski aButton = new JButton( "Clear Selection" ); 91*b1cdbd2cSJim Jagielski aButton.setActionCommand( "Clear Selection" ); 92*b1cdbd2cSJim Jagielski aButton.addActionListener( this ); 93*b1cdbd2cSJim Jagielski aButtons.add( aButton ); 94*b1cdbd2cSJim Jagielski 95*b1cdbd2cSJim Jagielski aButton = new JButton( "Close" ); 96*b1cdbd2cSJim Jagielski aButton.setActionCommand( "Close" ); 97*b1cdbd2cSJim Jagielski aButton.addActionListener( this ); 98*b1cdbd2cSJim Jagielski aButtons.add( aButton ); 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski // add Panel with buttons 101*b1cdbd2cSJim Jagielski aContent.add( aButtons, BorderLayout.SOUTH ); 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski setSize( getPreferredSize() ); 104*b1cdbd2cSJim Jagielski } 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski /** Get a list of all children 107*b1cdbd2cSJim Jagielski */ GetChildrenList()108*b1cdbd2cSJim Jagielski private Vector GetChildrenList () 109*b1cdbd2cSJim Jagielski { 110*b1cdbd2cSJim Jagielski mxSelection = maNode.getSelection(); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski XAccessibleContext xContext = maNode.getContext(); 113*b1cdbd2cSJim Jagielski int nCount = xContext.getAccessibleChildCount(); 114*b1cdbd2cSJim Jagielski Vector aChildVector = new Vector(); 115*b1cdbd2cSJim Jagielski for(int i = 0; i < nCount; i++) 116*b1cdbd2cSJim Jagielski { 117*b1cdbd2cSJim Jagielski try 118*b1cdbd2cSJim Jagielski { 119*b1cdbd2cSJim Jagielski XAccessible xChild = xContext.getAccessibleChild(i); 120*b1cdbd2cSJim Jagielski XAccessibleContext xChildContext = xChild.getAccessibleContext(); 121*b1cdbd2cSJim Jagielski aChildVector.add( i + " " + xChildContext.getAccessibleName()); 122*b1cdbd2cSJim Jagielski } 123*b1cdbd2cSJim Jagielski catch( IndexOutOfBoundsException e ) 124*b1cdbd2cSJim Jagielski { 125*b1cdbd2cSJim Jagielski aChildVector.add( "ERROR: IndexOutOfBoundsException" ); 126*b1cdbd2cSJim Jagielski } 127*b1cdbd2cSJim Jagielski } 128*b1cdbd2cSJim Jagielski return aChildVector; 129*b1cdbd2cSJim Jagielski } 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski close()132*b1cdbd2cSJim Jagielski void close () 133*b1cdbd2cSJim Jagielski { 134*b1cdbd2cSJim Jagielski hide(); 135*b1cdbd2cSJim Jagielski dispose(); 136*b1cdbd2cSJim Jagielski } 137*b1cdbd2cSJim Jagielski select()138*b1cdbd2cSJim Jagielski void select() 139*b1cdbd2cSJim Jagielski { 140*b1cdbd2cSJim Jagielski try 141*b1cdbd2cSJim Jagielski { 142*b1cdbd2cSJim Jagielski mxSelection.selectAccessibleChild (maChildrenSelector.getSelectedIndex()); 143*b1cdbd2cSJim Jagielski } 144*b1cdbd2cSJim Jagielski catch( IndexOutOfBoundsException e ) 145*b1cdbd2cSJim Jagielski { 146*b1cdbd2cSJim Jagielski JOptionPane.showMessageDialog( AccessibilityWorkBench.Instance(), 147*b1cdbd2cSJim Jagielski "Can't select: IndexOutofBounds", 148*b1cdbd2cSJim Jagielski "Error in selectAccessibleChild", 149*b1cdbd2cSJim Jagielski JOptionPane.ERROR_MESSAGE); 150*b1cdbd2cSJim Jagielski } 151*b1cdbd2cSJim Jagielski } 152*b1cdbd2cSJim Jagielski deselect()153*b1cdbd2cSJim Jagielski void deselect() 154*b1cdbd2cSJim Jagielski { 155*b1cdbd2cSJim Jagielski try 156*b1cdbd2cSJim Jagielski { 157*b1cdbd2cSJim Jagielski mxSelection.deselectAccessibleChild( 158*b1cdbd2cSJim Jagielski maChildrenSelector.getSelectedIndex()); 159*b1cdbd2cSJim Jagielski } 160*b1cdbd2cSJim Jagielski catch( IndexOutOfBoundsException e ) 161*b1cdbd2cSJim Jagielski { 162*b1cdbd2cSJim Jagielski JOptionPane.showMessageDialog( AccessibilityWorkBench.Instance(), 163*b1cdbd2cSJim Jagielski "Can't deselect: IndexOutofBounds", 164*b1cdbd2cSJim Jagielski "Error in deselectAccessibleChild", 165*b1cdbd2cSJim Jagielski JOptionPane.ERROR_MESSAGE); 166*b1cdbd2cSJim Jagielski } 167*b1cdbd2cSJim Jagielski } 168*b1cdbd2cSJim Jagielski selectAll()169*b1cdbd2cSJim Jagielski void selectAll() 170*b1cdbd2cSJim Jagielski { 171*b1cdbd2cSJim Jagielski mxSelection.selectAllAccessibleChildren(); 172*b1cdbd2cSJim Jagielski } 173*b1cdbd2cSJim Jagielski clearSelection()174*b1cdbd2cSJim Jagielski void clearSelection() 175*b1cdbd2cSJim Jagielski { 176*b1cdbd2cSJim Jagielski mxSelection.clearAccessibleSelection(); 177*b1cdbd2cSJim Jagielski } 178*b1cdbd2cSJim Jagielski 179*b1cdbd2cSJim Jagielski 180*b1cdbd2cSJim Jagielski actionPerformed(ActionEvent e)181*b1cdbd2cSJim Jagielski public void actionPerformed(ActionEvent e) 182*b1cdbd2cSJim Jagielski { 183*b1cdbd2cSJim Jagielski String sCommand = e.getActionCommand(); 184*b1cdbd2cSJim Jagielski 185*b1cdbd2cSJim Jagielski if( "Close".equals( sCommand ) ) 186*b1cdbd2cSJim Jagielski close(); 187*b1cdbd2cSJim Jagielski else if ( "Select".equals( sCommand ) ) 188*b1cdbd2cSJim Jagielski select(); 189*b1cdbd2cSJim Jagielski else if ( "Deselect".equals( sCommand ) ) 190*b1cdbd2cSJim Jagielski deselect(); 191*b1cdbd2cSJim Jagielski else if ( "Clear Selection".equals( sCommand ) ) 192*b1cdbd2cSJim Jagielski clearSelection(); 193*b1cdbd2cSJim Jagielski else if ( "Select all".equals( sCommand ) ) 194*b1cdbd2cSJim Jagielski selectAll(); 195*b1cdbd2cSJim Jagielski } 196*b1cdbd2cSJim Jagielski 197*b1cdbd2cSJim Jagielski private JList maChildrenSelector; 198*b1cdbd2cSJim Jagielski private XAccessibleSelection mxSelection; 199*b1cdbd2cSJim Jagielski private AccTreeNode maNode; 200*b1cdbd2cSJim Jagielski } 201