package net.sourceforge.phpeclipse.xdebug.ui.php.launching; import net.sourceforge.phpeclipse.xdebug.php.launching.IXDebugConstants; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.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.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class XDebugTab extends AbstractLaunchConfigurationTab { private Label fPortLabel; private Button fUseDefaultPortButton; private Text fPortText; public XDebugTab() { super(); } public void createControl(Composite parent) { Font font = parent.getFont(); Composite comp = new Composite(parent, SWT.NONE); setControl(comp); // PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IJavaDebugHelpContextIds.LAUNCH_CONFIGURATION_DIALOG_MAIN_TAB); GridLayout topLayout = new GridLayout(); topLayout.verticalSpacing = 0; comp.setLayout(topLayout); comp.setFont(font); createDebugPortEditor(comp); } private void createDebugPortEditor(Composite parent) { Font font= parent.getFont(); Group debugGroup= new Group(parent, SWT.NONE); debugGroup.setText("Debug: "); GridData gd = new GridData(GridData.FILL_HORIZONTAL); debugGroup.setLayoutData(gd); GridLayout layout = new GridLayout(); layout.numColumns = 2; debugGroup.setLayout(layout); debugGroup.setFont(font); fPortLabel = new Label(debugGroup, SWT.NONE); fPortLabel.setText("&DebugPort:"); // gd = new GridData(GridData.BEGINNING); // fPortLabel.setLayoutData(gd); fPortLabel.setFont(font); fPortText = new Text(debugGroup, SWT.SINGLE | SWT.BORDER); gd= new GridData(GridData.FILL_HORIZONTAL); fPortText.setLayoutData(gd); fPortText.setFont(font); fPortText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent evt) { updateLaunchConfigurationDialog(); } }); fUseDefaultPortButton = new Button(debugGroup,SWT.CHECK); fUseDefaultPortButton.setText("Use default interpreter"); gd = new GridData(GridData.FILL_HORIZONTAL); fUseDefaultPortButton.setLayoutData(gd); fUseDefaultPortButton.setFont(font); fUseDefaultPortButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { handleDefaultSellected(event); } }); } /** * Set the appropriate enabled state for the appletviewqer text widget. */ protected void setDebugportEnabledState() { if (isDefaultInterpreter()) { fPortText.setEnabled(false); fPortLabel.setEnabled(false); } else { fPortText.setEnabled(true); fPortLabel.setEnabled(true); } } /** * Returns whether the default appletviewer is to be used */ protected boolean isDefaultInterpreter() { return fUseDefaultPortButton.getSelection(); } protected void handleDefaultSellected(SelectionEvent event) { setDebugportEnabledState(); updateLaunchConfigurationDialog(); } public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { // TODO Auto-generated method stub } public void initializeFrom(ILaunchConfiguration configuration) { try { String portText=""+configuration.getAttribute(IXDebugConstants.ATTR_PHP_DEBUGPORT, 9000); fPortText.setText(portText); boolean selection=configuration.getAttribute(IXDebugConstants.ATTR_PHP_DEFAULT_DEBUGPORT, true); fUseDefaultPortButton.setSelection(selection); setDebugportEnabledState(); } catch (CoreException e) { setErrorMessage(e.getMessage()); } } public void performApply(ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(IXDebugConstants.ATTR_PHP_DEFAULT_DEBUGPORT, this.fUseDefaultPortButton.getSelection()); try { configuration.setAttribute(IXDebugConstants.ATTR_PHP_DEBUGPORT, Integer.parseInt(this.fPortText.getText().trim())); } catch (NumberFormatException nfe) { } } /* (non-Javadoc) * @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration) */ public boolean isValid(ILaunchConfiguration launchConfig) { setErrorMessage(null); try { Integer.parseInt(fPortText.getText().trim()); } catch(NumberFormatException nfe) { setErrorMessage("Debugport is not a valid integer"); return false; } return true; } public String getName() { return "XDebug"; } }