1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-14 04:25:21 +02:00

bug 196454: [terminal] Initial connection settings dialog should not be blank

improvements
This commit is contained in:
Michael Scharf 2008-07-09 01:19:22 +00:00
parent a441c7269f
commit 4e399ae9df
3 changed files with 171 additions and 20 deletions

View file

@ -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() {

View file

@ -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);
}
}

View file

@ -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;
}
}