mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-14 12:35:22 +02:00
bug 196454: [terminal] Initial connection settings dialog should not be blank
improvements
This commit is contained in:
parent
a441c7269f
commit
4e399ae9df
3 changed files with 171 additions and 20 deletions
|
@ -21,6 +21,7 @@
|
||||||
* Martin Oberhuber (Wind River) - [168186] Add Terminal User Docs
|
* Martin Oberhuber (Wind River) - [168186] Add Terminal User Docs
|
||||||
* Michael Scharf (Wind River) - [172483] switch between connections
|
* Michael Scharf (Wind River) - [172483] switch between connections
|
||||||
* Michael Scharf (Wind River) - [240023] Get rid of the terminal's "Pin" button
|
* Michael Scharf (Wind River) - [240023] Get rid of the terminal's "Pin" button
|
||||||
|
* Michael Scharf (Wind River) - [196454] Initial connection settings dialog should not be blank
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.tm.internal.terminal.view;
|
package org.eclipse.tm.internal.terminal.view;
|
||||||
|
|
||||||
|
@ -64,7 +65,9 @@ import org.eclipse.tm.internal.terminal.control.actions.TerminalActionPaste;
|
||||||
import org.eclipse.tm.internal.terminal.control.actions.TerminalActionSelectAll;
|
import org.eclipse.tm.internal.terminal.control.actions.TerminalActionSelectAll;
|
||||||
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
|
import org.eclipse.tm.internal.terminal.provisional.api.ISettingsStore;
|
||||||
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
|
import org.eclipse.tm.internal.terminal.provisional.api.ITerminalConnector;
|
||||||
|
import org.eclipse.tm.internal.terminal.provisional.api.LayeredSettingsStore;
|
||||||
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
|
import org.eclipse.tm.internal.terminal.provisional.api.Logger;
|
||||||
|
import org.eclipse.tm.internal.terminal.provisional.api.PreferenceSettingStore;
|
||||||
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
|
import org.eclipse.tm.internal.terminal.provisional.api.TerminalConnectorExtension;
|
||||||
import org.eclipse.tm.internal.terminal.provisional.api.TerminalState;
|
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.ITerminalViewConnectionFactory;
|
||||||
|
@ -79,7 +82,9 @@ import org.eclipse.ui.PlatformUI;
|
||||||
import org.eclipse.ui.part.ViewPart;
|
import org.eclipse.ui.part.ViewPart;
|
||||||
|
|
||||||
public class TerminalView extends ViewPart implements ITerminalView, ITerminalViewConnectionListener {
|
public class TerminalView extends ViewPart implements ITerminalView, ITerminalViewConnectionListener {
|
||||||
private static final String STORE_CONNECTION_TYPE = "ConnectionType"; //$NON-NLS-1$
|
private static final String PREF_CONNECTORS = "Connectors."; //$NON-NLS-1$
|
||||||
|
|
||||||
|
private static final String STORE_CONNECTION_TYPE = "ConnectionType"; //$NON-NLS-1$
|
||||||
|
|
||||||
private static final String STORE_SETTING_SUMMARY = "SettingSummary"; //$NON-NLS-1$
|
private static final String STORE_SETTING_SUMMARY = "SettingSummary"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
@ -334,7 +339,13 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalVi
|
||||||
ITerminalConnector[] connectors = fCtlTerminal.getConnectors();
|
ITerminalConnector[] connectors = fCtlTerminal.getConnectors();
|
||||||
if(fCtlTerminal.getState()!=TerminalState.CLOSED)
|
if(fCtlTerminal.getState()!=TerminalState.CLOSED)
|
||||||
connectors=new ITerminalConnector[0];
|
connectors=new ITerminalConnector[0];
|
||||||
TerminalSettingsDlg dlgTerminalSettings = new TerminalSettingsDlg(getViewSite().getShell(),connectors,fCtlTerminal.getTerminalConnector());
|
// load the state from the settings
|
||||||
|
// first load from fStore and then from the preferences.
|
||||||
|
ITerminalConnector c = loadSettings(new LayeredSettingsStore(fStore,getPreferenceSettingsStore()), connectors);
|
||||||
|
// if we have no connector show the one from the settings
|
||||||
|
if(fCtlTerminal.getTerminalConnector()!=null)
|
||||||
|
c=fCtlTerminal.getTerminalConnector();
|
||||||
|
TerminalSettingsDlg dlgTerminalSettings = new TerminalSettingsDlg(getViewSite().getShell(),connectors,c);
|
||||||
dlgTerminalSettings.setTerminalTitle(getActiveConnection().getPartName());
|
dlgTerminalSettings.setTerminalTitle(getActiveConnection().getPartName());
|
||||||
if(title!=null)
|
if(title!=null)
|
||||||
dlgTerminalSettings.setTitle(title);
|
dlgTerminalSettings.setTitle(title);
|
||||||
|
@ -348,8 +359,11 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalVi
|
||||||
Logger.log("Settings dialog OK'ed."); //$NON-NLS-1$
|
Logger.log("Settings dialog OK'ed."); //$NON-NLS-1$
|
||||||
|
|
||||||
// When the settings dialog is closed, we persist the Terminal settings.
|
// When the settings dialog is closed, we persist the Terminal settings.
|
||||||
|
saveSettings(fStore,dlgTerminalSettings.getConnector());
|
||||||
|
// we also save it in the preferences. This will keep the last change
|
||||||
|
// made to this connector as default...
|
||||||
|
saveSettings(getPreferenceSettingsStore(), dlgTerminalSettings.getConnector());
|
||||||
|
|
||||||
saveSettings(dlgTerminalSettings.getConnector());
|
|
||||||
setViewTitle(dlgTerminalSettings.getTerminalTitle());
|
setViewTitle(dlgTerminalSettings.getTerminalTitle());
|
||||||
return dlgTerminalSettings.getConnector();
|
return dlgTerminalSettings.getConnector();
|
||||||
}
|
}
|
||||||
|
@ -466,18 +480,32 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalVi
|
||||||
ITerminalViewConnection conn = new TerminalViewConnection(fCtlTerminal);
|
ITerminalViewConnection conn = new TerminalViewConnection(fCtlTerminal);
|
||||||
listener.setConnection(conn);
|
listener.setConnection(conn);
|
||||||
conn.setPartName(getPartName());
|
conn.setPartName(getPartName());
|
||||||
String connectionType=fStore.get(STORE_CONNECTION_TYPE);
|
// load from settings
|
||||||
for (int i = 0; i < connectors.length; i++) {
|
ITerminalConnector connector = loadSettings(fStore,connectors);
|
||||||
connectors[i].load(getStore(connectors[i]));
|
// set the connector....
|
||||||
if(connectors[i].getId().equals(connectionType))
|
ctrl.setConnector(connector);
|
||||||
ctrl.setConnector(connectors[i]);
|
|
||||||
}
|
|
||||||
updatePreferences();
|
updatePreferences();
|
||||||
TerminalViewPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPreferenceListener);
|
TerminalViewPlugin.getDefault().getPreferenceStore().addPropertyChangeListener(fPreferenceListener);
|
||||||
|
|
||||||
return conn;
|
return conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param store contains the data
|
||||||
|
* @param connectors loads the data from store
|
||||||
|
* @return null or the currently selected connector
|
||||||
|
*/
|
||||||
|
private ITerminalConnector loadSettings(ISettingsStore store, ITerminalConnector[] connectors) {
|
||||||
|
ITerminalConnector connector=null;
|
||||||
|
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))
|
||||||
|
connector=connectors[i];
|
||||||
|
}
|
||||||
|
return connector;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return a list of connectors this view can use
|
* @return a list of connectors this view can use
|
||||||
*/
|
*/
|
||||||
|
@ -486,16 +514,27 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalVi
|
||||||
return connectors;
|
return connectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void saveSettings(ITerminalConnector connector) {
|
/**
|
||||||
ITerminalConnector[] connectors=fCtlTerminal.getConnectors();
|
* The preference setting store is used to save the settings that are
|
||||||
for (int i = 0; i < connectors.length; i++) {
|
* shared between all views.
|
||||||
connectors[i].save(getStore(connectors[i]));
|
* @return the settings store for the connection based on the preferences.
|
||||||
}
|
*
|
||||||
if(connector!=null) {
|
*/
|
||||||
fStore.put(STORE_CONNECTION_TYPE,connector.getId());
|
private PreferenceSettingStore getPreferenceSettingsStore() {
|
||||||
}
|
return new PreferenceSettingStore(TerminalViewPlugin.getDefault().getPluginPreferences(),PREF_CONNECTORS);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @param store the settings will be saved in this store
|
||||||
|
* @param connector the connector that will be saved. Can be null.
|
||||||
|
*/
|
||||||
|
private void saveSettings(ISettingsStore store, ITerminalConnector connector) {
|
||||||
|
if(connector!=null) {
|
||||||
|
connector.save(getStore(store, connector));
|
||||||
|
// the last saved connector becomes the default
|
||||||
|
store.put(STORE_CONNECTION_TYPE,connector.getId());
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
public void init(IViewSite site, IMemento memento) throws PartInitException {
|
public void init(IViewSite site, IMemento memento) throws PartInitException {
|
||||||
super.init(site, memento);
|
super.init(site, memento);
|
||||||
fStore=new SettingsStore(memento);
|
fStore=new SettingsStore(memento);
|
||||||
|
@ -506,8 +545,8 @@ public class TerminalView extends ViewPart implements ITerminalView, ITerminalVi
|
||||||
fMultiConnectionManager.saveState(new SettingStorePrefixDecorator(fStore,"connectionManager")); //$NON-NLS-1$
|
fMultiConnectionManager.saveState(new SettingStorePrefixDecorator(fStore,"connectionManager")); //$NON-NLS-1$
|
||||||
fStore.saveState(memento);
|
fStore.saveState(memento);
|
||||||
}
|
}
|
||||||
private ISettingsStore getStore(ITerminalConnector connector) {
|
private ISettingsStore getStore(ISettingsStore store, ITerminalConnector connector) {
|
||||||
return new SettingStorePrefixDecorator(fStore,connector.getId()+"."); //$NON-NLS-1$
|
return new SettingStorePrefixDecorator(store,connector.getId()+"."); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void setupActions() {
|
protected void setupActions() {
|
||||||
|
|
|
@ -0,0 +1,58 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 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.provisional.api;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Uses an array of {@link ISettingsStore} to find a value.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class LayeredSettingsStore implements ISettingsStore {
|
||||||
|
|
||||||
|
private final ISettingsStore[] fStores;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param stores the stores used to search the values.
|
||||||
|
* {@link #put(String, String)} will put the value in the
|
||||||
|
* first store in the list.
|
||||||
|
*/
|
||||||
|
public LayeredSettingsStore(ISettingsStore[] stores) {
|
||||||
|
fStores=stores;
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* Convince constructor for two stores
|
||||||
|
* @param s1 first store
|
||||||
|
* @param s2 second store
|
||||||
|
*/
|
||||||
|
public LayeredSettingsStore(ISettingsStore s1, ISettingsStore s2) {
|
||||||
|
this(new ISettingsStore[]{s1,s2});
|
||||||
|
}
|
||||||
|
public String get(String key) {
|
||||||
|
for (int i = 0; i < fStores.length; i++) {
|
||||||
|
String value=fStores[i].get(key);
|
||||||
|
if(value!=null)
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String get(String key, String defaultValue) {
|
||||||
|
String value=get(key);
|
||||||
|
if ((value == null) || (value.equals(""))) //$NON-NLS-1$
|
||||||
|
return defaultValue;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void put(String key, String value) {
|
||||||
|
fStores[0].put(key,value);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,54 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2008 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.provisional.api;
|
||||||
|
|
||||||
|
import org.eclipse.core.runtime.Preferences;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A preference based settings store.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
public class PreferenceSettingStore implements ISettingsStore {
|
||||||
|
private final String fPrefix;
|
||||||
|
private final Preferences fPreferences;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a ISettingStore that uses the preferences as backend.
|
||||||
|
*
|
||||||
|
* @param preferences the backed.
|
||||||
|
* @param prefix a string that is prepended to the key
|
||||||
|
*/
|
||||||
|
public PreferenceSettingStore(Preferences preferences, String prefix) {
|
||||||
|
fPreferences=preferences;
|
||||||
|
fPrefix=prefix;
|
||||||
|
}
|
||||||
|
public String get(String key) {
|
||||||
|
return fPreferences.getString(makeKey(key));
|
||||||
|
}
|
||||||
|
public String get(String key, String defaultValue) {
|
||||||
|
String value=get(key);
|
||||||
|
if ((value == null) || (value.equals(""))) //$NON-NLS-1$
|
||||||
|
return defaultValue;
|
||||||
|
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void put(String key, String value) {
|
||||||
|
fPreferences.setValue(makeKey(key), value);
|
||||||
|
}
|
||||||
|
/**
|
||||||
|
* @param key
|
||||||
|
* @return the full path in the preferences
|
||||||
|
*/
|
||||||
|
private String makeKey(String key) {
|
||||||
|
return fPrefix+key;
|
||||||
|
}
|
||||||
|
}
|
Loading…
Add table
Reference in a new issue