blob: 19503972858731f75fc83c6653098c33fc93af70 [file] [log] [blame]
/*
* Copyright (c) 2012 Google Inc.
*
* 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.google.eclipse.elt.view.ui;
import static org.eclipse.ui.actions.ActionFactory.*;
import org.eclipse.jface.action.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import com.google.eclipse.elt.emulator.actions.*;
import com.google.eclipse.elt.emulator.core.VT100TerminalControl;
/**
* @author alruiz@google.com (Alex Ruiz)
*/
class PopupMenu {
private final AbstractTerminalAction copy;
private final AbstractTerminalAction paste;
private final AbstractTerminalAction selectAll;
private final AbstractTerminalAction clearAll;
@SuppressWarnings("deprecation")
PopupMenu(IViewSite viewSite, VT100TerminalControl terminalControl) {
PopupMenuManager menuManager = new PopupMenuManager();
copy = menuManager.add(new TerminalActionCopy(terminalControl));
copy.setActionDefinitionId("com.google.eclipse.terminal.local.copy");
paste = menuManager.add(new TerminalActionPaste(terminalControl));
paste.setActionDefinitionId("com.google.eclipse.terminal.local.paste");
menuManager.add(new Separator());
selectAll = menuManager.add(new TerminalActionSelectAll(terminalControl));
clearAll = menuManager.add(new TerminalActionClearAll(terminalControl));
IActionBars actionBars = viewSite.getActionBars();
actionBars.setGlobalActionHandler(COPY.getId(), copy);
actionBars.setGlobalActionHandler(PASTE.getId(), paste);
actionBars.setGlobalActionHandler(SELECT_ALL.getId(), selectAll);
IKeyBindingService keyBindingService = viewSite.getKeyBindingService();
keyBindingService.registerAction(copy);
keyBindingService.registerAction(paste);
menuManager.addMenuListener(new IMenuListener() {
@Override public void menuAboutToShow(IMenuManager manager) {
update();
}
});
Control control = terminalControl.getControl();
Menu menu = menuManager.createContextMenu(control);
control.setMenu(menu);
menu.addMenuListener(new MenuAdapter() {
@Override public void menuHidden(MenuEvent e) {
copy.updateAction(false);
}
});
}
void update() {
update(copy, paste, selectAll, clearAll);
}
private void update(AbstractTerminalAction...actions) {
for (AbstractTerminalAction action : actions) {
action.updateAction(true);
}
}
private static class PopupMenuManager extends MenuManager {
PopupMenuManager() {
super("#PopupMenu");
}
AbstractTerminalAction add(AbstractTerminalAction action) {
super.add(action);
return action;
}
}
}