/******************************************************************************* * Copyright (c) 2000, 2008 IBM Corporation and others. * 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 * * Contributors: * IBM Corporation - initial API and implementation * Michael Scharf (Wind River) - [172483] switch between connections * (Adapted from org.eclipse.ui.internal.console.ConsoleDropDownAction) *******************************************************************************/ package com.netifera.platform.host.terminal.ui.actions; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import com.netifera.platform.host.internal.terminal.ui.Activator; import com.netifera.platform.host.terminal.ui.view.ITerminalViewConnection; import com.netifera.platform.host.terminal.ui.view.ITerminalViewConnectionManager; import com.netifera.platform.host.terminal.ui.view.ITerminalViewConnectionManager.ITerminalViewConnectionListener; /** * Drop down action in the console to select the console to display. */ public class SelectTerminalAction extends Action implements IMenuCreator, ITerminalViewConnectionListener { private ITerminalViewConnectionManager fConnections; private Menu fMenu; public SelectTerminalAction(ITerminalViewConnectionManager view) { fConnections= view; setText("Select Terminal"); setToolTipText("Display Selected Terminal"); setImageDescriptor(Activator.getInstance().getImageCache().getDescriptor("icons/terminal_view.png")); // PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IConsoleHelpContextIds.CONSOLE_DISPLAY_CONSOLE_ACTION); setMenuCreator(this); fConnections.addListener(this); connectionsChanged(); } /* (non-Javadoc) * @see org.eclipse.jface.action.IMenuCreator#dispose() */ public void dispose() { if (fMenu != null) { fMenu.dispose(); } fConnections.removeListener(this); fConnections= null; } /* (non-Javadoc) * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Menu) */ public Menu getMenu(Menu parent) { return null; } /* (non-Javadoc) * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Control) */ public Menu getMenu(Control parent) { if (fMenu != null) { fMenu.dispose(); } fMenu= new Menu(parent); ITerminalViewConnection[] consoles= fConnections.getConnections(); ITerminalViewConnection active = fConnections.getActiveConnection(); for (int i = 0; i < consoles.length; i++) { ITerminalViewConnection console = consoles[i]; Action action = new ShowConnectionAction(fConnections, console); action.setChecked(console.equals(active)); addActionToMenu(fMenu, action, i + 1); } return fMenu; } private void addActionToMenu(Menu parent, Action action, int accelerator) { if (accelerator < 10) { StringBuffer label= new StringBuffer(); //add the numerical accelerator label.append('&'); label.append(accelerator); label.append(' '); label.append(action.getText()); action.setText(label.toString()); } ActionContributionItem item= new ActionContributionItem(action); item.fill(parent, -1); } /* (non-Javadoc) * @see org.eclipse.jface.action.IAction#run() */ public void run() { fConnections.swapConnection(); } public void connectionsChanged() { setEnabled(fConnections.size() > 1); } }