diff --git a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java
index 223fbbd1893..cac0068372e 100644
--- a/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java
+++ b/debug/org.eclipse.cdt.debug.core/src/org/eclipse/cdt/debug/core/CDebugModel.java
@@ -50,6 +50,26 @@ import org.eclipse.debug.core.model.IProcess;
*/
public class CDebugModel
{
+ /**
+ * Preference key for default CDI request timeout value.
+ */
+ public static final String PREF_REQUEST_TIMEOUT = getPluginIdentifier() + ".PREF_REQUEST_TIMEOUT"; //$NON-NLS-1$
+
+ /**
+ * The default CDI request timeout when no preference is set.
+ */
+ public static final int DEF_REQUEST_TIMEOUT = 10000;
+
+ /**
+ * The minimum value the CDI request timeout can have.
+ */
+ public static final int MIN_REQUEST_TIMEOUT = 100;
+
+ /**
+ * The maximum value the CDI request timeout can have.
+ */
+ public static final int MAX_REQUEST_TIMEOUT = Integer.MAX_VALUE;
+
/**
* Constructor for CDebugModel.
*/
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.properties b/debug/org.eclipse.cdt.debug.ui/plugin.properties
index bb2b908fd3c..3adaae42478 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.properties
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.properties
@@ -12,6 +12,7 @@ MemoryView.name=Memory
CDebuggerPage.name=C Debugger UI Page
MemoryPreferencePage.name=Memory Views
RegistersPreferencePage.name=Registers View
+CDebugPreferencePage.name=Debug
RunMenu.label=&Run
DebugActionSet.label=C/C++ Debug
diff --git a/debug/org.eclipse.cdt.debug.ui/plugin.xml b/debug/org.eclipse.cdt.debug.ui/plugin.xml
index 0a482ef6c39..77671e26a45 100644
--- a/debug/org.eclipse.cdt.debug.ui/plugin.xml
+++ b/debug/org.eclipse.cdt.debug.ui/plugin.xml
@@ -81,6 +81,12 @@
class="org.eclipse.cdt.debug.internal.ui.preferences.RegistersViewPreferencePage"
id="org.eclipse.cdt.debug.ui.RegistersViewPreferencePage">
+
+
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java
index c0b9262f461..2e2ab4da747 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/ICDebugHelpContextIds.java
@@ -33,4 +33,5 @@ public interface ICDebugHelpContextIds
// Preference pages
public static final String MEMORY_PREFERENCE_PAGE = PREFIX + "memory_preference_page_context"; //$NON-NLS-1$
public static final String REGISTERS_PREFERENCE_PAGE = PREFIX + "registers_preference_page_context"; //$NON-NLS-1$
+ public static final String C_DEBUG_PREFERENCE_PAGE = PREFIX + "c_debug_preference_page_context"; //$NON-NLS-1$
}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/CDebugPreferencePage.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/CDebugPreferencePage.java
new file mode 100644
index 00000000000..89943219688
--- /dev/null
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/CDebugPreferencePage.java
@@ -0,0 +1,199 @@
+/*
+ *(c) Copyright QNX Software Systems Ltd. 2002.
+ * All Rights Reserved.
+ *
+ */
+package org.eclipse.cdt.debug.internal.ui.preferences;
+
+import java.text.MessageFormat;
+
+import org.eclipse.cdt.debug.core.CDebugCorePlugin;
+import org.eclipse.cdt.debug.core.CDebugModel;
+import org.eclipse.cdt.debug.internal.ui.ICDebugHelpContextIds;
+import org.eclipse.cdt.debug.ui.CDebugUIPlugin;
+import org.eclipse.jface.preference.FieldEditor;
+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.resource.ImageDescriptor;
+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.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import org.eclipse.ui.help.WorkbenchHelp;
+
+/**
+ *
+ * Preference page for debug preferences that apply specifically to
+ * C/C++ Debugging.
+ *
+ * @since Oct 3, 2002
+ */
+public class CDebugPreferencePage extends PreferencePage implements IWorkbenchPreferencePage
+{
+ // Timeout preference widgets
+ private IntegerFieldEditor fTimeoutText;
+
+ private PropertyChangeListener fPropertyChangeListener;
+
+ protected class PropertyChangeListener implements IPropertyChangeListener
+ {
+ private boolean fHasStateChanged = false;
+
+ public void propertyChange( PropertyChangeEvent event )
+ {
+ if ( event.getProperty().equals( ICDebugPreferenceConstants.PREF_SHOW_HEX_VALUES ) )
+ {
+ fHasStateChanged = true;
+ }
+ else if ( event.getProperty().equals( ICDebugPreferenceConstants.PREF_SHOW_CHAR_VALUES ) )
+ {
+ fHasStateChanged = true;
+ }
+ }
+
+ protected boolean hasStateChanged()
+ {
+ return fHasStateChanged;
+ }
+ }
+
+ /**
+ * Constructor for CDebugPreferencePage.
+ */
+ public CDebugPreferencePage()
+ {
+ super();
+ setPreferenceStore( CDebugUIPlugin.getDefault().getPreferenceStore() );
+ getPreferenceStore().addPropertyChangeListener( getPropertyChangeListener() );
+ setDescription( "General settings for C/C++ Debugging." );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.preference.PreferencePage#createContents(Composite)
+ */
+ protected Control createContents( Composite parent )
+ {
+ WorkbenchHelp.setHelp( getControl(), ICDebugHelpContextIds.C_DEBUG_PREFERENCE_PAGE );
+
+ //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 data = new GridData();
+ data.verticalAlignment = GridData.FILL;
+ data.horizontalAlignment = GridData.FILL;
+ composite.setLayoutData( data );
+
+ Composite comp = createGroupComposite( composite, 1, "Communication" );
+ //Add in an intermediate composite to allow for spacing
+ Composite spacingComposite = new Composite( comp, SWT.NONE );
+ layout = new GridLayout();
+ spacingComposite.setLayout( layout );
+ data = new GridData( GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL );
+ data.horizontalSpan = 2;
+ spacingComposite.setLayoutData( data );
+
+ fTimeoutText = new IntegerFieldEditor( CDebugModel.PREF_REQUEST_TIMEOUT, "Debugger &timeout (ms):", spacingComposite );
+ fTimeoutText.setPreferenceStore( CDebugUIPlugin.getDefault().getPreferenceStore() );
+ fTimeoutText.setPreferencePage( this );
+ fTimeoutText.setValidateStrategy( StringFieldEditor.VALIDATE_ON_KEY_STROKE );
+ fTimeoutText.setValidRange( CDebugModel.MIN_REQUEST_TIMEOUT, CDebugModel.MAX_REQUEST_TIMEOUT );
+ String minValue = Integer.toString( CDebugModel.MIN_REQUEST_TIMEOUT );
+ String maxValue = Integer.toString( CDebugModel.MAX_REQUEST_TIMEOUT );
+ fTimeoutText.setErrorMessage( MessageFormat.format( "The valid value range is [{0},{1}].", new String[]{ minValue, maxValue } ) );
+ fTimeoutText.load();
+ fTimeoutText.setPropertyChangeListener(
+ new IPropertyChangeListener()
+ {
+ public void propertyChange( PropertyChangeEvent event )
+ {
+ if ( event.getProperty().equals( FieldEditor.IS_VALID ) )
+ setValid( fTimeoutText.isValid() );
+ }
+ } );
+
+ setValues();
+
+ return composite;
+ }
+
+ /**
+ * Creates composite group and sets the default layout data.
+ *
+ * @param parent the parent of the new composite
+ * @param numColumns the number of columns for the new composite
+ * @param labelText the text label of the new composite
+ * @return the newly-created composite
+ */
+ private Composite createGroupComposite( Composite parent, int numColumns, String labelText )
+ {
+ Group comp = new Group( parent, SWT.NONE );
+ //GridLayout
+ GridLayout layout = new GridLayout();
+ layout.numColumns = numColumns;
+ comp.setLayout( layout );
+ //GridData
+ GridData gd = new GridData();
+ gd.verticalAlignment = GridData.FILL;
+ gd.horizontalAlignment = GridData.FILL;
+ comp.setLayoutData( gd );
+ comp.setText( labelText );
+ return comp;
+ }
+
+ /**
+ * Set the values of the component widgets based on the
+ * values in the preference store
+ */
+ private void setValues()
+ {
+ IPreferenceStore store = getPreferenceStore();
+
+ fTimeoutText.setStringValue( new Integer( CDebugCorePlugin.getDefault().getPluginPreferences().getInt( CDebugModel.PREF_REQUEST_TIMEOUT ) ).toString() );
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.IWorkbenchPreferencePage#init(IWorkbench)
+ */
+ public void init( IWorkbench workbench )
+ {
+ }
+
+ protected PropertyChangeListener getPropertyChangeListener()
+ {
+ if ( fPropertyChangeListener == null )
+ {
+ fPropertyChangeListener = new PropertyChangeListener();
+ }
+ return fPropertyChangeListener;
+ }
+
+ /**
+ * Set the default preferences for this page.
+ */
+ public static void initDefaults(IPreferenceStore store)
+ {
+ store.setDefault( ICDebugPreferenceConstants.PREF_SHOW_HEX_VALUES, false );
+ store.setDefault( ICDebugPreferenceConstants.PREF_SHOW_CHAR_VALUES, false );
+ }
+
+ /**
+ * @see DialogPage#dispose()
+ */
+ public void dispose()
+ {
+ super.dispose();
+ getPreferenceStore().removePropertyChangeListener( getPropertyChangeListener() );
+ }
+}
diff --git a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java
index 86b63820bcb..eafdf7e3463 100644
--- a/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java
+++ b/debug/org.eclipse.cdt.debug.ui/src/org/eclipse/cdt/debug/internal/ui/preferences/ICDebugPreferenceConstants.java
@@ -5,6 +5,7 @@
*/
package org.eclipse.cdt.debug.internal.ui.preferences;
+import org.eclipse.cdt.debug.ui.ICDebugUIConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.RGB;
@@ -78,4 +79,16 @@ public interface ICDebugPreferenceConstants
* The name of the font to use for the memory view
*/
public static final String MEMORY_FONT = "Memory.font"; //$NON-NLS-1$
+
+ /**
+ * Boolean preference controlling whether primitive types
+ * types display hexidecimal values.
+ */
+ public static final String PREF_SHOW_HEX_VALUES = ICDebugUIConstants.PLUGIN_ID + "cDebug.showHexValues"; //$NON-NLS-1$
+
+ /**
+ * Boolean preference controlling whether primitive types
+ * types display char values.
+ */
+ public static final String PREF_SHOW_CHAR_VALUES = ICDebugUIConstants.PLUGIN_ID + "cDebug.showCharValues"; //$NON-NLS-1$
}