/* * Code borrowed from PyDev */ package org.erlide.ui; import org.eclipse.jface.bindings.TriggerSequence; import org.eclipse.jface.bindings.keys.KeySequence; import org.eclipse.jface.bindings.keys.KeyStroke; import org.eclipse.swt.events.KeyEvent; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.keys.IBindingService; import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds; /** * Helper for knowing about keybindings and related actions * * @author Fabio */ public class KeyBindingHelper { // pre-defined helpers /** * @return true if the given event matches a content assistant keystroke * (and false otherwise). */ public static boolean matchesContentAssistKeybinding(final KeyEvent event) { return matchesKeybinding(event, ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS); } /** * @return the key sequence that is the best match for a content assist * request. */ public static KeySequence getContentAssistProposalBinding() { return getCommandKeyBinding( ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS); } /** * @return true if the given event matches a quick assistant keystroke (and * false otherwise). */ public static boolean matchesQuickAssistKeybinding(final KeyEvent event) { return matchesKeybinding(event, ITextEditorActionDefinitionIds.QUICK_ASSIST); } /** * @return the key sequence that is the best match for a quick assist * request. */ public static KeySequence getQuickAssistProposalBinding() { return getCommandKeyBinding(ITextEditorActionDefinitionIds.QUICK_ASSIST); } // END pre-defined helpers /** * @param event * the key event to be checked * @param commandId * the command to be checked * @return true if the given key event can trigger the passed command (and * false otherwise). */ public static boolean matchesKeybinding(final KeyEvent event, final String commandId) { final IBindingService bindingSvc = (IBindingService) PlatformUI.getWorkbench() .getAdapter(IBindingService.class); final TriggerSequence[] activeBindingsFor = bindingSvc .getActiveBindingsFor(commandId); for (final TriggerSequence seq : activeBindingsFor) { if (seq instanceof KeySequence) { final KeySequence keySequence = (KeySequence) seq; final KeyStroke[] keyStrokes = keySequence.getKeyStrokes(); for (final KeyStroke keyStroke : keyStrokes) { if (keyStroke.getNaturalKey() == event.keyCode && (keyStroke.getModifierKeys() & event.stateMask) != 0) { return true; } } } } return false; } /** * @param commandId * the command we want to know about * @return the 'best' key sequence that will activate the given command */ public static KeySequence getCommandKeyBinding(final String commandId) { final IBindingService bindingSvc = (IBindingService) PlatformUI.getWorkbench() .getAdapter(IBindingService.class); final TriggerSequence binding = bindingSvc.getBestActiveBindingFor(commandId); if (binding instanceof KeySequence) { return (KeySequence) binding; } return null; } }