blob: f1131842c93ffc9406dc4fd58905767d823ef199 [file] [log] [blame]
/**************************************************************
*
* 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.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) {
}
}
}