This commit was generated by cvs2svn to compensate for changes in r50,
[phpeclipse.git] / net.sourceforge.phpeclipse.debug.ui / src / net / sourceforge / phpdt / internal / debug / ui / preferences / PHPInterpreterPreferencePage.java
diff --git a/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/preferences/PHPInterpreterPreferencePage.java b/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/preferences/PHPInterpreterPreferencePage.java
new file mode 100644 (file)
index 0000000..3997682
--- /dev/null
@@ -0,0 +1,211 @@
+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