?? accessible.java
字號:
/******************************************************************************* * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/package org.eclipse.swt.accessibility;import java.util.Vector;import org.eclipse.swt.*;import org.eclipse.swt.widgets.*;import org.eclipse.swt.internal.win32.*;import org.eclipse.swt.ole.win32.*;import org.eclipse.swt.internal.ole.win32.*;/** * Instances of this class provide a bridge between application * code and assistive technology clients. Many platforms provide * default accessible behavior for most widgets, and this class * allows that default behavior to be overridden. Applications * can get the default Accessible object for a control by sending * it <code>getAccessible</code>, and then add an accessible listener * to override simple items like the name and help string, or they * can add an accessible control listener to override complex items. * As a rule of thumb, an application would only want to use the * accessible control listener to implement accessibility for a * custom control. * * @see Control#getAccessible * @see AccessibleListener * @see AccessibleEvent * @see AccessibleControlListener * @see AccessibleControlEvent * * @since 2.0 */public class Accessible { int refCount = 0, enumIndex = 0; COMObject objIAccessible, objIEnumVARIANT; IAccessible iaccessible; Vector accessibleListeners = new Vector(); Vector accessibleControlListeners = new Vector(); Vector textListeners = new Vector (); Object[] variants; Control control; Accessible(Control control) { this.control = control; int[] ppvObject = new int[1]; int result = COM.CreateStdAccessibleObject(control.handle, COM.OBJID_CLIENT, COM.IIDIAccessible, ppvObject); if (result == COM.E_NOTIMPL) return; if (result != COM.S_OK) OLE.error(OLE.ERROR_CANNOT_CREATE_OBJECT, result); iaccessible = new IAccessible(ppvObject[0]); iaccessible.AddRef(); objIAccessible = new COMObject(new int[] {2,0,0,1,3,5,8,1,1,5,5,5,5,5,5,5,6,5,1,1,5,5,8,6,3,4,5,5}) { public int method0(int[] args) {return QueryInterface(args[0], args[1]);} public int method1(int[] args) {return AddRef();} public int method2(int[] args) {return Release();} // method3 GetTypeInfoCount - not implemented // method4 GetTypeInfo - not implemented // method5 GetIDsOfNames - not implemented // method6 Invoke - not implemented public int method7(int[] args) {return get_accParent(args[0]);} public int method8(int[] args) {return get_accChildCount(args[0]);} public int method9(int[] args) {return get_accChild(args[0], args[1], args[2], args[3], args[4]);} public int method10(int[] args) {return get_accName(args[0], args[1], args[2], args[3], args[4]);} public int method11(int[] args) {return get_accValue(args[0], args[1], args[2], args[3], args[4]);} public int method12(int[] args) {return get_accDescription(args[0], args[1], args[2], args[3], args[4]);} public int method13(int[] args) {return get_accRole(args[0], args[1], args[2], args[3], args[4]);} public int method14(int[] args) {return get_accState(args[0], args[1], args[2], args[3], args[4]);} public int method15(int[] args) {return get_accHelp(args[0], args[1], args[2], args[3], args[4]);} public int method16(int[] args) {return get_accHelpTopic(args[0], args[1], args[2], args[3], args[4], args[5]);} public int method17(int[] args) {return get_accKeyboardShortcut(args[0], args[1], args[2], args[3], args[4]);} public int method18(int[] args) {return get_accFocus(args[0]);} public int method19(int[] args) {return get_accSelection(args[0]);} public int method20(int[] args) {return get_accDefaultAction(args[0], args[1], args[2], args[3], args[4]);} public int method21(int[] args) {return accSelect(args[0], args[1], args[2], args[3], args[4]);} public int method22(int[] args) {return accLocation(args[0], args[1], args[2], args[3], args[4], args[5], args[6], args[7]);} public int method23(int[] args) {return accNavigate(args[0], args[1], args[2], args[3], args[4], args[5]);} public int method24(int[] args) {return accHitTest(args[0], args[1], args[2]);} public int method25(int[] args) {return accDoDefaultAction(args[0], args[1], args[2], args[3]);} public int method26(int[] args) {return put_accName(args[0], args[1], args[2], args[3], args[4]);} public int method27(int[] args) {return put_accValue(args[0], args[1], args[2], args[3], args[4]);} }; objIEnumVARIANT = new COMObject(new int[] {2,0,0,3,1,0,1}) { public int method0(int[] args) {return QueryInterface(args[0], args[1]);} public int method1(int[] args) {return AddRef();} public int method2(int[] args) {return Release();} public int method3(int[] args) {return Next(args[0], args[1], args[2]);} public int method4(int[] args) {return Skip(args[0]);} public int method5(int[] args) {return Reset();} // method6 Clone - not implemented }; AddRef(); } /** * Invokes platform specific functionality to allocate a new accessible object. * <p> * <b>IMPORTANT:</b> This method is <em>not</em> part of the public * API for <code>Accessible</code>. It is marked public only so that it * can be shared within the packages provided by SWT. It is not * available on all platforms, and should never be called from * application code. * </p> * * @param control the control to get the accessible object for * @return the platform specific accessible object */ public static Accessible internal_new_Accessible(Control control) { return new Accessible(control); } /** * Adds the listener to the collection of listeners who will * be notifed when an accessible client asks for certain strings, * such as name, description, help, or keyboard shortcut. The * listener is notified by sending it one of the messages defined * in the <code>AccessibleListener</code> interface. * * @param listener the listener that should be notified when the receiver * is asked for a name, description, help, or keyboard shortcut string * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li> * </ul> * * @see AccessibleListener * @see #removeAccessibleListener */ public void addAccessibleListener(AccessibleListener listener) { checkWidget(); if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); accessibleListeners.addElement(listener); } /** * Adds the listener to the collection of listeners who will * be notifed when an accessible client asks for custom control * specific information. The listener is notified by sending it * one of the messages defined in the <code>AccessibleControlListener</code> * interface. * * @param listener the listener that should be notified when the receiver * is asked for custom control specific information * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li> * </ul> * * @see AccessibleControlListener * @see #removeAccessibleControlListener */ public void addAccessibleControlListener(AccessibleControlListener listener) { checkWidget(); if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); accessibleControlListeners.addElement(listener); } /** * Adds the listener to the collection of listeners who will * be notifed when an accessible client asks for custom text control * specific information. The listener is notified by sending it * one of the messages defined in the <code>AccessibleTextListener</code> * interface. * * @param listener the listener that should be notified when the receiver * is asked for custom text control specific information * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li> * </ul> * * @see AccessibleTextListener * @see #removeAccessibleTextListener * * @since 3.0 */ public void addAccessibleTextListener (AccessibleTextListener listener) { checkWidget (); if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); textListeners.addElement (listener); } /** * Returns the control for this Accessible object. * * @return the receiver's control * @since 3.0 */ public Control getControl() { return control; } /** * Invokes platform specific functionality to dispose an accessible object. * <p> * <b>IMPORTANT:</b> This method is <em>not</em> part of the public * API for <code>Accessible</code>. It is marked public only so that it * can be shared within the packages provided by SWT. It is not * available on all platforms, and should never be called from * application code. * </p> */ public void internal_dispose_Accessible() { if (iaccessible != null) iaccessible.Release(); iaccessible = null; Release(); } /** * Invokes platform specific functionality to handle a window message. * <p> * <b>IMPORTANT:</b> This method is <em>not</em> part of the public * API for <code>Accessible</code>. It is marked public only so that it * can be shared within the packages provided by SWT. It is not * available on all platforms, and should never be called from * application code. * </p> */ public int internal_WM_GETOBJECT (int wParam, int lParam) { if (objIAccessible == null) return 0; if (lParam == COM.OBJID_CLIENT) { return COM.LresultFromObject(COM.IIDIAccessible, wParam, objIAccessible.getAddress()); } return 0; } /** * Removes the listener from the collection of listeners who will * be notifed when an accessible client asks for certain strings, * such as name, description, help, or keyboard shortcut. * * @param listener the listener that should no longer be notified when the receiver * is asked for a name, description, help, or keyboard shortcut string * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li> * </ul> * * @see AccessibleListener * @see #addAccessibleListener */ public void removeAccessibleListener(AccessibleListener listener) { checkWidget(); if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); accessibleListeners.removeElement(listener); } /** * Removes the listener from the collection of listeners who will * be notifed when an accessible client asks for custom control * specific information. * * @param listener the listener that should no longer be notified when the receiver * is asked for custom control specific information * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li> * </ul> * * @see AccessibleControlListener * @see #addAccessibleControlListener */ public void removeAccessibleControlListener(AccessibleControlListener listener) { checkWidget(); if (listener == null) SWT.error(SWT.ERROR_NULL_ARGUMENT); accessibleControlListeners.removeElement(listener); } /** * Removes the listener from the collection of listeners who will * be notifed when an accessible client asks for custom text control * specific information. * * @param listener the listener that should no longer be notified when the receiver * is asked for custom text control specific information * * @exception IllegalArgumentException <ul> * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> * </ul> * @exception SWTException <ul> * <li>ERROR_WIDGET_DISPOSED - if the receiver's control has been disposed</li> * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver's control</li> * </ul> * * @see AccessibleTextListener * @see #addAccessibleTextListener * * @since 3.0 */ public void removeAccessibleTextListener (AccessibleTextListener listener) { checkWidget (); if (listener == null) SWT.error (SWT.ERROR_NULL_ARGUMENT); textListeners.removeElement (listener); }
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -