void setSelectedTextRangeAttribute(id value, int childId) { NSRange newRange = new NSValue(value.id).rangeValue(); if (accessibleTextExtendedListenersSize() > 0) { AccessibleTextEvent event = new AccessibleTextEvent(this); event.index = 0; event.start = (int)newRange.location; event.end = (int)(newRange.location + newRange.length); for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i); listener.removeSelection(event); listener.addSelection(event); } } }
int getCharacterCount() { AccessibleTextEvent event = new AccessibleTextEvent(this); event.count = -1; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.getCharacterCount(event); } if (event.count == -1) { AccessibleControlEvent e = new AccessibleControlEvent(this); e.childID = ACC.CHILDID_SELF; for (int i = 0; i < accessibleControlListenersSize(); i++) { AccessibleControlListener listener = accessibleControlListeners.get(i); listener.getRole(e); listener.getValue(e); } // TODO: Consider passing the value through for other roles as well (i.e. combo, etc). Keep in sync with get_text. event.count = e.detail == ACC.ROLE_TEXT && e.result != null ? e.result.length() : 0; } return event.count; }
int get_offsetAtPoint(int x, int y, int coordType, int /*long*/ pOffset) { AccessibleTextEvent event = new AccessibleTextEvent(this); event.x = x; event.y = y; event.offset = -1; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.getOffsetAtPoint(event); } if (DEBUG) print(this + ".IAccessibleText::get_offsetAtPoint(" + x + ", " + y + ") returning " + event.offset + hresult(event.offset == -1 ? COM.S_FALSE : COM.S_OK)); /* * Note that the current IA2 spec says to return 0 when there's nothing to return, * but since 0 is a valid return value, the spec is going to be updated to return -1. */ COM.MoveMemory(pOffset, new int [] { event.offset }, 4); if (event.offset == -1) return COM.S_FALSE; return COM.S_OK; }
for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getRanges (event); for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getText(event); for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getTextBounds(event);
for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i); listener.getCaretOffset(event); for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i); listener.getText(event);
static long /*int*/ atkText_get_character_at_offset (long /*int*/ atkObject, long /*int*/ offset) { if (DEBUG) print ("-->atkText_get_character_at_offset"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; List<AccessibleTextExtendedListener> listeners = accessible.accessibleTextExtendedListeners; int length = size(listeners); if (length > 0) { AccessibleTextEvent event = new AccessibleTextEvent(accessible); event.start = (int)/*64*/offset; event.end = (int)/*64*/(offset + 1); event.type = ACC.TEXT_BOUNDARY_CHAR; for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getText(event); } String text = event.result; return text != null && text.length() > 0 ? text.charAt(0) : 0; } String text = object.getText (); if (text != null && text.length() > offset) return text.charAt ((int)/*64*/offset); } AtkTextIface iface = getTextIface (atkObject); if (iface != null && iface.get_character_at_offset != 0) { return ATK.call (iface.get_character_at_offset, atkObject, offset); } return 0; }
for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i); listener.getSelection(event); for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i); listener.getText(event);
int get_characterExtents(int offset, int coordType, int /*long*/ pX, int /*long*/ pY, int /*long*/ pWidth, int /*long*/ pHeight) { int length = getCharacterCount(); AccessibleTextEvent event = new AccessibleTextEvent(this); event.start = offset == COM.IA2_TEXT_OFFSET_LENGTH ? length : offset < 0 ? 0 : offset; event.end = offset == COM.IA2_TEXT_OFFSET_LENGTH || offset >= length ? length : offset + 1; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.getTextBounds(event); } /* Note: event.rectangles is not used here, because IAccessibleText::get_characterExtents is just for one character. */ if (DEBUG) print(this + ".IAccessibleText::get_characterExtents(" + offset + ") returning " + event.x + ", " + event.y + ", " + event.width + ", " + event.height); COM.MoveMemory(pX, new int [] { event.x }, 4); COM.MoveMemory(pY, new int [] { event.y }, 4); COM.MoveMemory(pWidth, new int [] { event.width }, 4); COM.MoveMemory(pHeight, new int [] { event.height }, 4); if (event.width == 0 && event.height == 0) return COM.E_INVALIDARG; return COM.S_OK; }
for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(i); listener.getSelectionCount(event); for (int j = 0; j < accessibleTextExtendedListenersSize(); j++) { AccessibleTextExtendedListener listener = (AccessibleTextExtendedListener) accessibleTextExtendedListeners.elementAt(j); listener.getSelection(event);
int addSelection(int startOffset, int endOffset) { if (DEBUG) print(this + ".IAccessibleText::addSelection(" + startOffset + ", " + endOffset + ")"); AccessibleTextEvent event = new AccessibleTextEvent(this); event.start = startOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : startOffset; event.end = endOffset == COM.IA2_TEXT_OFFSET_LENGTH ? getCharacterCount() : endOffset; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.addSelection(event); } if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG; return COM.S_OK; }
int removeSelection(int selectionIndex) { AccessibleTextEvent event = new AccessibleTextEvent(this); event.index = selectionIndex; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.removeSelection(event); } if (DEBUG) print(this + ".IAccessibleText::removeSelection(" + selectionIndex + ") returning" + hresult(event.result == null || !event.result.equals(ACC.OK) ? COM.E_INVALIDARG : COM.S_OK)); if (event.result == null || !event.result.equals(ACC.OK)) return COM.E_INVALIDARG; return COM.S_OK; }
int get_nSelections(int /*long*/ pNSelections) { AccessibleTextEvent event = new AccessibleTextEvent(this); event.count = -1; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.getSelectionCount(event); } if (event.count == -1) { event.childID = ACC.CHILDID_SELF; event.offset = -1; event.length = 0; for (int i = 0; i < accessibleTextListenersSize(); i++) { AccessibleTextListener listener = accessibleTextListeners.get(i); listener.getSelectionRange (event); } event.count = event.offset != -1 && event.length > 0 ? 1 : 0; } if (DEBUG) print(this + ".IAccessibleText::get_nSelections returning " + event.count); COM.MoveMemory(pNSelections, new int [] { event.count }, 4); return COM.S_OK; }
int get_selection(int selectionIndex, int /*long*/ pStartOffset, int /*long*/ pEndOffset) { AccessibleTextEvent event = new AccessibleTextEvent(this); event.index = selectionIndex; event.start = -1; event.end = -1; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.getSelection(event); } if (event.start == -1 && selectionIndex == 0) { event.childID = ACC.CHILDID_SELF; event.offset = -1; event.length = 0; for (int i = 0; i < accessibleTextListenersSize(); i++) { AccessibleTextListener listener = accessibleTextListeners.get(i); listener.getSelectionRange (event); } event.start = event.offset; event.end = event.offset + event.length; } if (DEBUG) print(this + ".IAccessibleText::get_selection(" + selectionIndex + ") returning " + event.start + ", " + event.end); COM.MoveMemory(pStartOffset, new int [] { event.start }, 4); COM.MoveMemory(pEndOffset, new int [] { event.end }, 4); /* * Note that the current IA2 spec says to return 0,0 when there's nothing to return, * but since 0 is a valid return value, the spec is going to be updated to return -1,-1. */ if (event.start == -1) return COM.S_FALSE; return COM.S_OK; }
for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getCaretOffset (event);
int get_hyperlink(int index, int /*long*/ ppHyperlink) { if (DEBUG) print(this + ".IAccessibleHypertext::get_hyperlink"); AccessibleTextEvent event = new AccessibleTextEvent(this); event.index = index; for (int i = 0; i < accessibleTextExtendedListenersSize(); i++) { AccessibleTextExtendedListener listener = accessibleTextExtendedListeners.get(i); listener.getHyperlink(event); } Accessible accessible = event.accessible; if (accessible == null) { setIntVARIANT(ppHyperlink, COM.VT_EMPTY, 0); return COM.E_INVALIDARG; } accessible.AddRef(); COM.MoveMemory(ppHyperlink, new int /*long*/[] { accessible.getAddress() }, OS.PTR_SIZEOF); return COM.S_OK; }
static int /*long*/ atkText_get_character_at_offset (int /*long*/ atkObject, int /*long*/ offset) { if (DEBUG) print ("-->atkText_get_character_at_offset"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; List<AccessibleTextExtendedListener> listeners = accessible.accessibleTextExtendedListeners; int length = size(listeners); if (length > 0) { AccessibleTextEvent event = new AccessibleTextEvent(accessible); event.start = (int)/*64*/offset; event.end = (int)/*64*/(offset + 1); event.type = ACC.TEXT_BOUNDARY_CHAR; for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getText(event); } String text = event.result; return text != null && text.length() > 0 ? text.charAt(0) : 0; } String text = object.getText (); if (text != null && text.length() > offset) return text.charAt ((int)/*64*/offset); } AtkTextIface iface = getTextIface (atkObject); if (iface != null && iface.get_character_at_offset != 0) { return ATK.call (iface.get_character_at_offset, atkObject, offset); } return 0; }
for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getRanges (event); for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getText(event); for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getTextBounds(event);
for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getSelection (event); for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getText(event);
for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.getTextBounds(event);
static int /*long*/ atkText_add_selection (int /*long*/ atkObject, int /*long*/ start_offset, int /*long*/ end_offset) { if (DEBUG) print ("-->atkText_add_selection"); AccessibleObject object = getAccessibleObject (atkObject); if (object != null) { Accessible accessible = object.accessible; List<AccessibleTextExtendedListener> listeners = accessible.accessibleTextExtendedListeners; int length = size(listeners); if (length > 0) { AccessibleTextEvent event = new AccessibleTextEvent(accessible); event.start = (int)/*64*/start_offset; event.end = (int)/*64*/end_offset; for (int i = 0; i < length; i++) { AccessibleTextExtendedListener listener = listeners.get(i); listener.addSelection(event); } return ACC.OK.equals(event.result) ? 1 : 0; } } int /*long*/ parentResult = 0; AtkTextIface iface = getTextIface (atkObject); if (iface != null && iface.add_selection != 0) { parentResult = ATK.call (iface.add_selection, atkObject, start_offset, end_offset); } return parentResult; }