diff options
Diffstat (limited to 'eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/assetstudio/ChooseAssetTypePage.java')
-rw-r--r-- | eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/assetstudio/ChooseAssetTypePage.java | 225 |
1 files changed, 225 insertions, 0 deletions
diff --git a/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/assetstudio/ChooseAssetTypePage.java b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/assetstudio/ChooseAssetTypePage.java new file mode 100644 index 000000000..a26a22e49 --- /dev/null +++ b/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/assetstudio/ChooseAssetTypePage.java @@ -0,0 +1,225 @@ +/* + * 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.assetstudio; + +import com.android.ide.eclipse.adt.internal.project.ProjectChooserHelper; +import com.android.ide.eclipse.adt.internal.project.ProjectChooserHelper.ProjectCombo; +import com.android.ide.eclipse.adt.internal.resources.ResourceNameValidator; +import com.android.resources.ResourceFolderType; + +import org.eclipse.jface.dialogs.IMessageProvider; +import org.eclipse.jface.wizard.WizardPage; +import org.eclipse.swt.SWT; +import org.eclipse.swt.dnd.Clipboard; +import org.eclipse.swt.dnd.TextTransfer; +import org.eclipse.swt.dnd.Transfer; +import org.eclipse.swt.events.ModifyEvent; +import org.eclipse.swt.events.ModifyListener; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +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.Label; +import org.eclipse.swt.widgets.Text; + +/** Page for choosing the type of asset to create, as well as the target project */ +public class ChooseAssetTypePage extends WizardPage implements SelectionListener, ModifyListener { + private final CreateAssetSetWizardState mValues; + private ProjectCombo mProjectButton; + private Button mClipboardButton; + private Text mNameText; + private boolean mNameModified; + private Label mResourceName; + + /** + * Create the wizard. + */ + public ChooseAssetTypePage(CreateAssetSetWizardState values) { + super("chooseAssetTypePage"); + mValues = values; + setTitle("Choose Icon Set Type"); + setDescription("Select the type of icon set to create:"); + } + + /** + * Create contents of the wizard. + * + * @param parent the parent composite + */ + @Override + public void createControl(Composite parent) { + Composite container = new Composite(parent, SWT.NULL); + + setControl(container); + container.setLayout(new GridLayout(3, false)); + + for (AssetType type : AssetType.values()) { + Button button = new Button(container, SWT.RADIO); + button.setData(type); + button.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 3, 1)); + button.setSelection(type == mValues.type); + button.setText(type.getDisplayName()); + button.addSelectionListener(this); + } + + Label separator = new Label(container, SWT.SEPARATOR | SWT.HORIZONTAL); + GridData gdSeparator = new GridData(SWT.FILL, SWT.CENTER, false, false, 3, 1); + gdSeparator.heightHint = 20; + separator.setLayoutData(gdSeparator); + + Label projectLabel = new Label(container, SWT.NONE); + projectLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + projectLabel.setText("Project:"); + + ProjectChooserHelper helper = + new ProjectChooserHelper(getShell(), null /* filter */); + mProjectButton = new ProjectCombo(helper, container, mValues.project); + mProjectButton.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); + mProjectButton.addSelectionListener(this); + + Label assetLabel = new Label(container, SWT.NONE); + assetLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + assetLabel.setText("Icon Name:"); + + mNameText = new Text(container, SWT.BORDER); + mNameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1)); + mNameText.addModifyListener(this); + + Label resourceLabel = new Label(container, SWT.NONE); + resourceLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + resourceLabel.setText("Resource:"); + + mResourceName = new Label(container, SWT.NONE); + mResourceName.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1)); + + mClipboardButton = new Button(container, SWT.FLAT); + mClipboardButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1)); + mClipboardButton.setText("Copy Name to Clipboard"); + + mClipboardButton.addSelectionListener(this); + + updateAssetType(); + validatePage(); + parent.getDisplay().asyncExec(new Runnable() { + @Override + public void run() { + mNameText.setFocus(); + } + }); + } + + private void updateAssetType() { + if (!mNameModified) { + // Default name suggestion, possibly as a suffix, e.g. "ic_menu_<name>" + String replace = "name"; + String suggestedName = String.format(mValues.type.getDefaultNameFormat(), replace); + mNameText.setText(suggestedName); + mValues.outputName = suggestedName; + + updateResourceLabel(); + mNameModified = false; + int start = suggestedName.indexOf(replace); + if (start != -1) { + mNameText.setSelection(start, start + replace.length()); + } else { + mNameText.selectAll(); + } + } else { + mNameText.selectAll(); + } + } + + private void updateResourceLabel() { + mResourceName.setText("@drawable/" + getOutputName()); //$NON-NLS-1$ + } + + @Override + public boolean canFlipToNextPage() { + return mValues.project != null; + } + + @Override + public void widgetSelected(SelectionEvent e) { + Object source = e.getSource(); + if (source == mProjectButton) { + mValues.project = mProjectButton.getSelectedProject(); + validatePage(); + } else if (source == mClipboardButton) { + Clipboard clipboard = new Clipboard(getShell().getDisplay()); + TextTransfer textTransfer = TextTransfer.getInstance(); + clipboard.setContents( + new Object[] { mResourceName.getText() }, + new Transfer[] { textTransfer }); + clipboard.dispose(); + } else if (source instanceof Button) { + // User selected a different asset type to be created + Object data = ((Button) source).getData(); + if (data instanceof AssetType) { + mValues.type = (AssetType) data; + CreateAssetSetWizardState.sLastType = mValues.type; + updateAssetType(); + } + } + } + + @Override + public void widgetDefaultSelected(SelectionEvent e) { + } + + @Override + public void modifyText(ModifyEvent e) { + Object source = e.getSource(); + if (source == mNameText) { + mNameModified = true; + mValues.outputName = mNameText.getText().trim(); + updateResourceLabel(); + } + + validatePage(); + } + + private String getOutputName() { + return mNameText.getText().trim(); + } + + private void validatePage() { + String error = null; + + if (mValues.project == null) { + error = "Please select an Android project."; + } else { + String outputName = getOutputName(); + if (outputName == null || outputName.length() == 0) { + error = "Please enter a name"; + } else { + ResourceNameValidator validator = + ResourceNameValidator.create(true, ResourceFolderType.DRAWABLE); + error = validator.isValid(outputName); + } + } + + setPageComplete(error == null); + if (error != null) { + setMessage(error, IMessageProvider.ERROR); + } else { + setErrorMessage(null); + setMessage(null); + } + } +} |