package org.python.pydev.debug.profile; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.preference.FieldEditor; import org.eclipse.jface.preference.IPreferenceStore; 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.ui.part.ViewPart; import org.python.pydev.shared_ui.field_editors.BooleanFieldEditorCustom; import org.python.pydev.shared_ui.field_editors.ComboFieldEditor; import org.python.pydev.shared_ui.field_editors.FileFieldEditorCustom; public class ProfileView extends ViewPart { private BooleanFieldEditorCustom profileForNewLaunches; private FileFieldEditorCustom pyvmmonitorUiLocation; private List<FieldEditor> fields = new ArrayList<FieldEditor>(); protected void addField(final FieldEditor editor, Composite parent) { addField(editor, parent, PyProfilePreferences.getTemporaryPreferenceStore()); } protected void addField(final FieldEditor editor, Composite parent, IPreferenceStore preferenceStore) { fields.add(editor); editor.setPreferenceStore(preferenceStore); editor.load(); editor.setPropertyChangeListener(new IPropertyChangeListener() { @Override public void propertyChange(PropertyChangeEvent event) { // Apply on any change! editor.store(); } }); if (editor instanceof BooleanFieldEditorCustom) { editor.fillIntoGrid(parent, 2); } else { editor.fillIntoGrid(parent, 1); } } @Override public void createPartControl(Composite parent) { Composite checkParent = new Composite(parent, SWT.NONE); checkParent.setLayoutData(GridDataFactory.fillDefaults().create()); checkParent.setLayout(new GridLayout(2, false)); profileForNewLaunches = new BooleanFieldEditorCustom(PyProfilePreferences.ENABLE_PROFILING_FOR_NEW_LAUNCHES, "Enable profiling for new launches?", BooleanFieldEditorCustom.SEPARATE_LABEL, checkParent); addField(profileForNewLaunches, checkParent); String[][] ENTRIES_AND_VALUES = new String[][] { { "Deterministic (profile)", Integer.toString(PyProfilePreferences.PROFILE_MODE_LSPROF) }, { "Sampling (yappi)", Integer.toString(PyProfilePreferences.PROFILE_MODE_YAPPI) }, { "Don't start profiling", Integer.toString(PyProfilePreferences.PROFILE_MODE_NONE) }, }; ComboFieldEditor editor = new ComboFieldEditor(PyProfilePreferences.PROFILE_MODE, "Initial profile mode: ", ENTRIES_AND_VALUES, parent); addField(editor, parent, PyProfilePreferences.getPermanentPreferenceStore()); Composite composite = new Composite(parent, SWT.NONE); GridData spacingLayoutData = new GridData(); spacingLayoutData.heightHint = 8; composite.setLayoutData(spacingLayoutData); pyvmmonitorUiLocation = new FileFieldEditorCustom(PyProfilePreferences.PYVMMONITOR_UI_LOCATION, "pyvmmonitor-ui (executable) location", parent); addField(pyvmmonitorUiLocation, parent, PyProfilePreferences.getPermanentPreferenceStore()); GridLayout layout = GridLayoutFactory.swtDefaults().create(); layout.numColumns = 1; parent.setLayout(layout); } @Override public void setFocus() { profileForNewLaunches.getCheckBox().setFocus(); } }