summaryrefslogtreecommitdiff
path: root/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewLauncherWizardPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewLauncherWizardPage.java')
-rw-r--r--src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewLauncherWizardPage.java344
1 files changed, 344 insertions, 0 deletions
diff --git a/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewLauncherWizardPage.java b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewLauncherWizardPage.java
new file mode 100644
index 0000000..709b063
--- /dev/null
+++ b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewLauncherWizardPage.java
@@ -0,0 +1,344 @@
+/*
+ * Copyright (C) 2012 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.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.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.motorola.studio.android.wizards.buildingblocks;
+
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.IInputValidator;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.swt.widgets.Listener;
+
+import com.motorola.studio.android.codeutils.i18n.CodeUtilsNLS;
+import com.motorola.studio.android.common.exception.AndroidException;
+import com.motorola.studio.android.common.log.StudioLogger;
+import com.motorola.studio.android.common.utilities.AndroidUtils;
+import com.motorola.studio.android.model.BuildingBlockModel;
+import com.motorola.studio.android.model.Launcher;
+import com.motorola.studio.android.wizards.elements.AddInputRemoveButtons;
+
+/**
+ * Abstract class to contribute with the Building Blocks Wizards. This class
+ * creates the controls to add Intent Filters and Categories to the
+ * Building Blocks
+ */
+public abstract class NewLauncherWizardPage extends NewBuildingBlocksWizardPage
+{
+ private List activityActions;
+
+ private AddInputRemoveButtons addRemoveActionButtons;
+
+ private AddInputRemoveButtons addRemoveCategoryButtons;
+
+ private List activityCategories;
+
+ private class InputDialogValidator implements IInputValidator
+ {
+
+ /* (non-Javadoc)
+ * @see org.eclipse.jface.dialogs.IInputValidator#isValid(java.lang.String)
+ */
+ public String isValid(String newText)
+ {
+ String message = null;
+ if (((newText == null) || (newText.length() == 0) || (newText.contains(" ")))) //$NON-NLS-1$
+ {
+ message = CodeUtilsNLS.NewLauncherWizardPage_InputDialogValidationMessage;
+ }
+ return message;
+ }
+ }
+
+ /**
+ * Default constructor
+ *
+ * @param buildBlock The building block model
+ * @param pageName The page name
+ */
+ protected NewLauncherWizardPage(BuildingBlockModel buildBlock, String pageName)
+ {
+ super(buildBlock, pageName);
+ }
+
+ /**
+ * Creates the "Action" section on the wizard
+ *
+ * @param composite the wizard composite
+ */
+ protected void createActionsControls(Composite composite)
+ {
+ Label activityActionsLabel = new Label(composite, SWT.NONE);
+ activityActionsLabel.setText(CodeUtilsNLS.UI_NewLauncherWizardPage_ActionLabel);
+ GridData gridData = new GridData();
+ gridData.widthHint = convertWidthInCharsToPixels(12);
+ gridData.verticalAlignment = GridData.BEGINNING;
+ activityActionsLabel.setLayoutData(gridData);
+
+ activityActions = new List(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+ activityActions.setItems(getBuildBlock().getIntentFilterActionsAsArray());
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
+ gridData.heightHint = convertHeightInCharsToPixels(3);
+ activityActions.setLayoutData(gridData);
+ addRemoveActionButtons = new AddInputRemoveButtons(composite);
+ setButtonLayoutData(addRemoveActionButtons.getAddButton());
+ setButtonLayoutData(addRemoveActionButtons.getInputButton());
+ setButtonLayoutData(addRemoveActionButtons.getRemoveButton());
+
+ addRemoveActionButtons.getAddButton().addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event arg0)
+ {
+ Set<String> categorySet =
+ new HashSet<String>(Arrays.asList(getIntentFiltersActions()));
+
+ try
+ {
+ categorySet.removeAll(getBuildBlock().getIntentFilterActions());
+ }
+ catch (Exception e)
+ {
+ StudioLogger.error(NewLauncherWizardPage.class, e.getLocalizedMessage(), e);
+ }
+ FilteredActionsSelectionDialog dialog =
+ new FilteredActionsSelectionDialog(getShell(), categorySet);
+ dialog.setInitialPattern("**");
+ dialog.setTitle(CodeUtilsNLS.UI_NewLauncherWizardPage_ActionSelectionDialogTitle);
+ dialog.setMessage(CodeUtilsNLS.UI_NewLauncherWizardPage_ActionSelectionDialogMessage);
+
+ if (Dialog.OK == dialog.open())
+ {
+ for (Object result : dialog.getResult())
+ {
+ getBuildBlock().addIntentFilterAction((String) result);
+ }
+ activityActions.setItems(getBuildBlock().getIntentFilterActionsAsArray());
+ addRemoveActionButtons.getRemoveButton().setEnabled(
+ activityActions.getSelectionCount() > 0);
+ updateStatus(getBuildBlock().getStatus());
+ }
+ }
+
+ });
+ addRemoveActionButtons.getInputButton().addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event event)
+ {
+ InputDialog dialog =
+ new InputDialog(getShell(),
+ CodeUtilsNLS.NewLauncherWizardPage_ActionTypeDialogTitle,
+ CodeUtilsNLS.NewLauncherWizardPage_ActionTypeDialogMessage, null,
+ new InputDialogValidator());
+ int result = dialog.open();
+ if (result == InputDialog.OK)
+ {
+ String action = dialog.getValue();
+ if (action != null)
+ {
+ getBuildBlock().addIntentFilterAction(action.trim());
+ activityActions.setItems(getBuildBlock().getIntentFilterActionsAsArray());
+ addRemoveActionButtons.getRemoveButton().setEnabled(
+ activityActions.getSelectionCount() > 0);
+ updateStatus(getBuildBlock().getStatus());
+ }
+ }
+ }
+ });
+ addRemoveActionButtons.getRemoveButton()
+ .setEnabled(activityActions.getSelectionCount() > 0);
+ addRemoveActionButtons.getRemoveButton().addListener(SWT.Selection, new Listener()
+ {
+
+ public void handleEvent(Event arg0)
+ {
+ for (int selection : activityActions.getSelectionIndices())
+ {
+ getBuildBlock().removeIntentFilterAction(activityActions.getItem(selection));
+ }
+ activityActions.setItems(getBuildBlock().getIntentFilterActionsAsArray());
+ addRemoveActionButtons.getRemoveButton().setEnabled(
+ activityActions.getSelectionCount() > 0);
+ updateStatus(getBuildBlock().getStatus());
+ }
+
+ });
+ activityActions.addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event arg0)
+ {
+ addRemoveActionButtons.getRemoveButton().setEnabled(
+ activityActions.getSelectionCount() > 0);
+ }
+ });
+ }
+
+ /**
+ * Creates the "Categories" section on the wizard
+ *
+ * @param composite the wizard composite
+ */
+ protected void createCategoriesControls(Composite composite)
+ {
+ GridData gridData;
+ Label activitycategoriesLabel = new Label(composite, SWT.NONE);
+ activitycategoriesLabel.setText(CodeUtilsNLS.UI_NewLauncherWizardPage_CategoryLabel);
+ gridData = new GridData();
+ gridData.verticalAlignment = GridData.BEGINNING;
+ activitycategoriesLabel.setLayoutData(gridData);
+
+ activityCategories = new List(composite, SWT.BORDER | SWT.V_SCROLL | SWT.H_SCROLL);
+ activityCategories.setItems(getBuildBlock().getIntentFilterCategoriesAsArray());
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1);
+ gridData.heightHint = convertHeightInCharsToPixels(3);
+ activityCategories.setLayoutData(gridData);
+
+ addRemoveCategoryButtons = new AddInputRemoveButtons(composite);
+ setButtonLayoutData(addRemoveCategoryButtons.getAddButton());
+ setButtonLayoutData(addRemoveCategoryButtons.getInputButton());
+ setButtonLayoutData(addRemoveCategoryButtons.getRemoveButton());
+
+ addRemoveCategoryButtons.getAddButton().addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event arg0)
+ {
+ Set<String> categorySet = new HashSet<String>(0);
+ try
+ {
+ categorySet =
+ new HashSet<String>(Arrays.asList(AndroidUtils
+ .getIntentFilterCategories(getBuildBlock().getProject())));
+ }
+ catch (AndroidException e)
+ {
+ setErrorMessage(e.getMessage());
+ }
+
+ categorySet.removeAll(getBuildBlock().getIntentFilterCategories());
+
+ FilteredActionsSelectionDialog dialog =
+ new FilteredActionsSelectionDialog(getShell(), categorySet);
+ dialog.setInitialPattern("**");
+ dialog.setTitle(CodeUtilsNLS.UI_NewLauncherWizardPage_CategorySelectionDialogTitle);
+ dialog.setMessage(CodeUtilsNLS.UI_NewLauncherWizardPage_CategorySelectionDialogMessage);
+
+ if (Dialog.OK == dialog.open())
+ {
+ for (Object result : dialog.getResult())
+ {
+ getBuildBlock().addIntentFilterCategories((String) result);
+ }
+ activityCategories.setItems(getBuildBlock().getIntentFilterCategoriesAsArray());
+ addRemoveCategoryButtons.getRemoveButton().setEnabled(
+ activityCategories.getSelectionCount() > 0);
+ updateStatus(getBuildBlock().getStatus());
+ }
+ }
+ });
+ addRemoveCategoryButtons.getInputButton().addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event event)
+ {
+ InputDialog dialog =
+ new InputDialog(getShell(),
+ CodeUtilsNLS.NewLauncherWizardPage_CategoryTypeDialogTitle,
+ CodeUtilsNLS.NewLauncherWizardPage_CategoryTypeDialogMessage, null,
+ new InputDialogValidator());
+ int result = dialog.open();
+ if (result == InputDialog.OK)
+ {
+ String action = dialog.getValue();
+ if (action != null)
+ {
+ getBuildBlock().addIntentFilterCategories(action.trim());
+ activityCategories.setItems(getBuildBlock()
+ .getIntentFilterCategoriesAsArray());
+ addRemoveCategoryButtons.getRemoveButton().setEnabled(
+ activityCategories.getSelectionCount() > 0);
+ updateStatus(getBuildBlock().getStatus());
+ }
+ }
+ }
+ });
+ addRemoveCategoryButtons.getRemoveButton().addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event arg0)
+ {
+ for (int selection : activityCategories.getSelectionIndices())
+ {
+ getBuildBlock().removeIntentFilterCategories(
+ activityCategories.getItem(selection));
+ }
+ activityCategories.setItems(getBuildBlock().getIntentFilterCategoriesAsArray());
+ addRemoveCategoryButtons.getRemoveButton().setEnabled(
+ activityCategories.getSelectionCount() > 0);
+ updateStatus(getBuildBlock().getStatus());
+ }
+ });
+ addRemoveCategoryButtons.getRemoveButton().setEnabled(
+ activityCategories.getSelectionCount() > 0);
+ activityCategories.addListener(SWT.Selection, new Listener()
+ {
+ public void handleEvent(Event arg0)
+ {
+ addRemoveCategoryButtons.getRemoveButton().setEnabled(
+ activityCategories.getSelectionCount() > 0);
+ }
+ });
+ }
+
+ /**
+ * Creates the Intent Filter group on the wizard page
+ *
+ * @param parent The wizard composite
+ */
+ protected void createIntentFilterControls(Composite parent)
+ {
+ Group intentFilterGroup = new Group(parent, SWT.NONE);
+ intentFilterGroup.setText(CodeUtilsNLS.UI_NewLauncherWizardPage_IntentFilterGroupName);
+ intentFilterGroup.setLayout(new GridLayout(4, false));
+ intentFilterGroup.setLayoutData(new GridData(GridData.FILL, GridData.FILL, false, false, 4,
+ 1));
+
+ createActionsControls(intentFilterGroup);
+ createCategoriesControls(intentFilterGroup);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getBuildBlock()
+ */
+ @Override
+ public Launcher getBuildBlock()
+ {
+ return (Launcher) super.getBuildBlock();
+ }
+
+ /**
+ * Return all intent filters actions according with the Building Block
+ * @return
+ */
+ protected abstract String[] getIntentFiltersActions();
+
+}