Start the debugger through setting the url with "?DBGSESSID=1@clienthost:10001" in...
[phpeclipse.git] / net.sourceforge.phpeclipse.debug.ui / src / net / sourceforge / phpdt / internal / debug / ui / launcher / PHPEnvironmentTab.java
index 4536b17..e404e63 100644 (file)
@@ -3,11 +3,8 @@ package net.sourceforge.phpdt.internal.debug.ui.launcher;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
-import java.util.List;
 import java.util.Map;
 
-import net.sourceforge.phpdt.core.JavaCore;
-import net.sourceforge.phpdt.internal.core.JavaProject;
 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;
@@ -16,10 +13,7 @@ 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.PHPeclipsePlugin;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
@@ -48,574 +42,589 @@ import org.eclipse.swt.widgets.Table;
 import org.eclipse.swt.widgets.TableColumn;
 import org.eclipse.swt.widgets.TableItem;
 import org.eclipse.swt.widgets.Text;
-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;
-       protected Button fRemoteDebugCheckBox;
-       protected Button fPathMapRemoveButton;
-       protected Button fPathMapAddButton;
-       protected Button fPathMapEditButton;
-       protected Text fRemoteSourcePath;
-       protected Table fRemoteDebugPathMapTable;
-       protected TabFolder tabFolder;
-       
-       private class RemoteDebugTabListener extends SelectionAdapter implements ModifyListener {
-
-               /* (non-Javadoc)
-                * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
-                */
-               public void modifyText(ModifyEvent e) {
-                       updateLaunchConfigurationDialog();
-               }
-               
-               /* (non-Javadoc)
-                * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
-                */
-               public void widgetSelected(SelectionEvent e) {
-                       Object source= e.getSource();
-                       if (source == fRemoteDebugPathMapTable) {
-                               setPathMapButtonsEnableState();
-                       } else if (source == fPathMapAddButton) {
-                               handlePathMapAddButtonSelected();
-                       } else if (source == fPathMapEditButton) {
-                               handlePathMapEditButtonSelected();
-                       } else if (source == fPathMapRemoveButton) {
-                               handlePathMapRemoveButtonSelected();
-                       } else if (source == fRemoteDebugCheckBox) {
-                               setRemoteTabEnableState();              
-                       } else {
-                               updateLaunchConfigurationDialog();;
-               }
-                       
-               }
-
-       }
-       
-       private static final String EMPTY_STRING = "";   //$NON-NLS-1$
-       private RemoteDebugTabListener fListener= new RemoteDebugTabListener();
-       
-       private static final boolean DEFAULT_REMOTE_DEBUG= false;
-       static String [] columnTitles   = { PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMapTableTitle.local"),
-                                                                                                                                               PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMapTableTitle.remote")
-                                                                                                                                       };
-       public PHPEnvironmentTab() {
-               super();
-       }
-
-       public void createControl(Composite parent) {
-               Composite composite = createPageRoot(parent);
-
-               tabFolder = new TabFolder(composite, SWT.NONE);
-               GridData gridData = new GridData(GridData.FILL_BOTH);
-               tabFolder.setLayoutData(gridData);
-
-               addLoadPathTab(tabFolder);
-               addInterpreterTab(tabFolder);
-               addRemoteDebugTab(tabFolder);
-       }
-       
-       protected void addRemoteDebugTab(TabFolder tabFolder)
-       {
-               Label label;
-                               
-               TabItem remoteDebugTab = new TabItem(tabFolder, SWT.NONE, 0);
-               remoteDebugTab.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.label"));
-               
-               Composite comp = new Composite(tabFolder, SWT.NONE);
-               comp.setLayout(new GridLayout());       
-               remoteDebugTab.setControl(comp);                
-               GridData gd;
-               
-               fRemoteDebugCheckBox = new Button(comp, SWT.CHECK);
-               fRemoteDebugCheckBox.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.RemoteCheckBox.label"));
-               fRemoteDebugCheckBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
-               fRemoteDebugCheckBox.addSelectionListener(fListener);
-               
-               label = new Label(comp, SWT.NONE);
-               label.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.RemoteSourcePath.label"));
-               fRemoteSourcePath = new Text(comp, SWT.BORDER | SWT.SINGLE);
-               gd = new GridData(GridData.FILL_HORIZONTAL);
-               fRemoteSourcePath.setLayoutData(gd);            
-               fRemoteSourcePath.addModifyListener(fListener);
-               
-               createVerticalSpacer(comp,1);
-               
-               Composite pathMapComp = new Composite(comp, SWT.NONE);
-               gd = new GridData(GridData.FILL_BOTH);
-               pathMapComp.setLayoutData(gd);
-               GridLayout parametersLayout = new GridLayout();
-               parametersLayout.numColumns = 2;
-               parametersLayout.marginHeight = 0;
-               parametersLayout.marginWidth = 0;
-               pathMapComp.setLayout(parametersLayout);
-
-               
-               Label pathMapLabel = new Label(pathMapComp, SWT.NONE);
-               pathMapLabel.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.label"));
-               gd = new GridData();
-               gd.horizontalSpan = 2;
-               pathMapLabel.setLayoutData(gd);
-
-               
-               fRemoteDebugPathMapTable = new Table(pathMapComp, SWT.BORDER | SWT.MULTI);
-               TableLayout tableLayout = new TableLayout();
-               fRemoteDebugPathMapTable.setLayout(tableLayout);
-
-               gd = new GridData(GridData.FILL_BOTH);
-               fRemoteDebugPathMapTable.setLayoutData(gd);
-               TableColumn column1 = new TableColumn(this.fRemoteDebugPathMapTable, SWT.NONE);
-               column1.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Table.Title.local")); //$NON-NLS-1$
-               TableColumn column2 = new TableColumn(this.fRemoteDebugPathMapTable, SWT.NONE);
-               column2.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Table.Title.remote"));                //$NON-NLS-1$
-               tableLayout.addColumnData(new ColumnWeightData(100));
-               tableLayout.addColumnData(new ColumnWeightData(100));
-               fRemoteDebugPathMapTable.setHeaderVisible(true);
-               fRemoteDebugPathMapTable.setLinesVisible(true);
-               fRemoteDebugPathMapTable.addSelectionListener(fListener);
-               fRemoteDebugPathMapTable.addMouseListener(new MouseAdapter() {
-                                       public void mouseDoubleClick(MouseEvent e) {
-                                               setPathMapButtonsEnableState();
-                                               if (fPathMapEditButton.isEnabled()) {
-                                                       handlePathMapEditButtonSelected();
-                                               }
-                                       }
-                               });             
-//             fRemoteDebugPathMapTable.setEnabled(false);             
-       
-               Composite envButtonComp = new Composite(pathMapComp, SWT.NONE);
-               GridLayout envButtonLayout = new GridLayout();
-               envButtonLayout.marginHeight = 0;
-               envButtonLayout.marginWidth = 0;
-               envButtonComp.setLayout(envButtonLayout);
-               gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL);
-               envButtonComp.setLayoutData(gd);
-
-               
-               fPathMapAddButton = createPushButton(envButtonComp ,PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Button.Add.label"), null); //$NON-NLS-1$
-               fPathMapAddButton.addSelectionListener(fListener);
-//             fPathMapAddButton.setEnabled(false);
-               
-               fPathMapEditButton = createPushButton(envButtonComp,PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Button.Edit.label"), null); //$NON-NLS-1$
-               fPathMapEditButton.addSelectionListener(fListener);
-//             fPathMapEditButton.setEnabled(false);
-               
-               fPathMapRemoveButton = createPushButton(envButtonComp,PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Button.Remove.label"), null); //$NON-NLS-1$
-               fPathMapRemoveButton.addSelectionListener(fListener);
-//             fPathMapRemoveButton.setEnabled(false);
-       
-
-       }
-       
-       void handlePathMapAddButtonSelected()
-       {
-               EditPathMapDialog dialog=
-                       new EditPathMapDialog(
-                               getShell(),
-                               "Edit File Map",
-                               new String[] {EMPTY_STRING, EMPTY_STRING});
-               openNewPathMapDialog(dialog,null);              
-//             dialog.create();
-//             if (dialog.open()==EditPathMapDialog.OK)
-//             {
-//                     TableItem item = new TableItem (fRemoteDebugPathMapTable, SWT.NONE);
-//                     item.setText(0,dialog.getLocalPath());
-//                     item.setText(1,dialog.getRemotePath());
-//                     updateLaunchConfigurationDialog();
-//             }
-//             updateLaunchConfigurationDialog();
-               setPathMapButtonsEnableState();
-       }
-       
-       void handlePathMapRemoveButtonSelected()
-       {
-               int[] selectedIndices = this.fRemoteDebugPathMapTable.getSelectionIndices();
-               this.fRemoteDebugPathMapTable.remove(selectedIndices);
-               setPathMapButtonsEnableState();
-               updateLaunchConfigurationDialog();
-       }
-       
-       void handlePathMapEditButtonSelected()
-       {
-               TableItem selectedItem = this.fRemoteDebugPathMapTable.getSelection()[0];
-                       String local = selectedItem.getText(0);
-                       String remote = selectedItem.getText(1);
-               EditPathMapDialog dialog=
-                       new EditPathMapDialog(
-                               getShell(),
-                               "Edit File Map",
-                               new String[] {local, remote});
-                       openNewPathMapDialog(dialog, selectedItem);             
-       }
-
-
-       /**
-        * Set the enabled state of whole tab.
-        */
-       private void setRemoteTabEnableState() {
-               boolean state=fRemoteDebugCheckBox.getSelection();
-               fRemoteSourcePath.setEnabled(state);
-                               
-               fRemoteDebugPathMapTable.setEnabled(state);
-               if (!state)
-               {
-                       fPathMapEditButton.setEnabled(false);
-                       fPathMapRemoveButton.setEnabled(false);         
-                       fPathMapAddButton.setEnabled(false);
-               } else {
-                       setPathMapButtonsEnableState();
-               }
-
-               updateLaunchConfigurationDialog();
-       }
-       
-       
-       /**
-        * Set the enabled state of the three environment variable-related buttons based on the
-        * selection in the PathMapTable widget.
-        */
-       private void setPathMapButtonsEnableState() {
-//     just do nothing for now
-//
-               if(fRemoteDebugCheckBox.getSelection())
-               {
-                       int selectCount = this.fRemoteDebugPathMapTable.getSelectionIndices().length;
-                       if (selectCount < 1) {
-                               fPathMapEditButton.setEnabled(false);
-                               fPathMapRemoveButton.setEnabled(false);
-                       } else {
-                               fPathMapRemoveButton.setEnabled(true);
-                               if (selectCount == 1) {
-                                       fPathMapEditButton.setEnabled(true);
-                               } else {
-                                       fPathMapEditButton.setEnabled(false);
-                               }
-                       }               
-                       fPathMapAddButton.setEnabled(true);
-               }
-       }
-       
-       /**
-        * Show the specified dialog and update the pathMapTable table based on its results.
-        * 
-        * @param updateItem the item to update, or <code>null</code> if
-        *  adding a new item
-        */
-       private void openNewPathMapDialog(EditPathMapDialog dialog, TableItem updateItem) {
-               if (dialog.open() != EditPathMapDialog.OK) {
-                       return;
-               }
-               String[] pathPair = dialog.getPathPair();
-               TableItem tableItem = updateItem;
-               if (tableItem == null) {
-                       tableItem = getTableItemForName(pathPair[0]);
-                       if (tableItem == null) {
-                               tableItem = new TableItem(this.fRemoteDebugPathMapTable, SWT.NONE);
-                       }
-               }
-               tableItem.setText(pathPair);
-               this.fRemoteDebugPathMapTable.setSelection(new TableItem[] {tableItem});
-               updateLaunchConfigurationDialog();      
-       }
-       
-       /**
-        * Helper method that indicates whether the specified parameter name is already present 
-        * in the parameters table.
-        */
-       private TableItem getTableItemForName(String candidateName) {
-               TableItem[] items = this.fRemoteDebugPathMapTable.getItems();
-               for (int i = 0; i < items.length; i++) {
-                       String name = items[i].getText(0);
-                       if (name.equals(candidateName)) {
-                               return items[i];
-                       }
-               }
-               return null;
-       }       
-       
-       
-
-       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);
-               initializeRemoteDebug(configuration);
-       }
-       
-       protected void initializeRemoteDebug(ILaunchConfiguration configuration)
-       {
-               String s[];
-               int startIdx =0;
-               int idx;
-               try{
-                       fRemoteDebugCheckBox.setSelection(
-                               configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_DEBUG,DEFAULT_REMOTE_DEBUG));
-               } catch(CoreException ce) {
-                       fRemoteDebugCheckBox.setSelection(DEFAULT_REMOTE_DEBUG);
-               }
-               setRemoteTabEnableState();
-               try{
-                       fRemoteSourcePath.setText(
-                                       configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH,""));
-               } catch(CoreException ce) {
-                       fRemoteSourcePath.setText("");
-               }
-                       
-               updatePathMapFromConfig(configuration);
-                
-       }
-       
-       private void updatePathMapFromConfig(ILaunchConfiguration config) {
-               Map envVars = null;
-               try {
-                       if (config != null) {
-                               envVars = config.getAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, (Map)null);
-                       }
-                       updatePathMapTable(envVars, this.fRemoteDebugPathMapTable);
-                       setPathMapButtonsEnableState();
-               } catch (CoreException ce) {
-                       log(ce);
-               }
-       }
-
-       private void updatePathMapTable(Map map, Table tableWidget) {
-               tableWidget.removeAll();
-               if (map == null) {
-                       return;
-               }
-               Iterator iterator = map.keySet().iterator();
-               while (iterator.hasNext()) {
-                       String key = (String) iterator.next();
-                       String value = (String) map.get(key);
-                       TableItem tableItem = new TableItem(tableWidget, SWT.NONE);
-                       tableItem.setText(new String[] {key, value});                   
-               }
-       }
-
-       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 != "") {
-                                   IProject aProject = PHPeclipsePlugin.getWorkspace().getRoot().getProject(projectName);
-                                       if ((aProject != null) && JavaCore.isPHPProject(aProject)) {
-                                             JavaProject thePHPProject = new JavaProject();
-                                             thePHPProject.setProject(aProject);                                               
-                                               List loadPathEntries = thePHPProject.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);
-               }
-               
-               configuration.setAttribute(PHPLaunchConfigurationAttribute.REMOTE_DEBUG, fRemoteDebugCheckBox.getSelection());
-               configuration.setAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, getMapFromPathMapTable());         
-               configuration.setAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, fRemoteSourcePath.getText());
-       }
-
-       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;
-       }
-       
-       private Map getMapFromPathMapTable() {
-               TableItem[] items = fRemoteDebugPathMapTable.getItems();
-               if (items.length == 0) {
-                       return null;
-               }
-               Map map = new HashMap(items.length);
-               for (int i = 0; i < items.length; i++) {
-                       TableItem item = items[i];
-                       String key = item.getText(0);
-                       String value = item.getText(1);
-                       map.put(key, value);
-               }               
-               return map;
-       }
-
-       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.log(t);
-       }
-
-       public Image getImage() {
-               return PHPUiImages.get(PHPUiImages.IMG_CTOOLS_PHP);
-       }
+  protected ListViewer loadPathListViewer;
+
+  protected java.util.List installedInterpretersWorkingCopy;
+
+  protected Combo interpreterCombo;
+
+  //   protected Button loadPathDefaultButton;
+  protected Button fRemoteDebugCheckBox;
+
+  protected Button fOpenDBGSessionInBrowserCheckBox;
+
+  protected Button fPathMapRemoveButton;
+
+  protected Button fPathMapAddButton;
+
+  protected Button fPathMapEditButton;
+
+  protected Text fRemoteSourcePath;
+
+  protected Table fRemoteDebugPathMapTable;
+
+  protected TabFolder tabFolder;
+
+  private class RemoteDebugTabListener extends SelectionAdapter implements ModifyListener {
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent)
+     */
+    public void modifyText(ModifyEvent e) {
+      updateLaunchConfigurationDialog();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent)
+     */
+    public void widgetSelected(SelectionEvent e) {
+      Object source = e.getSource();
+      if (source == fRemoteDebugPathMapTable) {
+        setPathMapButtonsEnableState();
+      } else if (source == fPathMapAddButton) {
+        handlePathMapAddButtonSelected();
+      } else if (source == fPathMapEditButton) {
+        handlePathMapEditButtonSelected();
+      } else if (source == fPathMapRemoveButton) {
+        handlePathMapRemoveButtonSelected();
+      } else if (source == fRemoteDebugCheckBox) {
+        setRemoteTabEnableState();
+      } else {
+        updateLaunchConfigurationDialog();
+        ;
+      }
+
+    }
+
+  }
+
+  private static final String EMPTY_STRING = ""; //$NON-NLS-1$
+
+  private RemoteDebugTabListener fListener = new RemoteDebugTabListener();
+
+  private static final boolean DEFAULT_REMOTE_DEBUG = false;
+
+  private static final boolean DEFAULT_OPEN_DBGSESSION_IN_BROWSER = true;
+
+  static String[] columnTitles = {
+      PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMapTableTitle.local"),
+      PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMapTableTitle.remote") };
+
+  public PHPEnvironmentTab() {
+    super();
+  }
+
+  public void createControl(Composite parent) {
+    Composite composite = createPageRoot(parent);
+
+    tabFolder = new TabFolder(composite, SWT.NONE);
+    GridData gridData = new GridData(GridData.FILL_BOTH);
+    tabFolder.setLayoutData(gridData);
+
+    //         addLoadPathTab(tabFolder);
+    addInterpreterTab(tabFolder);
+    addRemoteDebugTab(tabFolder);
+  }
+
+  protected void addRemoteDebugTab(TabFolder tabFolder) {
+    Label label;
+
+    TabItem remoteDebugTab = new TabItem(tabFolder, SWT.NONE, 0);
+    remoteDebugTab.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.label"));
+
+    Composite comp = new Composite(tabFolder, SWT.NONE);
+    comp.setLayout(new GridLayout());
+    remoteDebugTab.setControl(comp);
+    GridData gd;
+
+    fRemoteDebugCheckBox = new Button(comp, SWT.CHECK);
+    fRemoteDebugCheckBox.setText(PHPDebugUiMessages
+        .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.RemoteCheckBox.label"));
+    fRemoteDebugCheckBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+    fRemoteDebugCheckBox.addSelectionListener(fListener);
+
+    fOpenDBGSessionInBrowserCheckBox = new Button(comp, SWT.CHECK);
+    fOpenDBGSessionInBrowserCheckBox.setText(PHPDebugUiMessages
+        .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.OpenDBGSessionInBrowserCheckBox.label"));
+    fOpenDBGSessionInBrowserCheckBox.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING));
+    fOpenDBGSessionInBrowserCheckBox.addSelectionListener(fListener);
+
+    label = new Label(comp, SWT.NONE);
+    label.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.RemoteSourcePath.label"));
+    fRemoteSourcePath = new Text(comp, SWT.BORDER | SWT.SINGLE);
+    gd = new GridData(GridData.FILL_HORIZONTAL);
+    fRemoteSourcePath.setLayoutData(gd);
+    fRemoteSourcePath.addModifyListener(fListener);
+
+    createVerticalSpacer(comp, 1);
+
+    Composite pathMapComp = new Composite(comp, SWT.NONE);
+    gd = new GridData(GridData.FILL_BOTH);
+    pathMapComp.setLayoutData(gd);
+    GridLayout parametersLayout = new GridLayout();
+    parametersLayout.numColumns = 2;
+    parametersLayout.marginHeight = 0;
+    parametersLayout.marginWidth = 0;
+    pathMapComp.setLayout(parametersLayout);
+
+    Label pathMapLabel = new Label(pathMapComp, SWT.NONE);
+    pathMapLabel.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.label"));
+    gd = new GridData();
+    gd.horizontalSpan = 2;
+    pathMapLabel.setLayoutData(gd);
+
+    fRemoteDebugPathMapTable = new Table(pathMapComp, SWT.BORDER | SWT.MULTI);
+    TableLayout tableLayout = new TableLayout();
+    fRemoteDebugPathMapTable.setLayout(tableLayout);
+
+    gd = new GridData(GridData.FILL_BOTH);
+    fRemoteDebugPathMapTable.setLayoutData(gd);
+    TableColumn column1 = new TableColumn(this.fRemoteDebugPathMapTable, SWT.NONE);
+    column1.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Table.Title.local")); //$NON-NLS-1$
+    TableColumn column2 = new TableColumn(this.fRemoteDebugPathMapTable, SWT.NONE);
+    column2
+        .setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Table.Title.remote")); //$NON-NLS-1$
+    tableLayout.addColumnData(new ColumnWeightData(100));
+    tableLayout.addColumnData(new ColumnWeightData(100));
+    fRemoteDebugPathMapTable.setHeaderVisible(true);
+    fRemoteDebugPathMapTable.setLinesVisible(true);
+    fRemoteDebugPathMapTable.addSelectionListener(fListener);
+    fRemoteDebugPathMapTable.addMouseListener(new MouseAdapter() {
+      public void mouseDoubleClick(MouseEvent e) {
+        setPathMapButtonsEnableState();
+        if (fPathMapEditButton.isEnabled()) {
+          handlePathMapEditButtonSelected();
+        }
+      }
+    });
+    //         fRemoteDebugPathMapTable.setEnabled(false);
+
+    Composite envButtonComp = new Composite(pathMapComp, SWT.NONE);
+    GridLayout envButtonLayout = new GridLayout();
+    envButtonLayout.marginHeight = 0;
+    envButtonLayout.marginWidth = 0;
+    envButtonComp.setLayout(envButtonLayout);
+    gd = new GridData(GridData.VERTICAL_ALIGN_BEGINNING | GridData.HORIZONTAL_ALIGN_FILL);
+    envButtonComp.setLayoutData(gd);
+
+    fPathMapAddButton = createPushButton(envButtonComp, PHPDebugUiMessages
+        .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Button.Add.label"), null); //$NON-NLS-1$
+    fPathMapAddButton.addSelectionListener(fListener);
+    //         fPathMapAddButton.setEnabled(false);
+
+    fPathMapEditButton = createPushButton(envButtonComp, PHPDebugUiMessages
+        .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Button.Edit.label"), null); //$NON-NLS-1$
+    fPathMapEditButton.addSelectionListener(fListener);
+    //         fPathMapEditButton.setEnabled(false);
+
+    fPathMapRemoveButton = createPushButton(envButtonComp, PHPDebugUiMessages
+        .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.Button.Remove.label"), null); //$NON-NLS-1$
+    fPathMapRemoveButton.addSelectionListener(fListener);
+    //         fPathMapRemoveButton.setEnabled(false);
+
+  }
+
+  void handlePathMapAddButtonSelected() {
+    EditPathMapDialog dialog = new EditPathMapDialog(getShell(), "Edit File Map", new String[] { EMPTY_STRING, EMPTY_STRING });
+    openNewPathMapDialog(dialog, null);
+    //         dialog.create();
+    //         if (dialog.open()==EditPathMapDialog.OK)
+    //         {
+    //                 TableItem item = new TableItem (fRemoteDebugPathMapTable, SWT.NONE);
+    //                 item.setText(0,dialog.getLocalPath());
+    //                 item.setText(1,dialog.getRemotePath());
+    //                 updateLaunchConfigurationDialog();
+    //         }
+    //         updateLaunchConfigurationDialog();
+    setPathMapButtonsEnableState();
+  }
+
+  void handlePathMapRemoveButtonSelected() {
+    int[] selectedIndices = this.fRemoteDebugPathMapTable.getSelectionIndices();
+    this.fRemoteDebugPathMapTable.remove(selectedIndices);
+    setPathMapButtonsEnableState();
+    updateLaunchConfigurationDialog();
+  }
+
+  void handlePathMapEditButtonSelected() {
+    TableItem selectedItem = this.fRemoteDebugPathMapTable.getSelection()[0];
+    String local = selectedItem.getText(0);
+    String remote = selectedItem.getText(1);
+    EditPathMapDialog dialog = new EditPathMapDialog(getShell(), "Edit File Map", new String[] { local, remote });
+    openNewPathMapDialog(dialog, selectedItem);
+  }
+
+  /**
+   * Set the enabled state of whole tab.
+   */
+  private void setRemoteTabEnableState() {
+    boolean state = fRemoteDebugCheckBox.getSelection();
+    fRemoteSourcePath.setEnabled(state);
+
+    fRemoteDebugPathMapTable.setEnabled(state);
+    if (!state) {
+      fPathMapEditButton.setEnabled(false);
+      fPathMapRemoveButton.setEnabled(false);
+      fPathMapAddButton.setEnabled(false);
+      fOpenDBGSessionInBrowserCheckBox.setEnabled(false);
+    } else {
+      setPathMapButtonsEnableState();
+    }
+
+    updateLaunchConfigurationDialog();
+  }
+
+  /**
+   * Set the enabled state of the three environment variable-related buttons based on the selection in the PathMapTable widget.
+   */
+  private void setPathMapButtonsEnableState() {
+    // just do nothing for now
+    //
+    if (fRemoteDebugCheckBox.getSelection()) {
+      fOpenDBGSessionInBrowserCheckBox.setEnabled(true);
+      int selectCount = this.fRemoteDebugPathMapTable.getSelectionIndices().length;
+      if (selectCount < 1) {
+        fPathMapEditButton.setEnabled(false);
+        fPathMapRemoveButton.setEnabled(false);
+      } else {
+        fPathMapRemoveButton.setEnabled(true);
+        if (selectCount == 1) {
+          fPathMapEditButton.setEnabled(true);
+        } else {
+          fPathMapEditButton.setEnabled(false);
+        }
+      }
+      fPathMapAddButton.setEnabled(true);
+    }
+  }
+
+  /**
+   * Show the specified dialog and update the pathMapTable table based on its results.
+   * 
+   * @param updateItem
+   *          the item to update, or <code>null</code> if adding a new item
+   */
+  private void openNewPathMapDialog(EditPathMapDialog dialog, TableItem updateItem) {
+    if (dialog.open() != EditPathMapDialog.OK) {
+      return;
+    }
+    String[] pathPair = dialog.getPathPair();
+    TableItem tableItem = updateItem;
+    if (tableItem == null) {
+      tableItem = getTableItemForName(pathPair[0]);
+      if (tableItem == null) {
+        tableItem = new TableItem(this.fRemoteDebugPathMapTable, SWT.NONE);
+      }
+    }
+    tableItem.setText(pathPair);
+    this.fRemoteDebugPathMapTable.setSelection(new TableItem[] { tableItem });
+    updateLaunchConfigurationDialog();
+  }
+
+  /**
+   * Helper method that indicates whether the specified parameter name is already present in the parameters table.
+   */
+  private TableItem getTableItemForName(String candidateName) {
+    TableItem[] items = this.fRemoteDebugPathMapTable.getItems();
+    for (int i = 0; i < items.length; i++) {
+      String name = items[i].getText(0);
+      if (name.equals(candidateName)) {
+        return items[i];
+      }
+    }
+    return null;
+  }
+
+  //   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);
+    initializeRemoteDebug(configuration);
+  }
+
+  protected void initializeRemoteDebug(ILaunchConfiguration configuration) {
+    String s[];
+    int startIdx = 0;
+    int idx;
+    try {
+      fRemoteDebugCheckBox.setSelection(configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_DEBUG,
+          DEFAULT_REMOTE_DEBUG));
+    } catch (CoreException ce) {
+      fRemoteDebugCheckBox.setSelection(DEFAULT_REMOTE_DEBUG);
+    }
+    try {
+      fOpenDBGSessionInBrowserCheckBox.setSelection(configuration.getAttribute(
+          PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_BROWSER, DEFAULT_OPEN_DBGSESSION_IN_BROWSER));
+    } catch (CoreException ce) {
+      fOpenDBGSessionInBrowserCheckBox.setSelection(DEFAULT_OPEN_DBGSESSION_IN_BROWSER);
+    }
+    setRemoteTabEnableState();
+    try {
+      fRemoteSourcePath.setText(configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, ""));
+    } catch (CoreException ce) {
+      fRemoteSourcePath.setText("");
+    }
+
+    updatePathMapFromConfig(configuration);
+
+  }
+
+  private void updatePathMapFromConfig(ILaunchConfiguration config) {
+    Map envVars = null;
+    try {
+      if (config != null) {
+        envVars = config.getAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, (Map) null);
+      }
+      updatePathMapTable(envVars, this.fRemoteDebugPathMapTable);
+      setPathMapButtonsEnableState();
+    } catch (CoreException ce) {
+      log(ce);
+    }
+  }
+
+  private void updatePathMapTable(Map map, Table tableWidget) {
+    tableWidget.removeAll();
+    if (map == null) {
+      return;
+    }
+    Iterator iterator = map.keySet().iterator();
+    while (iterator.hasNext()) {
+      String key = (String) iterator.next();
+      String value = (String) map.get(key);
+      TableItem tableItem = new TableItem(tableWidget, SWT.NONE);
+      tableItem.setText(new String[] { key, value });
+    }
+  }
+
+  //   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 != "") {
+  //                               IProject aProject = PHPeclipsePlugin.getWorkspace().getRoot().getProject(projectName);
+  //                                   if ((aProject != null) && JavaCore.isPHPProject(aProject)) {
+  //                                         JavaProject thePHPProject = new JavaProject();
+  //                                         thePHPProject.setProject(aProject);
+  //                                           List loadPathEntries = thePHPProject.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);
+    //         }
+
+    configuration.setAttribute(PHPLaunchConfigurationAttribute.REMOTE_DEBUG, fRemoteDebugCheckBox.getSelection());
+    configuration.setAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, getMapFromPathMapTable());
+    configuration.setAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, fRemoteSourcePath.getText());
+    configuration.setAttribute(PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_BROWSER, fOpenDBGSessionInBrowserCheckBox
+        .getSelection());
+  }
+
+  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;
+  }
+
+  private Map getMapFromPathMapTable() {
+    TableItem[] items = fRemoteDebugPathMapTable.getItems();
+    if (items.length == 0) {
+      return null;
+    }
+    Map map = new HashMap(items.length);
+    for (int i = 0; i < items.length; i++) {
+      TableItem item = items[i];
+      String key = item.getText(0);
+      String value = item.getText(1);
+      map.put(key, value);
+    }
+    return map;
+  }
+
+  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.log(t);
+  }
+
+  public Image getImage() {
+    return PHPUiImages.get(PHPUiImages.IMG_CTOOLS_PHP);
+  }
 
 }
\ No newline at end of file