Fixed: [ Issue 40 ] Add support for import resolution across multiple folders
https://code.google.com/p/protobuf-dt/issues/detail?id=40
Cleaning up UI code.
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/InputDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/InputDialog.java
new file mode 100644
index 0000000..3d879e5
--- /dev/null
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/InputDialog.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2011 Google Inc.
+ *
+ * All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse
+ * Public License v1.0 which accompanies this distribution, and is available at
+ *
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package com.google.eclipse.protobuf.ui.preferences;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Base class for dialogs that accept user input.
+ *
+ * @author alruiz@google.com (Alex Ruiz)
+ */
+public class InputDialog extends Dialog {
+
+ private final String title;
+
+ /**
+ * Creates a new </code>{@link InputDialog}</code>.
+ * @param parent a shell which will be the parent of the new instance.
+ * @param title the title of the dialog.
+ */
+ public InputDialog(Shell parent, String title) {
+ super(parent);
+ setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL);
+ this.title = title;
+ }
+
+ @Override protected void configureShell(Shell shell) {
+ super.configureShell(shell);
+ if (title != null) shell.setText(title);
+ }
+}
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
index 5b32eb7..d88b0f8 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/AddDirectoryDialog.java
@@ -9,8 +9,8 @@
package com.google.eclipse.protobuf.ui.preferences.paths;
import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.*;
-import static com.google.eclipse.protobuf.ui.swt.SelectDirectoryDialogLauncher.*;
-import static com.google.eclipse.protobuf.ui.swt.Shells.centerShell;
+import static com.google.eclipse.protobuf.ui.preferences.paths.SelectDirectoryDialogs.*;
+import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID;
import static org.eclipse.xtext.util.Strings.isEmpty;
import org.eclipse.swt.SWT;
@@ -18,17 +18,14 @@
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
+import com.google.eclipse.protobuf.ui.preferences.InputDialog;
+
/**
* Dialog where users can select a path (in the workspace or file system) to be included in resolution of imports.
*
* @author alruiz@google.com (Alex Ruiz)
*/
-public class AddDirectoryDialog extends Dialog {
-
- private final Shell parent;
-
- private Shell shell;
- private boolean result;
+public class AddDirectoryDialog extends InputDialog {
private DirectoryPath selectedPath;
@@ -36,52 +33,33 @@
private Button btnWorkspace;
private Button btnIsWorkspacePath;
private Button btnFileSystem;
- private Button btnCancel;
- private Button btnOk;
/**
* Creates a new </code>{@link AddDirectoryDialog}</code>.
* @param parent a shell which will be the parent of the new instance.
- * @param title the title of this dialog.
*/
- public AddDirectoryDialog(Shell parent, String title) {
- super(parent, SWT.NONE);
- this.parent = parent;
- getStyle();
- setText(title);
+ public AddDirectoryDialog(Shell parent) {
+ super(parent, includeDirectoryTitle);
}
- /**
- * Opens this dialog.
- * @return {@code true} if the user made a selection and pressed "OK" or {@code false} if the user pressed "Cancel."
- */
- public boolean open() {
- result = false;
- shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
- shell.setSize(503, 254);
- shell.setText(getText());
- createAndCenterContent();
- shell.open();
- Display display = parent.getDisplay();
- while (!shell.isDisposed())
- if (!display.readAndDispatch()) display.sleep();
- return result;
- }
+ /** {@inheritDoc} */
+ @Override protected Control createDialogArea(Composite parent) {
+ Composite cmpDialogArea = (Composite) super.createDialogArea(parent);
- private void createAndCenterContent() {
- shell.setLayout(new GridLayout(2, false));
+ GridLayout gridLayout = (GridLayout) cmpDialogArea.getLayout();
+ gridLayout.numColumns = 2;
- Label label = new Label(shell, SWT.NONE);
+ Label label = new Label(cmpDialogArea, SWT.NONE);
label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
label.setText(includeDirectoryPrompt);
- txtPath = new Text(shell, SWT.BORDER);
+ txtPath = new Text(cmpDialogArea, SWT.BORDER);
txtPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1));
txtPath.setEditable(false);
- Composite cmpCheckBox = new Composite(shell, SWT.NONE);
+ Composite cmpCheckBox = new Composite(cmpDialogArea, SWT.NONE);
cmpCheckBox.setEnabled(false);
- cmpCheckBox.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1));
+ cmpCheckBox.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1));
cmpCheckBox.setLayout(new GridLayout(1, false));
btnIsWorkspacePath = new Button(cmpCheckBox, SWT.CHECK);
@@ -89,7 +67,8 @@
btnIsWorkspacePath.setSize(158, 24);
btnIsWorkspacePath.setText(isWorkspacePathCheck);
- Composite cmpButtons = new Composite(shell, SWT.NONE);
+ Composite cmpButtons = new Composite(cmpDialogArea, SWT.NONE);
+ cmpButtons.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
cmpButtons.setLayout(new GridLayout(2, true));
new Label(cmpButtons, SWT.NONE);
@@ -98,31 +77,20 @@
btnWorkspace.setText(browseWorkspace);
new Label(cmpButtons, SWT.NONE);
- btnFileSystem = new Button(cmpButtons, SWT.NONE);
- btnFileSystem.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
- btnFileSystem.setText(browseFileSystem);
-
- btnOk = new Button(cmpButtons, SWT.NONE);
- btnOk.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
- btnOk.setEnabled(false);
- btnOk.setText(ok);
-
- btnCancel = new Button(cmpButtons, SWT.NONE);
- btnCancel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
- btnCancel.setText(cancel);
+ btnFileSystem = new Button(cmpButtons, SWT.NONE);
+ btnFileSystem.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1));
+ btnFileSystem.setText(browseFileSystem);
addEventListeners();
- shell.setDefaultButton(btnOk);
- shell.pack();
-
- centerWindow();
+ applyDialogFont(cmpDialogArea);
+ return cmpDialogArea;
}
private void addEventListeners() {
btnWorkspace.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
- String path = showWorkspaceDirectoryDialog(shell, txtPath.getText(), null);
+ String path = showWorkspaceDirectoryDialog(getShell(), enteredPathText());
if (path != null) {
txtPath.setText(path.trim());
btnIsWorkspacePath.setSelection(true);
@@ -131,35 +99,36 @@
});
btnFileSystem.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
- String path = showFileSystemFolderDialog(shell, txtPath.getText());
+ String path = showFileSystemFolderDialog(getShell(), enteredPathText());
if (path != null) {
txtPath.setText(path.trim());
btnIsWorkspacePath.setSelection(false);
}
}
});
- btnOk.addSelectionListener(new SelectionAdapter() {
- @Override public void widgetSelected(SelectionEvent e) {
- selectedPath = new DirectoryPath(txtPath.getText().trim(), btnIsWorkspacePath.getSelection());
- result = true;
- shell.dispose();
- }
- });
- btnCancel.addSelectionListener(new SelectionAdapter() {
- @Override public void widgetSelected(SelectionEvent e) {
- shell.dispose();
- }
- });
txtPath.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
- boolean hasText = !isEmpty(txtPath.getText().trim());
- btnOk.setEnabled(hasText);
+ boolean hasText = !isEmpty(enteredPathText());
+ getButton(OK_ID).setEnabled(hasText);
}
});
}
- private void centerWindow() {
- centerShell(shell, parent);
+ /** {@inheritDoc} */
+ @Override protected void createButtonsForButtonBar(Composite parent) {
+ super.createButtonsForButtonBar(parent);
+ getButton(OK_ID).setEnabled(false);
+ txtPath.setFocus();
+ }
+
+ /** {@inheritDoc} */
+ @Override protected void okPressed() {
+ selectedPath = new DirectoryPath(enteredPathText(), btnIsWorkspacePath.getSelection());
+ super.okPressed();
+ }
+
+ private String enteredPathText() {
+ return txtPath.getText().trim();
}
/**
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
index c3721b1..e268f64 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/DirectoryPathsEditor.java
@@ -10,6 +10,7 @@
import static com.google.eclipse.protobuf.ui.preferences.paths.Messages.*;
import static java.util.Collections.unmodifiableList;
+import static org.eclipse.jface.window.Window.OK;
import java.util.*;
import java.util.List;
@@ -92,8 +93,8 @@
});
btnAdd.addSelectionListener(new SelectionAdapter() {
@Override public void widgetSelected(SelectionEvent e) {
- AddDirectoryDialog dialog = new AddDirectoryDialog(getShell(), includeDirectoryTitle);
- if (dialog.open()) {
+ AddDirectoryDialog dialog = new AddDirectoryDialog(getShell());
+ if (dialog.open() == OK) {
importPaths.add(dialog.selectedPath());
updateTable();
enableButtonsDependingOnTableSelection();
diff --git a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/swt/SelectDirectoryDialogLauncher.java b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/SelectDirectoryDialogs.java
similarity index 76%
rename from com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/swt/SelectDirectoryDialogLauncher.java
rename to com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/SelectDirectoryDialogs.java
index 4acbf87..3912eeb 100644
--- a/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/swt/SelectDirectoryDialogLauncher.java
+++ b/com.google.eclipse.protobuf.ui/src/com/google/eclipse/protobuf/ui/preferences/paths/SelectDirectoryDialogs.java
@@ -6,7 +6,7 @@
*
* http://www.eclipse.org/legal/epl-v10.html
*/
-package com.google.eclipse.protobuf.ui.swt;
+package com.google.eclipse.protobuf.ui.preferences.paths;
import static com.google.eclipse.protobuf.ui.swt.Messages.*;
import static org.eclipse.core.runtime.IStatus.ERROR;
@@ -17,24 +17,25 @@
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.*;
import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.DirectoryDialog;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.dialogs.ElementTreeSelectionDialog;
-import org.eclipse.ui.dialogs.ISelectionStatusValidator;
-import org.eclipse.ui.model.WorkbenchContentProvider;
-import org.eclipse.ui.model.WorkbenchLabelProvider;
+import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.dialogs.*;
+import org.eclipse.ui.model.*;
import org.eclipse.ui.views.navigator.ResourceComparator;
/**
- * Launches dialog where users can select a directory (either in a workspace or the file system.)
- *
+ * Launchers for dialogs where users can select a directory (either in a workspace or the file system.)
+ *
* @author alruiz@google.com (Alex Ruiz)
*/
-public class SelectDirectoryDialogLauncher {
+class SelectDirectoryDialogs {
private static final String PLUGIN_ID = "com.google.eclipse.protobuf.ui";
- public static String showWorkspaceDirectoryDialog(Shell shell, String initialPath, IProject project) {
+ static String showWorkspaceDirectoryDialog(Shell shell, String initialPath) {
+ return showWorkspaceDirectoryDialog(shell, initialPath, null);
+ }
+
+ static String showWorkspaceDirectoryDialog(Shell shell, String initialPath, IProject project) {
String currentPathText = initialPath.replaceAll("\"", "");
IPath path = new Path(currentPathText);
ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(shell, new WorkbenchLabelProvider(),
@@ -61,8 +62,8 @@
if (resource == null) return null;
return resource.getFullPath().toString();
}
-
- public static String showFileSystemFolderDialog(Shell shell, String filterPath) {
+
+ static String showFileSystemFolderDialog(Shell shell, String filterPath) {
DirectoryDialog dialog = new DirectoryDialog(shell, SWT.OPEN | SWT.APPLICATION_MODAL);
if (filterPath != null && filterPath.trim().length() != 0) dialog.setFilterPath(filterPath);
dialog.setMessage(browseFileSystemFolderPrompt);
@@ -73,5 +74,5 @@
return ResourcesPlugin.getWorkspace().getRoot();
}
- private SelectDirectoryDialogLauncher() {}
+ private SelectDirectoryDialogs() {}
}