From 59d80f6547926b112e7f28cc8e0fd397d7d5650f Mon Sep 17 00:00:00 2001 From: Eugene Kudelevsky Date: Tue, 2 Aug 2011 19:44:40 +0400 Subject: [PATCH] android: add device configurator to "create resource" action --- .../android/actions/CreateResourceDialog.form | 40 +++++++++++-- .../android/actions/CreateResourceDialog.java | 59 ++++++++++++++++++- .../CreateResourceDirectoryDialog.java | 1 + .../actions/CreateResourceFileAction.java | 18 ++++-- 4 files changed, 104 insertions(+), 14 deletions(-) diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form index 240e030ffbe4..734008d2f03e 100644 --- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form +++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.form @@ -1,6 +1,6 @@
- + @@ -22,11 +22,6 @@ - - - - - @@ -57,6 +52,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java index ce2984bb27a9..59f30e3c70db 100644 --- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java +++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDialog.java @@ -16,15 +16,23 @@ package org.jetbrains.android.actions; +import com.android.ide.common.resources.configuration.FolderConfiguration; +import com.android.resources.ResourceFolderType; import com.intellij.ide.actions.TemplateKindCombo; import com.intellij.openapi.project.Project; import com.intellij.openapi.ui.DialogWrapper; import com.intellij.openapi.ui.InputValidator; +import com.intellij.ui.components.JBLabel; import com.intellij.util.PlatformIcons; import com.intellij.util.containers.HashMap; +import org.jetbrains.android.uipreview.DeviceConfiguratorPanel; +import org.jetbrains.android.uipreview.InvalidOptionValueException; import org.jetbrains.annotations.NotNull; import javax.swing.*; +import java.awt.*; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; import java.util.Collection; import java.util.Map; @@ -41,9 +49,13 @@ public abstract class CreateResourceDialog extends DialogWrapper { private JPanel myPanel; private JLabel myUpDownHint; private JLabel myResTypeLabel; + private JPanel myDeviceConfiguratorWrapper; + private JBLabel myErrorLabel; + private JTextField myDirectoryNameTextField; private InputValidator myValidator; private final Map myResType2ActionMap = new HashMap(); + private final DeviceConfiguratorPanel myDeviceConfiguratorPanel; public CreateResourceDialog(Project project, Collection actions, CreateTypedResourceFileAction selected) { super(project); @@ -57,16 +69,59 @@ public abstract class CreateResourceDialog extends DialogWrapper { myResType2ActionMap.put(resType, action); myResourceTypeCombo.addItem(action.toString(), null, resType); } + + myDeviceConfiguratorPanel = new DeviceConfiguratorPanel(null) { + @Override + public void applyEditors() { + try { + doApplyEditors(); + final FolderConfiguration config = myDeviceConfiguratorPanel.getConfiguration(); + final CreateTypedResourceFileAction selectedAction = getSelectedAction(); + myErrorLabel.setText(""); + myDirectoryNameTextField.setText(""); + if (selectedAction != null) { + final String resTypeStr = selectedAction.getResourceType(); + if (resTypeStr != null) { + final ResourceFolderType resFolderType = ResourceFolderType.getTypeByName(resTypeStr); + if (resFolderType != null) { + myDirectoryNameTextField.setText(config.getFolderName(resFolderType)); + } + } + } + } + catch (InvalidOptionValueException e) { + myErrorLabel.setText("" + e.getMessage() + ""); + myDirectoryNameTextField.setText(""); + } + setOKActionEnabled(myDirectoryNameTextField.getText().length() > 0); + } + }; + + myResourceTypeCombo.getComboBox().addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + myDeviceConfiguratorPanel.applyEditors(); + } + }); + + myDeviceConfiguratorPanel.updateAll(); + myDeviceConfiguratorWrapper.add(myDeviceConfiguratorPanel, BorderLayout.CENTER); + setOKActionEnabled(myDirectoryNameTextField.getText().length() > 0); + init(); } - protected abstract InputValidator createValidator(@NotNull String resourceType); + protected abstract InputValidator createValidator(@NotNull String subdirName); @Override protected void doOKAction() { String fileName = myFileNameField.getText(); assert getSelectedAction() != null; - myValidator = createValidator(getSelectedAction().getResourceType()); + + final String subdirName = myDirectoryNameTextField.getText(); + assert subdirName != null && subdirName.length() > 0; + + myValidator = createValidator(subdirName); if (myValidator.checkInput(fileName) && myValidator.canClose(fileName)) { super.doOKAction(); } diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java index 11049b66ecb0..4ea09d340a00 100644 --- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java +++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceDirectoryDialog.java @@ -70,6 +70,7 @@ public abstract class CreateResourceDirectoryDialog extends DialogWrapper { }); myDeviceConfiguratorPanel.updateAll(); + setOKActionEnabled(myDirectoryNameTextField.getText().length() > 0); init(); } diff --git a/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java b/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java index de06caa08bcc..780c57ad4260 100644 --- a/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java +++ b/plugins/android/src/org/jetbrains/android/actions/CreateResourceFileAction.java @@ -16,6 +16,7 @@ package org.jetbrains.android.actions; +import com.android.AndroidConstants; import com.intellij.CommonBundle; import com.intellij.ide.actions.CreateElementActionBase; import com.intellij.openapi.actionSystem.ActionManager; @@ -106,8 +107,8 @@ public class CreateResourceFileAction extends CreateElementActionBase { CreateTypedResourceFileAction createLayoutAction = mySubactions.get("layout"); CreateResourceDialog dialog = new CreateResourceDialog(project, mySubactions.values(), createLayoutAction) { @Override - protected InputValidator createValidator(@NotNull String resourceType) { - return CreateResourceFileAction.this.createValidator(project, directory, resourceType); + protected InputValidator createValidator(@NotNull String subdirName) { + return CreateResourceFileAction.this.createValidator(project, directory, subdirName); } }; dialog.setTitle(getCommandName()); @@ -120,12 +121,12 @@ public class CreateResourceFileAction extends CreateElementActionBase { } @NotNull - private MyInputValidator createValidator(Project project, final PsiDirectory resDir, final String resType) { - PsiDirectory resSubdir = resDir.findSubdirectory(resType); + private MyInputValidator createValidator(Project project, final PsiDirectory resDir, final String subdirName) { + PsiDirectory resSubdir = resDir.findSubdirectory(subdirName); if (resSubdir == null) { resSubdir = ApplicationManager.getApplication().runWriteAction(new Computable() { public PsiDirectory compute() { - return resDir.createSubdirectory(resType); + return resDir.createSubdirectory(subdirName); } }); } @@ -145,7 +146,12 @@ public class CreateResourceFileAction extends CreateElementActionBase { } private CreateTypedResourceFileAction getActionByDir(PsiDirectory directory) { - return mySubactions.get(directory.getName()); + String baseDirName = directory.getName(); + final int index = baseDirName.indexOf(AndroidConstants.RES_QUALIFIER_SEP); + if (index >= 0) { + baseDirName = baseDirName.substring(0, index); + } + return mySubactions.get(baseDirName); } @Override