--- /dev/null
+package net.sourceforge.phpdt.internal.debug.ui.preferences;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.jface.preference.PreferencePage;
+import org.eclipse.jface.viewers.CheckStateChangedEvent;
+import org.eclipse.jface.viewers.CheckboxTableViewer;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.ICheckStateListener;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.TableItem;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiMessages;
+import net.sourceforge.phpdt.internal.launching.PHPInterpreter;
+import net.sourceforge.phpdt.internal.launching.PHPRuntime;
+
+public class PHPInterpreterPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
+ protected CheckboxTableViewer tableViewer;
+ protected Button addButton, editButton, removeButton;
+
+ public PHPInterpreterPreferencePage() {
+ super();
+ }
+
+ public void init(IWorkbench workbench) {}
+
+ protected Control createContents(Composite parent) {
+ noDefaultAndApplyButton();
+
+ Composite composite = createPageRoot(parent);
+ Table table = createInstalledInterpretersTable(composite);
+ createInstalledInterpretersTableViewer(table);
+ createButtonGroup(composite);
+
+ tableViewer.setInput(PHPRuntime.getDefault().getInstalledInterpreters());
+ PHPInterpreter selectedInterpreter = PHPRuntime.getDefault().getSelectedInterpreter();
+ if (selectedInterpreter != null)
+ tableViewer.setChecked(selectedInterpreter, true);
+
+ enableButtons();
+
+ return composite;
+ }
+
+ protected void createButtonGroup(Composite composite) {
+ Composite buttons = new Composite(composite, SWT.NULL);
+ buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING));
+ GridLayout layout = new GridLayout();
+ layout.marginHeight = 0;
+ layout.marginWidth = 0;
+ buttons.setLayout(layout);
+
+ addButton = new Button(buttons, SWT.PUSH);
+ addButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ addButton.setText(PHPDebugUiMessages.getString("PHPInterpreterPreferencePage.addButton.label")); //$NON-NLS-1$
+ addButton.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event evt) {
+ addInterpreter();
+ }
+ });
+
+ editButton = new Button(buttons, SWT.PUSH);
+ editButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ editButton.setText(PHPDebugUiMessages.getString("PHPInterpreterPreferencePage.editButton.label")); //$NON-NLS-1$
+ editButton.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event evt) {
+ editInterpreter();
+ }
+ });
+
+ removeButton = new Button(buttons, SWT.PUSH);
+ removeButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ removeButton.setText(PHPDebugUiMessages.getString("PHPInterpreterPreferencePage.removeButton.label")); //$NON-NLS-1$
+ removeButton.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event evt) {
+ removeInterpreter();
+ }
+ });
+ }
+
+ protected void createInstalledInterpretersTableViewer(Table table) {
+ tableViewer = new CheckboxTableViewer(table);
+
+ tableViewer.setLabelProvider(new PHPInterpreterLabelProvider());
+ tableViewer.setContentProvider(new PHPInterpreterContentProvider());
+
+ tableViewer.addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent evt) {
+ enableButtons();
+ }
+ });
+
+ tableViewer.addCheckStateListener(new ICheckStateListener() {
+ public void checkStateChanged(CheckStateChangedEvent event) {
+ updateSelectedInterpreter(event.getElement());
+ }
+ });
+
+ tableViewer.addDoubleClickListener(new IDoubleClickListener() {
+ public void doubleClick(DoubleClickEvent e) {
+ editInterpreter();
+ }
+ });
+ }
+
+ protected Table createInstalledInterpretersTable(Composite composite) {
+ Table table = new Table(composite, SWT.CHECK | SWT.BORDER | SWT.FULL_SELECTION);
+
+ GridData data = new GridData(GridData.FILL_BOTH);
+ data.widthHint = convertWidthInCharsToPixels(80);
+ data.heightHint = convertHeightInCharsToPixels(10);
+ table.setLayoutData(data);
+ table.setHeaderVisible(true);
+ table.setLinesVisible(false);
+
+ TableColumn column = new TableColumn(table, SWT.NULL);
+ column.setText(PHPDebugUiMessages.getString("PHPInterpreterPreferencePage.PHPInterpreterTable.interpreterName")); //$NON-NLS-1$
+ column.setWidth(125);
+
+ column = new TableColumn(table, SWT.NULL);
+ column.setText(PHPDebugUiMessages.getString("PHPInterpreterPreferencePage.PHPInterpreterTable.interpreterPath")); //$NON-NLS-1$
+ column.setWidth(350);
+
+ return table;
+ }
+
+ protected Composite createPageRoot(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 2;
+ composite.setLayout(layout);
+ return composite;
+ }
+
+ protected void addInterpreter() {
+ PHPInterpreter newInterpreter = new PHPInterpreter(null, null);
+ EditInterpreterDialog editor = new EditInterpreterDialog(getShell(), PHPDebugUiMessages.getString("PHPInterpreterPreferencePage.EditInterpreterDialog.addInterpreter.title")); //$NON-NLS-1$
+ editor.create();
+ editor.setInterpreterToEdit(newInterpreter);
+ if (EditInterpreterDialog.OK == editor.open())
+ tableViewer.add(newInterpreter);
+ }
+
+ protected void removeInterpreter() {
+ tableViewer.remove(getSelectedInterpreter());
+ }
+
+ protected void enableButtons() {
+ if (getSelectedInterpreter() != null) {
+ editButton.setEnabled(true);
+ removeButton.setEnabled(true);
+ } else {
+ editButton.setEnabled(false);
+ removeButton.setEnabled(false);
+ }
+ }
+
+ protected void updateSelectedInterpreter(Object interpreter) {
+ Object[] checkedElements = tableViewer.getCheckedElements();
+ for (int i = 0; i < checkedElements.length; i++) {
+ tableViewer.setChecked(checkedElements[i], false);
+ }
+
+ tableViewer.setChecked(interpreter, true);
+ }
+
+ protected void editInterpreter() {
+ EditInterpreterDialog editor = new EditInterpreterDialog(getShell(), PHPDebugUiMessages.getString("PHPInterpreterPreferencePage.EditInterpreterDialog.editInterpreter.title")); //$NON-NLS-1$
+ editor.create();
+
+ PHPInterpreter anInterpreter = getSelectedInterpreter();
+ editor.setInterpreterToEdit(anInterpreter);
+ if (EditInterpreterDialog.OK == editor.open())
+ tableViewer.update(anInterpreter, null);
+ }
+
+ protected PHPInterpreter getSelectedInterpreter() {
+ IStructuredSelection selection = (IStructuredSelection) tableViewer.getSelection();
+ return (PHPInterpreter) selection.getFirstElement();
+ }
+
+ public boolean performOk() {
+ TableItem[] tableItems = tableViewer.getTable().getItems();
+ List installedInterpreters = new ArrayList(tableItems.length);
+ for (int i = 0; i < tableItems.length; i++)
+ installedInterpreters.add(tableItems[i].getData());
+ PHPRuntime.getDefault().setInstalledInterpreters(installedInterpreters);
+
+ Object[] checkedElements = tableViewer.getCheckedElements();
+ if (checkedElements.length > 0)
+ PHPRuntime.getDefault().setSelectedInterpreter((PHPInterpreter) checkedElements[0]);
+
+ return super.performOk();
+ }
+
+}
\ No newline at end of file