| /* |
| * 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.terminal.local.ui.view; |
| |
| 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.tm.internal.terminal.control.actions.*; |
| import com.google.eclipse.tm.internal.terminal.emulator.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; |
| } |
| } |
| } |