X-Git-Url: http://git.phpeclipse.com 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 index 92162b0..87e8a33 100644 --- 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 @@ -1,38 +1,40 @@ package net.sourceforge.phpdt.internal.debug.ui.launcher; +import java.io.File; import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; import java.util.HashMap; +import java.util.Iterator; import java.util.Map; 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.debug.ui.preferences.EditPathMapDialog; +import net.sourceforge.phpdt.internal.debug.ui.preferences.PHPInterpreterPreferencePage; 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.resources.IProject; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; +import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.TableLayout; -import org.eclipse.jface.viewers.ColumnWeightData; 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.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; +import org.eclipse.swt.events.SelectionAdapter; +import org.eclipse.swt.events.SelectionEvent; +//import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; @@ -43,38 +45,62 @@ import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; 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.swt.widgets.TableColumn; -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 loadPathDefaultButton; protected Button fRemoteDebugCheckBox; + + protected Button fRemoteDebugTranslate; + + protected Button fOpenDBGSessionInBrowserCheckBox; + + protected Button fOpenDBGSessionInExternalBrowserCheckBox; + 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) + private Text targetFile; + + private String originalFileName = ""; + + 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(); + makeupTargetFile(); } - - /* (non-Javadoc) + + /* + * (non-Javadoc) + * * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent e) { - Object source= e.getSource(); + Object source = e.getSource(); if (source == fRemoteDebugPathMapTable) { setPathMapButtonsEnableState(); } else if (source == fPathMapAddButton) { @@ -84,22 +110,37 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { } else if (source == fPathMapRemoveButton) { handlePathMapRemoveButtonSelected(); } else if (source == fRemoteDebugCheckBox) { - setRemoteTabEnableState(); + setRemoteTabEnableState(); + } else if (source == fRemoteDebugTranslate) { + setRemoteTabEnableState(); + } else if (source == fOpenDBGSessionInBrowserCheckBox) { + setRemoteTabEnableState(); } else { - updateLaunchConfigurationDialog();; - } - + updateLaunchConfigurationDialog(); + } + makeupTargetFile(); } } - - 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") - }; + + 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_REMOTE_DEBUG_TRANSLATE = false; + + private static final boolean DEFAULT_OPEN_DBGSESSION_IN_BROWSER = true; + + private static final boolean DEFAULT_OPEN_DBGSESSION_IN_EXTERNAL_BROWSER = false; + + static String[] columnTitles = { + PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMapTableTitle.local"), + PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMapTableTitle.remote") }; + public PHPEnvironmentTab() { super(); } @@ -111,37 +152,99 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { GridData gridData = new GridData(GridData.FILL_BOTH); tabFolder.setLayoutData(gridData); - addLoadPathTab(tabFolder); - addInterpreterTab(tabFolder); + // addLoadPathTab(tabFolder); addRemoteDebugTab(tabFolder); + addInterpreterTab(tabFolder); } - - protected void addRemoteDebugTab(TabFolder tabFolder) - { + + protected void addRemoteDebugTab(TabFolder tabFolder) { Label label; - + TabItem remoteDebugTab = new TabItem(tabFolder, SWT.NONE, 0); - remoteDebugTab.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.label")); - + remoteDebugTab + .setText(PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.label")); + Composite comp = new Composite(tabFolder, SWT.NONE); - comp.setLayout(new GridLayout()); - remoteDebugTab.setControl(comp); + 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 + .setText(PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.RemoteCheckBox.label")); + fRemoteDebugCheckBox.setLayoutData(new GridData( + GridData.HORIZONTAL_ALIGN_BEGINNING)); fRemoteDebugCheckBox.addSelectionListener(fListener); - + + fRemoteDebugTranslate = new Button(comp, SWT.CHECK); + fRemoteDebugTranslate + .setText(PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.RemoteTranslate.label")); + fRemoteDebugTranslate.setLayoutData(new GridData( + GridData.HORIZONTAL_ALIGN_BEGINNING)); + fRemoteDebugTranslate.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); + + // addendum + fOpenDBGSessionInExternalBrowserCheckBox = new Button(comp, SWT.CHECK); + fOpenDBGSessionInExternalBrowserCheckBox + .setText(PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.OpenDBGSessionInExternalBrowserCheckBox.label")); + fOpenDBGSessionInExternalBrowserCheckBox.setLayoutData(new GridData( + SWT.BEGINNING)); + ((GridData) fOpenDBGSessionInExternalBrowserCheckBox.getLayoutData()).horizontalIndent = 16; + fOpenDBGSessionInExternalBrowserCheckBox + .addSelectionListener(fListener); + // addendum + label = new Label(comp, SWT.NONE); - label.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.RemoteSourcePath.label")); + 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.setLayoutData(gd); fRemoteSourcePath.addModifyListener(fListener); - - createVerticalSpacer(comp,1); - + + // addendum - make an effect of RemoteSourcePath clear + Composite targetComp = new Composite(comp, SWT.NONE); + targetComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + GridLayout targetLayout = new GridLayout(4, false); + targetLayout.marginHeight = 0; + targetLayout.marginWidth = 3; + targetComp.setLayout(targetLayout); + Color targetColor = new Color(null, 160, 160, 160); + Label label_lp = new Label(targetComp, SWT.NONE); + label_lp.setText("("); + label_lp.setForeground(targetColor); + label_lp.setLayoutData(new GridData(GridData.BEGINNING)); + Label targetLabel = new Label(targetComp, SWT.NONE); + targetLabel + .setText(PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.TargetFile.label")); + targetLabel.setForeground(targetColor); + targetLabel.setLayoutData(new GridData(GridData.BEGINNING)); + targetFile = new Text(targetComp, SWT.SINGLE); + targetFile.setForeground(targetColor); + targetFile.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + targetFile.setEditable(false); + Label label_rp = new Label(targetComp, SWT.NONE); + label_rp.setText(")"); + label_rp.setForeground(targetColor); + label_rp.setLayoutData(new GridData(GridData.END)); + // addendum + + createVerticalSpacer(comp, 1); + Composite pathMapComp = new Composite(comp, SWT.NONE); gd = new GridData(GridData.FILL_BOTH); pathMapComp.setLayoutData(gd); @@ -151,136 +254,147 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { parametersLayout.marginWidth = 0; pathMapComp.setLayout(parametersLayout); - Label pathMapLabel = new Label(pathMapComp, SWT.NONE); - pathMapLabel.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.remoteDebugTab.PathMap.label")); + 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); + 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$ + 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); - + 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); + 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 = 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$ + // 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); - + // fPathMapEditButton.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(); + 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(); + + void handlePathMapRemoveButtonSelected() { + int[] selectedIndices = this.fRemoteDebugPathMapTable + .getSelectionIndices(); this.fRemoteDebugPathMapTable.remove(selectedIndices); setPathMapButtonsEnableState(); updateLaunchConfigurationDialog(); } - - void handlePathMapEditButtonSelected() - { + + 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); + 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(); + boolean state = fRemoteDebugCheckBox.getSelection(); fRemoteSourcePath.setEnabled(state); - + fRemoteDebugTranslate.setEnabled(state); + fRemoteDebugPathMapTable.setEnabled(state); - if (!state) - { + if (!state) { fPathMapEditButton.setEnabled(false); - fPathMapRemoveButton.setEnabled(false); + fPathMapRemoveButton.setEnabled(false); fPathMapAddButton.setEnabled(false); + fOpenDBGSessionInBrowserCheckBox.setEnabled(false); + fOpenDBGSessionInExternalBrowserCheckBox.setEnabled(false); } else { setPathMapButtonsEnableState(); } updateLaunchConfigurationDialog(); } - - + /** - * Set the enabled state of the three environment variable-related buttons based on the - * selection in the PathMapTable widget. + * 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; + // just do nothing for now + // + if (fRemoteDebugCheckBox.getSelection()) { + fOpenDBGSessionInBrowserCheckBox.setEnabled(true); + fOpenDBGSessionInExternalBrowserCheckBox + .setEnabled(fOpenDBGSessionInBrowserCheckBox.getSelection()); + fRemoteDebugTranslate.setEnabled(true); + int selectCount = this.fRemoteDebugPathMapTable + .getSelectionIndices().length; if (selectCount < 1) { fPathMapEditButton.setEnabled(false); fPathMapRemoveButton.setEnabled(false); @@ -291,18 +405,21 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { } else { fPathMapEditButton.setEnabled(false); } - } + } fPathMapAddButton.setEnabled(true); } } - + /** - * Show the specified dialog and update the pathMapTable table based on its results. + * Show the specified dialog and update the pathMapTable table based on its + * results. * - * @param updateItem the item to update, or null if - * adding a new item + * @param updateItem + * the item to update, or null if adding a new + * item */ - private void openNewPathMapDialog(EditPathMapDialog dialog, TableItem updateItem) { + private void openNewPathMapDialog(EditPathMapDialog dialog, + TableItem updateItem) { if (dialog.open() != EditPathMapDialog.OK) { return; } @@ -311,17 +428,19 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { if (tableItem == null) { tableItem = getTableItemForName(pathPair[0]); if (tableItem == null) { - tableItem = new TableItem(this.fRemoteDebugPathMapTable, SWT.NONE); + tableItem = new TableItem(this.fRemoteDebugPathMapTable, + SWT.NONE); } } tableItem.setText(pathPair); - this.fRemoteDebugPathMapTable.setSelection(new TableItem[] {tableItem}); - updateLaunchConfigurationDialog(); + this.fRemoteDebugPathMapTable + .setSelection(new TableItem[] { tableItem }); + updateLaunchConfigurationDialog(); } - + /** - * Helper method that indicates whether the specified parameter name is already present - * in the parameters table. + * 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(); @@ -332,58 +451,60 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { } } 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 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; + // layout.marginHeight = 0; + // layout.marginWidth = 0; interpreterComposite.setLayout(layout); - interpreterComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); + interpreterComposite.setLayoutData(new GridData( + GridData.FILL_HORIZONTAL)); createVerticalSpacer(interpreterComposite, 2); @@ -393,23 +514,31 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { interpreterCombo.addModifyListener(getInterpreterComboModifyListener()); Button interpreterAddButton = new Button(interpreterComposite, SWT.PUSH); - interpreterAddButton.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.interpreterAddButton.label")); + 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())); + PHPInterpreter newInterpreter = new PHPInterpreter(null); + File phpRuntime = PHPInterpreterPreferencePage.getFile( + getShell(), null); + if (phpRuntime != null) { + newInterpreter.setInstallLocation(phpRuntime); + PHPRuntime.getDefault().addInstalledInterpreter( + newInterpreter); + interpreterCombo.add(newInterpreter.getInstallLocation() + .toString()); + interpreterCombo.select(interpreterCombo + .indexOf(newInterpreter.getInstallLocation() + .toString())); } } }); TabItem interpreterTab = new TabItem(tabFolder, SWT.NONE); - interpreterTab.setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPEnvironment.interpreterTab.label")); + interpreterTab + .setText(PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.interpreterTab.label")); interpreterTab.setControl(interpreterComposite); } @@ -429,42 +558,110 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { } public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { + PHPInterpreter selectedInterpreter = PHPRuntime.getDefault() + .getSelectedInterpreter(); + if (selectedInterpreter != null) { + String interpreterLocation = selectedInterpreter + .getInstallLocation().toString(); + configuration.setAttribute( + PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, + interpreterLocation); + } + try { + String projectName = configuration.getAttribute( + PHPLaunchConfigurationAttribute.PROJECT_NAME, ""); + if (projectName != "") { + IProject project = ResourcesPlugin.getWorkspace().getRoot() + .getProject(projectName); + if (project != null) { + IPath remotePath = project.getFullPath(); + String fileName = configuration.getAttribute( + PHPLaunchConfigurationAttribute.FILE_NAME, ""); + if (fileName != "") { + Path filePath = new Path(fileName); + remotePath = remotePath.append(filePath + .removeLastSegments(1)); + } + configuration.setAttribute( + PHPLaunchConfigurationAttribute.REMOTE_PATH, + remotePath.toOSString()); + } + } + } catch (CoreException e) { + log(e); + } } public void initializeFrom(ILaunchConfiguration configuration) { - initializeLoadPath(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) { + + protected void initializeRemoteDebug(ILaunchConfiguration configuration) { + try { + fRemoteDebugCheckBox.setSelection(configuration.getAttribute( + PHPLaunchConfigurationAttribute.REMOTE_DEBUG, + DEFAULT_REMOTE_DEBUG)); + } catch (CoreException ce) { fRemoteDebugCheckBox.setSelection(DEFAULT_REMOTE_DEBUG); } + tabFolder.setSelection(fRemoteDebugCheckBox.getSelection() ? 0 : 1); + try { + fRemoteDebugTranslate.setSelection(configuration.getAttribute( + PHPLaunchConfigurationAttribute.REMOTE_DEBUG_TRANSLATE, + DEFAULT_REMOTE_DEBUG_TRANSLATE)); + } catch (CoreException ce) { + fRemoteDebugTranslate.setSelection(DEFAULT_REMOTE_DEBUG_TRANSLATE); + } + 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); + } + try { + fOpenDBGSessionInExternalBrowserCheckBox + .setSelection(configuration + .getAttribute( + PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_EXTERNAL_BROWSER, + DEFAULT_OPEN_DBGSESSION_IN_EXTERNAL_BROWSER)); + } catch (CoreException ce) { + fOpenDBGSessionInExternalBrowserCheckBox + .setSelection(DEFAULT_OPEN_DBGSESSION_IN_EXTERNAL_BROWSER); + } + setRemoteTabEnableState(); - try{ - fRemoteSourcePath.setText( - configuration.getAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH,"")); - } catch(CoreException ce) { + + try { + fRemoteSourcePath.setText(configuration.getAttribute( + PHPLaunchConfigurationAttribute.REMOTE_PATH, "")); + } catch (CoreException ce) { fRemoteSourcePath.setText(""); } - + updatePathMapFromConfig(configuration); - + + try { + originalFileName = configuration.getAttribute( + PHPLaunchConfigurationAttribute.FILE_NAME, ""); + makeupTargetFile(); + } catch (CoreException ce) { + originalFileName = ""; + } + } - + private void updatePathMapFromConfig(ILaunchConfiguration config) { Map envVars = null; try { if (config != null) { - envVars = config.getAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, (Map)null); + envVars = config.getAttribute( + PHPLaunchConfigurationAttribute.FILE_MAP, (Map) null); } updatePathMapTable(envVars, this.fRemoteDebugPathMapTable); setPathMapButtonsEnableState(); @@ -483,82 +680,126 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { String key = (String) iterator.next(); String value = (String) map.get(key); TableItem tableItem = new TableItem(tableWidget, SWT.NONE); - tableItem.setText(new String[] {key, value}); + 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 != "") { - 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) { + // 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, ""); + interpreterName = configuration.getAttribute( + PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, ""); } catch (CoreException e) { log(e); } - if (interpreterName != null && !interpreterName.equals("")) + if (interpreterName != null && !interpreterName.equals("")) { interpreterCombo.select(interpreterCombo.indexOf(interpreterName)); + } + if (interpreterCombo.getSelectionIndex() < 0) { + // previous definition had been deleted + ((ILaunchConfigurationWorkingCopy) configuration).setAttribute( + PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, ""); + setErrorMessage(PHPDebugUiMessages + .getString("LaunchConfigurationTab.PHPEnvironment.interpreter_not_selected_error_message")); + } } 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(); + 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 + .getInstallLocation().toString(); } interpreterCombo.setItems(interpreterNames); - PHPInterpreter selectedInterpreter = PHPRuntime.getDefault().getSelectedInterpreter(); + PHPInterpreter selectedInterpreter = PHPRuntime.getDefault() + .getSelectedInterpreter(); if (selectedInterpreter != null) - interpreterCombo.select(interpreterCombo.indexOf(selectedInterpreter.getName())); + interpreterCombo.select(interpreterCombo + .indexOf(selectedInterpreter.getInstallLocation() + .toString())); } 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.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.REMOTE_DEBUG_TRANSLATE, + fRemoteDebugTranslate.getSelection()); + configuration.setAttribute(PHPLaunchConfigurationAttribute.FILE_MAP, + getMapFromPathMapTable()); + configuration.setAttribute(PHPLaunchConfigurationAttribute.REMOTE_PATH, + fRemoteSourcePath.getText()); + configuration.setAttribute( + PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_BROWSER, + fOpenDBGSessionInBrowserCheckBox.getSelection()); + configuration + .setAttribute( + PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_EXTERNAL_BROWSER, + fOpenDBGSessionInExternalBrowserCheckBox.getSelection()); } protected Composite createPageRoot(Composite parent) { @@ -571,7 +812,7 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { return composite; } - + private Map getMapFromPathMapTable() { TableItem[] items = fRemoteDebugPathMapTable.getItems(); if (items.length == 0) { @@ -583,29 +824,35 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { 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"); + 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; + if (launchConfig.getAttribute( + PHPLaunchConfigurationAttribute.SELECTED_INTERPRETER, "") + .equals("")) { + if (!launchConfig.getAttribute( + PHPLaunchConfigurationAttribute.REMOTE_DEBUG, false)) { + 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); } @@ -614,4 +861,63 @@ public class PHPEnvironmentTab extends AbstractLaunchConfigurationTab { return PHPUiImages.get(PHPUiImages.IMG_CTOOLS_PHP); } + private void makeupTargetFile() { + if (!fRemoteDebugCheckBox.getSelection() || originalFileName.equals("")) { + targetFile.setText(""); + return; + } + + // see net.sourceforge.phpdt.internal.debug.core.PHPDBGProxy.MapPath(PHPLineBreakpoint) + + IPath remoteSourcePath = new Path(fRemoteSourcePath.getText()); + IPath filename = new Path(originalFileName); + filename = remoteSourcePath.append(filename); + String path = filename.toOSString(); + Map pathmap = getMapFromPathMapTable(); + + if (pathmap != null) { + Iterator it = pathmap.keySet().iterator(); + while (it.hasNext()) { + String k = (String) it.next(); + if (path.startsWith(k)) { + path = pathmap.get(k) + path.substring(k.length()); + break; + } + } + } + + if (remoteSourcePath.isEmpty()) { + if (pathmap != null) { + Iterator it = pathmap.keySet().iterator(); + while (it.hasNext()) { + String local = (String) it.next(); + IPath remotePath = new Path((String) pathmap.get(local)); + IPath localPath = new Path(local); + if (localPath.isPrefixOf(filename)) { + IPath newpath = filename.removeFirstSegments(localPath + .matchingFirstSegments(filename)); + newpath = remotePath.append(newpath); + path = newpath.toString(); + if (path.substring(0, 1).equals("/")) { + path = path.replace('\\', '/'); + } else { + path = path.replace('/', '\\'); + } + break; + } + } + } + } else { + if (fRemoteDebugTranslate.getSelection()) { + if (remoteSourcePath.toString().substring(0, 1).equals("/")) { + path = path.replace('\\', '/'); + } else { + path = path.replace('/', '\\'); + } + } + } + + targetFile.setText(path); + } + } \ No newline at end of file