### Eclipse Workspace Patch 1.0 #P org.eclipse.tm.terminal.view Index: src/org/eclipse/tm/internal/terminal/view/TerminalView.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalView.java,v retrieving revision 1.27 diff -u -r1.27 TerminalView.java --- src/org/eclipse/tm/internal/terminal/view/TerminalView.java 7 May 2008 14:48:03 -0000 1.27 +++ src/org/eclipse/tm/internal/terminal/view/TerminalView.java 10 Jun 2008 06:09:44 -0000 @@ -26,6 +26,7 @@ import java.util.Set; import org.eclipse.core.runtime.Preferences; +import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; @@ -35,6 +36,7 @@ import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.MenuListener; import org.eclipse.swt.widgets.Composite; @@ -45,6 +47,9 @@ import org.eclipse.tm.internal.terminal.actions.TerminalActionConnect; import org.eclipse.tm.internal.terminal.actions.TerminalActionDisconnect; import org.eclipse.tm.internal.terminal.actions.TerminalActionNewTerminal; +import org.eclipse.tm.internal.terminal.actions.TerminalActionPin; +import org.eclipse.tm.internal.terminal.actions.TerminalActionRemove; +import org.eclipse.tm.internal.terminal.actions.TerminalActionSelectionDropDown; import org.eclipse.tm.internal.terminal.actions.TerminalActionSettings; import org.eclipse.tm.internal.terminal.actions.TerminalActionToggleCommandInputField; import org.eclipse.tm.internal.terminal.control.CommandInputFieldWithHistory; @@ -61,6 +66,8 @@ import org.eclipse.tm.internal.terminal.provisional.api.Logger; import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension; import org.eclipse.tm.internal.terminal.provisional.api.TerminalState; +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnectionManager.ITerminalViewConnectionFactory; +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnectionManager.TerminalViewConnectionListener; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewReference; import org.eclipse.ui.IViewSite; @@ -69,7 +76,7 @@ import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; -public class TerminalView extends ViewPart implements ITerminalView, ITerminalListener { +public class TerminalView extends ViewPart implements ITerminalView, ITerminalListener, TerminalViewConnectionListener { private static final String STORE_CONNECTION_TYPE = "ConnectionType"; //$NON-NLS-1$ private static final String STORE_SETTING_SUMMARY = "SettingSummary"; //$NON-NLS-1$ @@ -108,12 +115,17 @@ protected TerminalPropertyChangeHandler fPropertyChangeHandler; + protected Action fActionTerminalDropDown; + protected Action fActionTerminalPin; + protected Action fActionTerminalRemove; + protected boolean fMenuAboutToShow; private SettingsStore fStore; private CommandInputFieldWithHistory fCommandInputField; + private final TerminalViewConnectionManager fMultiConnectionManager=new TerminalViewConnectionManager(); /** * Listens to changes in the preferences */ @@ -126,9 +138,15 @@ } } }; + + private PageBook fPageBook; + + private boolean fPinned=true; + public TerminalView() { Logger .log("==============================================================="); //$NON-NLS-1$ + fMultiConnectionManager.addListener(this); } String findUniqueTitle(String title) { @@ -189,26 +207,33 @@ */ public void onTerminalNewTerminal() { Logger.log("creating new Terminal instance."); //$NON-NLS-1$ - - try { - // The second argument to showView() is a unique String identifying the - // secondary view instance. If it ever matches a previously used secondary - // view identifier, then this call will not create a new Terminal view, - // which is undesirable. Therefore, we append the current time in - // milliseconds to the secondary view identifier to ensure it is always - // unique. This code runs only when the user clicks the New Terminal - // button, so there is no risk that this code will run twice in a single - // millisecond. - - getSite().getPage().showView( - "org.eclipse.tm.terminal.view.TerminalView",//$NON-NLS-1$ - "SecondaryTerminal" + System.currentTimeMillis(), //$NON-NLS-1$ - IWorkbenchPage.VIEW_ACTIVATE); - } catch (PartInitException ex) { - Logger.logException(ex); + if(fPinned) { + try { + // The second argument to showView() is a unique String identifying the + // secondary view instance. If it ever matches a previously used secondary + // view identifier, then this call will not create a new Terminal view, + // which is undesirable. Therefore, we append the current time in + // milliseconds to the secondary view identifier to ensure it is always + // unique. This code runs only when the user clicks the New Terminal + // button, so there is no risk that this code will run twice in a single + // millisecond. + + getSite().getPage().showView( + "org.eclipse.tm.terminal.view.TerminalView",//$NON-NLS-1$ + "SecondaryTerminal" + System.currentTimeMillis(), //$NON-NLS-1$ + IWorkbenchPage.VIEW_ACTIVATE); + } catch (PartInitException ex) { + Logger.logException(ex); + } + } else { + setupControls(); + if(newConnection()==null) { + fMultiConnectionManager.removeCurrent(); + } } } + public void onTerminalConnect() { //if (isConnected()) if (fCtlTerminal.getState()!=TerminalState.CLOSED) @@ -246,12 +271,17 @@ } public void onTerminalSettings() { + newConnection(); + } + + private ITerminalConnector newConnection() { ITerminalConnector c=showSettingsDialog(); if(c!=null) { setConnector(c); onTerminalConnect(); } + return c; } private ITerminalConnector showSettingsDialog() { @@ -363,7 +393,19 @@ // sequence. setPartName(findUniqueTitle(ViewMessages.PROP_TITLE)); - setupControls(wndParent); + fPageBook=new PageBook(wndParent,SWT.NONE); + ISettingsStore s=new SettingStorePrefixDecorator(fStore,"connectionManager"); //$NON-NLS-1$ + fMultiConnectionManager.loadState(s,new ITerminalViewConnectionFactory() { + public ITerminalViewConnection create() { + return makeViewConnection(); + } + }); + // if there is no connection loaded, create at least one + // needed to read old states from the old terminal + if(fMultiConnectionManager.size()==0) { + setupControls(); + fPageBook.showPage(fCtlTerminal.getRootControl()); + } setupActions(); setupLocalToolBars(); setupContextMenus(); @@ -371,7 +413,7 @@ PlatformUI.getWorkbench().getHelpSystem().setHelp(wndParent, TerminalViewPlugin.HELPPREFIX + "terminal_page"); //$NON-NLS-1$ - onTerminalStatus(); + refresh(); onTerminalFontChanged(); } public void dispose() { @@ -393,10 +435,16 @@ /** * This method creates the top-level control for the Terminal view. */ - protected void setupControls(Composite wndParent) { - ITerminalConnector[] connectors = makeConnectors(); - fCtlTerminal = TerminalViewControlFactory.makeControl(this, wndParent, connectors); + protected void setupControls() { + ITerminalViewConnection conn = makeViewConnection(); + fMultiConnectionManager.addConnection(conn); + fMultiConnectionManager.setConnection(conn); + } + private ITerminalViewConnection makeViewConnection() { + ITerminalConnector[] connectors = makeConnectors(); + fCtlTerminal = TerminalViewControlFactory.makeControl(this, fPageBook, connectors); + ITerminalViewConnection conn = new TerminalViewConnection(fCtlTerminal); String connectionType=fStore.get(STORE_CONNECTION_TYPE); for (int i = 0; i < connectors.length; i++) { connectors[i].load(getStore(connectors[i])); @@ -411,6 +459,7 @@ String title=fStore.get(STORE_TITLE); if(title!=null && title.length()>0) setPartName(title); + return conn; } /** @@ -443,6 +492,7 @@ fStore.put(STORE_HAS_COMMAND_INPUT_FIELD,hasCommandInputField()?"true":"false"); //$NON-NLS-1$//$NON-NLS-2$ fStore.put(STORE_SETTING_SUMMARY, getSettingsSummary()); fStore.put(STORE_TITLE,getPartName()); + fMultiConnectionManager.saveState(new SettingStorePrefixDecorator(fStore,"connectionManager")); //$NON-NLS-1$ fStore.saveState(memento); } private ISettingsStore getStore(ITerminalConnector connector) { @@ -450,6 +500,10 @@ } protected void setupActions() { + fActionTerminalDropDown = new TerminalActionSelectionDropDown(fMultiConnectionManager); + fActionTerminalPin=new TerminalActionPin(this); + fActionTerminalPin.setChecked(isPinned()); + fActionTerminalRemove=new TerminalActionRemove(fMultiConnectionManager); fActionTerminalNewTerminal = new TerminalActionNewTerminal(this); // fActionTerminalScrollLock = new TerminalActionScrollLock(this); fActionTerminalConnect = new TerminalActionConnect(this); @@ -465,12 +519,16 @@ protected void setupLocalToolBars() { IToolBarManager toolBarMgr = getViewSite().getActionBars().getToolBarManager(); - toolBarMgr.add(fActionTerminalNewTerminal); + toolBarMgr.add(fActionTerminalRemove); // toolBarMgr.add(fActionTerminalScrollLock); toolBarMgr.add(fActionTerminalConnect); toolBarMgr.add(fActionTerminalDisconnect); toolBarMgr.add(fActionTerminalSettings); toolBarMgr.add(fActionToggleCommandInputField); + toolBarMgr.add(new Separator("fixedGroup")); //$NON-NLS-1$ + toolBarMgr.add(fActionTerminalPin); + toolBarMgr.add(fActionTerminalDropDown); + toolBarMgr.add(fActionTerminalNewTerminal); } protected void setupContextMenus() { @@ -561,4 +619,28 @@ public void setScrollLock(boolean on) { fCtlTerminal.setScrollLock(on); } + + public void connectionsChanged() { + if(fMultiConnectionManager.getCurrentConnection()!=null) { + ITerminalViewControl ctrl = fMultiConnectionManager.getCurrentConnection().getCtlTerminal(); + if(fCtlTerminal!=ctrl) { + fCtlTerminal=ctrl; + refresh(); + } + } + + } + + private void refresh() { + fPageBook.showPage(fCtlTerminal.getRootControl()); + updateStatus(); + onTerminalStatus(); + } + + public void setPinned(boolean pinned) { + fPinned=pinned; + } + private boolean isPinned() { + return fPinned; + } } Index: src/org/eclipse/tm/internal/terminal/view/ITerminalView.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ITerminalView.java,v retrieving revision 1.5 diff -u -r1.5 ITerminalView.java --- src/org/eclipse/tm/internal/terminal/view/ITerminalView.java 25 Apr 2008 20:14:49 -0000 1.5 +++ src/org/eclipse/tm/internal/terminal/view/ITerminalView.java 10 Jun 2008 06:09:43 -0000 @@ -26,4 +26,5 @@ public void setCommandInputField(boolean on); public boolean isScrollLock(); public void setScrollLock(boolean b); + public void setPinned(boolean pin); } Index: src/org/eclipse/tm/internal/terminal/view/ImageConsts.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/ImageConsts.java,v retrieving revision 1.5 diff -u -r1.5 ImageConsts.java --- src/org/eclipse/tm/internal/terminal/view/ImageConsts.java 25 Apr 2008 20:14:49 -0000 1.5 +++ src/org/eclipse/tm/internal/terminal/view/ImageConsts.java 10 Jun 2008 06:09:43 -0000 @@ -20,31 +20,36 @@ public interface ImageConsts { public final static String IMAGE_DIR_ROOT = "icons/"; //$NON-NLS-1$ - public final static String IMAGE_DIR_CTOOL = "ctool16/"; // basic colors - size 16x16 //$NON-NLS-1$ public final static String IMAGE_DIR_LOCALTOOL = "clcl16/"; // basic colors - size 16x16 //$NON-NLS-1$ public final static String IMAGE_DIR_DLCL = "dlcl16/"; // disabled - size 16x16 //$NON-NLS-1$ public final static String IMAGE_DIR_ELCL = "elcl16/"; // enabled - size 16x16 //$NON-NLS-1$ - public final static String IMAGE_DIR_OBJECT = "obj16/"; // basic colors - size 16x16 //$NON-NLS-1$ - public final static String IMAGE_DIR_WIZBAN = "wizban/"; // basic colors - size 16x16 //$NON-NLS-1$ - public final static String IMAGE_DIR_OVR = "ovr16/"; // basic colors - size 7x8 //$NON-NLS-1$ public final static String IMAGE_DIR_VIEW = "cview16/"; // views //$NON-NLS-1$ public final static String IMAGE_DIR_EVIEW = "eview16/"; // views //$NON-NLS-1$ public static final String IMAGE_NEW_TERMINAL = "TerminalViewNewTerminal"; //$NON-NLS-1$ + public static final String IMAGE_TERMINAL_VIEW = "TerminalView"; //$NON-NLS-1$ public static final String IMAGE_CLCL_CONNECT = "ImageClclConnect"; //$NON-NLS-1$ public static final String IMAGE_CLCL_DISCONNECT = "ImageClclDisconnect"; //$NON-NLS-1$ public static final String IMAGE_CLCL_SETTINGS = "ImageClclSettings"; //$NON-NLS-1$ public static final String IMAGE_CLCL_SCROLL_LOCK = "ImageClclScrollLock"; //$NON-NLS-1$ + public static final String IMAGE_CLCL_CLEAR = "ImageClclClear"; //$NON-NLS-1$ + public static final String IMAGE_CLCL_PIN = "ImageClclPin"; //$NON-NLS-1$ public static final String IMAGE_DLCL_CONNECT = "ImageDlclConnect"; //$NON-NLS-1$ public static final String IMAGE_DLCL_DISCONNECT = "ImageDlclDisconnect"; //$NON-NLS-1$ public static final String IMAGE_DLCL_SETTINGS = "ImageDlclSettings"; //$NON-NLS-1$ public static final String IMAGE_DLCL_SCROLL_LOCK = "ImageDlclScrollLock"; //$NON-NLS-1$ + public static final String IMAGE_DLCL_CLEAR = "ImageDlclClear"; //$NON-NLS-1$ + public static final String IMAGE_DLCL_PIN = "ImageDlclPin"; //$NON-NLS-1$ + public static final String IMAGE_DLCL_REMOVE = "ImageDlclRemove"; //$NON-NLS-1$ public static final String IMAGE_ELCL_CONNECT = "ImageElclConnect"; //$NON-NLS-1$ public static final String IMAGE_ELCL_DISCONNECT = "ImageElclDisconnect"; //$NON-NLS-1$ public static final String IMAGE_ELCL_SETTINGS = "ImageElclSettings"; //$NON-NLS-1$ public static final String IMAGE_ELCL_SCROLL_LOCK = "ImageElclScrollLock"; //$NON-NLS-1$ + public static final String IMAGE_ELCL_CLEAR = "ImageElclClear"; //$NON-NLS-1$ + public static final String IMAGE_ELCL_PIN = "ImageElclPin"; //$NON-NLS-1$ + public static final String IMAGE_ELCL_REMOVE = "ImageElclRemove"; //$NON-NLS-1$ public static final String IMAGE_CLCL_COMMAND_INPUT_FIELD = "ImageClclCommandInputField";//$NON-NLS-1$ public static final String IMAGE_ELCL_COMMAND_INPUT_FIELD = "ImageDlclCommandInputField";//$NON-NLS-1$ public static final String IMAGE_DLCL_COMMAND_INPUT_FIELD = "ImageDlclCommandInputField";//$NON-NLS-1$ Index: src/org/eclipse/tm/internal/terminal/view/TerminalViewPlugin.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/view/TerminalViewPlugin.java,v retrieving revision 1.8 diff -u -r1.8 TerminalViewPlugin.java --- src/org/eclipse/tm/internal/terminal/view/TerminalViewPlugin.java 7 May 2008 14:48:03 -0000 1.8 +++ src/org/eclipse/tm/internal/terminal/view/TerminalViewPlugin.java 10 Jun 2008 06:09:44 -0000 @@ -53,6 +53,8 @@ map.put(ImageConsts.IMAGE_CLCL_SETTINGS, "properties_tsk.gif"); //$NON-NLS-1$ map.put(ImageConsts.IMAGE_CLCL_COMMAND_INPUT_FIELD, "command_input_field.gif"); //$NON-NLS-1$ map.put(ImageConsts.IMAGE_CLCL_SCROLL_LOCK, "lock_co.gif"); //$NON-NLS-1$ + map.put(ImageConsts.IMAGE_CLCL_CLEAR, "clear_co.gif"); //$NON-NLS-1$ + map.put(ImageConsts.IMAGE_CLCL_PIN, "pin.gif"); //$NON-NLS-1$ loadImageRegistry(imageRegistry, ImageConsts.IMAGE_DIR_LOCALTOOL, map); @@ -65,7 +67,10 @@ map.put(ImageConsts.IMAGE_ELCL_SETTINGS, "properties_tsk.gif"); //$NON-NLS-1$ map.put(ImageConsts.IMAGE_ELCL_COMMAND_INPUT_FIELD, "command_input_field.gif"); //$NON-NLS-1$ map.put(ImageConsts.IMAGE_ELCL_SCROLL_LOCK, "lock_co.gif"); //$NON-NLS-1$ - + map.put(ImageConsts.IMAGE_ELCL_CLEAR, "clear_co.gif"); //$NON-NLS-1$ + map.put(ImageConsts.IMAGE_ELCL_PIN, "pin.gif"); //$NON-NLS-1$ + map.put(ImageConsts.IMAGE_ELCL_REMOVE, "rem_co.gif"); //$NON-NLS-1$ + loadImageRegistry(imageRegistry, ImageConsts.IMAGE_DIR_ELCL, map); map.clear(); @@ -77,10 +82,20 @@ map.put(ImageConsts.IMAGE_DLCL_SETTINGS, "properties_tsk.gif"); //$NON-NLS-1$ map.put(ImageConsts.IMAGE_DLCL_COMMAND_INPUT_FIELD, "command_input_field.gif"); //$NON-NLS-1$ map.put(ImageConsts.IMAGE_DLCL_SCROLL_LOCK, "lock_co.gif"); //$NON-NLS-1$ + map.put(ImageConsts.IMAGE_DLCL_CLEAR, "clear_co.gif"); //$NON-NLS-1$ + map.put(ImageConsts.IMAGE_DLCL_PIN, "pin.gif"); //$NON-NLS-1$ + map.put(ImageConsts.IMAGE_DLCL_REMOVE, "rem_co.gif"); //$NON-NLS-1$ loadImageRegistry(imageRegistry, ImageConsts.IMAGE_DIR_DLCL, map); map.clear(); + + map.put(ImageConsts.IMAGE_TERMINAL_VIEW, "terminal_view.gif"); //$NON-NLS-1$ + + loadImageRegistry(imageRegistry, ImageConsts.IMAGE_DIR_EVIEW, map); + + map.clear(); + } catch (MalformedURLException malformedURLException) { malformedURLException.printStackTrace(); } Index: src/org/eclipse/tm/internal/terminal/actions/ActionMessages.properties =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/actions/ActionMessages.properties,v retrieving revision 1.5 diff -u -r1.5 ActionMessages.properties --- src/org/eclipse/tm/internal/terminal/actions/ActionMessages.properties 25 Apr 2008 20:14:49 -0000 1.5 +++ src/org/eclipse/tm/internal/terminal/actions/ActionMessages.properties 10 Jun 2008 06:09:43 -0000 @@ -23,3 +23,9 @@ SCROLL_LOCK_1 = Scroll Lock SETTINGS = Settings TOGGLE_COMMAND_INPUT_FIELD= Toggle Command Input Field +REMOVE = Remove Terminal +PIN = Pin Terminal + +ConsoleDropDownAction_0=Select Connection +ConsoleDropDownAction_1=Display Selected Connections + Index: src/org/eclipse/tm/internal/terminal/actions/ActionMessages.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal.view/src/org/eclipse/tm/internal/terminal/actions/ActionMessages.java,v retrieving revision 1.5 diff -u -r1.5 ActionMessages.java --- src/org/eclipse/tm/internal/terminal/actions/ActionMessages.java 25 Apr 2008 20:14:48 -0000 1.5 +++ src/org/eclipse/tm/internal/terminal/actions/ActionMessages.java 10 Jun 2008 06:09:43 -0000 @@ -20,6 +20,7 @@ import org.eclipse.osgi.util.NLS; public class ActionMessages extends NLS { + static { NLS.initializeMessages(ActionMessages.class.getName(), ActionMessages.class); } @@ -30,6 +31,11 @@ public static String SETTINGS_ELLIPSE; public static String SCROLL_LOCK_0; public static String SCROLL_LOCK_1; + public static String REMOVE; + public static String PIN; + + public static String ConsoleDropDownAction_0; + public static String ConsoleDropDownAction_1; public static String SETTINGS; Index: src/org/eclipse/tm/internal/terminal/actions/TerminalActionPin.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/actions/TerminalActionPin.java diff -N src/org/eclipse/tm/internal/terminal/actions/TerminalActionPin.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/actions/TerminalActionPin.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,41 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Wind River Systems, Inc. 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 + * + * Initial Contributors: + * The following Wind River employees contributed to the Terminal component + * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb, + * Helmut Haigermoser and Ted Williams. + * + * Contributors: + * Michael Scharf (Wind River) - split into core, view and connector plugins + * Martin Oberhuber (Wind River) - fixed copyright headers and beautified + *******************************************************************************/ +package org.eclipse.tm.internal.terminal.actions; + +import org.eclipse.jface.action.IAction; +import org.eclipse.tm.internal.terminal.view.ITerminalView; +import org.eclipse.tm.internal.terminal.view.ImageConsts; + +public class TerminalActionPin extends TerminalAction +{ + public TerminalActionPin(ITerminalView target) + { + super(target, + TerminalActionPin.class.getName(),IAction.AS_RADIO_BUTTON); + + setupAction(ActionMessages.PIN, + ActionMessages.PIN, + ImageConsts.IMAGE_CLCL_PIN, + ImageConsts.IMAGE_ELCL_PIN, + ImageConsts.IMAGE_DLCL_PIN, + true); + } + public void run() { + fTarget.setPinned(!isChecked()); + setChecked(!isChecked()); + } +} Index: src/org/eclipse/tm/internal/terminal/actions/ShowConsoleAction.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/actions/ShowConsoleAction.java diff -N src/org/eclipse/tm/internal/terminal/actions/ShowConsoleAction.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/actions/ShowConsoleAction.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,44 @@ +/******************************************************************************* + * 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 + *******************************************************************************/ +package org.eclipse.tm.internal.terminal.actions; + +import org.eclipse.jface.action.Action; +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnectionManager; +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnection; + +/** + * Shows a specific console in the console view + */ +public class ShowConsoleAction extends Action { + + private final ITerminalViewConnection fConnection; + private final ITerminalViewConnectionManager fView; + + /** + * Constructs an action to display the given console. + * + * @param view the console view in which the given console is contained + * @param console the console + */ + public ShowConsoleAction(ITerminalViewConnectionManager view, ITerminalViewConnection console) { + super(console.getName(), AS_RADIO_BUTTON); + fConnection = console; + fView = view; + setImageDescriptor(console.getImageDescriptor()); + } + + /* (non-Javadoc) + * @see org.eclipse.jface.action.IAction#run() + */ + public void run() { + fView.setConnection(fConnection); + } +} Index: src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnectionManager.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnectionManager.java diff -N src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnectionManager.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnectionManager.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,65 @@ +/******************************************************************************* + * Copyright (c) 2007 Wind River Systems, Inc. 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: + * Michael Scharf (Wind River) - initial API and implementation + *******************************************************************************/ +package org.eclipse.tm.internal.terminal.view; + +import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; + + +/** + * Supports multiple connections + * + */ +public interface ITerminalViewConnectionManager { + interface TerminalViewConnectionListener { + void connectionsChanged(); + } + interface ITerminalViewConnectionFactory { + ITerminalViewConnection create(); + } + /** + * @return a list of all connections this view can display + */ + ITerminalViewConnection[] getConnections(); + /** + * If more than two connections are available, remove the current connection + */ + void removeCurrent(); + + /** + * @return the number of connections + */ + int size(); + /** + * @return th connection the view is showing at the moment + */ + ITerminalViewConnection getCurrentConnection(); + + /** + * @param conn make this connection the current connection + */ + void setConnection(ITerminalViewConnection conn); + + /** + * If there are more than two connections toggle between this and the + * previously shown connection + */ + void swapConnection(); + + void addListener(TerminalViewConnectionListener listener); + void removeListener(TerminalViewConnectionListener listener); + + void saveState(ISettingsStore store); + /** + * @param store + */ + void loadState(ISettingsStore store,ITerminalViewConnectionFactory factory); + +} Index: src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnection.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnection.java diff -N src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnection.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/view/ITerminalViewConnection.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,27 @@ +/******************************************************************************* + * Copyright (c) 2007 Wind River Systems, Inc. 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: + * Michael Scharf (Wind River) - initial API and implementation + *******************************************************************************/ +package org.eclipse.tm.internal.terminal.view; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.tm.internal.terminal.control.ITerminalViewControl; +import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; + +public interface ITerminalViewConnection { + + String getName(); + + ImageDescriptor getImageDescriptor(); + ITerminalViewControl getCtlTerminal(); + + void saveState(ISettingsStore store); + + void loadState(ISettingsStore store); +} Index: src/org/eclipse/tm/internal/terminal/view/TerminalViewConnectionManager.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/view/TerminalViewConnectionManager.java diff -N src/org/eclipse/tm/internal/terminal/view/TerminalViewConnectionManager.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/view/TerminalViewConnectionManager.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,123 @@ +/******************************************************************************* + * Copyright (c) 2007 Wind River Systems, Inc. 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: + * Michael Scharf (Wind River) - initial API and implementation + *******************************************************************************/ +package org.eclipse.tm.internal.terminal.view; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; + +public class TerminalViewConnectionManager implements ITerminalViewConnectionManager { + private final List fConnections=new ArrayList(); + private ITerminalViewConnection fCurrentConnection; + private final List fListeners=new ArrayList(); + private final List fPrevConnections=new ArrayList(); + + public ITerminalViewConnection[] getConnections() { + return (ITerminalViewConnection[]) fConnections.toArray(new ITerminalViewConnection[fConnections.size()]); + } + + public int size() { // TODO Auto-generated method stub + return fConnections.size(); + } + + public ITerminalViewConnection getCurrentConnection() { + return fCurrentConnection; + } + public void setConnection(ITerminalViewConnection conn) { + fCurrentConnection=conn; + fPrevConnections.remove(conn); + fPrevConnections.add(conn); + + fireListeners(); + } + + public void swapConnection() { + if(fPrevConnections.size()>1) { + setConnection((ITerminalViewConnection) fPrevConnections.get(fPrevConnections.size()-2)); + } + + } + + public void addConnection(ITerminalViewConnection conn) { + fConnections.add(conn); + fireListeners(); + } + public void removeConnection(ITerminalViewConnection conn) { + fConnections.remove(conn); + fPrevConnections.remove(conn); + fireListeners(); + } + + public void addListener(TerminalViewConnectionListener listener) { + fListeners.add(listener); + } + + public void removeListener(TerminalViewConnectionListener listener) { + fListeners.remove(listener); + } + protected void fireListeners() { + TerminalViewConnectionListener[] listeners=(TerminalViewConnectionListener[]) fListeners.toArray(new TerminalViewConnectionListener[fListeners.size()]); + for (int i = 0; i < listeners.length; i++) { + listeners[i].connectionsChanged(); + } + } + + public void saveState(ISettingsStore store) { + int n=0; + store.put("size",""+fConnections.size()); //$NON-NLS-1$ //$NON-NLS-2$ + for (Iterator iterator = fConnections.iterator(); iterator.hasNext();) { + String prefix="c"+n; //$NON-NLS-1$ + n++; + ITerminalViewConnection connection = (ITerminalViewConnection) iterator.next(); + if(connection.equals(fCurrentConnection)) + store.put("current",prefix); //$NON-NLS-1$ + connection.saveState(new SettingStorePrefixDecorator(store,prefix)); + } + } + + public void loadState(ISettingsStore store,ITerminalViewConnectionFactory factory) { + int size=0; + try { + size=Integer.parseInt(store.get("size")); //$NON-NLS-1$ + } catch(Exception e) { + // ignore + } + if(size>0) { + String current=store.get("current"); //$NON-NLS-1$ + int n=0; + for (int i=0;i1) { + fConnections.remove(fCurrentConnection); + fPrevConnections.remove(fCurrentConnection); + if(fPrevConnections.size()>0) + fCurrentConnection=(ITerminalViewConnection) fPrevConnections.get(fPrevConnections.size()-1); + else + fCurrentConnection=(ITerminalViewConnection) fConnections.get(fConnections.size()-1); + + fireListeners(); + + } + } +} Index: src/org/eclipse/tm/internal/terminal/view/TerminalViewConnection.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/view/TerminalViewConnection.java diff -N src/org/eclipse/tm/internal/terminal/view/TerminalViewConnection.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/view/TerminalViewConnection.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,68 @@ +/******************************************************************************* + * Copyright (c) 2007 Wind River Systems, Inc. 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: + * Michael Scharf (Wind River) - initial API and implementation + *******************************************************************************/ +/** + * + */ +package org.eclipse.tm.internal.terminal.view; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.eclipse.tm.internal.terminal.control.ITerminalViewControl; +import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore; +import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector; + +class TerminalViewConnection implements ITerminalViewConnection { + private static final String STORE_CONNECTION_TYPE = "ConnectionType"; //$NON-NLS-1$ + final private ITerminalViewControl fCtlTerminal; + public TerminalViewConnection(ITerminalViewControl ctl) { + super(); + fCtlTerminal = ctl; + } + + /* (non-Javadoc) + * @see org.eclipse.tm.internal.terminal.actions.ITerminalViewConnection#getName() + */ + public String getName() { + return fCtlTerminal.getSettingsSummary(); + } + + /* (non-Javadoc) + * @see org.eclipse.tm.internal.terminal.actions.ITerminalViewConnection#getImageDescriptor() + */ + public ImageDescriptor getImageDescriptor() { + return TerminalViewPlugin.getDefault().getImageRegistry().getDescriptor(ImageConsts.IMAGE_TERMINAL_VIEW); + } + + public ITerminalViewControl getCtlTerminal() { + return fCtlTerminal; + } + private ISettingsStore getStore(ISettingsStore store,ITerminalConnector connector) { + return new SettingStorePrefixDecorator(store,connector.getId()+"."); //$NON-NLS-1$ + } + public void loadState(ISettingsStore store) { + ITerminalConnector[] connectors=fCtlTerminal.getConnectors(); + String connectionType=store.get(STORE_CONNECTION_TYPE); + for (int i = 0; i < connectors.length; i++) { + connectors[i].load(getStore(store,connectors[i])); + if(connectors[i].getId().equals(connectionType)) + fCtlTerminal.setConnector(connectors[i]); + } + } + + public void saveState(ISettingsStore store) { + ITerminalConnector[] connectors=fCtlTerminal.getConnectors(); + for (int i = 0; i < connectors.length; i++) { + connectors[i].save(getStore(store,connectors[i])); + } + if(fCtlTerminal.getTerminalConnector()!=null) { + store.put(STORE_CONNECTION_TYPE,fCtlTerminal.getTerminalConnector().getId()); + } + } +} Index: src/org/eclipse/tm/internal/terminal/actions/TerminalActionRemove.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/actions/TerminalActionRemove.java diff -N src/org/eclipse/tm/internal/terminal/actions/TerminalActionRemove.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/actions/TerminalActionRemove.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2004, 2007 Wind River Systems, Inc. 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 + * + * Initial Contributors: + * The following Wind River employees contributed to the Terminal component + * that contains this file: Chris Thew, Fran Litterio, Stephen Lamb, + * Helmut Haigermoser and Ted Williams. + * + * Contributors: + * Michael Scharf (Wind River) - split into core, view and connector plugins + * Martin Oberhuber (Wind River) - fixed copyright headers and beautified + *******************************************************************************/ +package org.eclipse.tm.internal.terminal.actions; + +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnectionManager; +import org.eclipse.tm.internal.terminal.view.ImageConsts; +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnectionManager.TerminalViewConnectionListener; + +public class TerminalActionRemove extends TerminalAction implements TerminalViewConnectionListener +{ + private final ITerminalViewConnectionManager fConnectionManager; + public TerminalActionRemove(ITerminalViewConnectionManager target) + { + super(null, + TerminalActionRemove.class.getName()); + fConnectionManager=target; + setupAction(ActionMessages.REMOVE, + ActionMessages.REMOVE, + null, + ImageConsts.IMAGE_ELCL_REMOVE, + ImageConsts.IMAGE_DLCL_REMOVE, + true); + } + public void run() { + fConnectionManager.removeCurrent(); + fConnectionManager.addListener(this); + } + public void connectionsChanged() { + setEnabled(fConnectionManager.size()>1); + } +} Index: src/org/eclipse/tm/internal/terminal/actions/TerminalActionSelectionDropDown.java =================================================================== RCS file: src/org/eclipse/tm/internal/terminal/actions/TerminalActionSelectionDropDown.java diff -N src/org/eclipse/tm/internal/terminal/actions/TerminalActionSelectionDropDown.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/tm/internal/terminal/actions/TerminalActionSelectionDropDown.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,105 @@ +/******************************************************************************* + * Copyright (c) 2000, 2007 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 + *******************************************************************************/ +package org.eclipse.tm.internal.terminal.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 org.eclipse.tm.internal.terminal.view.ITerminalViewConnection; +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnectionManager; +import org.eclipse.tm.internal.terminal.view.ImageConsts; +import org.eclipse.tm.internal.terminal.view.TerminalViewPlugin; +import org.eclipse.tm.internal.terminal.view.ITerminalViewConnectionManager.TerminalViewConnectionListener; + +/** + * Drop down action in the console to select the console to display. + */ +public class TerminalActionSelectionDropDown extends Action implements IMenuCreator, TerminalViewConnectionListener { + private ITerminalViewConnectionManager fConnections; + private Menu fMenu; + public TerminalActionSelectionDropDown(ITerminalViewConnectionManager view) { + fConnections= view; + setText(ActionMessages.ConsoleDropDownAction_0); + setToolTipText(ActionMessages.ConsoleDropDownAction_1); + setImageDescriptor(TerminalViewPlugin.getDefault().getImageRegistry().getDescriptor(ImageConsts.IMAGE_TERMINAL_VIEW)); +// 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 current = fConnections.getCurrentConnection(); + for (int i = 0; i < consoles.length; i++) { + ITerminalViewConnection console = consoles[i]; + Action action = new ShowConsoleAction(fConnections, console); + action.setChecked(console.equals(current)); + 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() { + ITerminalViewConnection[] consoles= fConnections.getConnections(); + setEnabled(consoles.length >= 1); + } +} #P org.eclipse.tm.terminal Index: src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java,v retrieving revision 1.21 diff -u -r1.21 VT100TerminalControl.java --- src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java 9 Jun 2008 14:31:07 -0000 1.21 +++ src/org/eclipse/tm/internal/terminal/emulator/VT100TerminalControl.java 10 Jun 2008 06:09:51 -0000 @@ -549,6 +549,9 @@ public Control getControl() { return fCtlText; } + public Control getRootControl() { + return fWndParent; + } protected void setupControls(Composite parent) { // The Terminal view now aims to be an ANSI-conforming terminal emulator, so it // can't have a horizontal scroll bar (but a vertical one is ok). Also, do Index: src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java =================================================================== RCS file: /cvsroot/dsdp/org.eclipse.tm.core/terminal/org.eclipse.tm.terminal/src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java,v retrieving revision 1.13 diff -u -r1.13 ITerminalViewControl.java --- src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java 9 Jun 2008 23:38:52 -0000 1.13 +++ src/org/eclipse/tm/internal/terminal/control/ITerminalViewControl.java 10 Jun 2008 06:09:51 -0000 @@ -48,7 +48,14 @@ void setFont(Font font); void setInvertedColors(boolean invert); Font getFont(); + /** + * @return the text control + */ Control getControl(); + /** + * @return the root of all controls + */ + Control getRootControl(); boolean isDisposed(); void selectAll(); void clearTerminal();