X-Git-Url: http://git.phpeclipse.com

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..1351b55 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,517 @@ 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
-	 * <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);
+
+    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;
+    }
+  }
 
 }