package org.nodeclipse.debug.launch;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.Path;
import org.eclipse.debug.core.ILaunchConfiguration;
import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
import org.eclipse.debug.internal.ui.stringsubstitution.SelectedResourceManager;
import org.eclipse.debug.ui.AbstractLaunchConfigurationTab;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.dialogs.ResourceListSelectionDialog;
import org.nodeclipse.debug.Activator;
import org.nodeclipse.debug.util.Constants;
public class LaunchConfigurationMainTab extends AbstractLaunchConfigurationTab {
public static final String MAIN_TAB_NAME = "Main";
private Text fileText;
private Button fileButton;
/**
* @wbp.parser.entryPoint (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#createControl(org.eclipse
* .swt.widgets.Composite)
**/
public void createControl(Composite parent) {
Font font = parent.getFont();
Composite comp = createComposite(parent, font, 1, 1, GridData.FILL_BOTH);
createFileGroup(comp);
setControl(comp);
}
private void createFileGroup(Composite parent) {
Group fileGroup = new Group(parent, SWT.NONE);
fileGroup.setText(Constants.FILE_LABEL);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
fileGroup.setLayoutData(gd);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
fileGroup.setLayout(layout);
fileGroup.setFont(parent.getFont());
fileText = new Text(fileGroup, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
fileText.setLayoutData(gd);
fileText.setFont(parent.getFont());
fileText.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
updateLaunchConfigurationDialog();
}
});
fileButton = createPushButton(fileGroup, Constants.SEARCH_LABEL, null); //$NON-NLS-1$
gd = new GridData(GridData.FILL_HORIZONTAL);
fileButton.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
browseFiles();
}
});
}
/***
* Open a resource chooser to select a file
**/
protected void browseFiles() {
IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
ResourceListSelectionDialog dialog = new ResourceListSelectionDialog(getShell(), root, IResource.FILE);
dialog.setTitle(Constants.SEARCH_TITLE);
if (dialog.open() == Window.OK) {
Object[] files = dialog.getResult();
IFile file = (IFile) files[0];
fileText.setText(file.getFullPath().toString());
}
}
/**
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#setDefaults(org.eclipse.
* debug.core.ILaunchConfigurationWorkingCopy)
**/
public void setDefaults(ILaunchConfigurationWorkingCopy configuration) {
}
/**
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#initializeFrom(org.eclipse
* .debug.core.ILaunchConfiguration)
**/
public void initializeFrom(ILaunchConfiguration configuration) {
try {
String path = null;
path = configuration.getAttribute(Constants.KEY_FILE_PATH, Constants.BLANK_STRING);
if (path != null) {
fileText.setText(path);
}
} catch (CoreException e) {
setErrorMessage(e.getMessage());
}
}
/**
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#performApply(org.eclipse
* .debug.core.ILaunchConfigurationWorkingCopy)
**/
public void performApply(ILaunchConfigurationWorkingCopy configuration) {
String file = fileText.getText().trim();
if (file.length() == 0) {
file = null;
}
configuration.setAttribute(Constants.KEY_FILE_PATH, file);
}
/**
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#isValid(org.eclipse.debug
* .core.ILaunchConfiguration)
**/
public boolean isValid(ILaunchConfiguration launchConfig) {
setErrorMessage(null);
setMessage(null);
String text = fileText.getText();
if (text.length() > 0) {
IPath path = new Path(text);
if (ResourcesPlugin.getWorkspace().getRoot().findMember(path) == null) {
setErrorMessage("Specified file does not exist");
return false;
}
} else {
setMessage("Specify an file");
}
return true;
}
public Composite createComposite(Composite parent, Font font, int columns, int hspan, int fill) {
Composite g = new Composite(parent, SWT.NONE);
g.setLayout(new GridLayout(columns, false));
g.setFont(font);
GridData gd = new GridData(fill);
gd.horizontalSpan = hspan;
g.setLayoutData(gd);
return g;
}
/**
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#getImage()
**/
public Image getImage() {
return Activator.getImageDescriptor(Constants.NODE_ICON).createImage();
}
/**
* (non-Javadoc)
*
* @see org.eclipse.debug.ui.ILaunchConfigurationTab#getName()
**/
public String getName() {
return MAIN_TAB_NAME;
}
}