Chromium Code Reviews| Index: editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/RemoteConnectionDialog.java |
| =================================================================== |
| --- editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/RemoteConnectionDialog.java (revision 41867) |
| +++ editor/tools/plugins/com.google.dart.tools.debug.ui/src/com/google/dart/tools/debug/ui/internal/dialogs/RemoteConnectionDialog.java (working copy) |
| @@ -14,7 +14,6 @@ |
| package com.google.dart.tools.debug.ui.internal.dialogs; |
| -import com.google.dart.tools.core.internal.util.ResourceUtil; |
| import com.google.dart.tools.debug.core.configs.DartServerLaunchConfigurationDelegate; |
| import com.google.dart.tools.debug.core.configs.DartiumLaunchConfigurationDelegate; |
| import com.google.dart.tools.debug.core.util.IRemoteConnectionDelegate; |
| @@ -25,8 +24,11 @@ |
| import com.google.dart.tools.debug.ui.internal.view.DebuggerViewManager; |
| import com.google.dart.tools.ui.themes.Fonts; |
| -import org.eclipse.core.resources.IFile; |
| +import org.eclipse.core.resources.IContainer; |
| +import org.eclipse.core.resources.IResource; |
| +import org.eclipse.core.resources.ResourcesPlugin; |
| import org.eclipse.core.runtime.CoreException; |
| +import org.eclipse.core.runtime.IPath; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.core.runtime.IStatus; |
| import org.eclipse.core.runtime.Status; |
| @@ -54,6 +56,7 @@ |
| import org.eclipse.swt.widgets.Text; |
| import org.eclipse.ui.IWorkbench; |
| import org.eclipse.ui.PlatformUI; |
| +import org.eclipse.ui.dialogs.ContainerSelectionDialog; |
| import org.eclipse.ui.dialogs.ListDialog; |
| import java.util.List; |
| @@ -123,24 +126,24 @@ |
| private IRemoteConnectionDelegate connectionDelegate; |
| private String host; |
| private int port; |
| - private IFile file; |
| + private IContainer container; |
| private boolean usePubServe; |
| public ConnectionJob(IRemoteConnectionDelegate connectionDelegate, String host, int port, |
| - IFile file, boolean usePubServe) { |
| + IContainer container, boolean usePubServe) { |
| super("Connecting..."); |
| this.connectionDelegate = connectionDelegate; |
| this.host = host; |
| this.port = port; |
| - this.file = file; |
| + this.container = container; |
| this.usePubServe = usePubServe; |
| } |
| @Override |
| protected IStatus run(IProgressMonitor monitor) { |
| try { |
| - connectionDelegate.performRemoteConnection(host, port, file, monitor, usePubServe); |
| + connectionDelegate.performRemoteConnection(host, port, container, monitor, usePubServe); |
| // Show the debugger view. |
| Display.getDefault().asyncExec(new Runnable() { |
| @@ -202,7 +205,7 @@ |
| this.portDefault = portDefault; |
| } |
| - public void connection(String host, int port, IFile file, boolean usePubServe) { |
| + public void connection(String host, int port, IContainer container, boolean usePubServe) { |
| IRemoteConnectionDelegate connectionDelegate = null; |
| switch (this) { |
| @@ -222,7 +225,7 @@ |
| } |
| if (connectionDelegate != null) { |
| - Job job = new ConnectionJob(connectionDelegate, host, port, file, usePubServe); |
| + Job job = new ConnectionJob(connectionDelegate, host, port, container, usePubServe); |
| job.schedule(); |
| } |
| } |
| @@ -262,7 +265,7 @@ |
| private Text portText; |
| - private Text fileText; |
| + private Label resourcePathLabel; |
| private Text instructionsLabel; |
| @@ -306,7 +309,7 @@ |
| String host = hostText.getText().trim(); |
| String port = portText.getText().trim(); |
| - String filePath = fileText.getText().trim(); |
| + String resourcePath = resourcePathLabel.getText().trim(); |
| boolean usePubServe = usePubServeButton.getSelection(); |
| IDialogSettings settings = getDialogSettings(); |
| @@ -314,7 +317,7 @@ |
| settings.put("selected", connection.ordinal()); |
| settings.put(connection.name() + ".host", host); |
| settings.put(connection.name() + ".port", port); |
| - settings.put(connection.name() + ".file", filePath); |
| + settings.put(connection.name() + ".resource", resourcePath); |
| settings.put(connection.name() + ".usePubServe", usePubServe); |
| int connectionPort; |
| @@ -329,16 +332,19 @@ |
| return; |
| } |
| - IFile file = ResourceUtil.getFile(filePath); |
| - if (file == null) { |
| - ErrorDialog.openError(getShell(), "Invalid Application File", null, new Status( |
| + IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember(resourcePath); |
| + |
| + if (resource == null) { |
| + ErrorDialog.openError(getShell(), "Invalid Source Project", null, new Status( |
| IStatus.ERROR, |
| DartDebugUIPlugin.PLUGIN_ID, |
| - "\"" + filePath + "\" is an invalid resource path.")); |
| + "\"" + resourcePath + "\" is an invalid resource path.")); |
| return; |
| } |
| - connection.connection(host, connectionPort, file, usePubServe); |
| + IContainer container = resource instanceof IContainer ? (IContainer) resource |
| + : resource.getParent(); |
| + connection.connection(host, connectionPort, container, usePubServe); |
| super.okPressed(); |
| } |
| @@ -364,26 +370,37 @@ |
| Group group = new Group(parent, SWT.NONE); |
| group.setText("Connection parameters"); |
| GridDataFactory.fillDefaults().grab(true, false).applyTo(group); |
| - GridLayoutFactory.fillDefaults().numColumns(2).margins(12, 6).applyTo(group); |
| + GridLayoutFactory.fillDefaults().numColumns(3).margins(12, 6).applyTo(group); |
| label = new Label(group, SWT.NONE); |
| label.setText("Host:"); |
| hostText = new Text(group, SWT.SINGLE | SWT.BORDER); |
| - GridDataFactory.fillDefaults().grab(true, false).applyTo(hostText); |
| + GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(hostText); |
| label = new Label(group, SWT.NONE); |
| label.setText("Port:"); |
| portText = new Text(group, SWT.SINGLE | SWT.BORDER); |
| - GridDataFactory.fillDefaults().grab(true, false).applyTo(portText); |
| + GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(portText); |
| label = new Label(group, SWT.NONE); |
| - label.setText("File:"); |
| + label.setText("Project source:"); |
|
devoncarew
2014/11/25 18:27:35
The user now needs to indicate where the source th
|
| - fileText = new Text(group, SWT.SINGLE | SWT.BORDER); |
| - GridDataFactory.fillDefaults().grab(true, false).applyTo(fileText); |
| + resourcePathLabel = new Label(group, SWT.NONE); |
| + GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo( |
| + resourcePathLabel); |
| + Button projectBrowseButton = new Button(group, SWT.PUSH); |
| + projectBrowseButton.setText("Select Folder..."); |
| + GridDataFactory.swtDefaults().applyTo(projectBrowseButton); |
| + projectBrowseButton.addSelectionListener(new SelectionAdapter() { |
| + @Override |
| + public void widgetSelected(SelectionEvent e) { |
| + handleSourceDirectoryBrowseButton(); |
| + } |
| + }); |
| + |
| label = new Label(parent, SWT.NONE); |
| instructionsLabel = new Text(parent, SWT.WRAP | SWT.READ_ONLY); |
| @@ -458,11 +475,28 @@ |
| IDialogSettings settings = getDialogSettings(); |
| hostText.setText(notNull(settings.get(connection.name() + ".host"))); |
| portText.setText(notNull(settings.get(connection.name() + ".port"))); |
| - fileText.setText(notNull(settings.get(connection.name() + ".file"))); |
| + resourcePathLabel.setText(notNull(settings.get(connection.name() + ".resource"))); |
| pubGroup.setVisible(connection == ConnectionType.CHROME); |
| } |
| + private void handleSourceDirectoryBrowseButton() { |
| + ContainerSelectionDialog dialog = new ContainerSelectionDialog( |
| + getShell(), |
| + null, |
| + false, |
| + "Select source location"); |
| + |
| + dialog.open(); |
| + |
| + Object[] results = dialog.getResult(); |
| + |
| + if ((results != null) && (results.length > 0)) { |
| + String pathStr = ((IPath) results[0]).toString(); |
| + resourcePathLabel.setText(pathStr); |
| + } |
| + } |
| + |
| private String notNull(String str) { |
| return str == null ? "" : str; |
| } |