package com.xored.glance.internal.ui;
import java.util.List;
import java.util.Map;
import org.eclipse.jface.bindings.Binding;
import org.eclipse.jface.bindings.BindingManager;
import org.eclipse.jface.bindings.keys.KeySequence;
import org.eclipse.jface.bindings.keys.KeyStroke;
import org.eclipse.swt.widgets.Event;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.internal.keys.BindingService;
import org.eclipse.ui.internal.keys.WorkbenchKeyboard;
import org.eclipse.ui.keys.IBindingService;
import com.xored.glance.internal.ui.search.SearchManager;
@SuppressWarnings("restriction")
public class GlanceEventDispatcher {
public static final String GLANCE_CTX = "com.xored.glance.ui.context";
public static final String NEXT_COMMAND = "com.xored.glance.ui.nextResult";
public static final String PREV_COMMAND = "com.xored.glance.ui.prevResult";
public static final String FOCUS_COMMAND = "com.xored.glance.commands.focus";
public static final String CLOSE_COMMAND = "com.xored.glance.commands.close";
public static final String CLEAR_COMMAND = "com.xored.glance.commands.clearHistory";
public static GlanceEventDispatcher INSTANCE = new GlanceEventDispatcher();
private final BindingManager bindingManager;
private GlanceEventDispatcher() {
bindingManager = ((BindingService) PlatformUI.getWorkbench()
.getService(IBindingService.class)).getBindingManager();
}
public void dispatchKeyPressed(Event event) {
@SuppressWarnings("unchecked")
List<Object> potentialKeyStrokes = WorkbenchKeyboard
.generatePossibleKeyStrokes(event);
if (potentialKeyStrokes.isEmpty()) {
return;
}
String commandID = getBindCommand(KeySequence
.getInstance((KeyStroke) potentialKeyStrokes.get(0)));
if (commandID == null) {
return;
} else if (FOCUS_COMMAND.equals(commandID)) {
SearchManager.getIntance().sourceFocus();
} else if (NEXT_COMMAND.equals(commandID)) {
SearchManager.getIntance().findNext();
} else if (PREV_COMMAND.equals(commandID)) {
SearchManager.getIntance().findPrevious();
} else if (CLOSE_COMMAND.equals(commandID)) {
SearchManager.getIntance().close();
} else if (CLEAR_COMMAND.equals(commandID)) {
SearchManager.getIntance().clearHistory();
}
}
public String getBindCommand(KeySequence keySequence) {
Map<?, ?> map = bindingManager.getActiveBindingsDisregardingContext();
List<?> bindings = (List<?>) map.get(keySequence);
if (bindings != null) {
for (Object obj : bindings) {
Binding binding = (Binding) obj;
if (GLANCE_CTX.equals(binding.getContextId())) {
return binding.getParameterizedCommand().getId();
}
}
}
return null;
}
}