001: /*******************************************************************************
002: * Copyright (c) 2000, 2007 IBM Corporation and others.
003: * All rights reserved. This program and the accompanying materials
004: * are made available under the terms of the Eclipse Public License v1.0
005: * which accompanies this distribution, and is available at
006: * http://www.eclipse.org/legal/epl-v10.html
007: *
008: * Contributors:
009: * IBM Corporation - initial API and implementation
010: *******************************************************************************/package org.eclipse.ui.internal.console;
011:
012: import org.eclipse.core.runtime.CoreException;
013: import org.eclipse.jface.action.Action;
014: import org.eclipse.jface.action.ActionContributionItem;
015: import org.eclipse.jface.action.IMenuCreator;
016: import org.eclipse.jface.resource.ImageDescriptor;
017: import org.eclipse.swt.widgets.Control;
018: import org.eclipse.swt.widgets.Event;
019: import org.eclipse.swt.widgets.Menu;
020: import org.eclipse.ui.PlatformUI;
021: import org.eclipse.ui.activities.WorkbenchActivityHelper;
022: import org.eclipse.ui.console.ConsolePlugin;
023: import org.eclipse.ui.console.IConsoleFactory;
024:
025: /**
026: * @since 3.1
027: */
028: public class OpenConsoleAction extends Action implements IMenuCreator {
029:
030: private ConsoleFactoryExtension[] fFactoryExtensions;
031: private Menu fMenu;
032:
033: public OpenConsoleAction() {
034: fFactoryExtensions = ((ConsoleManager) ConsolePlugin
035: .getDefault().getConsoleManager())
036: .getConsoleFactoryExtensions();
037: setText(ConsoleMessages.OpenConsoleAction_0);
038: setToolTipText(ConsoleMessages.OpenConsoleAction_1);
039: setImageDescriptor(ConsolePluginImages
040: .getImageDescriptor(IInternalConsoleConstants.IMG_ELCL_NEW_CON));
041: setMenuCreator(this );
042: PlatformUI.getWorkbench().getHelpSystem().setHelp(this ,
043: IConsoleHelpContextIds.CONSOLE_OPEN_CONSOLE_ACTION);
044: }
045:
046: /* (non-Javadoc)
047: * @see org.eclipse.jface.action.IMenuCreator#dispose()
048: */
049: public void dispose() {
050: fFactoryExtensions = null;
051: }
052:
053: /* (non-Javadoc)
054: * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Control)
055: */
056: public Menu getMenu(Control parent) {
057: if (fMenu != null) {
058: fMenu.dispose();
059: }
060:
061: fMenu = new Menu(parent);
062: int accel = 1;
063: for (int i = 0; i < fFactoryExtensions.length; i++) {
064: ConsoleFactoryExtension extension = fFactoryExtensions[i];
065: if (!WorkbenchActivityHelper.filterItem(extension)
066: && extension.isEnabled()) {
067: String label = extension.getLabel();
068: ImageDescriptor image = extension.getImageDescriptor();
069: addActionToMenu(fMenu, new ConsoleFactoryAction(label,
070: image, extension), accel);
071: accel++;
072: }
073: }
074: return fMenu;
075: }
076:
077: private void addActionToMenu(Menu parent, Action action,
078: int accelerator) {
079: if (accelerator < 10) {
080: StringBuffer label = new StringBuffer();
081: //add the numerical accelerator
082: label.append('&');
083: label.append(accelerator);
084: label.append(' ');
085: label.append(action.getText());
086: action.setText(label.toString());
087: }
088:
089: ActionContributionItem item = new ActionContributionItem(action);
090: item.fill(parent, -1);
091: }
092:
093: /* (non-Javadoc)
094: * @see org.eclipse.jface.action.IMenuCreator#getMenu(org.eclipse.swt.widgets.Menu)
095: */
096: public Menu getMenu(Menu parent) {
097: return null;
098: }
099:
100: private class ConsoleFactoryAction extends Action {
101:
102: private ConsoleFactoryExtension fConfig;
103: private IConsoleFactory fFactory;
104:
105: public ConsoleFactoryAction(String label,
106: ImageDescriptor image, ConsoleFactoryExtension extension) {
107: setText(label);
108: if (image != null) {
109: setImageDescriptor(image);
110: }
111: fConfig = extension;
112: }
113:
114: /* (non-Javadoc)
115: * @see org.eclipse.jface.action.IAction#run()
116: */
117: public void run() {
118: try {
119: if (fFactory == null) {
120: fFactory = fConfig.createFactory();
121: }
122:
123: fFactory.openConsole();
124: } catch (CoreException e) {
125: ConsolePlugin.log(e);
126: }
127: }
128:
129: /* (non-Javadoc)
130: * @see org.eclipse.jface.action.IAction#runWithEvent(org.eclipse.swt.widgets.Event)
131: */
132: public void runWithEvent(Event event) {
133: run();
134: }
135: }
136: }
|