summaryrefslogtreecommitdiff
path: root/accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java')
-rw-r--r--accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java367
1 files changed, 367 insertions, 0 deletions
diff --git a/accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java
new file mode 100644
index 000000000000..4863b560ef71
--- /dev/null
+++ b/accessibility/bridge/org/openoffice/java/accessibility/AccessibleEditableTextImpl.java
@@ -0,0 +1,367 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package org.openoffice.java.accessibility;
+
+import com.sun.star.awt.*;
+import com.sun.star.style.*;
+import com.sun.star.uno.*;
+import com.sun.star.accessibility.AccessibleTextType;
+import com.sun.star.accessibility.XAccessibleEditableText;
+
+import javax.accessibility.AccessibleText;
+import javax.swing.text.StyleConstants;
+
+/** The GenericAccessibleEditableText mapps the calls to the java AccessibleEditableText
+ * interface to the corresponding methods of the UNO XAccessibleEditableText interface.
+ */
+public class AccessibleEditableTextImpl extends AccessibleTextImpl implements javax.accessibility.AccessibleEditableText {
+ final static double toPointFactor = 1 / (7/10 + 34.5);
+
+ /** Creates new GenericAccessibleEditableText object */
+ public AccessibleEditableTextImpl(XAccessibleEditableText xAccessibleEditableText) {
+ super(xAccessibleEditableText);
+ }
+
+ /** Cuts the text between two indices into the system clipboard */
+ public void cut(int startIndex, int endIndex) {
+ try {
+ ((XAccessibleEditableText) unoObject).cutText(startIndex, endIndex);
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+
+ /** Deletes the text between two indices */
+ public void delete(int startIndex, int endIndex) {
+ try {
+ ((XAccessibleEditableText) unoObject).deleteText(startIndex, endIndex);
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+
+ /** Returns the text range between two indices */
+ public String getTextRange(int startIndex, int endIndex) {
+ try {
+ return unoObject.getTextRange(startIndex, endIndex);
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ return null;
+ }
+
+ /** Inserts the specified string at the given index */
+ public void insertTextAtIndex(int index, String s){
+ try {
+ ((XAccessibleEditableText) unoObject).insertText(s, index);
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+
+ /** Pastes the text form the system clipboard into the text starting at the specified index */
+ public void paste(int startIndex) {
+ try {
+ ((XAccessibleEditableText) unoObject).pasteText(startIndex);
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+
+ /** Replaces the text between two indices with the specified string */
+ public void replaceText(int startIndex, int endIndex, String s) {
+ try {
+ ((XAccessibleEditableText) unoObject).replaceText(startIndex, endIndex, s);
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+
+ /** Selects the text between two indices */
+ public void selectText(int startIndex, int endIndex) {
+ try {
+ unoObject.setSelection(startIndex, endIndex);
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+
+ /** Sets the attributes for the text between two indices */
+ public void setAttributes(int startIndex, int endIndex, javax.swing.text.AttributeSet as) {
+ java.util.Vector propertyValues = new java.util.Vector();
+
+ // Convert Alignment attribute
+ Object attribute = as.getAttribute(StyleConstants.Alignment);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaAdjust";
+
+ switch (StyleConstants.getAlignment(as)) {
+ case StyleConstants.ALIGN_RIGHT:
+ propertyValue.Value = ParagraphAdjust.RIGHT;
+ break;
+ case StyleConstants.ALIGN_CENTER:
+ propertyValue.Value = ParagraphAdjust.CENTER;
+ break;
+ case StyleConstants.ALIGN_JUSTIFIED:
+ propertyValue.Value = ParagraphAdjust.BLOCK;
+ break;
+ default:
+ propertyValue.Value = ParagraphAdjust.LEFT;
+ break;
+ }
+ propertyValues.add(propertyValue);
+ }
+
+ // Convert Background attribute
+ attribute = as.getAttribute(StyleConstants.Background);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharBackColor";
+ propertyValue.Value = new Integer(StyleConstants.getBackground(as).getRGB());
+ propertyValues.add(propertyValue);
+ }
+
+ // FIXME: BidiLevel
+
+ // Set Bold attribute
+ attribute = as.getAttribute(StyleConstants.Bold);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharWeight";
+ if (StyleConstants.isBold(as)) {
+ propertyValue.Value = new Float(150);
+ } else {
+ propertyValue.Value = new Float(100);
+ }
+ propertyValues.add(propertyValue);
+ }
+
+ // FIXME: Java 1.4 ComponentAttribute, ComponentElementName, ComposedTextAttribute
+
+ // Set FirstLineIndent attribute
+ attribute = as.getAttribute(StyleConstants.FirstLineIndent);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaFirstLineIndent";
+ propertyValue.Value = new Double(StyleConstants.getFirstLineIndent(as) / toPointFactor);
+ propertyValues.add(propertyValue);
+ }
+
+ // Set font family attribute
+ attribute = as.getAttribute(StyleConstants.FontFamily);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharFontPitch";
+
+ if (StyleConstants.getFontFamily(as).equals( "Proportional" )) {
+ propertyValue.Value = new Short("2");
+ } else {
+ propertyValue.Value = new Short("1");
+ }
+ propertyValues.add(propertyValue);
+ }
+
+ // Set font size attribute
+ attribute = as.getAttribute(StyleConstants.FontSize);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharHeight";
+ propertyValue.Value = new Integer(StyleConstants.getFontSize(as));
+ propertyValues.add(propertyValue);
+ }
+
+ // Map foreground color
+ attribute = as.getAttribute(StyleConstants.Foreground);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharColor";
+ propertyValue.Value = new Integer (StyleConstants.getForeground(as).getRGB());
+ propertyValues.add(propertyValue);
+ }
+
+ // FIXME: IconAttribute, IconElementName
+
+ // Set italic attribute
+ attribute = as.getAttribute(StyleConstants.Italic);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharPosture";
+
+ if (StyleConstants.isItalic(as)) {
+ propertyValue.Value = FontSlant.ITALIC;
+ } else {
+ propertyValue.Value = FontSlant.DONTKNOW;
+ }
+ propertyValues.add(propertyValue);
+ }
+
+ // Set left indent attribute
+ attribute = as.getAttribute(StyleConstants.LeftIndent);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaFirstLeftMargin";
+ propertyValue.Value = new Integer(new Double(StyleConstants.getLeftIndent(as) / toPointFactor).intValue());
+ propertyValues.add(propertyValue);
+ }
+
+ // Set right indent attribute
+ attribute = as.getAttribute(StyleConstants.RightIndent);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaFirstRightMargin";
+ propertyValue.Value = new Integer(new Double(StyleConstants.getRightIndent(as) / toPointFactor).intValue());
+ propertyValues.add(propertyValue);
+ }
+
+ // Set line spacing attribute
+ attribute = as.getAttribute(StyleConstants.LineSpacing);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaLineSpacing";
+ propertyValue.Value = new Integer(new Double(StyleConstants.getLineSpacing(as) / toPointFactor).intValue());
+ propertyValues.add(propertyValue);
+ }
+
+ // FIXME: Java 1.4 NameAttribute, Orientation, ResolveAttribute
+
+ // Set space above attribute
+ attribute = as.getAttribute(StyleConstants.SpaceAbove);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaTopMargin";
+ propertyValue.Value = new Integer(new Double( StyleConstants.getSpaceAbove(as) / toPointFactor).intValue());
+ propertyValues.add(propertyValue);
+ }
+
+ // Set space below attribute
+ attribute = as.getAttribute(StyleConstants.SpaceBelow);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaBottomMargin";
+ propertyValue.Value = new Integer(new Double(StyleConstants.getSpaceBelow(as) / toPointFactor).intValue());
+ propertyValues.add(propertyValue);
+ }
+
+ // Set strike through attribute
+ attribute = as.getAttribute(StyleConstants.StrikeThrough);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharPosture";
+ if (StyleConstants.isStrikeThrough(as)) {
+ propertyValue.Value = new Short(FontStrikeout.SINGLE);
+ } else {
+ propertyValue.Value = new Short(FontStrikeout.NONE);
+ }
+ propertyValues.add(propertyValue);
+ }
+
+ // Set sub-/superscript attribute
+ attribute = as.getAttribute(StyleConstants.Superscript);
+ if (null == attribute) {
+ attribute = as.getAttribute(StyleConstants.Subscript);
+ }
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharEscapement";
+
+ if (StyleConstants.isSuperscript(as)) {
+ propertyValue.Value = new Short( "1" );
+ } else if (StyleConstants.isSubscript(as)) {
+ propertyValue.Value = new Short( "-1" );
+ } else {
+ propertyValue.Value = new Short( "0" );
+ }
+ propertyValues.add(propertyValue);
+ }
+
+ // Set tabset attribute
+ attribute = as.getAttribute(StyleConstants.TabSet);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "ParaTabStops";
+
+ javax.swing.text.TabSet tabSet = StyleConstants.getTabSet(as);
+ java.util.ArrayList tabStops = new java.util.ArrayList(tabSet.getTabCount());
+
+ for (int i = 0, max = tabSet.getTabCount(); i < max; i++) {
+ javax.swing.text.TabStop tab = tabSet.getTab(i);
+ com.sun.star.style.TabStop unoTab = new com.sun.star.style.TabStop();
+
+ unoTab.Position = new Double(tab.getPosition() / toPointFactor).intValue();
+
+ switch (tab.getAlignment()) {
+ case javax.swing.text.TabStop.ALIGN_CENTER:
+ unoTab.Alignment = TabAlign.CENTER;
+ break;
+ case javax.swing.text.TabStop.ALIGN_RIGHT:
+ unoTab.Alignment = TabAlign.RIGHT;
+ break;
+ case javax.swing.text.TabStop.ALIGN_DECIMAL:
+ unoTab.Alignment = TabAlign.DECIMAL;
+ break;
+ default:
+ unoTab.Alignment = TabAlign.LEFT;
+ break;
+ }
+
+ tabStops.add(unoTab);
+ }
+ propertyValue.Value = (com.sun.star.style.TabStop[]) tabStops.toArray();
+ propertyValues.add(propertyValue);
+ }
+
+ // Set underline attribute
+ attribute = as.getAttribute(StyleConstants.Underline);
+ if (null != attribute) {
+ com.sun.star.beans.PropertyValue propertyValue = new com.sun.star.beans.PropertyValue();
+ propertyValue.Name = "CharUnderline";
+
+ if (StyleConstants.isUnderline(as)) {
+ propertyValue.Value = new Short(FontUnderline.SINGLE);
+ } else {
+ propertyValue.Value = new Short(FontUnderline.NONE);
+ }
+ propertyValues.add(propertyValue);
+ }
+
+ try {
+ ((XAccessibleEditableText) unoObject).setAttributes(startIndex, endIndex, (com.sun.star.beans.PropertyValue[]) propertyValues.toArray());
+ } catch (com.sun.star.lang.IndexOutOfBoundsException e) {
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+
+ /** Sets the text contents to the specified string */
+ public void setTextContents(String s) {
+ try {
+ ((XAccessibleEditableText) unoObject).setText(s);
+ } catch (com.sun.star.uno.RuntimeException e) {
+ }
+ }
+}