package net.sourceforge.phpdt.internal.debug.ui.launcher; import net.sourceforge.phpdt.debug.ui.PHPDebugUiConstants; import net.sourceforge.phpdt.debug.ui.PHPDebugUiImages; import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiMessages; import net.sourceforge.phpdt.internal.debug.ui.PHPDebugUiPlugin; import net.sourceforge.phpdt.internal.launching.PHPLaunchConfigurationAttribute; import net.sourceforge.phpdt.internal.ui.util.DirectorySelector; 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.Image; 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.Label; import org.eclipse.swt.widgets.Text; public class PHPArgumentsTab extends AbstractLaunchConfigurationTab { protected Text interpreterArgsText, programArgsText; protected DirectorySelector workingDirectorySelector; protected Button useDefaultWorkingDirectoryButton; public PHPArgumentsTab() { super(); } public void createControl(Composite parent) { Composite composite = createPageRoot(parent); new Label(composite, SWT.NONE).setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPArguments.working_dir")); workingDirectorySelector = new DirectorySelector(composite); workingDirectorySelector.setBrowseDialogMessage(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPArguments.working_dir_browser_message")); workingDirectorySelector.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); workingDirectorySelector.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateLaunchConfigurationDialog(); } }); Composite defaultWorkingDirectoryComposite = new Composite(composite, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; defaultWorkingDirectoryComposite.setLayout(layout); useDefaultWorkingDirectoryButton = new Button(defaultWorkingDirectoryComposite, SWT.CHECK); useDefaultWorkingDirectoryButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setUseDefaultWorkingDirectory(((Button) e.getSource()).getSelection()); } }); new Label(defaultWorkingDirectoryComposite, SWT.NONE).setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPArguments.working_dir_use_default_message")); defaultWorkingDirectoryComposite.pack(); new Label(composite, SWT.NONE).setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPArguments.interpreter_args_box_title")); interpreterArgsText = new Text(composite, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); interpreterArgsText.setLayoutData(new GridData(GridData.FILL_BOTH)); new Label(composite, SWT.NONE).setText(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPArguments.program_args_box_title")); programArgsText = new Text(composite, SWT.MULTI | SWT.V_SCROLL | SWT.BORDER); programArgsText.setLayoutData(new GridData(GridData.FILL_BOTH)); } protected void setUseDefaultWorkingDirectory(boolean useDefault) { if (!useDefaultWorkingDirectoryButton.getSelection() == useDefault) useDefaultWorkingDirectoryButton.setSelection(useDefault); if (useDefault) workingDirectorySelector.setSelectionText(PHPDebugUiConstants.DEFAULT_WORKING_DIRECTORY); workingDirectorySelector.setEnabled(!useDefault); } public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(PHPLaunchConfigurationAttribute.WORKING_DIRECTORY, PHPDebugUiConstants.DEFAULT_WORKING_DIRECTORY); // set hidden attribute configuration.setAttribute(ILaunchConfiguration.ATTR_SOURCE_LOCATOR_ID, "net.sourceforge.phpdt.debug.ui.PHPSourceLocator") ; } public void initializeFrom(ILaunchConfiguration configuration) { String workingDirectory = "", interpreterArgs = "", programArgs = ""; boolean useDefaultWorkDir = true; try { workingDirectory = configuration.getAttribute(PHPLaunchConfigurationAttribute.WORKING_DIRECTORY, ""); interpreterArgs = configuration.getAttribute(PHPLaunchConfigurationAttribute.INTERPRETER_ARGUMENTS, ""); programArgs = configuration.getAttribute(PHPLaunchConfigurationAttribute.PROGRAM_ARGUMENTS, ""); useDefaultWorkDir = configuration.getAttribute(PHPLaunchConfigurationAttribute.USE_DEFAULT_WORKING_DIRECTORY, true); } catch (CoreException e) { log(e); } workingDirectorySelector.setSelectionText(workingDirectory); interpreterArgsText.setText(interpreterArgs); programArgsText.setText(programArgs); setUseDefaultWorkingDirectory(useDefaultWorkDir); } public void performApply(ILaunchConfigurationWorkingCopy configuration) { configuration.setAttribute(PHPLaunchConfigurationAttribute.WORKING_DIRECTORY, workingDirectorySelector.getValidatedSelectionText()); configuration.setAttribute(PHPLaunchConfigurationAttribute.INTERPRETER_ARGUMENTS, interpreterArgsText.getText()); configuration.setAttribute(PHPLaunchConfigurationAttribute.PROGRAM_ARGUMENTS, programArgsText.getText()); configuration.setAttribute(PHPLaunchConfigurationAttribute.USE_DEFAULT_WORKING_DIRECTORY, useDefaultWorkingDirectoryButton.getSelection()); } protected Composite createPageRoot(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout compositeLayout = new GridLayout(); compositeLayout.marginWidth = 0; compositeLayout.numColumns = 1; composite.setLayout(compositeLayout); setControl(composite); return composite; } public String getName() { return PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPArguments.name"); } public boolean isValid(ILaunchConfiguration launchConfig) { try { String workingDirectory = launchConfig.getAttribute(PHPLaunchConfigurationAttribute.WORKING_DIRECTORY, ""); if (workingDirectory.length() == 0) { setErrorMessage(PHPDebugUiMessages.getString("LaunchConfigurationTab.PHPArguments.working_dir_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 PHPDebugUiImages.get(PHPDebugUiImages.IMG_EVIEW_ARGUMENTS_TAB); } }