/**
* Copyright (c) 2009, 2010 Mark Feber, MulgaSoft
*
* 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
*
*/
package com.mulgasoft.emacsplus.execute;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.commands.Command;
import org.eclipse.core.commands.ParameterizedCommand;
import org.eclipse.jface.bindings.Binding;
import org.eclipse.jface.bindings.TriggerSequence;
import org.eclipse.swt.SWT;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.keys.IBindingService;
/**
* @author Mark Feber - initial API and implementation
*/
public class CommandHelp {
private static final String COMMA_SEPR = ", "; //$NON_NLS-1$
/**
* Get the key-binding information for the command
*
* @param com
* @param activep - if true, return only active bindings
*
* @return an array of binding information
*/
public static Binding[] getBindings(Command com, boolean activep) {
IBindingService binder = (IBindingService) PlatformUI.getWorkbench().getService(IBindingService.class);
Binding[] bindings = binder.getBindings();
List<Binding> vbindings = new ArrayList<Binding>();
String platform = SWT.getPlatform();
for (Binding bind : bindings) {
ParameterizedCommand pc = bind.getParameterizedCommand();
if (pc != null && com.equals(pc.getCommand())) {
// Only return binding info for applicable platforms
String plat = bind.getPlatform();
if (plat == null || platform.equals(plat)) {
vbindings.add(bind);
}
}
}
if (activep && !vbindings.isEmpty()) {
TriggerSequence[] atrigs= binder.getActiveBindingsFor(com.getId());
List<Binding> abindings = new ArrayList<Binding>();
for (TriggerSequence trig : atrigs) {
for (Binding bind : vbindings) {
if (bind.getTriggerSequence().equals(trig)) {
abindings.add(bind);
break;
}
}
}
bindings = abindings.toArray(new Binding[0]);
} else {
bindings = vbindings.toArray(new Binding[0]);
}
return bindings;
}
/**
* Get the best binding (as determined by Eclipse) for the Command
*
* @param cmd
* @return the binding or null
*/
public static String getBestBinding(Command cmd) {
String result = null;
IBindingService binder = (IBindingService) PlatformUI.getWorkbench().getService(IBindingService.class);
TriggerSequence bindingFor = binder.getBestActiveBindingFor(cmd.getId());
if (bindingFor != null) {
result = bindingFor.format();
}
return result;
}
/**
* Get the displayable key-binding information for the command
*
* @param com - the command
* @param activep - if true, return only active bindings
*
* @return a String array of binding sequence binding context information
*/
public static String[] getKeyBindingStrings(Command com, boolean activep) {
String id = com.getId();
TriggerSequence trigger;
// Get platform bindings for Command
Binding[] bindings = getBindings(com,activep);
List<String> bindingInfo = new ArrayList<String>();
ParameterizedCommand c;
for (Binding bind : bindings) {
c = bind.getParameterizedCommand();
if (c != null && c.getId().equals(id)) {
trigger = bind.getTriggerSequence();
bindingInfo.add(trigger.toString());
bindingInfo.add(bind.getContextId());
}
}
return bindingInfo.toArray(new String[0]);
}
/**
* Get the displayable key-binding information for the parameterized command
*
* @param com the command
* @param activep - if true, return only active bindings
*
* @return a String array of binding sequence binding context information
*/
public static String[] getKeyBindingStrings(ParameterizedCommand com, boolean activep) {
TriggerSequence trigger;
// Get platform bindings for the ParameterizedCommand's Command
Binding[] bindings = getBindings(com.getCommand(),activep);
List<String> bindingInfo = new ArrayList<String>();
ParameterizedCommand c;
for (Binding bind : bindings) {
c = bind.getParameterizedCommand();
if (c != null && c.equals(com)) {
trigger = bind.getTriggerSequence();
bindingInfo.add(trigger.toString());
bindingInfo.add(bind.getContextId());
}
}
return bindingInfo.toArray(new String[0]);
}
public static String getKeyBindingString(Command com, boolean activep) {
String result = null;
String[] bindings = getKeyBindingStrings(com, activep);
StringBuilder bindingsBuf = new StringBuilder();
if (bindings.length > 0) {
for (int i=0; i < bindings.length; i+=2) {
if (i != 0) {
bindingsBuf.append(COMMA_SEPR);
}
bindingsBuf.append(bindings[i]);
}
result = bindingsBuf.toString();
}
return result;
}
}