From: khartlage Date: Sun, 25 May 2003 15:15:04 +0000 (+0000) Subject: first version of external tools X-Git-Url: http://secure.phpeclipse.com first version of external tools --- diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/launchConfigurations/ExternalToolsMainTab.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/launchConfigurations/ExternalToolsMainTab.java index 7d2ae92..79cf430 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/launchConfigurations/ExternalToolsMainTab.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/externaltools/launchConfigurations/ExternalToolsMainTab.java @@ -17,6 +17,7 @@ import net.sourceforge.phpdt.externaltools.internal.registry.ExternalToolVariabl import net.sourceforge.phpdt.externaltools.model.IExternalToolConstants; import net.sourceforge.phpdt.externaltools.model.ToolUtil; import net.sourceforge.phpdt.externaltools.variable.ExpandVariableContext; +import net.sourceforge.phpeclipse.PHPeclipsePlugin; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; @@ -29,6 +30,7 @@ import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy; import org.eclipse.debug.ui.AbstractLaunchConfigurationTab; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; @@ -54,518 +56,515 @@ import org.eclipse.ui.dialogs.SelectionDialog; public class ExternalToolsMainTab extends AbstractLaunchConfigurationTab { - protected Combo locationField; - protected Text workDirectoryField; - protected Button fileLocationButton; - protected Button workspaceLocationButton; - protected Button fileWorkingDirectoryButton; - protected Button workspaceWorkingDirectoryButton; - - protected Button runBackgroundButton; - protected Text argumentField; - protected Button variableButton; - - protected SelectionAdapter selectionAdapter; - - protected ModifyListener modifyListener = new ModifyListener() { - public void modifyText(ModifyEvent e) { - updateLaunchConfigurationDialog(); - } - }; - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) - */ - public void createControl(Composite parent) { - Composite mainComposite = new Composite(parent, SWT.NONE); - setControl(mainComposite); - GridLayout layout = new GridLayout(); - layout.numColumns = 2; - GridData gridData = new GridData(GridData.FILL_HORIZONTAL); - mainComposite.setLayout(layout); - mainComposite.setLayoutData(gridData); - mainComposite.setFont(parent.getFont()); - createLocationComponent(mainComposite); - createWorkDirectoryComponent(mainComposite); - createArgumentComponent(mainComposite); - createVerticalSpacer(mainComposite, 2); - createRunBackgroundComponent(mainComposite); - } - - /** - * Creates the controls needed to edit the location - * attribute of an external tool - * - * @param parent the composite to create the controls in - */ - protected void createLocationComponent(Composite parent) { - Font font = parent.getFont(); - - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - layout.numColumns = 1; - GridData gridData = new GridData(GridData.FILL_HORIZONTAL); - composite.setLayout(layout); - composite.setLayoutData(gridData); - - Label label = new Label(composite, SWT.NONE); - label.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Location___2")); //$NON-NLS-1$ - label.setFont(font); - - locationField = new Combo(composite, SWT.DROP_DOWN | SWT.BORDER); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - locationField.setLayoutData(data); - locationField.setFont(font); - locationField.add("C:\\apache\\php\\php.exe", 0); - - Composite buttonComposite = new Composite(parent, SWT.NONE); - layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - layout.numColumns = 1; - gridData = new GridData(GridData.HORIZONTAL_ALIGN_END); - buttonComposite.setLayout(layout); - buttonComposite.setLayoutData(gridData); - buttonComposite.setFont(font); - - createVerticalSpacer(buttonComposite, 1); - - workspaceLocationButton= createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Browse_Workspace..._3"), null); //$NON-NLS-1$ - workspaceLocationButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent evt) { - handleWorkspaceLocationButtonSelected(); - } - }); - fileLocationButton= createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Brows&e_File_System..._4"), null); //$NON-NLS-1$ - fileLocationButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent evt) { - handleLocationButtonSelected(); - } - }); - } - - /** - * Creates the controls needed to edit the working directory - * attribute of an external tool - * - * @param parent the composite to create the controls in - */ - protected void createWorkDirectoryComponent(Composite parent) { - Font font = parent.getFont(); - - Composite composite = new Composite(parent, SWT.NONE); - GridLayout layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - layout.numColumns = 1; - GridData gridData = new GridData(GridData.FILL_HORIZONTAL); - composite.setLayout(layout); - composite.setLayoutData(gridData); - - Label label = new Label(composite, SWT.NONE); - label.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Working_&Directory__5")); //$NON-NLS-1$ - label.setFont(font); - - workDirectoryField = new Text(composite, SWT.BORDER); - GridData data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - workDirectoryField.setLayoutData(data); - workDirectoryField.setFont(font); - - Composite buttonComposite = new Composite(parent, SWT.NONE); - layout = new GridLayout(); - layout.marginWidth = 0; - layout.marginHeight = 0; - layout.numColumns = 1; - gridData = new GridData(GridData.HORIZONTAL_ALIGN_END); - buttonComposite.setLayout(layout); - buttonComposite.setLayoutData(gridData); - buttonComposite.setFont(font); - - createVerticalSpacer(buttonComposite, 1); - workspaceWorkingDirectoryButton= createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Browse_Wor&kspace..._6"), null); //$NON-NLS-1$ - workspaceWorkingDirectoryButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent evt) { - handleWorkspaceWorkingDirectoryButtonSelected(); - } - }); - fileWorkingDirectoryButton= createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Browse_F&ile_System..._7"), null); //$NON-NLS-1$ - fileWorkingDirectoryButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent evt) { - handleFileWorkingDirectoryButtonSelected(); - } - }); - } - - /** - * Creates the controls needed to edit the argument and - * prompt for argument attributes of an external tool - * - * @param parent the composite to create the controls in - */ - protected void createArgumentComponent(Composite parent) { - Font font = parent.getFont(); - - Label label = new Label(parent, SWT.NONE); - label.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.&Arguments___1")); //$NON-NLS-1$ - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - data.horizontalSpan = 2; - label.setLayoutData(data); - label.setFont(font); - - argumentField = new Text(parent, SWT.BORDER); - data = new GridData(GridData.FILL_HORIZONTAL); - data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; - argumentField.setLayoutData(data); - argumentField.setFont(font); - argumentField.addModifyListener(new ModifyListener() { - public void modifyText(ModifyEvent e) { - updateLaunchConfigurationDialog(); - } - }); - - variableButton= createPushButton(parent, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Varia&bles..._2"), null); //$NON-NLS-1$ - variableButton.addSelectionListener(new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - VariableSelectionDialog dialog= new VariableSelectionDialog(getShell()); - if (dialog.open() == SelectionDialog.OK) { - argumentField.insert(dialog.getForm().getSelectedVariable()); - } - } - }); - - Label instruction = new Label(parent, SWT.NONE); - instruction.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Note__Enclose_an_argument_containing_spaces_using_double-quotes_(__)._Not_applicable_for_variables._3")); //$NON-NLS-1$ - data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - data.horizontalSpan = 2; - instruction.setLayoutData(data); - instruction.setFont(font); - } - - /** - * Creates the controls needed to edit the run in background - * attribute of an external tool - * - * @param parent the composite to create the controls in - */ - protected void createRunBackgroundComponent(Composite parent) { - runBackgroundButton = new Button(parent, SWT.CHECK); - runBackgroundButton.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Run_tool_in_bac&kground_4")); //$NON-NLS-1$ - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - runBackgroundButton.setLayoutData(data); - runBackgroundButton.setFont(parent.getFont()); - runBackgroundButton.addSelectionListener(getSelectionAdapter()); - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { - configuration.setAttribute(IExternalToolConstants.ATTR_RUN_IN_BACKGROUND, false); - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) - */ - public void initializeFrom(ILaunchConfiguration configuration) { - updateLocation(configuration); - updateWorkingDirectory(configuration); - updateArgument(configuration); - updateRunBackground(configuration); - } - - protected void updateWorkingDirectory(ILaunchConfiguration configuration) { - String workingDir= ""; //$NON-NLS-1$ - try { - workingDir= configuration.getAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$ - } catch (CoreException ce) { - ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Error_reading_configuration_10"), ce); //$NON-NLS-1$ - } - workDirectoryField.setText(workingDir); - workDirectoryField.addModifyListener(modifyListener); - - } - - protected void updateLocation(ILaunchConfiguration configuration) { - String location= ""; //$NON-NLS-1$ - try { - location= configuration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$ - } catch (CoreException ce) { - ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Error_reading_configuration_10"), ce); //$NON-NLS-1$ - } - locationField.setText(location); - locationField.addModifyListener(modifyListener); - } - - protected void updateArgument(ILaunchConfiguration configuration) { - String arguments= ""; //$NON-NLS-1$ - try { - arguments= configuration.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, ""); //$NON-NLS-1$ - } catch (CoreException ce) { - ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Error_reading_configuration_7"), ce); //$NON-NLS-1$ - } - argumentField.setText(arguments); - } - - protected void updateRunBackground(ILaunchConfiguration configuration) { - boolean runInBackgroud= true; - try { - runInBackgroud= configuration.getAttribute(IExternalToolConstants.ATTR_RUN_IN_BACKGROUND, false); - } catch (CoreException ce) { - ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Error_reading_configuration_7"), ce); //$NON-NLS-1$ - } - runBackgroundButton.setSelection(runInBackgroud); - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) - */ - public void performApply(ILaunchConfigurationWorkingCopy configuration) { - String location= locationField.getText().trim(); - if (location.length() == 0) { - configuration.setAttribute(IExternalToolConstants.ATTR_LOCATION, (String)null); - } else { - configuration.setAttribute(IExternalToolConstants.ATTR_LOCATION, location); - } - - String workingDirectory= workDirectoryField.getText().trim(); - if (workingDirectory.length() == 0) { - configuration.setAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, (String)null); - } else { - configuration.setAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, workingDirectory); - } - - setAttribute(IExternalToolConstants.ATTR_RUN_IN_BACKGROUND, configuration, runBackgroundButton.getSelection(), false); - - String arguments= argumentField.getText().trim(); - if (arguments.length() == 0) { - configuration.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, (String)null); - } else { - configuration.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, arguments); - } - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() - */ - public String getName() { - return ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Main_17"); //$NON-NLS-1$ - } - - /** - * @see ILaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration) - */ - public boolean isValid(ILaunchConfiguration launchConfig) { - setErrorMessage(null); - setMessage(null); - return validateLocation() && validateWorkDirectory(); - } - - /** - * Validates the content of the location field. - */ - protected boolean validateLocation() { - String value = locationField.getText().trim(); - if (value.length() < 1) { - setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_location_cannot_be_empty_18")); //$NON-NLS-1$ - setMessage(null); - return false; - } - - // Translate field contents to the actual file location so we - // can check to ensure the file actually exists. - MultiStatus multiStatus = new MultiStatus(IExternalToolConstants.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ - value = ToolUtil.expandFileLocation(value, ExpandVariableContext.EMPTY_CONTEXT, multiStatus); - if (!multiStatus.isOK()) { - IStatus[] children = multiStatus.getChildren(); - if (children.length > 0) { - setErrorMessage(children[0].getMessage()); - setMessage(null); - } - return false; - } - - File file = new File(value); - if (!file.exists()) { // The file does not exist. - setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_location_does_not_exist_19")); //$NON-NLS-1$ - return false; - } - if (!file.isFile()) { - setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_location_specified_is_not_a_file_20")); //$NON-NLS-1$ - return false; - } - return true; - } - - /** - * Validates the content of the working directory field. - */ - protected boolean validateWorkDirectory() { - - String value = workDirectoryField.getText().trim(); - if (value.length() > 0) { - // Translate field contents to the actual directory location so we - // can check to ensure the directory actually exists. - MultiStatus multiStatus = new MultiStatus(IExternalToolConstants.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ - value = ToolUtil.expandDirectoryLocation(value, ExpandVariableContext.EMPTY_CONTEXT, multiStatus); - if (!multiStatus.isOK()) { - IStatus[] children = multiStatus.getChildren(); - if (children.length > 0) { - setErrorMessage(children[0].getMessage()); - } - return false; - } - - File file = new File(value); - if (!file.exists()) { // The directory does not exist. - setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_working_directory_does_not_exist_or_is_invalid_21")); //$NON-NLS-1$ - return false; - } - } - return true; - } - - protected void handleLocationButtonSelected() { - FileDialog fileDialog = new FileDialog(getShell(), SWT.NONE); - fileDialog.setFileName(locationField.getText()); - String text= fileDialog.open(); - if (text != null) { - locationField.setText(text); - } - } - - /** - * Prompts the user for a workspace location within the workspace and sets - * the location as a String containing the workspace_loc variable or - * null if no location was obtained from the user. - */ - protected void handleWorkspaceLocationButtonSelected() { - ResourceSelectionDialog dialog; - dialog = new ResourceSelectionDialog(getShell(), ResourcesPlugin.getWorkspace().getRoot(), ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Select_a_resource_22")); //$NON-NLS-1$ - dialog.open(); - Object[] results = dialog.getResult(); - if (results == null || results.length < 1) { - return; - } - IResource resource = (IResource)results[0]; - StringBuffer buf = new StringBuffer(); - ToolUtil.buildVariableTag(IExternalToolConstants.VAR_WORKSPACE_LOC, resource.getFullPath().toString(), buf); - String text= buf.toString(); - if (text != null) { - locationField.setText(text); - } - } - - /** - * Prompts the user for a working directory location within the workspace - * and sets the working directory as a String containing the workspace_loc - * variable or null if no location was obtained from the user. - */ - protected void handleWorkspaceWorkingDirectoryButtonSelected() { - ContainerSelectionDialog containerDialog; - containerDialog = new ContainerSelectionDialog( - getShell(), - ResourcesPlugin.getWorkspace().getRoot(), - false, - ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Select_a_directory__23")); //$NON-NLS-1$ - containerDialog.open(); - Object[] resource = containerDialog.getResult(); - String text= null; - if (resource != null && resource.length > 0) { - text= ToolUtil.buildVariableTag(IExternalToolConstants.VAR_RESOURCE_LOC, ((IPath)resource[0]).toString()); - } - if (text != null) { - workDirectoryField.setText(text); - } - } - - protected void handleFileWorkingDirectoryButtonSelected() { - DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE); - dialog.setMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Select_a_directory__23")); //$NON-NLS-1$ - dialog.setFilterPath(workDirectoryField.getText()); - String text= dialog.open(); - if (text != null) { - workDirectoryField.setText(text); - } - } - - /** - * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() - */ - public Image getImage() { - return ExternalToolsImages.getImage(IExternalToolConstants.IMG_TAB_MAIN); - } - - /** - * Method getSelectionAdapter. - * @return SelectionListener - */ - protected SelectionListener getSelectionAdapter() { - if (selectionAdapter == null) { - selectionAdapter= new SelectionAdapter() { - public void widgetSelected(SelectionEvent e) { - updateLaunchConfigurationDialog(); - } - }; - } - return selectionAdapter; - } - - private class VariableSelectionDialog extends SelectionDialog { - private ExternalToolVariableForm form; - private VariableSelectionDialog(Shell parent) { - super(parent); - setTitle(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Select_variable_10")); //$NON-NLS-1$ - } - protected Control createDialogArea(Composite parent) { - // Create the dialog area - Composite composite= (Composite)super.createDialogArea(parent); - ExternalToolVariable[] variables= ExternalToolsPlugin.getDefault().getArgumentVariableRegistry().getArgumentVariables(); - form= new ExternalToolVariableForm(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.&Choose_a_variable__11"), variables); //$NON-NLS-1$ - form.createContents(composite, new IGroupDialogPage() { - public GridData setButtonGridData(Button button) { - GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); - data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); - int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); - data.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); - button.setLayoutData(data); - return data; - } - - public void setMessage(String newMessage, int newType) { - VariableSelectionDialog.this.setMessage(newMessage); - } - - public void updateValidState() { - } - - public int convertHeightHint(int chars) { - return convertHeightInCharsToPixels(chars); - } - - public String getMessage() { - if (!form.isValid()) { - return ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Invalid_selection_12"); //$NON-NLS-1$ - } - return null; - } - - public int getMessageType() { - if (!form.isValid()) { - return IMessageProvider.ERROR; - } - return 0; - } - }); - return composite; - } - - private ExternalToolVariableForm getForm() { - return form; - } - } + protected Combo locationField; + protected Text workDirectoryField; + protected Button fileLocationButton; + protected Button workspaceLocationButton; + protected Button fileWorkingDirectoryButton; + protected Button workspaceWorkingDirectoryButton; + + protected Button runBackgroundButton; + protected Text argumentField; + protected Button variableButton; + + protected SelectionAdapter selectionAdapter; + + protected ModifyListener modifyListener = new ModifyListener() { + public void modifyText(ModifyEvent e) { + updateLaunchConfigurationDialog(); + } + }; + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse.swt.widgets.Composite) + */ + public void createControl(Composite parent) { + Composite mainComposite = new Composite(parent, SWT.NONE); + setControl(mainComposite); + GridLayout layout = new GridLayout(); + layout.numColumns = 2; + GridData gridData = new GridData(GridData.FILL_HORIZONTAL); + mainComposite.setLayout(layout); + mainComposite.setLayoutData(gridData); + mainComposite.setFont(parent.getFont()); + createLocationComponent(mainComposite); + createWorkDirectoryComponent(mainComposite); + createArgumentComponent(mainComposite); + createVerticalSpacer(mainComposite, 2); + createRunBackgroundComponent(mainComposite); + } + + /** + * Creates the controls needed to edit the location + * attribute of an external tool + * + * @param parent the composite to create the controls in + */ + protected void createLocationComponent(Composite parent) { + Font font = parent.getFont(); + + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 1; + GridData gridData = new GridData(GridData.FILL_HORIZONTAL); + composite.setLayout(layout); + composite.setLayoutData(gridData); + + Label label = new Label(composite, SWT.NONE); + label.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Location___2")); //$NON-NLS-1$ + label.setFont(font); + + final IPreferenceStore store = PHPeclipsePlugin.getDefault().getPreferenceStore(); + locationField = new Combo(composite, SWT.DROP_DOWN | SWT.BORDER); + GridData data = new GridData(GridData.FILL_HORIZONTAL); + data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; + locationField.setLayoutData(data); + locationField.setFont(font); + locationField.add( store.getString(PHPeclipsePlugin.PHP_RUN_PREF), 0); + + Composite buttonComposite = new Composite(parent, SWT.NONE); + layout = new GridLayout(); + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 1; + gridData = new GridData(GridData.HORIZONTAL_ALIGN_END); + buttonComposite.setLayout(layout); + buttonComposite.setLayoutData(gridData); + buttonComposite.setFont(font); + + createVerticalSpacer(buttonComposite, 1); + + workspaceLocationButton = createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Browse_Workspace..._3"), null); //$NON-NLS-1$ + workspaceLocationButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent evt) { + handleWorkspaceLocationButtonSelected(); + } + }); + fileLocationButton = createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Brows&e_File_System..._4"), null); //$NON-NLS-1$ + fileLocationButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent evt) { + handleLocationButtonSelected(); + } + }); + } + + /** + * Creates the controls needed to edit the working directory + * attribute of an external tool + * + * @param parent the composite to create the controls in + */ + protected void createWorkDirectoryComponent(Composite parent) { + Font font = parent.getFont(); + + Composite composite = new Composite(parent, SWT.NONE); + GridLayout layout = new GridLayout(); + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 1; + GridData gridData = new GridData(GridData.FILL_HORIZONTAL); + composite.setLayout(layout); + composite.setLayoutData(gridData); + + Label label = new Label(composite, SWT.NONE); + label.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Working_&Directory__5")); //$NON-NLS-1$ + label.setFont(font); + + workDirectoryField = new Text(composite, SWT.BORDER); + GridData data = new GridData(GridData.FILL_HORIZONTAL); + data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; + workDirectoryField.setLayoutData(data); + workDirectoryField.setFont(font); + + Composite buttonComposite = new Composite(parent, SWT.NONE); + layout = new GridLayout(); + layout.marginWidth = 0; + layout.marginHeight = 0; + layout.numColumns = 1; + gridData = new GridData(GridData.HORIZONTAL_ALIGN_END); + buttonComposite.setLayout(layout); + buttonComposite.setLayoutData(gridData); + buttonComposite.setFont(font); + + createVerticalSpacer(buttonComposite, 1); + workspaceWorkingDirectoryButton = createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Browse_Wor&kspace..._6"), null); //$NON-NLS-1$ + workspaceWorkingDirectoryButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent evt) { + handleWorkspaceWorkingDirectoryButtonSelected(); + } + }); + fileWorkingDirectoryButton = createPushButton(buttonComposite, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Browse_F&ile_System..._7"), null); //$NON-NLS-1$ + fileWorkingDirectoryButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent evt) { + handleFileWorkingDirectoryButtonSelected(); + } + }); + } + + /** + * Creates the controls needed to edit the argument and + * prompt for argument attributes of an external tool + * + * @param parent the composite to create the controls in + */ + protected void createArgumentComponent(Composite parent) { + Font font = parent.getFont(); + + Label label = new Label(parent, SWT.NONE); + label.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.&Arguments___1")); //$NON-NLS-1$ + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.horizontalSpan = 2; + label.setLayoutData(data); + label.setFont(font); + + argumentField = new Text(parent, SWT.BORDER); + data = new GridData(GridData.FILL_HORIZONTAL); + data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; + argumentField.setLayoutData(data); + argumentField.setFont(font); + argumentField.addModifyListener(new ModifyListener() { + public void modifyText(ModifyEvent e) { + updateLaunchConfigurationDialog(); + } + }); + + variableButton = createPushButton(parent, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Varia&bles..._2"), null); //$NON-NLS-1$ + variableButton.addSelectionListener(new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + VariableSelectionDialog dialog = new VariableSelectionDialog(getShell()); + if (dialog.open() == SelectionDialog.OK) { + argumentField.insert(dialog.getForm().getSelectedVariable()); + } + } + }); + + Label instruction = new Label(parent, SWT.NONE); + instruction.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Note__Enclose_an_argument_containing_spaces_using_double-quotes_(__)._Not_applicable_for_variables._3")); //$NON-NLS-1$ + data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.horizontalSpan = 2; + instruction.setLayoutData(data); + instruction.setFont(font); + } + + /** + * Creates the controls needed to edit the run in background + * attribute of an external tool + * + * @param parent the composite to create the controls in + */ + protected void createRunBackgroundComponent(Composite parent) { + runBackgroundButton = new Button(parent, SWT.CHECK); + runBackgroundButton.setText(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Run_tool_in_bac&kground_4")); //$NON-NLS-1$ + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + runBackgroundButton.setLayoutData(data); + runBackgroundButton.setFont(parent.getFont()); + runBackgroundButton.addSelectionListener(getSelectionAdapter()); + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void setDefaults(ILaunchConfigurationWorkingCopy configuration) { + configuration.setAttribute(IExternalToolConstants.ATTR_RUN_IN_BACKGROUND, false); + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse.debug.core.ILaunchConfiguration) + */ + public void initializeFrom(ILaunchConfiguration configuration) { + updateLocation(configuration); + updateWorkingDirectory(configuration); + updateArgument(configuration); + updateRunBackground(configuration); + } + + protected void updateWorkingDirectory(ILaunchConfiguration configuration) { + String workingDir = ""; //$NON-NLS-1$ + try { + workingDir = configuration.getAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, ""); //$NON-NLS-1$ + } catch (CoreException ce) { + ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Error_reading_configuration_10"), ce); //$NON-NLS-1$ + } + workDirectoryField.setText(workingDir); + workDirectoryField.addModifyListener(modifyListener); + + } + + protected void updateLocation(ILaunchConfiguration configuration) { + String location = ""; //$NON-NLS-1$ + try { + location = configuration.getAttribute(IExternalToolConstants.ATTR_LOCATION, ""); //$NON-NLS-1$ + } catch (CoreException ce) { + ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Error_reading_configuration_10"), ce); //$NON-NLS-1$ + } + locationField.setText(location); + locationField.addModifyListener(modifyListener); + } + + protected void updateArgument(ILaunchConfiguration configuration) { + String arguments = ""; //$NON-NLS-1$ + try { + arguments = configuration.getAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, ""); //$NON-NLS-1$ + } catch (CoreException ce) { + ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Error_reading_configuration_7"), ce); //$NON-NLS-1$ + } + argumentField.setText(arguments); + } + + protected void updateRunBackground(ILaunchConfiguration configuration) { + boolean runInBackgroud = true; + try { + runInBackgroud = configuration.getAttribute(IExternalToolConstants.ATTR_RUN_IN_BACKGROUND, false); + } catch (CoreException ce) { + ExternalToolsPlugin.getDefault().log(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Error_reading_configuration_7"), ce); //$NON-NLS-1$ + } + runBackgroundButton.setSelection(runInBackgroud); + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse.debug.core.ILaunchConfigurationWorkingCopy) + */ + public void performApply(ILaunchConfigurationWorkingCopy configuration) { + String location = locationField.getText().trim(); + if (location.length() == 0) { + configuration.setAttribute(IExternalToolConstants.ATTR_LOCATION, (String) null); + } else { + configuration.setAttribute(IExternalToolConstants.ATTR_LOCATION, location); + } + + String workingDirectory = workDirectoryField.getText().trim(); + if (workingDirectory.length() == 0) { + configuration.setAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, (String) null); + } else { + configuration.setAttribute(IExternalToolConstants.ATTR_WORKING_DIRECTORY, workingDirectory); + } + + setAttribute(IExternalToolConstants.ATTR_RUN_IN_BACKGROUND, configuration, runBackgroundButton.getSelection(), false); + + String arguments = argumentField.getText().trim(); + if (arguments.length() == 0) { + configuration.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, (String) null); + } else { + configuration.setAttribute(IExternalToolConstants.ATTR_TOOL_ARGUMENTS, arguments); + } + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName() + */ + public String getName() { + return ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Main_17"); //$NON-NLS-1$ + } + + /** + * @see ILaunchConfigurationTab#isValid(org.eclipse.debug.core.ILaunchConfiguration) + */ + public boolean isValid(ILaunchConfiguration launchConfig) { + setErrorMessage(null); + setMessage(null); + return validateLocation() && validateWorkDirectory(); + } + + /** + * Validates the content of the location field. + */ + protected boolean validateLocation() { + String value = locationField.getText().trim(); + if (value.length() < 1) { + setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_location_cannot_be_empty_18")); //$NON-NLS-1$ + setMessage(null); + return false; + } + + // Translate field contents to the actual file location so we + // can check to ensure the file actually exists. + MultiStatus multiStatus = new MultiStatus(IExternalToolConstants.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ + value = ToolUtil.expandFileLocation(value, ExpandVariableContext.EMPTY_CONTEXT, multiStatus); + if (!multiStatus.isOK()) { + IStatus[] children = multiStatus.getChildren(); + if (children.length > 0) { + setErrorMessage(children[0].getMessage()); + setMessage(null); + } + return false; + } + + File file = new File(value); + if (!file.exists()) { // The file does not exist. + setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_location_does_not_exist_19")); //$NON-NLS-1$ + return false; + } + if (!file.isFile()) { + setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_location_specified_is_not_a_file_20")); //$NON-NLS-1$ + return false; + } + return true; + } + + /** + * Validates the content of the working directory field. + */ + protected boolean validateWorkDirectory() { + + String value = workDirectoryField.getText().trim(); + if (value.length() > 0) { + // Translate field contents to the actual directory location so we + // can check to ensure the directory actually exists. + MultiStatus multiStatus = new MultiStatus(IExternalToolConstants.PLUGIN_ID, 0, "", null); //$NON-NLS-1$ + value = ToolUtil.expandDirectoryLocation(value, ExpandVariableContext.EMPTY_CONTEXT, multiStatus); + if (!multiStatus.isOK()) { + IStatus[] children = multiStatus.getChildren(); + if (children.length > 0) { + setErrorMessage(children[0].getMessage()); + } + return false; + } + + File file = new File(value); + if (!file.exists()) { // The directory does not exist. + setErrorMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.External_tool_working_directory_does_not_exist_or_is_invalid_21")); //$NON-NLS-1$ + return false; + } + } + return true; + } + + protected void handleLocationButtonSelected() { + FileDialog fileDialog = new FileDialog(getShell(), SWT.NONE); + fileDialog.setFileName(locationField.getText()); + String text = fileDialog.open(); + if (text != null) { + locationField.setText(text); + } + } + + /** + * Prompts the user for a workspace location within the workspace and sets + * the location as a String containing the workspace_loc variable or + * null if no location was obtained from the user. + */ + protected void handleWorkspaceLocationButtonSelected() { + ResourceSelectionDialog dialog; + dialog = new ResourceSelectionDialog(getShell(), ResourcesPlugin.getWorkspace().getRoot(), ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.Select_a_resource_22")); //$NON-NLS-1$ + dialog.open(); + Object[] results = dialog.getResult(); + if (results == null || results.length < 1) { + return; + } + IResource resource = (IResource) results[0]; + StringBuffer buf = new StringBuffer(); + ToolUtil.buildVariableTag(IExternalToolConstants.VAR_WORKSPACE_LOC, resource.getFullPath().toString(), buf); + String text = buf.toString(); + if (text != null) { + locationField.setText(text); + } + } + + /** + * Prompts the user for a working directory location within the workspace + * and sets the working directory as a String containing the workspace_loc + * variable or null if no location was obtained from the user. + */ + protected void handleWorkspaceWorkingDirectoryButtonSelected() { + ContainerSelectionDialog containerDialog; + containerDialog = new ContainerSelectionDialog(getShell(), ResourcesPlugin.getWorkspace().getRoot(), false, ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Select_a_directory__23")); //$NON-NLS-1$ + containerDialog.open(); + Object[] resource = containerDialog.getResult(); + String text = null; + if (resource != null && resource.length > 0) { + text = ToolUtil.buildVariableTag(IExternalToolConstants.VAR_RESOURCE_LOC, ((IPath) resource[0]).toString()); + } + if (text != null) { + workDirectoryField.setText(text); + } + } + + protected void handleFileWorkingDirectoryButtonSelected() { + DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE); + dialog.setMessage(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsMainTab.&Select_a_directory__23")); //$NON-NLS-1$ + dialog.setFilterPath(workDirectoryField.getText()); + String text = dialog.open(); + if (text != null) { + workDirectoryField.setText(text); + } + } + + /** + * @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage() + */ + public Image getImage() { + return ExternalToolsImages.getImage(IExternalToolConstants.IMG_TAB_MAIN); + } + + /** + * Method getSelectionAdapter. + * @return SelectionListener + */ + protected SelectionListener getSelectionAdapter() { + if (selectionAdapter == null) { + selectionAdapter = new SelectionAdapter() { + public void widgetSelected(SelectionEvent e) { + updateLaunchConfigurationDialog(); + } + }; + } + return selectionAdapter; + } + + private class VariableSelectionDialog extends SelectionDialog { + private ExternalToolVariableForm form; + private VariableSelectionDialog(Shell parent) { + super(parent); + setTitle(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Select_variable_10")); //$NON-NLS-1$ + } + protected Control createDialogArea(Composite parent) { + // Create the dialog area + Composite composite = (Composite) super.createDialogArea(parent); + ExternalToolVariable[] variables = ExternalToolsPlugin.getDefault().getArgumentVariableRegistry().getArgumentVariables(); + form = new ExternalToolVariableForm(ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.&Choose_a_variable__11"), variables); //$NON-NLS-1$ + form.createContents(composite, new IGroupDialogPage() { + public GridData setButtonGridData(Button button) { + GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); + data.heightHint = convertVerticalDLUsToPixels(IDialogConstants.BUTTON_HEIGHT); + int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); + data.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); + button.setLayoutData(data); + return data; + } + + public void setMessage(String newMessage, int newType) { + VariableSelectionDialog.this.setMessage(newMessage); + } + + public void updateValidState() { + } + + public int convertHeightHint(int chars) { + return convertHeightInCharsToPixels(chars); + } + + public String getMessage() { + if (!form.isValid()) { + return ExternalToolsLaunchConfigurationMessages.getString("ExternalToolsOptionTab.Invalid_selection_12"); //$NON-NLS-1$ + } + return null; + } + + public int getMessageType() { + if (!form.isValid()) { + return IMessageProvider.ERROR; + } + return 0; + } + }); + return composite; + } + + private ExternalToolVariableForm getForm() { + return form; + } + } }