debuggercdi/com.nokia.cdt.debug.cw.symbian/src/com/nokia/cdt/debug/cw/symbian/ui/GlobalSettings.java
Add S60 5.2 support.
/*
* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:
*
*/
package com.nokia.cdt.debug.cw.symbian.ui;
import java.util.HashMap;
import java.util.Iterator;
import org.eclipse.cdt.utils.ui.controls.ControlFactory;
import org.eclipse.core.runtime.Preferences;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.IPreferencePage;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.jface.preference.PreferencePage;
import org.eclipse.jface.preference.StringFieldEditor;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.PlatformUI;
import com.freescale.cdt.debug.cw.core.CWPlugin;
import com.freescale.cdt.debug.cw.core.ui.CWDebugUIPlugin;
import com.freescale.cdt.debug.cw.core.ui.DebuggerUIMessages;
import cwdbg.PreferenceConstants;
public class GlobalSettings extends PreferencePage implements
IWorkbenchPreferencePage, IPropertyChangeListener {
private String contextHelpID = "debugger_global_settings_page_help"; //$NON-NLS-1$
public class PreferenceStore implements IPreferenceStore {
private Preferences m_prefs;
private HashMap m_listeners = new HashMap();
public PreferenceStore(Preferences prefs) {
m_prefs = prefs;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.IPreferenceStore#addPropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
*/
public void addPropertyChangeListener(
final IPropertyChangeListener jface_listener) {
Preferences.IPropertyChangeListener listener = new Preferences.IPropertyChangeListener() {
public void propertyChange(
org.eclipse.core.runtime.Preferences.PropertyChangeEvent event) {
jface_listener.propertyChange(
new PropertyChangeEvent(PreferenceStore.this, event.getProperty(), event.getNewValue(),
event.getOldValue()));
}
};
m_listeners.put(jface_listener, listener);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.IPreferenceStore#firePropertyChangeEvent(java.lang.String,
* java.lang.Object, java.lang.Object)
*/
public void firePropertyChangeEvent(String name, Object oldValue,
Object newValue) {
Iterator iter = m_listeners.keySet().iterator();
while (iter.hasNext()) {
((IPropertyChangeListener)iter.next()).propertyChange(
new PropertyChangeEvent(this, name, oldValue, newValue));
}
}
/*
* org.eclipse.jface.preference.IPreferenceStore methods in which we
* simply redirect the calls to our org.eclipse.core.runtime.Preferences
* object
*/
public boolean contains(String name) {
return m_prefs.contains(name);
}
public boolean getBoolean(String name) {
return m_prefs.getBoolean(name);
}
public boolean getDefaultBoolean(String name) {
return m_prefs.getDefaultBoolean(name);
}
public double getDefaultDouble(String name) {
return m_prefs.getDefaultDouble(name);
}
public float getDefaultFloat(String name) {
return m_prefs.getDefaultFloat(name);
}
public int getDefaultInt(String name) {
return m_prefs.getDefaultInt(name);
}
public long getDefaultLong(String name) {
return m_prefs.getDefaultLong(name);
}
public String getDefaultString(String name) {
return m_prefs.getDefaultString(name);
}
public double getDouble(String name) {
return m_prefs.getDouble(name);
}
public float getFloat(String name) {
return m_prefs.getFloat(name);
}
public int getInt(String name) {
return m_prefs.getInt(name);
}
public long getLong(String name) {
return m_prefs.getLong(name);
}
public String getString(String name) {
return m_prefs.getString(name);
}
public boolean isDefault(String name) {
return m_prefs.isDefault(name);
}
public boolean needsSaving() {
return m_prefs.needsSaving();
}
public void setToDefault(String name) {
m_prefs.setToDefault(name);
}
public void setDefault(String name, double value) {
m_prefs.setDefault(name, value);
}
public void setDefault(String name, float value) {
m_prefs.setDefault(name, value);
}
public void setDefault(String name, int value) {
m_prefs.setDefault(name, value);
}
public void setDefault(String name, long value) {
m_prefs.setDefault(name, value);
}
public void setDefault(String name, String value) {
m_prefs.setDefault(name, value);
}
public void setDefault(String name, boolean value) {
m_prefs.setDefault(name, value);
}
public void setValue(String name, double value) {
m_prefs.setValue(name, value);
}
public void setValue(String name, float value) {
m_prefs.setValue(name, value);
}
public void setValue(String name, int value) {
m_prefs.setValue(name, value);
}
public void setValue(String name, long value) {
m_prefs.setValue(name, value);
}
public void setValue(String name, String value) {
m_prefs.setValue(name, value);
}
public void setValue(String name, boolean value) {
m_prefs.setValue(name, value);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.IPreferenceStore#putValue(java.lang.String,
* java.lang.String)
*/
public void putValue(String name, String value) {
m_prefs.setValue(name, value);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.IPreferenceStore#removePropertyChangeListener(org.eclipse.jface.util.IPropertyChangeListener)
*/
public void removePropertyChangeListener(
IPropertyChangeListener jface_listener) {
m_listeners.remove(jface_listener);
}
}
public class BooleanFieldEditor2 extends BooleanFieldEditor {
// Have to subclass BooleanFieldEditor as there is no way to
// set tool tip text on the standard one.
public BooleanFieldEditor2(String name, String label, Composite parent) {
super(name, label, parent);
}
public void setToolTipText(Composite comp, String toolTipText) {
getChangeControl(comp).setToolTipText(toolTipText);
}
};
// enable if there's ever a need for this ...private IWorkbench m_workbench;
private BooleanFieldEditor2 m_autoLaunchDE;
private IntegerFieldEditor m_deTimeout;
private Composite m_deTimeout_parent;
private BooleanFieldEditor2 m_showRTTI;
private BooleanFieldEditor2 m_notStepInRuntimeCode;
private Composite m_arraySize_parent;
private IntegerFieldEditor m_arraySize;
private IntegerFieldEditor m_osViewRefreshInterval;
// We don't use this plugin's preference store for global settings;
// we use the core CW plugin. That way, the core plugin code can
// access the prefs without having a build-time cross dependency
// on this plugin
//
private final CWPlugin m_corePlugin = CWPlugin.getDefault();
private PreferenceStore m_prefStore = new PreferenceStore(m_corePlugin.getPluginPreferences());
private BooleanFieldEditor2 m_findSourceOutsideSDK;
/**
* Constructor
*/
public GlobalSettings() {
super();
setPreferenceStore(m_prefStore);
/* Shown in the panel, right under the panel name */
setDescription(DebuggerUIMessages.GlobalSettings_debug_settings);
}
private void updateControlState() {
m_deTimeout.setEnabled(m_autoLaunchDE.getBooleanValue(), m_deTimeout_parent);
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
*/
protected Control createContents(Composite parent) {
// The main composite
Composite composite = new Composite(parent, SWT.NULL);
GridLayout layout = new GridLayout();
layout.numColumns = 1;
layout.marginHeight = 0;
layout.marginWidth = 0;
composite.setLayout(layout);
GridData gridData = new GridData();
gridData.verticalAlignment = GridData.FILL;
gridData.horizontalAlignment = GridData.FILL;
composite.setLayoutData(gridData);
createSpacer(composite, 1);
Composite icomp = null; // we use this variable for intermediate
// composites (
// checkbox: show dynamic runtime type ?
icomp = new Composite(composite, SWT.NULL);
gridData = new GridData(SWT.HORIZONTAL);
gridData.horizontalSpan = 2;
icomp.setLayoutData(gridData);
m_showRTTI = new BooleanFieldEditor2(PreferenceConstants.J_PN_ShowRuntimeType,
DebuggerUIMessages.GlobalSettings_attempt_show_dynamic, icomp);
m_showRTTI.setPage(this);
m_showRTTI.setPreferenceStore(m_prefStore);
m_showRTTI.load();
m_showRTTI.setPropertyChangeListener(this);
m_showRTTI
.setToolTipText(
icomp,
DebuggerUIMessages.GlobalSettings_rtti_tooltip);
// checkbox: do not step into runtime code ?
icomp = new Composite(composite, SWT.NULL);
gridData = new GridData(SWT.HORIZONTAL);
gridData.horizontalSpan = 2;
icomp.setLayoutData(gridData);
m_notStepInRuntimeCode = new BooleanFieldEditor2(PreferenceConstants.J_PN_NotStepInRuntimeCode,
DebuggerUIMessages.GlobalSettings_do_not_step_into_rt_support, icomp);
m_notStepInRuntimeCode.setPage(this);
m_notStepInRuntimeCode.setPreferenceStore(m_prefStore);
m_notStepInRuntimeCode.load();
m_notStepInRuntimeCode.setPropertyChangeListener(this);
m_notStepInRuntimeCode.setToolTipText(icomp,
DebuggerUIMessages.GlobalSettings_step_in_runtime_tooltip);
// entry field: default size for unbounded arrays
m_arraySize_parent = new Composite(composite, SWT.NULL);
m_arraySize = new IntegerFieldEditor(PreferenceConstants.J_PN_DefaultArraySize,
DebuggerUIMessages.GlobalSettings_default_size_for_unbounded_arrays, m_arraySize_parent);
m_arraySize.setPage(this);
m_arraySize.setPreferenceStore(m_prefStore);
m_arraySize.load();
m_arraySize.setPropertyChangeListener(this);
gridData = new GridData();
gridData.widthHint = convertWidthInCharsToPixels(8);
m_arraySize.getTextControl(m_arraySize_parent).setLayoutData(gridData);
m_arraySize.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
m_arraySize.setValidRange(0, Integer.MAX_VALUE);
m_arraySize.setErrorMessage(DebuggerUIMessages.GlobalSettings_invalid_array_size);
m_arraySize
.getLabelControl(m_arraySize_parent)
.setToolTipText(
DebuggerUIMessages.GlobalSettings_default_array_tooltip);
m_arraySize.load();
// checkbox: show dynamic runtime type ?
icomp = new Composite(composite, SWT.NULL);
gridData = new GridData(SWT.HORIZONTAL);
gridData.horizontalSpan = 2;
icomp.setLayoutData(gridData);
m_findSourceOutsideSDK = new BooleanFieldEditor2(CWPlugin.PSC_FindSourceOutsideWorkspace,
DebuggerUIMessages.GlobalSettings_findOutside, icomp);
m_findSourceOutsideSDK.setPage(this);
m_findSourceOutsideSDK.setPreferenceStore(m_prefStore);
m_findSourceOutsideSDK.load();
m_findSourceOutsideSDK.setPropertyChangeListener(this);
m_findSourceOutsideSDK
.setToolTipText(
icomp,
DebuggerUIMessages.GlobalSettings_foundOutsideTooltip);
// entry field: interval for auto-refreshing of data in OS View.
icomp = new Composite(composite, SWT.NULL);
m_osViewRefreshInterval = new IntegerFieldEditor(
PreferenceConstants.J_PN_OSViewAutoRefreshInterval,
DebuggerUIMessages.GlobalSettings_refresh_time_interval,
icomp);
m_osViewRefreshInterval.setPage(this);
m_osViewRefreshInterval.setPreferenceStore(m_prefStore);
m_osViewRefreshInterval.setPropertyChangeListener(this);
gridData = new GridData();
gridData.widthHint = convertWidthInCharsToPixels(8);
m_osViewRefreshInterval.getTextControl(icomp).setLayoutData(gridData);
m_osViewRefreshInterval
.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
m_osViewRefreshInterval.setValidRange(3, 600);
m_osViewRefreshInterval
.setErrorMessage(DebuggerUIMessages.GlobalSettings_invalid_time_interval);
m_osViewRefreshInterval
.getLabelControl(icomp)
.setToolTipText(
DebuggerUIMessages.GlobalSettings_refresh_interval);
m_osViewRefreshInterval.load();
Group group = ControlFactory.createGroup(composite, DebuggerUIMessages.GlobalSettings_debug_engine, 2);
// Hide the DE launch settings in a production build (unless overriden with a property)
group.setVisible(m_corePlugin.isDebugEnvironment() || System.getProperty("cw.showDeGlobalSettings") != null); // $NON-NLS-1$ //$NON-NLS-1$
// Auto Launch DE checkbox
icomp = new Composite(group, SWT.NULL);
gridData = new GridData(SWT.HORIZONTAL);
gridData.horizontalSpan = 2;
icomp.setLayoutData(gridData);
m_autoLaunchDE = new BooleanFieldEditor2(PreferenceConstants.J_PN_AutoLaunchDE,
DebuggerUIMessages.GlobalSettings_automatic_launch_de_server, icomp);
m_autoLaunchDE.setPage(this);
m_autoLaunchDE.setPreferenceStore(m_prefStore);
m_autoLaunchDE.load();
m_autoLaunchDE.setPropertyChangeListener(this);
m_autoLaunchDE
.setToolTipText(icomp,
"Launch the Debugger Engine, otherwise assume it is already running."); //$NON-NLS-1$
// DE Launch Timeout text edit field
m_deTimeout_parent = new Composite(group, SWT.NULL);
m_deTimeout = new IntegerFieldEditor(PreferenceConstants.J_PN_DELaunchTimeout,
DebuggerUIMessages.GlobalSettings_timeout_secs, m_deTimeout_parent);
m_deTimeout.setPage(this);
m_deTimeout.setPreferenceStore(m_prefStore);
m_deTimeout.load();
m_deTimeout.setPropertyChangeListener(this);
gridData = new GridData();
gridData.widthHint = convertWidthInCharsToPixels(8);
m_deTimeout.getTextControl(m_deTimeout_parent).setLayoutData(gridData);
m_deTimeout.setValidateStrategy(StringFieldEditor.VALIDATE_ON_KEY_STROKE);
m_deTimeout.setValidRange(0, Integer.MAX_VALUE);
m_deTimeout.setErrorMessage(DebuggerUIMessages.GlobalSettings_invalid_timeout_range);
m_deTimeout.load();
updateControlState();
String helpContextID = CWDebugUIPlugin.getPluginId() + "." + contextHelpID; //$NON-NLS-1$
PlatformUI.getWorkbench().getHelpSystem().setHelp(super.getControl(), helpContextID);
return composite;
}
/**
* @see IPreferencePage#performOk()
*/
public boolean performOk() {
boolean result = super.performOk();
storeValues();
m_corePlugin.savePluginPreferences();
return result;
}
/**
* Sets the default preferences.
*
* @see PreferencePage#performDefaults()
*/
protected void performDefaults() {
setDefaultValues();
super.performDefaults();
}
private void setDefaultValues() {
m_autoLaunchDE.loadDefault();
m_deTimeout.loadDefault();
m_showRTTI.loadDefault();
m_notStepInRuntimeCode.loadDefault();
m_arraySize.loadDefault();
m_findSourceOutsideSDK.loadDefault();
m_osViewRefreshInterval.loadDefault();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.IWorkbenchPreferencePage#init(IWorkbench)
*/
public void init(IWorkbench workbench) {// enable if there's ever a need for this ...
// m_workbench = workbench;
}
protected void createSpacer(Composite composite, int span) {
Label label = new Label(composite, SWT.NONE);
GridData gd = new GridData();
gd.horizontalSpan = span;
label.setLayoutData(gd);
}
/**
* Store the preference values based on the state of the component widgets
*/
private void storeValues() {
m_autoLaunchDE.store();
m_deTimeout.store();
m_showRTTI.store();
m_notStepInRuntimeCode.store();
m_arraySize.store();
m_findSourceOutsideSDK.store();
m_osViewRefreshInterval.store();
}
/*
* (non-Javadoc)
*
* @see org.eclipse.jface.dialogs.IDialogPage#dispose()
*/
public void dispose() {
m_autoLaunchDE.dispose();
m_deTimeout.dispose();
m_showRTTI.dispose();
m_notStepInRuntimeCode.dispose();
m_arraySize.dispose();
m_findSourceOutsideSDK.dispose();
m_osViewRefreshInterval.dispose();
super.dispose();
}
/**
* @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
*/
public void propertyChange(PropertyChangeEvent event) {
// gets called when any of the controls are hit/modified
updateControlState();
}
}