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 / launcher / PHPEnvironmentTab.java
diff --git a/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/launcher/PHPEnvironmentTab.java b/net.sourceforge.phpeclipse.debug.ui/src/net/sourceforge/phpdt/internal/debug/ui/launcher/PHPEnvironmentTab.java
new file mode 100644 (file)
index 0000000..13c8630
--- /dev/null
@@ -0,0 +1,266 @@
+package net.sourceforge.phpdt.internal.debug.ui.launcher;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiMessages;
+import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiPlugin;
+import net.sourceforge.phpdt.internal.debug.ui.preferences.EditInterpreterDialog;
+import net.sourceforge.phpdt.internal.launching.PHPInterpreter;
+import net.sourceforge.phpdt.internal.launching.PHPLaunchConfigurationAttribute;
+import net.sourceforge.phpdt.internal.launching.PHPRuntime;
+import net.sourceforge.phpdt.internal.ui.PHPUiImages;
+import net.sourceforge.phpeclipse.LoadPathEntry;
+import net.sourceforge.phpeclipse.PHPCore;
+import net.sourceforge.phpeclipse.resourcesview.PHPProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
+import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
+import org.eclipse.jface.viewers.ListViewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.ModifyEvent;
+import org.eclipse.swt.events.ModifyListener;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.ui.internal.dialogs.ListContentProvider;
+
+public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab {
+       protected ListViewer loadPathListViewer;
+       protected java.util.List installedInterpretersWorkingCopy;
+       protected Combo interpreterCombo;
+       protected Button loadPathDefaultButton;
+
+       public PHPEnvironmentTab() {
+               super();
+       }
+
+       public void createControl(Composite parent) {
+               Composite composite = createPageRoot(parent);
+
+               TabFolder tabFolder = new TabFolder(composite, SWT.NONE);
+               GridData gridData = new GridData(GridData.FILL_BOTH);
+               tabFolder.setLayoutData(gridData);
+
+               addLoadPathTab(tabFolder);
+               addInterpreterTab(tabFolder);
+       }
+
+       protected void addLoadPathTab(TabFolder tabFolder) {
+               Composite loadPathComposite = new Composite(tabFolder, SWT.NONE);
+               loadPathComposite.setLayout(new GridLayout());
+
+               loadPathListViewer = new ListViewer(loadPathComposite, SWT.BORDER | SWT.MULTI | SWT.V_SCROLL | SWT.H_SCROLL);
+               loadPathListViewer.setContentProvider(new ListContentProvider());
+               loadPathListViewer.setLabelProvider(new LoadPathEntryLabelProvider());
+               loadPathListViewer.getList().setLayoutData(new GridData(GridData.FILL_BOTH));
+
+               TabItem loadPathTab = new TabItem(tabFolder, SWT.NONE, 0);
+               loadPathTab.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.loadPathTab.label"));
+               loadPathTab.setControl(loadPathComposite);
+               loadPathTab.setData(loadPathListViewer);
+
+               loadPathDefaultButton = new Button(loadPathComposite, SWT.CHECK);
+               loadPathDefaultButton.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.loadPathDefaultButton.label"));
+               loadPathDefaultButton.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+               loadPathDefaultButton.addSelectionListener(getLoadPathDefaultButtonSelectionListener());
+               
+               loadPathDefaultButton.setEnabled(false); //for now, until the load path is customizable on the configuration
+       }
+
+       protected SelectionListener getLoadPathSelectionListener() {
+               return new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent e) {
+                               System.out.println("Loadpath list selection occurred: " + e.getSource());
+                       }
+               };
+       }
+
+       protected SelectionListener getLoadPathDefaultButtonSelectionListener() {
+               return new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent e) {
+                               setUseLoadPathDefaults(((Button) e.getSource()).getSelection());
+                       }
+               };
+       }
+
+       protected void addInterpreterTab(TabFolder tabFolder) {
+               Composite interpreterComposite = new Composite(tabFolder, SWT.NONE);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               layout.marginHeight = 0;
+               layout.marginWidth = 0;
+               interpreterComposite.setLayout(layout);
+               interpreterComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+               createVerticalSpacer(interpreterComposite, 2);
+
+               interpreterCombo = new Combo(interpreterComposite, SWT.READ_ONLY);
+               interpreterCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+               initializeInterpreterCombo(interpreterCombo);
+               interpreterCombo.addModifyListener(getInterpreterComboModifyListener());
+
+               Button interpreterAddButton = new Button(interpreterComposite, SWT.PUSH);
+               interpreterAddButton.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.interpreterAddButton.label"));
+               interpreterAddButton.addSelectionListener(new SelectionAdapter() {
+                       public void widgetSelected(SelectionEvent evt) {
+                               PHPInterpreter newInterpreter = new PHPInterpreter(null, null);
+                               EditInterpreterDialog editor = new EditInterpreterDialog(getShell(), PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.editInterpreterDialog.title"));
+                               editor.create();
+                               editor.setInterpreterToEdit(newInterpreter);
+                               if (EditInterpreterDialog.OK == editor.open()) {
+                                       PHPRuntime.getDefault().addInstalledInterpreter(newInterpreter);
+                                       interpreterCombo.add(newInterpreter.getName());
+                                       interpreterCombo.select(interpreterCombo.indexOf(newInterpreter.getName()));
+                               }
+                       }
+               });
+
+               TabItem interpreterTab = new TabItem(tabFolder, SWT.NONE);
+               interpreterTab.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.interpreterTab.label"));
+               interpreterTab.setControl(interpreterComposite);
+       }
+
+       protected ModifyListener getInterpreterComboModifyListener() {
+               return new ModifyListener() {
+                       public void modifyText(ModifyEvent evt) {
+                               updateLaunchConfigurationDialog();
+                       }
+               };
+       }
+
+       protected void createVerticalSpacer(Composite comp, int colSpan) {
+               Label label = new Label(comp, SWT.NONE);
+               GridData gd = new GridData();
+               gd.horizontalSpan = colSpan;
+               label.setLayoutData(gd);
+       }
+
+       public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
+       }
+
+       public void initializeFrom(ILaunchConfiguration configuration) {
+               initializeLoadPath(configuration);
+               initializeInterpreterSelection(configuration);
+       }
+
+       protected void initializeLoadPath(ILaunchConfiguration configuration) {
+               boolean useDefaultLoadPath = true;
+               try {
+                       useDefaultLoadPath = configuration.getAttribute(PHPLaunchConfigurationAttribute.USE_DEFAULT_LOAD_PATH, true);
+                       setUseLoadPathDefaults(useDefaultLoadPath);
+                       if (useDefaultLoadPath) {
+                               String projectName = configuration.getAttribute(PHPLaunchConfigurationAttribute.PROJECT_NAME, "");
+                               if (projectName != "") {
+                                       PHPProject project = PHPCore.getPHPProject(projectName);
+                                       if (project != null) {
+                                               List loadPathEntries = project.getLoadPathEntries();
+                                               loadPathListViewer.setInput(loadPathEntries);
+                                       }
+                               }
+                       }
+               } catch (CoreException e) {
+                       log(e);
+               }
+       }
+
+       protected void setUseLoadPathDefaults(boolean useDefaults) {
+               loadPathListViewer.getList().setEnabled(!useDefaults);
+               loadPathDefaultButton.setSelection(useDefaults);
+       }
+
+       protected void initializeInterpreterSelection(ILaunchConfiguration configuration) {
+               String interpreterName = null;
+               try {
+                       interpreterName = configuration.getAttribute(PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, "");
+               } catch (CoreException e) {
+                       log(e);
+               }
+               if (interpreterName != null && !interpreterName.equals(""))
+                       interpreterCombo.select(interpreterCombo.indexOf(interpreterName));
+       }
+
+       protected void initializeInterpreterCombo(Combo interpreterCombo) {
+               installedInterpretersWorkingCopy = new ArrayList();
+               installedInterpretersWorkingCopy.addAll(PHPRuntime.getDefault().getInstalledInterpreters());
+
+               String[] interpreterNames = new String[installedInterpretersWorkingCopy.size()];
+               for (int interpreterIndex = 0; interpreterIndex < installedInterpretersWorkingCopy.size(); interpreterIndex++) {
+                       PHPInterpreter interpreter = (PHPInterpreter) installedInterpretersWorkingCopy.get(interpreterIndex);
+                       interpreterNames[interpreterIndex] = interpreter.getName();
+               }
+               interpreterCombo.setItems(interpreterNames);
+
+               PHPInterpreter selectedInterpreter = PHPRuntime.getDefault().getSelectedInterpreter();
+               if (selectedInterpreter != null)
+                       interpreterCombo.select(interpreterCombo.indexOf(selectedInterpreter.getName()));
+       }
+
+       public void performApply(ILaunchConfigurationWorkingCopy configuration) {
+               int selectionIndex = interpreterCombo.getSelectionIndex();
+               if (selectionIndex >= 0)
+                       configuration.setAttribute(PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, interpreterCombo.getItem(selectionIndex));
+
+               configuration.setAttribute(PHPLaunchConfigurationAttribute.USE_DEFAULT_LOAD_PATH, loadPathDefaultButton.getSelection());
+
+               if (!loadPathDefaultButton.getSelection()) {
+                       List loadPathEntries = (List) loadPathListViewer.getInput();
+                       List loadPathStrings = new ArrayList();
+                       for (Iterator iterator = loadPathEntries.iterator(); iterator.hasNext();) {
+                               LoadPathEntry entry = (LoadPathEntry) iterator.next();
+                               loadPathStrings.add(entry.getPath().toString());
+                       }
+                       configuration.setAttribute(PHPLaunchConfigurationAttribute.CUSTOM_LOAD_PATH, loadPathStrings);
+               }
+       }
+
+       protected Composite createPageRoot(Composite parent) {
+               Composite composite = new Composite(parent, SWT.NULL);
+               GridLayout layout = new GridLayout();
+               layout.numColumns = 2;
+               composite.setLayout(layout);
+               createVerticalSpacer(composite, 2);
+               setControl(composite);
+
+               return composite;
+       }
+
+       public String getName() {
+               return PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.name");
+       }
+
+       public boolean isValid(ILaunchConfiguration launchConfig) {
+               try {
+                       String selectedInterpreter = launchConfig.getAttribute(PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, "");
+                       if (selectedInterpreter.length() == 0) {
+                               setErrorMessage(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.interpreter_not_selected_error_message"));
+                               return false;
+                       }
+               } catch (CoreException e) {
+                       log(e);
+               }
+               
+               setErrorMessage(null);
+               return true;
+       }
+       
+       protected void log(Throwable t) {
+               PHPDebugUiPlugin.getDefault().log(t);
+       }
+
+       public Image getImage() {
+               return PHPUiImages.get(PHPUiImages.IMG_CTOOLS_PHP);
+       }
+
+}
\ No newline at end of file