package net.sourceforge.phpdt.externaltools.launchConfigurations;
-/**********************************************************************
-Copyright (c) 2000, 2002 IBM Corp. All rights reserved.
-This file is made available under the terms of the Common Public License v1.0
-which accompanies this distribution, and is available at
-http://www.eclipse.org/legal/cpl-v10.html
-**********************************************************************/
+/***********************************************************************************************************************************
+ * Copyright (c) 2000, 2002 IBM Corp. All rights reserved. This file is made available under the terms of the Common Public License
+ * v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/cpl-v10.html
+ **********************************************************************************************************************************/
import java.io.File;
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;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
+import org.eclipse.debug.ui.ILaunchConfigurationTab;
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;
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
- * <code>null</code> 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 <code>null</code> 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);
+ locationField.add(store.getString(PHPeclipsePlugin.APACHE_RUN_PREF), 1);
+ locationField.add(store.getString(PHPeclipsePlugin.MYSQL_RUN_PREF), 2);
+ locationField.add(store.getString(PHPeclipsePlugin.XAMPP_START_PREF), 3);
+ locationField.add(store.getString(PHPeclipsePlugin.XAMPP_STOP_PREF), 4);
+ 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 <code>null</code> 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 <code>null</code> 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;
+ }
+ }
+
+}
\ No newline at end of file