aboutsummaryrefslogtreecommitdiffstats
path: root/sdkmanager
diff options
context:
space:
mode:
authorXavier Ducrohet <xav@android.com>2009-10-02 14:30:43 -0700
committerXavier Ducrohet <xav@android.com>2009-10-02 15:16:06 -0700
commita0c4971c698d05fbcc13d9700bef01a6b83fa704 (patch)
treec84253e18a80dd3c00bc83cf9d397e5d8a8dbf5f /sdkmanager
parent029f98d69605e322c8f8592ab59d2f89814872c8 (diff)
downloadsdk-a0c4971c698d05fbcc13d9700bef01a6b83fa704.zip
sdk-a0c4971c698d05fbcc13d9700bef01a6b83fa704.tar.gz
sdk-a0c4971c698d05fbcc13d9700bef01a6b83fa704.tar.bz2
Monintor resolution/size chooser dialog
This simple dialog lets the user choose a screen size (from a fixed list) and a resolution (as returned by SWT's Display class). This is used by the AVD start options dialog to help users figure out the pixel density of their monitor. Change-Id: I3eec0e7fac850c82e836d2bc0291a491f29f516e
Diffstat (limited to 'sdkmanager')
-rw-r--r--sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java26
-rw-r--r--sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/ResolutionChooserDialog.java138
2 files changed, 160 insertions, 4 deletions
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java
index 227f23e..d96534b 100644
--- a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/AvdStartDialog.java
@@ -22,6 +22,7 @@ import com.android.sdkuilib.internal.repository.SettingsController;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.jface.window.Window;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
@@ -83,7 +84,7 @@ final class AvdStartDialog extends Dialog {
private String mSkinDisplay;
private boolean mEnableScaling = true;
- protected AvdStartDialog(Shell parentShell, AvdInfo avd, String sdkLocation,
+ AvdStartDialog(Shell parentShell, AvdInfo avd, String sdkLocation,
SettingsController settingsController) {
super(parentShell);
mAvd = avd;
@@ -111,7 +112,7 @@ final class AvdStartDialog extends Dialog {
}
@Override
- protected Control createDialogArea(Composite parent) {
+ protected Control createDialogArea(final Composite parent) {
GridData gd;
// create a composite with standard margins and spacing
@@ -150,7 +151,7 @@ final class AvdStartDialog extends Dialog {
scaleGroup.setLayoutData(gd = new GridData(GridData.FILL_HORIZONTAL));
gd.horizontalIndent = 30;
gd.horizontalSpan = 2;
- scaleGroup.setLayout(new GridLayout(2, false));
+ scaleGroup.setLayout(new GridLayout(3, false));
l = new Label(scaleGroup, SWT.NONE);
l.setText("Screen Size (in):");
@@ -172,12 +173,16 @@ final class AvdStartDialog extends Dialog {
onScaleChange();
}
});
+ // empty composite, only 2 widgets on this line.
+ new Composite(scaleGroup, SWT.NONE).setLayoutData(gd = new GridData());
+ gd.widthHint = gd.heightHint = 0;
l = new Label(scaleGroup, SWT.NONE);
l.setText("Monitor dpi:");
mMonitorDpi = new Text(scaleGroup, SWT.BORDER);
mMonitorDpi.setText(Integer.toString(getMonitorDpi()));
- mMonitorDpi.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ mMonitorDpi.setLayoutData(gd = new GridData(GridData.FILL_HORIZONTAL));
+ gd.widthHint = 50;
mMonitorDpi.addVerifyListener(new VerifyListener() {
public void verifyText(VerifyEvent event) {
// check for digit only.
@@ -196,6 +201,19 @@ final class AvdStartDialog extends Dialog {
}
});
+ Button button = new Button(scaleGroup, SWT.PUSH | SWT.FLAT);
+ button.setText("?");
+ button.setToolTipText("Click to figure out your monitor's pixel density");
+ button.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent arg0) {
+ ResolutionChooserDialog dialog = new ResolutionChooserDialog(parent.getShell());
+ if (dialog.open() == Window.OK) {
+ mMonitorDpi.setText(Integer.toString(dialog.getDensity()));
+ }
+ }
+ });
+
scaleGroup.setEnabled(defaultState);
mScaleButton.addSelectionListener(new SelectionAdapter() {
diff --git a/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/ResolutionChooserDialog.java b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/ResolutionChooserDialog.java
new file mode 100644
index 0000000..94ed3b9
--- /dev/null
+++ b/sdkmanager/libs/sdkuilib/src/com/android/sdkuilib/internal/widgets/ResolutionChooserDialog.java
@@ -0,0 +1,138 @@
+/*
+ * Copyright (C) 2009 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.sdkuilib.internal.widgets;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IDialogConstants;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.graphics.Rectangle;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Monitor;
+import org.eclipse.swt.widgets.Shell;
+
+/**
+ * Small dialog to let a user choose a screen size (from a fixed list) and a resolution
+ * (as returned by {@link Display#getMonitors()}).
+
+ * After the dialog as returned, one can query {@link #getDensity()} to get the chosen monitor
+ * pixel density.
+ */
+class ResolutionChooserDialog extends Dialog {
+ public final static float[] MONITOR_SIZES = new float[] {
+ 13.3f, 14, 15.4f, 15.6f, 17, 19, 20, 21, 24, 30,
+ };
+
+ private Button mButton;
+ private Combo mScreenSizeCombo;
+ private Combo mMonitorCombo;
+
+ private Monitor[] mMonitors;
+ private int mScreenSizeIndex = -1;
+ private int mMonitorIndex = 0;
+
+ ResolutionChooserDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ /**
+ * Returns the pixel density of the user-chosen monitor.
+ */
+ int getDensity() {
+ float size = MONITOR_SIZES[mScreenSizeIndex];
+ Rectangle rect = mMonitors[mMonitorIndex].getBounds();
+
+ // compute the density
+ double d = Math.sqrt(rect.width * rect.width + rect.height * rect.height) / size;
+ return (int)Math.round(d);
+ }
+
+ @Override
+ protected void configureShell(Shell newShell) {
+ newShell.setText("Monitor Density");
+ super.configureShell(newShell);
+ }
+
+ @Override
+ protected Control createContents(Composite parent) {
+ Control control = super.createContents(parent);
+ mButton = getButton(IDialogConstants.OK_ID);
+ mButton.setEnabled(false);
+ return control;
+ }
+
+ @Override
+ protected Control createDialogArea(Composite parent) {
+ // create a composite with standard margins and spacing
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
+ layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
+ layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
+ layout.horizontalSpacing = convertHorizontalDLUsToPixels(
+ IDialogConstants.HORIZONTAL_SPACING);
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ Label l = new Label(composite, SWT.NONE);
+ l.setText("Screen Size:");
+
+ mScreenSizeCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+ for (float size : MONITOR_SIZES) {
+ if (Math.round(size) == size) {
+ mScreenSizeCombo.add(String.format("%.0f\"", size));
+ } else {
+ mScreenSizeCombo.add(String.format("%.1f\"", size));
+ }
+ }
+ mScreenSizeCombo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent arg0) {
+ mScreenSizeIndex = mScreenSizeCombo.getSelectionIndex();
+ mButton.setEnabled(mScreenSizeIndex != -1);
+ }
+ });
+
+ l = new Label(composite, SWT.NONE);
+ l.setText("Resolution:");
+
+ mMonitorCombo = new Combo(composite, SWT.DROP_DOWN | SWT.READ_ONLY);
+ mMonitors = parent.getDisplay().getMonitors();
+ for (Monitor m : mMonitors) {
+ Rectangle r = m.getBounds();
+ mMonitorCombo.add(String.format("%d x %d", r.width, r.height));
+ }
+ mMonitorCombo.select(mMonitorIndex);
+ mMonitorCombo.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetDefaultSelected(SelectionEvent arg0) {
+ mMonitorIndex = mMonitorCombo.getSelectionIndex();
+ }
+ });
+
+ applyDialogFont(composite);
+ return composite;
+ }
+}