/**
* Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
/*
* Author: atotic
* Created: Jun 23, 2003
*/
package org.python.pydev.debug.ui;
import java.util.List;
import org.eclipse.jface.preference.BooleanFieldEditor;
import org.eclipse.jface.preference.ComboFieldEditor;
import org.eclipse.jface.preference.FieldEditor;
import org.eclipse.jface.preference.FieldEditorPreferencePage;
import org.eclipse.jface.preference.IntegerFieldEditor;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.python.pydev.core.ExtensionHelper;
import org.python.pydev.editor.preferences.PydevEditorPrefs;
import org.python.pydev.plugin.PydevPlugin;
import org.python.pydev.plugin.preferences.PydevPrefs;
/**
* Debug preferences.
*
* <p>Simple 1 page debug preferences page.
* <p>Prefeernce constants are defined in Constants.java
*/
public class DebugPrefsPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
/**
* Initializer sets the preference store
*/
public DebugPrefsPage() {
super("Debug", GRID);
setPreferenceStore(PydevPlugin.getDefault().getPreferenceStore());
}
@Override
public void init(IWorkbench workbench) {
}
/**
* Creates the editors
*/
@Override
@SuppressWarnings("unchecked")
protected void createFieldEditors() {
Composite p = getFieldEditorParent();
addField(new IntegerFieldEditor(PydevEditorPrefs.CONNECT_TIMEOUT, "Connect timeout for debugger (ms)", p, 10));
BooleanFieldEditor editor = new BooleanFieldEditor(PydevEditorPrefs.RELOAD_MODULE_ON_CHANGE,
"When file is changed, automatically reload module?", BooleanFieldEditor.SEPARATE_LABEL, p);
Control c = editor.getDescriptionControl(p);
c.setToolTipText(
"The debugger will automatically reload a module,\n"
+ "when a file is saved if this setting is on.\n\n"
+ "See pydevd_reload.py for details, limitations and which hooks\n"
+ "are provided so that your own classes act upon this change.");
addField(editor);
editor = new BooleanFieldEditor(PydevEditorPrefs.DONT_TRACE_ENABLED,
"On a step in, skip over methods which have a @DontTrace comment?", BooleanFieldEditor.SEPARATE_LABEL,
p);
c = editor.getDescriptionControl(p);
c.setToolTipText(
"When a comment: # @DontTrace is found after a method, it's skipped by the debugger if this setting is on.\n\n"
+ "Use Ctrl+1 in a method line to add such a comment.");
addField(editor);
editor = new BooleanFieldEditor(PydevEditorPrefs.SHOW_RETURN_VALUES,
"Show return values for methods?", BooleanFieldEditor.SEPARATE_LABEL,
p);
c = editor.getDescriptionControl(p);
c.setToolTipText("When this option is enabled, upon returning from a method, its return value is shown.");
addField(editor);
List<IDebugPreferencesPageParticipant> participants = ExtensionHelper
.getParticipants(ExtensionHelper.PYDEV_DEBUG_PREFERENCES_PAGE);
for (IDebugPreferencesPageParticipant participant : participants) {
participant.createFieldEditors(this, p);
}
editor = new BooleanFieldEditor(PydevEditorPrefs.DEBUG_MULTIPROCESSING_ENABLED,
"Attach to subprocess automatically while debugging?", BooleanFieldEditor.SEPARATE_LABEL,
p);
c = editor.getDescriptionControl(p);
c.setToolTipText("Enabling this option will patch the functions related to launching a new process\n"
+ "and will attempt to automatically connect new launched processes to the debugger.");
addField(editor);
editor = new BooleanFieldEditor(PydevEditorPrefs.GEVENT_DEBUGGING,
"Gevent compatible debugging?", BooleanFieldEditor.SEPARATE_LABEL,
p);
c = editor.getDescriptionControl(p);
c.setToolTipText("When this option is turned on, the debugger will be able to debug GEvent programs.");
addField(editor);
ComboFieldEditor comboEditor = new ComboFieldEditor(PydevEditorPrefs.QT_THREADS_DEBUG_MODE, "Qt Threads:",
PydevEditorPrefs.ENTRIES_VALUES_QT_THREADS_DEBUG_MODE, p);
Label labelControl = comboEditor.getLabelControl(p);
labelControl.setToolTipText("Specify whether the debugger should patch Qt to debug inside QThreads.");
addField(comboEditor);
}
public static boolean getReloadModuleOnChange() {
return PydevPrefs.getPreferences().getBoolean(PydevEditorPrefs.RELOAD_MODULE_ON_CHANGE);
}
public static boolean getDontTraceEnabled() {
return PydevPrefs.getPreferences().getBoolean(PydevEditorPrefs.DONT_TRACE_ENABLED);
}
public static boolean getShowReturnValuesEnabled() {
return PydevPrefs.getPreferences().getBoolean(PydevEditorPrefs.SHOW_RETURN_VALUES);
}
public static boolean getDebugMultiprocessingEnabled() {
return PydevPrefs.getPreferences().getBoolean(PydevEditorPrefs.DEBUG_MULTIPROCESSING_ENABLED);
}
public static boolean getGeventDebugging() {
return PydevPrefs.getPreferences().getBoolean(PydevEditorPrefs.GEVENT_DEBUGGING);
}
public static String getQtThreadsDebugMode() {
return PydevPrefs.getPreferences().getString(PydevEditorPrefs.QT_THREADS_DEBUG_MODE);
}
/**
* Make it available for extensions
*/
@Override
public void addField(FieldEditor editor) {
super.addField(editor);
}
}