⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 accessible.java

📁 源码为Eclipse开源开发平台桌面开发工具SWT的源代码,
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
/******************************************************************************* * 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 + -