xref: /AOO41X/main/toolkit/test/accessibility/SelectionDialog.java (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
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