| Index: editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/preferences/DebugPreferencePage.java
|
| ===================================================================
|
| --- editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/preferences/DebugPreferencePage.java (revision 2081)
|
| +++ editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/preferences/DebugPreferencePage.java (working copy)
|
| @@ -25,20 +25,27 @@
|
| import org.eclipse.jface.layout.PixelConverter;
|
| import org.eclipse.jface.preference.PreferencePage;
|
| import org.eclipse.jface.util.Util;
|
| +import org.eclipse.jface.viewers.ArrayContentProvider;
|
| import org.eclipse.jface.viewers.IStructuredSelection;
|
| +import org.eclipse.jface.viewers.LabelProvider;
|
| import org.eclipse.jface.viewers.TableViewer;
|
| import org.eclipse.jface.window.Window;
|
| import org.eclipse.swt.SWT;
|
| import org.eclipse.swt.events.SelectionAdapter;
|
| import org.eclipse.swt.events.SelectionEvent;
|
| +import org.eclipse.swt.graphics.Image;
|
| +import org.eclipse.swt.program.Program;
|
| import org.eclipse.swt.widgets.Button;
|
| import org.eclipse.swt.widgets.Composite;
|
| import org.eclipse.swt.widgets.Control;
|
| +import org.eclipse.swt.widgets.Display;
|
| import org.eclipse.swt.widgets.FileDialog;
|
| import org.eclipse.swt.widgets.Group;
|
| +import org.eclipse.swt.widgets.Label;
|
| import org.eclipse.swt.widgets.Text;
|
| import org.eclipse.ui.IWorkbench;
|
| import org.eclipse.ui.IWorkbenchPreferencePage;
|
| +import org.eclipse.ui.dialogs.ListDialog;
|
|
|
| import java.io.File;
|
| import java.util.List;
|
| @@ -47,18 +54,38 @@
|
| * The preference page for Dart debugging.
|
| */
|
| public class DebugPreferencePage extends PreferencePage implements IWorkbenchPreferencePage {
|
| - public static final String PAGE_ID = "com.google.dart.tools.debug.debugPreferencePage";;
|
|
|
| - private Button addBrowserButton;
|
| + private class ProgramLabelProvider extends LabelProvider {
|
|
|
| + @Override
|
| + public Image getImage(Object element) {
|
| + return new Image(Display.getDefault(), ((Program) element).getImageData());
|
| + }
|
| +
|
| + @Override
|
| + public String getText(Object element) {
|
| + return ((Program) element).getName();
|
| + }
|
| +
|
| + }; //$NON-NLS-1$
|
| +
|
| + public static final String PAGE_ID = "com.google.dart.tools.debug.debugPreferencePage"; //$NON-NLS-1$
|
| private List<ChromeBrowserConfig> browsers;
|
| +
|
| private TableViewer browserViewer;
|
| -
|
| private Text vmField;
|
|
|
| + private Text browserField;
|
| private Button removeBrowserButton;
|
| +
|
| private Button renameBrowserButton;
|
|
|
| + private Button browseButton;
|
| +
|
| + private Button defaultBrowserButton;
|
| +
|
| + private Button selectBrowserButton;
|
| +
|
| /**
|
| * Create a new preference page.
|
| */
|
| @@ -77,6 +104,12 @@
|
|
|
| DartDebugCorePlugin.getPlugin().setDartVmExecutablePath(vmField.getText());
|
|
|
| + if (defaultBrowserButton.getSelection()) {
|
| + DartDebugCorePlugin.getPlugin().setDefaultBrowser(true);
|
| + } else {
|
| + DartDebugCorePlugin.getPlugin().setDefaultBrowser(false);
|
| + DartDebugCorePlugin.getPlugin().setBrowserExecutablePath(browserField.getText());
|
| + }
|
| return true;
|
| }
|
|
|
| @@ -151,28 +184,13 @@
|
| // label.setText("Enter one or more Chrome / Chromium based browsers");
|
| // GridDataFactory.swtDefaults().span(2, 1).applyTo(label);
|
|
|
| + // Browser
|
| + createBrowserConfig(composite);
|
| +
|
| // Dart VM
|
| - Group vmGroup = new Group(composite, SWT.NONE);
|
| - vmGroup.setText("Dart VM executable location");
|
| - GridDataFactory.fillDefaults().grab(true, false).applyTo(vmGroup);
|
| - GridLayoutFactory.swtDefaults().numColumns(2).spacing(5, 2).applyTo(vmGroup);
|
| + Label label = new Label(composite, SWT.NONE);
|
| + createVmConfig(composite);
|
|
|
| - vmField = new Text(vmGroup, SWT.SINGLE | SWT.BORDER);
|
| - GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).hint(100, SWT.DEFAULT).grab(true,
|
| - false).applyTo(vmField);
|
| -
|
| - Button browseButton = new Button(vmGroup, SWT.PUSH);
|
| - browseButton.setText("Browse...");
|
| - PixelConverter converter = new PixelConverter(browseButton);
|
| - int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
|
| - GridDataFactory.swtDefaults().hint(widthHint, -1).applyTo(browseButton);
|
| - browseButton.addSelectionListener(new SelectionAdapter() {
|
| - @Override
|
| - public void widgetSelected(SelectionEvent e) {
|
| - handleVmBrowseButton();
|
| - }
|
| - });
|
| -
|
| // browsers
|
| // browsers = new ArrayList<ChromeBrowserConfig>(
|
| // DartDebugCorePlugin.getPlugin().getConfiguredBrowsers());
|
| @@ -184,7 +202,12 @@
|
| if (DartDebugCorePlugin.getPlugin().getDartVmExecutablePath() != null) {
|
| vmField.setText(DartDebugCorePlugin.getPlugin().getDartVmExecutablePath());
|
| }
|
| + updateEnablements(DartDebugCorePlugin.getPlugin().getIsDefaultBrowser());
|
|
|
| + if (DartDebugCorePlugin.getPlugin().getBrowserExecutablePath() != null) {
|
| + browserField.setText(DartDebugCorePlugin.getPlugin().getBrowserExecutablePath());
|
| + }
|
| +
|
| return composite;
|
| }
|
|
|
| @@ -194,12 +217,79 @@
|
| String filePath = fd.open();
|
|
|
| if (filePath != null) {
|
| - vmField.setText(filePath);
|
| + browserField.setText(filePath);
|
| }
|
| }
|
|
|
| + private void createBrowserConfig(Composite parent) {
|
| + Group browserGroup = new Group(parent, SWT.NONE);
|
| + browserGroup.setText(DebugPreferenceMessages.DebugPreferencePage_BrowserTitle);
|
| + GridDataFactory.fillDefaults().grab(true, false).applyTo(browserGroup);
|
| + GridLayoutFactory.swtDefaults().numColumns(3).spacing(5, 2).applyTo(browserGroup);
|
| +
|
| + defaultBrowserButton = new Button(browserGroup, SWT.RADIO);
|
| + defaultBrowserButton.setText(DebugPreferenceMessages.DebugPreferencePage_DefaultBrowserText);
|
| + defaultBrowserButton.addSelectionListener(new SelectionAdapter() {
|
| +
|
| + @Override
|
| + public void widgetSelected(SelectionEvent e) {
|
| + updateEnablements(true);
|
| + }
|
| + });
|
| + GridDataFactory.swtDefaults().span(3, 1).applyTo(defaultBrowserButton);
|
| + selectBrowserButton = new Button(browserGroup, SWT.RADIO);
|
| + selectBrowserButton.setText(DebugPreferenceMessages.DebugPreferencePage_SelectBrowserText);
|
| + GridDataFactory.swtDefaults().span(3, 1).applyTo(selectBrowserButton);
|
| + selectBrowserButton.addSelectionListener(new SelectionAdapter() {
|
| + @Override
|
| + public void widgetSelected(SelectionEvent e) {
|
| + updateEnablements(false);
|
| + }
|
| + });
|
| +
|
| + browserField = new Text(browserGroup, SWT.SINGLE | SWT.BORDER);
|
| + GridDataFactory.swtDefaults().indent(15, 0).align(SWT.FILL, SWT.CENTER).hint(100, SWT.DEFAULT).grab(
|
| + true, false).applyTo(browserField);
|
| + browserField.setEnabled(false);
|
| + browseButton = new Button(browserGroup, SWT.PUSH);
|
| + browseButton.setText(DebugPreferenceMessages.DebugPreferencePage_Browse);
|
| + browseButton.setEnabled(false);
|
| + PixelConverter converter = new PixelConverter(browseButton);
|
| + int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
|
| + GridDataFactory.swtDefaults().hint(widthHint, -1).applyTo(browseButton);
|
| + browseButton.addSelectionListener(new SelectionAdapter() {
|
| + @Override
|
| + public void widgetSelected(SelectionEvent e) {
|
| + handleBrowserConfigBrowseButton();
|
| + }
|
| + });
|
| + }
|
| +
|
| + private void createVmConfig(Composite composite) {
|
| + Group vmGroup = new Group(composite, SWT.NONE);
|
| + vmGroup.setText(DebugPreferenceMessages.DebugPreferencePage_VMExecutableLocation);
|
| + GridDataFactory.fillDefaults().grab(true, false).applyTo(vmGroup);
|
| + GridLayoutFactory.swtDefaults().numColumns(2).spacing(5, 2).applyTo(vmGroup);
|
| +
|
| + vmField = new Text(vmGroup, SWT.SINGLE | SWT.BORDER);
|
| + GridDataFactory.swtDefaults().align(SWT.FILL, SWT.CENTER).hint(100, SWT.DEFAULT).grab(true,
|
| + false).applyTo(vmField);
|
| +
|
| + Button browseVmButton = new Button(vmGroup, SWT.PUSH);
|
| + browseVmButton.setText(DebugPreferenceMessages.DebugPreferencePage_Browse);
|
| + PixelConverter converter = new PixelConverter(browseVmButton);
|
| + int widthHint = converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH);
|
| + GridDataFactory.swtDefaults().hint(widthHint, -1).applyTo(browseVmButton);
|
| + browseVmButton.addSelectionListener(new SelectionAdapter() {
|
| + @Override
|
| + public void widgetSelected(SelectionEvent e) {
|
| + handleVmBrowseButton();
|
| + }
|
| + });
|
| + }
|
| +
|
| private String findUniqueName(String name, int count, List<ChromeBrowserConfig> existingBrowsers) {
|
| - String tempName = name + (count == 0 ? "" : count);
|
| + String tempName = name + (count == 0 ? "" : count); //$NON-NLS-1$
|
|
|
| for (ChromeBrowserConfig browser : existingBrowsers) {
|
| if (tempName.equals(browser.getName())) {
|
| @@ -212,8 +302,8 @@
|
|
|
| private String findUniqueName(String name, List<ChromeBrowserConfig> existingBrowsers) {
|
| // strip .exe from the name -
|
| - if (name.endsWith(".exe")) {
|
| - name = name.substring(0, name.length() - ".exe".length());
|
| + if (name.endsWith(".exe")) { //$NON-NLS-1$
|
| + name = name.substring(0, name.length() - ".exe".length()); //$NON-NLS-1$
|
| }
|
|
|
| return findUniqueName(name, 0, existingBrowsers);
|
| @@ -221,7 +311,7 @@
|
|
|
| private void handleAddButton() {
|
| FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN);
|
| - fileDialog.setText("Select Chrome based browser");
|
| + fileDialog.setText("Select Chrome based browser"); //$NON-NLS-1$
|
|
|
| String path = fileDialog.open();
|
|
|
| @@ -230,8 +320,8 @@
|
|
|
| if (path == null) {
|
| // Let the user know the path was invalid -
|
| - MessageDialog.openWarning(getShell(), "Error Locating Executable",
|
| - "Unable to locate a browser executable.");
|
| + MessageDialog.openWarning(getShell(), "Error Locating Executable", //$NON-NLS-1$
|
| + "Unable to locate a browser executable."); //$NON-NLS-1$
|
| } else {
|
| ChromeBrowserConfig browserConfig = new ChromeBrowserConfig();
|
|
|
| @@ -245,6 +335,23 @@
|
| }
|
| }
|
|
|
| + private void handleBrowserConfigBrowseButton() {
|
| +
|
| + ListDialog listDialog = new ListDialog(getShell());
|
| + listDialog.setTitle(DebugPreferenceMessages.DebugPreferencePage_DialogTitle);
|
| + listDialog.setMessage(DebugPreferenceMessages.DebugPreferencePage_DialogMessage);
|
| +
|
| + listDialog.setLabelProvider(new ProgramLabelProvider());
|
| + listDialog.setContentProvider(new ArrayContentProvider());
|
| + listDialog.setInput(Program.getPrograms());
|
| +
|
| + if (listDialog.open() == Window.OK) {
|
| + Object[] result = listDialog.getResult();
|
| + browserField.setText(((Program) result[0]).getName());
|
| + }
|
| +
|
| + }
|
| +
|
| private void handleRemoveButton() {
|
| ChromeBrowserConfig browserConfig = (ChromeBrowserConfig) ((IStructuredSelection) browserViewer.getSelection()).getFirstElement();
|
|
|
| @@ -258,13 +365,13 @@
|
| private void handleRenameButton() {
|
| final ChromeBrowserConfig browserConfig = (ChromeBrowserConfig) ((IStructuredSelection) browserViewer.getSelection()).getFirstElement();
|
|
|
| - InputDialog inputDialog = new InputDialog(getShell(), "Enter Browser Name",
|
| - "Enter the new name for the browser configuration:", browserConfig.getName(),
|
| + InputDialog inputDialog = new InputDialog(getShell(), "Enter Browser Name", //$NON-NLS-1$
|
| + "Enter the new name for the browser configuration:", browserConfig.getName(), //$NON-NLS-1$
|
| new IInputValidator() {
|
| @Override
|
| public String isValid(String newText) {
|
| if (newText == null || newText.isEmpty()) {
|
| - return "The name must not be empty.";
|
| + return "The name must not be empty."; //$NON-NLS-1$
|
| }
|
|
|
| for (ChromeBrowserConfig other : browsers) {
|
| @@ -273,7 +380,7 @@
|
| }
|
|
|
| if (newText.equals(other.getName())) {
|
| - return "A browser configuration with that name already exists.";
|
| + return "A browser configuration with that name already exists."; //$NON-NLS-1$
|
| }
|
| }
|
|
|
| @@ -302,12 +409,12 @@
|
| // /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
|
| String name = file.getName();
|
|
|
| - if (name.endsWith(".app")) {
|
| - name = name.substring(0, name.length() - ".app".length());
|
| + if (name.endsWith(".app")) { //$NON-NLS-1$
|
| + name = name.substring(0, name.length() - ".app".length()); //$NON-NLS-1$
|
|
|
| // Or look in Info.plist for <key>CFBundleExecutable</key><string>app.name</string>?
|
|
|
| - path = path + "/Contents/MacOS/" + name;
|
| + path = path + "/Contents/MacOS/" + name; //$NON-NLS-1$
|
|
|
| File appFile = new File(path);
|
|
|
| @@ -333,4 +440,17 @@
|
| removeBrowserButton.setEnabled(hasSelection);
|
| }
|
|
|
| + private void updateEnablements(boolean isDefaultBrowser) {
|
| + if (isDefaultBrowser) {
|
| + defaultBrowserButton.setSelection(true);
|
| + selectBrowserButton.setSelection(false);
|
| + browserField.setEnabled(false);
|
| + browseButton.setEnabled(false);
|
| + } else {
|
| + defaultBrowserButton.setSelection(false);
|
| + selectBrowserButton.setSelection(true);
|
| + browserField.setEnabled(true);
|
| + browseButton.setEnabled(true);
|
| + }
|
| + }
|
| }
|
|
|