blob: dd3ba21998d4aef30a2cd87b8e4828042b89479d [file] [log] [blame]
package org.eclipse.debug.internal.ui;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.debug.core.ILauncher;
import org.eclipse.debug.ui.IDebugUIConstants;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPreferencePage;
import org.eclipse.ui.dialogs.PropertyPage;
/**
* A preference page to enable/disable default launchers for a resource.
*/
public class LauncherPropertyPage extends PropertyPage implements IWorkbenchPreferencePage {
protected Combo fCombo;
/**
* Utility method that creates a combo instance
* and sets the default layout data.
*/
private Combo createCombo(Composite parent, String[] items) {
Combo combo= new Combo(parent, SWT.READ_ONLY | SWT.DROP_DOWN);
combo.setItems(items);
GridData data= new GridData();
data.horizontalAlignment= GridData.HORIZONTAL_ALIGN_BEGINNING;
combo.setLayoutData(data);
return combo;
}
/**
* Creates composite control and sets the default layout data.
*/
private Composite createComposite(Composite parent, int numColumns) {
Composite composite= new Composite(parent, SWT.NULL);
//GridLayout
GridLayout layout= new GridLayout();
layout.numColumns= numColumns;
composite.setLayout(layout);
//GridData
GridData data= new GridData();
data.verticalAlignment= GridData.FILL;
data.horizontalAlignment= GridData.FILL;
composite.setLayoutData(data);
return composite;
}
protected Control createContents(Composite parent){
return null;
}
/**
* Creates preference page controls on demand.
*/
public void createControl(Composite parent) {
if (!getProject().isOpen()) {
createForClosedProject(parent);
return;
}
// Table to choose which tags are shown in the outliner
Composite pageComponent= createComposite(parent, 1);
createLabel(pageComponent, DebugUIMessages.getString("LauncherPropertyPage.Select_default_launcher_1")); //$NON-NLS-1$
ImageRegistry registry= DebugUIPlugin.getDefault().getImageRegistry();
ILauncher[] launchers= getLaunchManager().getLaunchers();
List list = new ArrayList(1);
list.add(DebugUIMessages.getString("LauncherPropertyPage.none_2")); //$NON-NLS-1$
for (int i = 0; i < launchers.length; i++) {
if (DebugUIPlugin.getDefault().isVisible(launchers[i]))
list.add(launchers[i].getLabel());
}
String[] items= new String[list.size()];
list.toArray(items);
Composite launcherComponent= createComposite(pageComponent, 2);
createLabel(launcherComponent, DebugUIMessages.getString("LauncherPropertyPage.Run/Debug_3"), registry.get(IDebugUIConstants.IMG_ACT_DEBUG)); //$NON-NLS-1$
fCombo= createCombo(launcherComponent, items);
initializeValues();
setControl(pageComponent);
}
private void createForClosedProject(Composite parent) {
Label label= new Label(parent, SWT.LEFT);
label.setText(DebugUIMessages.getString("LauncherPropertyPage.Launcher_information_is_not_available_for_a_closed_project._4")); //$NON-NLS-1$
label.setFont(parent.getFont());
setControl(label);
}
/**
* Utility method that creates a label instance
* and sets the default layout data.
*/
private Label createLabel(Composite parent, String text) {
Label label= new Label(parent, SWT.LEFT);
label.setText(text);
GridData data= new GridData();
data.horizontalAlignment= GridData.FILL;
label.setLayoutData(data);
return label;
}
/**
* Utility method that creates a composite label instance
* and sets the default layout data.
*/
private Composite createLabel(Composite parent, String text, Image image) {
Composite composite= createComposite(parent, 2);
Label imageLabel= new Label(composite, SWT.LEFT);
imageLabel.setImage(image);
Label textLabel= new Label(composite, SWT.LEFT);
textLabel.setText(text);
GridData data= new GridData();
data.horizontalAlignment= GridData.HORIZONTAL_ALIGN_BEGINNING;
composite.setLayoutData(data);
return composite;
}
/**
* The default button has been pressed.
*/
protected void performDefaults() {
super.performDefaults();
// Select "none"
fCombo.select(0);
}
/**
* Returns preference store that belongs to the our plugin.
* This is important because we want to store
* our preferences separately from the desktop.
*/
protected IPreferenceStore doGetPreferenceStore() {
return DebugUIPlugin.getDefault().getPreferenceStore();
}
/**
* This is a hook for subclasses to do special things when the ok
* button is pressed.
*/
public boolean performOk() {
IProject project= getProject();
if (project != null && project.isOpen()) {
String selection= fCombo.getText();
return saveLauncherProperty(project, selection);
}
return true;
}
/**
* Convenience method to get the launch manager
*/
protected ILaunchManager getLaunchManager() {
return DebugPlugin.getDefault().getLaunchManager();
}
/**
* Returns the project this page works on
*/
protected IProject getProject() {
IAdaptable element= getElement();
IResource resource= (IResource)element.getAdapter(IResource.class);
if (resource != null) {
return resource.getProject();
}
return null;
}
/**
* @see IWorkbenchPreferencePage#init(IWorkbench)
*/
public void init(IWorkbench desktop) {
doGetPreferenceStore();
}
/**
* Initializes states of the controls.
*/
private void initializeValues() {
IProject project= getProject();
if (project != null) {
try {
ILauncher launcher= getLaunchManager().getDefaultLauncher(project);
if (launcher == null) {
fCombo.select(0);
} else {
fCombo.setText(launcher.getLabel());
}
} catch (CoreException ce) {
fCombo.select(0);
DebugUIPlugin.log(ce);
}
}
}
/**
* Find the launcher with the given selection (name), and save it as the preference.
*/
protected boolean saveLauncherProperty(IProject project, String selection) {
try {
ILauncher[] launchers= getLaunchManager().getLaunchers();
for (int i= 0; i < launchers.length; i++) {
ILauncher launcher= launchers[i];
if (launcher.getLabel().equals(selection)) {
getLaunchManager().setDefaultLauncher(project, launcher);
return true;
}
}
getLaunchManager().setDefaultLauncher(project, null);
} catch (CoreException e) {
DebugUIPlugin.errorDialog(DebugUIPlugin.getActiveWorkbenchWindow().getShell(), DebugUIMessages.getString("LauncherPropertyPage.Launcher_property_page_5"), DebugUIMessages.getString("LauncherPropertyPage.Exceptions_occurred_saving_the_launcher_preferences_6"), e); //$NON-NLS-1$ //$NON-NLS-2$
return false;
}
return true;
}
}