| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| |
| |
| package org.openoffice.accessibility.awb.view.text; |
| |
| import java.awt.BorderLayout; |
| import java.awt.Container; |
| import java.awt.FlowLayout; |
| import java.awt.event.ActionListener; |
| import java.awt.event.ActionEvent; |
| import javax.swing.JButton; |
| import javax.swing.JCheckBox; |
| import javax.swing.JDialog; |
| import javax.swing.JLabel; |
| import javax.swing.JOptionPane; |
| import javax.swing.JPanel; |
| import javax.swing.JTextArea; |
| import javax.swing.text.JTextComponent; |
| |
| import com.sun.star.accessibility.XAccessibleContext; |
| import com.sun.star.accessibility.XAccessibleText; |
| import com.sun.star.accessibility.XAccessibleEditableText; |
| import com.sun.star.lang.IndexOutOfBoundsException; |
| import com.sun.star.uno.UnoRuntime; |
| |
| |
| /** |
| * Display a dialog with a text field and a pair of cancel/do-it buttons |
| */ |
| class TextActionDialog |
| extends JDialog |
| implements ActionListener |
| { |
| public TextActionDialog ( |
| XAccessibleContext xContext, |
| String sExplanation, |
| String sTitle) |
| { |
| super();// AccessibilityWorkBench.Instance() ); |
| |
| mxContext = xContext; |
| msTitle = sTitle; |
| msExplanation = sExplanation; |
| Layout (); |
| setSize (350, 225); |
| |
| } |
| |
| |
| /** build dialog */ |
| protected void Layout() |
| { |
| setTitle (msTitle); |
| |
| // vertical stacking of the elements |
| Container aContent = getContentPane(); |
| // aContent.setLayout( new BorderLayout() ); |
| |
| // Label with explanation. |
| if (msExplanation.length() > 0) |
| aContent.add (new JLabel (msExplanation), BorderLayout.NORTH); |
| |
| // the text field |
| maText = new JTextArea(); |
| maText.setLineWrap (true); |
| maText.setEditable (false); |
| aContent.add (maText, BorderLayout.CENTER); |
| |
| XAccessibleText xText = (XAccessibleText)UnoRuntime.queryInterface( |
| XAccessibleText.class, mxContext); |
| String sText = xText.getText(); |
| maText.setText (sText); |
| maText.setRows (sText.length() / 40 + 1); |
| maText.setColumns (Math.min (Math.max (40, sText.length()), 20)); |
| |
| JPanel aButtons = new JPanel(); |
| aButtons.setLayout (new FlowLayout()); |
| maIndexToggle = new JCheckBox ("reverse selection"); |
| aButtons.add (maIndexToggle); |
| |
| JButton aActionButton = new JButton (msTitle); |
| aActionButton.setActionCommand ("Action"); |
| aActionButton.addActionListener (this); |
| aButtons.add (aActionButton); |
| |
| JButton aCancelButton = new JButton ("cancel"); |
| aCancelButton.setActionCommand ("Cancel"); |
| aCancelButton.addActionListener (this); |
| aButtons.add (aCancelButton); |
| |
| // add Panel with buttons |
| aContent.add (aButtons, BorderLayout.SOUTH); |
| } |
| |
| protected void Cancel() |
| { |
| hide(); |
| dispose(); |
| } |
| |
| public void actionPerformed(ActionEvent e) |
| { |
| String sCommand = e.getActionCommand(); |
| |
| if( "Cancel".equals( sCommand ) ) |
| Cancel(); |
| else if( "Action".equals( sCommand ) ) |
| Action(); |
| } |
| |
| |
| protected int GetSelectionStart() |
| { |
| return GetSelection(true); |
| } |
| protected int GetSelectionEnd() |
| { |
| return GetSelection(false); |
| } |
| private int GetSelection (boolean bStart) |
| { |
| if (bStart ^ maIndexToggle.isSelected()) |
| return maText.getSelectionStart(); |
| else |
| return maText.getSelectionEnd(); |
| } |
| |
| |
| |
| protected void Action () |
| { |
| String sError = null; |
| boolean bSuccess = true; |
| try |
| { |
| XAccessibleText xText = |
| (XAccessibleText)UnoRuntime.queryInterface( |
| XAccessibleText.class, mxContext); |
| if (xText != null) |
| bSuccess = bSuccess && TextAction (xText); |
| |
| XAccessibleEditableText xEditableText = |
| (XAccessibleEditableText)UnoRuntime.queryInterface( |
| XAccessibleEditableText.class, mxContext); |
| if (xEditableText != null) |
| bSuccess = bSuccess && EditableTextAction (xEditableText); |
| |
| if ( ! bSuccess) |
| sError = "Can't execute"; |
| } |
| catch (IndexOutOfBoundsException e) |
| { |
| sError = "Index out of bounds"; |
| } |
| |
| if (sError != null) |
| JOptionPane.showMessageDialog ( |
| this,// AccessibilityWorkBench.Instance(), |
| sError, |
| msTitle, |
| JOptionPane.ERROR_MESSAGE); |
| |
| Cancel(); |
| } |
| |
| /** override this for dialog-specific action */ |
| boolean TextAction (XAccessibleText xText) |
| throws IndexOutOfBoundsException |
| { |
| return true; |
| } |
| |
| boolean EditableTextAction (XAccessibleEditableText xText) |
| throws IndexOutOfBoundsException |
| { |
| return true; |
| } |
| |
| private XAccessibleContext mxContext; |
| protected JTextArea maText; |
| private String msTitle; |
| private String msExplanation; |
| private JCheckBox maIndexToggle; |
| } |