| /* |
| * 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.locations; |
| |
| import static org.eclipse.jface.dialogs.IDialogConstants.OK_ID; |
| import static org.eclipse.xtext.util.Strings.isEmpty; |
| import static com.google.eclipse.protobuf.ui.preferences.locations.DirectorySelectionDialogs.showFileSystemDirectorySelectionDialog; |
| import static com.google.eclipse.protobuf.ui.preferences.locations.DirectorySelectionDialogs.showWorkspaceDirectorySelectionDialog; |
| import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.addDirectoryPath; |
| import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.browseFileSystem; |
| import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.browseWorkspace; |
| import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.directory; |
| import static com.google.eclipse.protobuf.ui.preferences.locations.Messages.isWorkspacePathCheck; |
| import static com.google.eclipse.protobuf.ui.preferences.pages.TextWidgets.setEditable; |
| |
| import org.eclipse.core.resources.IProject; |
| import org.eclipse.core.runtime.IPath; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.events.ModifyEvent; |
| import org.eclipse.swt.events.ModifyListener; |
| 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; |
| |
| import com.google.eclipse.protobuf.ui.preferences.pages.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 InputDialog { |
| private static final String DIRECTORY_PATH_FORMAT = "${workspace_loc:%s}"; |
| |
| private final IProject project; |
| |
| private String selectedPath; |
| |
| private Text txtPath; |
| private Button btnWorkspace; |
| private Button btnIsWorkspacePath; |
| private Button btnFileSystem; |
| |
| /** |
| * Creates a new </code>{@link AddDirectoryDialog}</code>. |
| * @param parent a shell which will be the parent of the new instance. |
| * @param project the project whose properties the user is modifying. |
| */ |
| public AddDirectoryDialog(Shell parent, IProject project) { |
| super(parent, addDirectoryPath); |
| this.project = project; |
| } |
| |
| @Override protected Control createDialogArea(Composite parent) { |
| Composite cmpDialogArea = (Composite) super.createDialogArea(parent); |
| |
| GridLayout gridLayout = (GridLayout) cmpDialogArea.getLayout(); |
| gridLayout.numColumns = 2; |
| |
| Label label = new Label(cmpDialogArea, SWT.NONE); |
| label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); |
| label.setText(directory); |
| |
| txtPath = new Text(cmpDialogArea, SWT.BORDER); |
| txtPath.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); |
| setEditable(txtPath, false); |
| |
| Composite cmpCheckBox = new Composite(cmpDialogArea, SWT.NONE); |
| cmpCheckBox.setEnabled(false); |
| cmpCheckBox.setLayoutData(new GridData(SWT.RIGHT, SWT.TOP, false, false, 1, 1)); |
| cmpCheckBox.setLayout(new GridLayout(1, false)); |
| |
| btnIsWorkspacePath = new Button(cmpCheckBox, SWT.CHECK); |
| btnIsWorkspacePath.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false, 1, 1)); |
| btnIsWorkspacePath.setSize(158, 24); |
| btnIsWorkspacePath.setText(isWorkspacePathCheck); |
| |
| 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); |
| |
| btnWorkspace = new Button(cmpButtons, SWT.NONE); |
| btnWorkspace.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 1, 1)); |
| 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); |
| |
| addEventListeners(); |
| |
| applyDialogFont(cmpDialogArea); |
| return cmpDialogArea; |
| } |
| |
| private void addEventListeners() { |
| btnWorkspace.addSelectionListener(new SelectionAdapter() { |
| @Override public void widgetSelected(SelectionEvent e) { |
| IPath path = showWorkspaceDirectorySelectionDialog(getShell(), enteredPathText()); |
| if (path != null) { |
| path = ProjectVariable.replaceProjectNameWithProjectVariable(path, project); |
| txtPath.setText(path.toString().trim()); |
| btnIsWorkspacePath.setSelection(true); |
| } |
| } |
| }); |
| btnFileSystem.addSelectionListener(new SelectionAdapter() { |
| @Override public void widgetSelected(SelectionEvent e) { |
| String path = showFileSystemDirectorySelectionDialog(getShell(), enteredPathText()); |
| if (path != null) { |
| txtPath.setText(path.trim()); |
| btnIsWorkspacePath.setSelection(false); |
| } |
| } |
| }); |
| txtPath.addModifyListener(new ModifyListener() { |
| @Override public void modifyText(ModifyEvent e) { |
| boolean hasText = !isEmpty(enteredPathText()); |
| getButton(OK_ID).setEnabled(hasText); |
| } |
| }); |
| } |
| |
| @Override protected void createButtonsForButtonBar(Composite parent) { |
| super.createButtonsForButtonBar(parent); |
| getButton(OK_ID).setEnabled(false); |
| txtPath.setFocus(); |
| } |
| |
| @Override protected void okPressed() { |
| selectedPath = enteredPathText(); |
| if (btnIsWorkspacePath.getSelection()) { |
| selectedPath = String.format(DIRECTORY_PATH_FORMAT, selectedPath); |
| } |
| super.okPressed(); |
| } |
| |
| private String enteredPathText() { |
| return txtPath.getText().trim(); |
| } |
| |
| /** |
| * Returns the path selected by the user. |
| * @return the path selected by the user. |
| */ |
| public String selectedPath() { |
| return selectedPath; |
| } |
| } |