diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/MarginChooser.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/MarginChooser.java | 229 |
1 files changed, 229 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/MarginChooser.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/MarginChooser.java new file mode 100644 index 000000000..c2a5f71b2 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/ui/MarginChooser.java @@ -0,0 +1,229 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Eclipse Public License, Version 1.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.eclipse.org/org/documents/epl-v10.php + * + * 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.adt.internal.ui; + +import com.android.ide.eclipse.adt.internal.editors.layout.gle2.GraphicalEditorPart; +import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; +import com.android.resources.ResourceType; + +import org.eclipse.jface.window.Window; +import org.eclipse.swt.SWT; +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.Event; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Listener; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; +import org.eclipse.ui.dialogs.SelectionStatusDialog; + +/** + * Dialog for choosing margins + */ +public class MarginChooser extends SelectionStatusDialog implements Listener { + private GraphicalEditorPart mEditor; + private AndroidTargetData mTargetData; + private Text mLeftField; + private Text mRightField; + private Text mTopField; + private Text mBottomField; + private Text mAllField; + private String mInitialAll; + private String mInitialLeft; + private String mInitialRight; + private String mInitialTop; + private String mInitialBottom; + private Label mErrorLabel; + private String[] mMargins; + + // Client data key for resource buttons pointing to the associated text field + private final static String PROP_TEXTFIELD = "textField"; //$NON-NLS-1$ + + /** + * Constructs a new margin chooser dialog. + * + * @param parent parent widget + * @param editor associated layout editor + * @param targetData current SDK target + * @param all current value for the all margins attribute + * @param left current value for the left margin + * @param right current value for the right margin + * @param top current value for the top margin + * @param bottom current value for the bottom margin + */ + public MarginChooser(Shell parent, GraphicalEditorPart editor, AndroidTargetData targetData, String all, + String left, String right, String top, String bottom) { + super(parent); + setTitle("Edit Margins"); + mEditor = editor; + mTargetData = targetData; + mInitialAll = all; + mInitialLeft = left; + mInitialRight = right; + mInitialTop = top; + mInitialBottom = bottom; + } + + @SuppressWarnings("unused") // SWT constructors have side effects, "new Label" is not unused. + @Override + protected Control createDialogArea(Composite parent) { + Composite container = new Composite(parent, SWT.NONE); + container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); + + container.setLayout(new GridLayout(3, false)); + + Label allLabel = new Label(container, SWT.NONE); + allLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + allLabel.setText("All:"); + + mAllField = new Text(container, SWT.BORDER | SWT.LEFT); + mAllField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + mAllField.setText(mInitialAll != null ? mInitialAll : ""); //$NON-NLS-1$ + + Button allButton = new Button(container, SWT.NONE); + allButton.setText("Resource..."); + allButton.setData(PROP_TEXTFIELD, mAllField); + + Label label = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL); + label.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1)); + + Label leftLabel = new Label(container, SWT.NONE); + leftLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + leftLabel.setText("Left:"); + + mLeftField = new Text(container, SWT.BORDER | SWT.LEFT); + mLeftField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + mLeftField.setText(mInitialLeft != null ? mInitialLeft : ""); //$NON-NLS-1$ + + Button leftButton = new Button(container, SWT.NONE); + leftButton.setText("Resource..."); + leftButton.setData(PROP_TEXTFIELD, mLeftField); + + Label rightLabel = new Label(container, SWT.NONE); + rightLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + rightLabel.setText("Right:"); + + mRightField = new Text(container, SWT.BORDER | SWT.LEFT); + mRightField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + mRightField.setText(mInitialRight != null ? mInitialRight : ""); //$NON-NLS-1$ + + Button rightButton = new Button(container, SWT.NONE); + rightButton.setText("Resource..."); + rightButton.setData(PROP_TEXTFIELD, mRightField); + + Label topLabel = new Label(container, SWT.NONE); + topLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + topLabel.setText("Top:"); + + mTopField = new Text(container, SWT.BORDER | SWT.LEFT); + mTopField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + mTopField.setText(mInitialTop != null ? mInitialTop : ""); //$NON-NLS-1$ + + Button topButton = new Button(container, SWT.NONE); + topButton.setText("Resource..."); + topButton.setData(PROP_TEXTFIELD, mTopField); + + Label bottomLabel = new Label(container, SWT.NONE); + bottomLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + bottomLabel.setText("Bottom:"); + + mBottomField = new Text(container, SWT.BORDER | SWT.LEFT); + mBottomField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + mBottomField.setText(mInitialBottom != null ? mInitialBottom : ""); //$NON-NLS-1$ + + Button bottomButton = new Button(container, SWT.NONE); + bottomButton.setText("Resource..."); + bottomButton.setData(PROP_TEXTFIELD, mBottomField); + + allButton.addListener(SWT.Selection, this); + leftButton.addListener(SWT.Selection, this); + rightButton.addListener(SWT.Selection, this); + topButton.addListener(SWT.Selection, this); + bottomButton.addListener(SWT.Selection, this); + + mAllField.addListener(SWT.Modify, this); + mLeftField.addListener(SWT.Modify, this); + mRightField.addListener(SWT.Modify, this); + mTopField.addListener(SWT.Modify, this); + mBottomField.addListener(SWT.Modify, this); + + new Label(container, SWT.NONE); + mErrorLabel = new Label(container, SWT.WRAP); + mErrorLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); + mErrorLabel.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_RED)); + return container; + } + + @Override + protected void computeResult() { + mMargins = new String[] { + mAllField.getText().trim(), + mLeftField.getText().trim(), mRightField.getText().trim(), + mTopField.getText().trim(), mBottomField.getText().trim() + }; + } + + /** + * Returns the margins in the order all, left, right, top, bottom + * + * @return the margins in the order all, left, right, top, bottom, never + * null + */ + public String[] getMargins() { + return mMargins; + } + + @Override + public void handleEvent(Event event) { + if (event.type == SWT.Modify) { + // Text field modification -- warn about non-dip numbers + if (event.widget instanceof Text) { + Text text = (Text) event.widget; + String input = text.getText().trim(); + boolean isNumber = false; + try { + if (Integer.parseInt(input) > 0) { + isNumber = true; + } + } catch (NumberFormatException nufe) { + // Users are allowed to enter non-numbers here, not an error + } + if (isNumber) { + String message = String.format("Hint: Use \"%1$sdp\" instead", input); + mErrorLabel.setText(message); + } else { + mErrorLabel.setText(""); + } + } + } else if (event.type == SWT.Selection) { + // Button pressed - open resource chooser + if (event.widget instanceof Button) { + Button button = (Button) event.widget; + Text text = (Text) button.getData(PROP_TEXTFIELD); + + // Open a resource chooser dialog for specified resource type. + ResourceChooser chooser = ResourceChooser.create(mEditor, ResourceType.DIMEN) + .setCurrentResource(text.getText().trim()); + if (chooser.open() == Window.OK) { + text.setText(chooser.getCurrentResource()); + } + } + } + } +} |