blob: 81075aafa8558f3c7f7567645a63a9a929920bd0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2011 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.internal.debug.ui.launcher;
import org.eclipse.debug.ui.StringVariableSelectionDialog;
import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
import org.eclipse.jdt.internal.debug.ui.JDIDebugUIPlugin;
import org.eclipse.jdt.internal.debug.ui.actions.RuntimeClasspathAction;
import org.eclipse.jdt.launching.IRuntimeClasspathEntry;
import org.eclipse.jdt.launching.JavaRuntime;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
/**
* Dialog of radio buttons/actions for advanced classpath options.
*/
public class RuntimeClasspathAdvancedDialog extends Dialog {
private IAction[] fActions;
private Button[] fButtons;
private IClasspathViewer fViewer;
private Button fAddVariableStringButton;
private Text fVariableString;
/**
* Constructs a new dialog on the given shell, with the specified
* set of actions.
*
* @param parentShell
* @param actions advanced actions
*/
public RuntimeClasspathAdvancedDialog(Shell parentShell, IAction[] actions, IClasspathViewer viewer) {
super(parentShell);
setShellStyle(SWT.RESIZE | getShellStyle());
fActions = actions;
fViewer = viewer;
}
/**
* @see Dialog#createDialogArea(Composite)
*/
@Override
protected Control createDialogArea(Composite parent) {
Composite inner= new Composite(parent, SWT.NONE);
GridLayout layout= new GridLayout();
inner.setLayout(layout);
GridData gd = new GridData(GridData.FILL_BOTH);
inner.setLayoutData(gd);
Label l = new Label(inner, SWT.NONE);
l.setText(LauncherMessages.RuntimeClasspathAdvancedDialog_Select_an_advanced_option__1);
gd = new GridData(GridData.FILL_HORIZONTAL);
l.setLayoutData(gd);
fButtons = new Button[fActions.length];
for (int i = 0; i < fActions.length; i++) {
IAction action= fActions[i];
fButtons[i] = new Button(inner, SWT.RADIO);
fButtons[i].setText(action.getText());
fButtons[i].setData(action);
fButtons[i].setEnabled(action.isEnabled());
fButtons[i].setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
}
addVariableStringComposite(inner);
getShell().setText(LauncherMessages.RuntimeClasspathAdvancedDialog_Advanced_Options_1);
Dialog.applyDialogFont(parent);
return inner;
}
private void addVariableStringComposite(Composite composite) {
fAddVariableStringButton = new Button(composite, SWT.RADIO);
fAddVariableStringButton.setText(LauncherMessages.RuntimeClasspathAdvancedDialog_6);
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
fAddVariableStringButton.setLayoutData(gd);
final Composite inner = new Composite(composite, SWT.NONE);
inner.setLayout(new GridLayout(2, false));
inner.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
fVariableString = new Text(inner, SWT.SINGLE | SWT.BORDER);
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.grabExcessHorizontalSpace = true;
fVariableString.setLayoutData(gd);
final Button fVariablesButton = createButton(inner, IDialogConstants.IGNORE_ID, LauncherMessages.RuntimeClasspathAdvancedDialog_7, false);
gd = new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING);
fVariablesButton.setLayoutData(gd);
fVariablesButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
StringVariableSelectionDialog dialog = new StringVariableSelectionDialog(getShell());
dialog.open();
String variable = dialog.getVariableExpression();
if (variable != null) {
fVariableString.insert(variable);
}
}
});
fAddVariableStringButton.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
boolean enabled = fAddVariableStringButton.getSelection();
fVariableString.setEnabled(enabled);
fVariablesButton.setEnabled(enabled);
}
});
//set initial state
boolean enabled = fAddVariableStringButton.getSelection();
fVariableString.setEnabled(enabled);
fVariablesButton.setEnabled(enabled);
}
/**
* @see Dialog#okPressed()
*/
@Override
protected void okPressed() {
if (fAddVariableStringButton.getSelection()) {
String varString = fVariableString.getText().trim();
if (varString.length() > 0) {
IRuntimeClasspathEntry entry = JavaRuntime.newStringVariableClasspathEntry(varString);
fViewer.addEntries(new IRuntimeClasspathEntry[] {entry});
}
} else {
for (int i = 0; i < fButtons.length; i++) {
if (fButtons[i].getSelection()) {
IAction action = (IAction)fButtons[i].getData();
if (action instanceof RuntimeClasspathAction) {
((RuntimeClasspathAction)action).setShell(getShell());
}
action.run();
break;
}
}
}
super.okPressed();
}
protected String getDialogSettingsSectionName() {
return IJavaDebugUIConstants.PLUGIN_ID + ".RUNTIME_CLASSPATH_ADVANCED_DIALOG"; //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.jface.dialogs.Dialog#getDialogBoundsSettings()
*/
@Override
protected IDialogSettings getDialogBoundsSettings() {
IDialogSettings settings = JDIDebugUIPlugin.getDefault().getDialogSettings();
IDialogSettings section = settings.getSection(getDialogSettingsSectionName());
if (section == null) {
section = settings.addNewSection(getDialogSettingsSectionName());
}
return section;
}
}