com.nokia.cdt.debug.cw.symbian.ui.GlobalSettings.java Source code

Java tutorial

Introduction

Here is the source code for com.nokia.cdt.debug.cw.symbian.ui.GlobalSettings.java

Source

/*
* 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();
    }
}