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

📄 swtkeysupport.java

📁 jfa2ce 源码帮助开发人员更好的理解运用
💻 JAVA
字号:
/******************************************************************************* * Copyright (c) 2004, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: *     IBM Corporation - initial API and implementation *******************************************************************************/package org.eclipse.jface.bindings.keys;import org.eclipse.jface.bindings.keys.formatting.IKeyFormatter;import org.eclipse.jface.bindings.keys.formatting.NativeKeyFormatter;import org.eclipse.swt.SWT;import org.eclipse.swt.events.KeyEvent;import org.eclipse.swt.widgets.Event;/** * <p> * A utility class for converting SWT events into key strokes. * </p> *  * @since 3.1 */public final class SWTKeySupport {	/**	 * A formatter that displays key sequences in a style native to the	 * platform.	 */	private static final IKeyFormatter NATIVE_FORMATTER = new NativeKeyFormatter();	/**	 * Given an SWT accelerator value, provide the corresponding key stroke.	 * 	 * @param accelerator	 *            The accelerator to convert; should be a valid SWT accelerator	 *            value.	 * @return The equivalent key stroke; never <code>null</code>.	 */	public static final KeyStroke convertAcceleratorToKeyStroke(int accelerator) {		final int modifierKeys = accelerator & SWT.MODIFIER_MASK;		final int naturalKey;		if (accelerator == modifierKeys) {			naturalKey = KeyStroke.NO_KEY;		} else {			naturalKey = accelerator - modifierKeys;		}				return KeyStroke.getInstance(modifierKeys, naturalKey);	}	/**	 * <p>	 * Converts the given event into an SWT accelerator value -- considering the	 * modified character with the shift modifier. This is the third accelerator	 * value that should be checked when processing incoming key events.	 * </p>	 * <p>	 * For example, on a standard US keyboard, "Ctrl+Shift+5" would be viewed as	 * "Ctrl+Shift+%".	 * </p>	 * 	 * @param event	 *            The event to be converted; must not be <code>null</code>.	 * @return The combination of the state mask and the unmodified character.	 */	public static final int convertEventToModifiedAccelerator(final Event event) {		int modifiers = event.stateMask & SWT.MODIFIER_MASK;		char character = topKey(event);		return modifiers + toUpperCase(character);	}	/**	 * <p>	 * Converts the given event into an SWT accelerator value -- considering the	 * unmodified character with all modifier keys. This is the first	 * accelerator value that should be checked when processing incoming key	 * events. However, all alphabetic characters are considered as their	 * uppercase equivalents.	 * </p>	 * <p>	 * For example, on a standard US keyboard, "Ctrl+Shift+5" would be viewed as	 * "Ctrl+Shift+5".	 * </p>	 * 	 * @param event	 *            The event to be converted; must not be <code>null</code>.	 * @return The combination of the state mask and the unmodified character.	 */	public static final int convertEventToUnmodifiedAccelerator(			final Event event) {		return convertEventToUnmodifiedAccelerator(event.stateMask,				event.keyCode);	}	/**	 * <p>	 * Converts the given state mask and key code into an SWT accelerator value --	 * considering the unmodified character with all modifier keys. All	 * alphabetic characters are considered as their uppercase equivalents.	 * </p>	 * <p>	 * For example, on a standard US keyboard, "Ctrl+Shift+5" would be viewed as	 * "Ctrl+Shift+5".	 * </p>	 * 	 * @param stateMask	 *            The integer mask of modifiers keys depressed when this was	 *            pressed.	 * @param keyCode	 *            The key that was pressed, before being modified.	 * @return The combination of the state mask and the unmodified character.	 */	private static final int convertEventToUnmodifiedAccelerator(			final int stateMask, final int keyCode) {		int modifiers = stateMask & SWT.MODIFIER_MASK;		int character = keyCode;		return modifiers + toUpperCase(character);	}	/**	 * <p>	 * Converts the given event into an SWT accelerator value -- considering the	 * unmodified character with all modifier keys. This is the first	 * accelerator value that should be checked. However, all alphabetic	 * characters are considered as their uppercase equivalents.	 * </p>	 * <p>	 * For example, on a standard US keyboard, "Ctrl+Shift+5" would be viewed as	 * "Ctrl+%".	 * </p>	 * 	 * @param event	 *            The event to be converted; must not be <code>null</code>.	 * @return The combination of the state mask and the unmodified character.	 */	public static final int convertEventToUnmodifiedAccelerator(			final KeyEvent event) {		return convertEventToUnmodifiedAccelerator(event.stateMask,				event.keyCode);	}	/**	 * Converts the given event into an SWT accelerator value -- considering the	 * modified character without the shift modifier. This is the second	 * accelerator value that should be checked when processing incoming key	 * events. Key strokes with alphabetic natural keys are run through	 * <code>convertEventToUnmodifiedAccelerator</code>.	 * 	 * @param event	 *            The event to be converted; must not be <code>null</code>.	 * @return The combination of the state mask without shift, and the modified	 *         character.	 */	public static final int convertEventToUnshiftedModifiedAccelerator(			final Event event) {		// Disregard alphabetic key strokes.		if (Character.isLetter((char) event.keyCode)) {			return convertEventToUnmodifiedAccelerator(event);		}		int modifiers = event.stateMask & (SWT.MODIFIER_MASK ^ SWT.SHIFT);		char character = topKey(event);		return modifiers + toUpperCase(character);	}	/**	 * Given a key stroke, this method provides the equivalent SWT accelerator	 * value. The functional inverse of	 * <code>convertAcceleratorToKeyStroke</code>.	 * 	 * @param keyStroke	 *            The key stroke to convert; must not be <code>null</code>.	 * @return The SWT accelerator value	 */	public static final int convertKeyStrokeToAccelerator(			final KeyStroke keyStroke) {		return keyStroke.getModifierKeys() + keyStroke.getNaturalKey();	}	/**	 * Provides an instance of <code>IKeyFormatter</code> appropriate for the	 * current instance.	 * 	 * @return an instance of <code>IKeyFormatter</code> appropriate for the	 *         current instance; never <code>null</code>.	 */	public static IKeyFormatter getKeyFormatterForPlatform() {		return NATIVE_FORMATTER;	}	/**	 * Makes sure that a fully-modified character is converted to the normal	 * form. This means that "Ctrl+" key strokes must reverse the modification	 * caused by control-escaping. Also, all lower case letters are converted to	 * uppercase.	 * 	 * @param event	 *            The event from which the fully-modified character should be	 *            pulled.	 * @return The modified character, uppercase and without control-escaping.	 */	private static final char topKey(final Event event) {		char character = event.character;		boolean ctrlDown = (event.stateMask & SWT.CTRL) != 0;		if (ctrlDown && event.character != event.keyCode				&& event.character < 0x20) {			character += 0x40;		}		return character;	}	/**	 * Makes the given character uppercase if it is a letter.	 * 	 * @param keyCode	 *            The character to convert.	 * @return The uppercase equivalent, if any; otherwise, the character	 *         itself.	 */	private static final int toUpperCase(int keyCode) {		// Will this key code be truncated?		if (keyCode > 0xFFFF) {			return keyCode;		}		// Downcast in safety. Only make characters uppercase.		final char character = (char) keyCode;		return Character.isLetter(character) ? Character.toUpperCase(character)				: keyCode;	}	/**	 * This class should never be instantiated.	 */	protected SWTKeySupport() {		// This class should never be instantiated.	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -