aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkLocationChooserDialog.java
diff options
context:
space:
mode:
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkLocationChooserDialog.java')
-rw-r--r--eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkLocationChooserDialog.java122
1 files changed, 122 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkLocationChooserDialog.java b/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkLocationChooserDialog.java
new file mode 100644
index 000000000..04f60c796
--- /dev/null
+++ b/eclipse/plugins/com.android.ide.eclipse.monitor/src/com/android/ide/eclipse/monitor/SdkLocationChooserDialog.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.ide.eclipse.monitor;
+
+import com.android.ide.eclipse.monitor.SdkToolsLocator.SdkInstallStatus;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.layout.GridDataFactory;
+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.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import java.io.File;
+
+public class SdkLocationChooserDialog extends Dialog {
+ private static final String TITLE = "Android Device Monitor";
+ private static final String DEFAULT_MESSAGE = "Provide the path to the Android SDK";
+
+ private Label mStatusLabel;
+ private Text mTextBox;
+ private String mPath;
+
+ public SdkLocationChooserDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ getShell().setText(TITLE);
+
+ Composite c = new Composite((Composite) super.createDialogArea(parent), SWT.NONE);
+ c.setLayout(new GridLayout(2, false));
+ c.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ Label l = new Label(c, SWT.NONE);
+ l.setText(DEFAULT_MESSAGE);
+ GridDataFactory.fillDefaults().span(2, 1).applyTo(l);
+
+ mTextBox = new Text(c, SWT.BORDER);
+ mTextBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ GridDataFactory.fillDefaults()
+ .hint(SwtUtils.getFontWidth(mTextBox) * 80, SWT.DEFAULT)
+ .applyTo(mTextBox);
+ mTextBox.addModifyListener(new ModifyListener() {
+ @Override
+ public void modifyText(ModifyEvent e) {
+ validateInstall();
+ }
+ });
+
+ Button browse = new Button(c, SWT.PUSH);
+ browse.setText("Browse");
+ browse.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ DirectoryDialog dlg = new DirectoryDialog(getShell(), SWT.OPEN);
+ dlg.setText("Android SDK location");
+ String dir = dlg.open();
+ if (dir != null) {
+ mTextBox.setText(dir);
+ validateInstall();
+ }
+ }
+ });
+
+ mStatusLabel = new Label(c, SWT.WRAP);
+ mStatusLabel.setText("");
+ mStatusLabel.setForeground(getShell().getDisplay().getSystemColor(SWT.COLOR_RED));
+ GridDataFactory.fillDefaults().span(2, 1).applyTo(mStatusLabel);
+
+ return super.createDialogArea(parent);
+ }
+
+ private void validateInstall() {
+ SdkToolsLocator locator = new SdkToolsLocator(new File(mTextBox.getText()));
+ SdkInstallStatus status = locator.isValidInstallation();
+ if (status.isValid()) {
+ mStatusLabel.setText("");
+ getButton(IDialogConstants.OK_ID).setEnabled(true);
+ } else {
+ mStatusLabel.setText(status.getErrorMessage());
+ mStatusLabel.pack();
+ getButton(IDialogConstants.OK_ID).setEnabled(false);
+ }
+ }
+
+ @Override
+ public boolean close() {
+ mPath = mTextBox.getText();
+ return super.close();
+ }
+
+ public String getPath() {
+ return mPath;
+ }
+}