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;
protected Button fOpenDBGSessionInBrowserCheckBox;
+ protected Button fOpenDBGSessionInExternalBrowserCheckBox;
+
protected Button fPathMapRemoveButton;
protected Button fPathMapAddButton;
protected TabFolder tabFolder;
+ private Text targetFile;
+
+ private String originalFileName = "";
+
private class RemoteDebugTabListener extends SelectionAdapter implements
ModifyListener {
*/
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
+ makeupTargetFile();
}
/*
setRemoteTabEnableState();
} else if (source == fRemoteDebugTranslate) {
setRemoteTabEnableState();
+ } else if (source == fOpenDBGSessionInBrowserCheckBox) {
+ setRemoteTabEnableState();
} else {
updateLaunchConfigurationDialog();
- ;
}
-
+ makeupTargetFile();
}
}
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"),
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
fRemoteSourcePath.setLayoutData(gd);
fRemoteSourcePath.addModifyListener(fListener);
+ // 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);
fPathMapRemoveButton.setEnabled(false);
fPathMapAddButton.setEnabled(false);
fOpenDBGSessionInBrowserCheckBox.setEnabled(false);
+ fOpenDBGSessionInExternalBrowserCheckBox.setEnabled(false);
} else {
setPathMapButtonsEnableState();
}
//
if (fRemoteDebugCheckBox.getSelection()) {
fOpenDBGSessionInBrowserCheckBox.setEnabled(true);
+ fOpenDBGSessionInExternalBrowserCheckBox
+ .setEnabled(fOpenDBGSessionInBrowserCheckBox.getSelection());
fRemoteDebugTranslate.setEnabled(true);
int selectCount = this.fRemoteDebugPathMapTable
.getSelectionIndices().length;
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));
}
}
} catch (CoreException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
+ log(e);
}
}
} catch (CoreException ce) {
fRemoteDebugCheckBox.setSelection(DEFAULT_REMOTE_DEBUG);
}
+ tabFolder.setSelection(fRemoteDebugCheckBox.getSelection() ? 0 : 1);
try {
fRemoteDebugTranslate.setSelection(configuration.getAttribute(
PHPLaunchConfigurationAttribute.REMOTE_DEBUG_TRANSLATE,
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, ""));
updatePathMapFromConfig(configuration);
+ try {
+ originalFileName = configuration.getAttribute(
+ PHPLaunchConfigurationAttribute.FILE_NAME, "");
+ makeupTargetFile();
+ } catch (CoreException ce) {
+ originalFileName = "";
+ }
+
}
private void updatePathMapFromConfig(ILaunchConfiguration config) {
} 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) {
configuration.setAttribute(
PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_BROWSER,
fOpenDBGSessionInBrowserCheckBox.getSelection());
+ configuration
+ .setAttribute(
+ PHPLaunchConfigurationAttribute.OPEN_DBGSESSION_IN_EXTERNAL_BROWSER,
+ fOpenDBGSessionInExternalBrowserCheckBox.getSelection());
}
protected Composite createPageRoot(Composite parent) {
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);
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