aboutsummaryrefslogtreecommitdiff
path: root/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/assetstudio/ChooseAssetTypePage.java
diff options
context:
space:
mode:
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.java225
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);
+ }
+ }
+}