/* * 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.resources.IResourceRepository; import com.android.ide.eclipse.adt.internal.resources.manager.ResourceManager; import com.android.ide.eclipse.adt.internal.sdk.AndroidTargetData; import com.android.resources.ResourceType; import org.eclipse.core.resources.IProject; 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; public class MarginChooser extends SelectionStatusDialog implements Listener { private IProject mProject; 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$ public MarginChooser(Shell parent, IProject project, AndroidTargetData targetData, String all, String left, String right, String top, String bottom) { super(parent); setTitle("Edit Margins"); mProject = project; mTargetData = targetData; mInitialAll = all; mInitialLeft = left; mInitialRight = right; mInitialTop = top; mInitialBottom = bottom; } @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)); return container; } @Override protected void computeResult() { mMargins = new String[] { mAllField.getText().trim(), mLeftField.getText().trim(), mRightField.getText().trim(), mTopField.getText().trim(), mBottomField.getText().trim() }; } public String[] getMargins() { return mMargins; } 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$sdip\" 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; // Open a resource chooser dialog for specified resource type. IResourceRepository projectRepository = ResourceManager.getInstance() .getProjectResources(mProject); IResourceRepository systemRepository = mTargetData.getSystemResources(); ResourceChooser dlg = new ResourceChooser(mProject, ResourceType.DIMEN, projectRepository, systemRepository, getShell()); Text text = (Text) button.getData(PROP_TEXTFIELD); dlg.setCurrentResource(text.getText().trim()); if (dlg.open() == Window.OK) { text.setText(dlg.getCurrentResource()); } } } } }