summaryrefslogtreecommitdiff
path: root/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/ActivitySampleSelectionPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/ActivitySampleSelectionPage.java')
-rw-r--r--src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/ActivitySampleSelectionPage.java364
1 files changed, 364 insertions, 0 deletions
diff --git a/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/ActivitySampleSelectionPage.java b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/ActivitySampleSelectionPage.java
new file mode 100644
index 0000000..fd53350
--- /dev/null
+++ b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/ActivitySampleSelectionPage.java
@@ -0,0 +1,364 @@
+/*
+ * 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 org.eclipse.jface.dialogs.IPageChangeProvider;
+import org.eclipse.jface.dialogs.IPageChangedListener;
+import org.eclipse.jface.dialogs.PageChangedEvent;
+import org.eclipse.jface.resource.ImageDescriptor;
+import org.eclipse.jface.viewers.ArrayContentProvider;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerComparator;
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.ScrolledComposite;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+
+import com.motorola.studio.android.codeutils.CodeUtilsActivator;
+import com.motorola.studio.android.codeutils.i18n.CodeUtilsNLS;
+import com.motorola.studio.android.common.exception.AndroidException;
+import com.motorola.studio.android.common.utilities.AndroidUtils;
+import com.motorola.studio.android.model.ActivityBasedOnTemplate;
+
+/**
+ * New activity wizard sample page.
+ */
+public class ActivitySampleSelectionPage extends NewLauncherWizardPage
+{
+ private static final String ANDROID_LOGO_ICON_PATH = "icons/obj16/androidLogo.png";
+
+ private TreeViewer treeViewer;
+
+ private Label descriptionLabel;
+
+ private String content[];
+
+ private boolean canFlip = false;
+
+ private static final String NEW_ACTIVITY_BASED_ON_TEMPLATE_HELP = CodeUtilsActivator.PLUGIN_ID
+ + ".new-activity-based-on-template"; //$NON-NLS-1$
+
+ private static Image androidImg = null;
+
+ public static final String PAGE_NAME = "Samples Page";
+
+ /*
+ * Listener to update description pane whenever this page is open
+ */
+ private class PageChangeListener implements IPageChangedListener
+ {
+ public void pageChanged(PageChangedEvent event)
+ {
+ if ((event.getSelectedPage() == ActivitySampleSelectionPage.this))
+ {
+ ActivitySampleSelectionPage.this.getControl().update();
+ ((ActivitySampleSelectionPage) event.getSelectedPage()).updateDescriptionPane();
+ }
+ }
+ }
+
+ /**
+ * Create a new wizard page based on activity samples.
+ * @param activity The building block model to be used in the wizard page.
+ * */
+ protected ActivitySampleSelectionPage(ActivityBasedOnTemplate activity)
+ {
+ super(activity, PAGE_NAME);
+
+ activity.evaluateSamplesList(ActivityBasedOnTemplate.SAMPLE_CATEGORY.SAMPLE_ACTIVITIES_CATEGORY);
+
+ ImageDescriptor imgDescr =
+ CodeUtilsActivator.imageDescriptorFromPlugin(CodeUtilsActivator.PLUGIN_ID,
+ ANDROID_LOGO_ICON_PATH);
+ if (imgDescr != null)
+ {
+ androidImg = imgDescr.createImage();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ * */
+ @Override
+ public boolean canFlipToNextPage()
+ {
+
+ return canFlip;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizard#getBuildBlock()
+ */
+ @Override
+ public ActivityBasedOnTemplate getBuildBlock()
+ {
+ return (ActivityBasedOnTemplate) super.getBuildBlock();
+ }
+
+ @Override
+ public IWizardPage getNextPage()
+ {
+ String selection =
+ treeViewer.getSelection() != null ? treeViewer.getSelection().toString() : null;
+ selection = selection != null ? selection.substring(1, selection.length() - 1) : null;
+
+ if ((selection != null)
+ && selection
+ .equalsIgnoreCase(ActivityBasedOnTemplate.LIST_ACTIVITIES_SAMPLE_LOCALIZED))
+ {
+ return this.getWizard().getPage(NewActivityWizardListTemplatesPage.PAGE_NAME);
+ }
+ return this.getWizard().getPage(CodeUtilsNLS.UI_NewActivityMainPage_PageTitle);
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getMethods()
+ */
+ @Override
+ protected Method[] getMethods()
+ {
+ Method onCreateMethod = new Method(getBuildBlock().getOnStartMessage())
+ {
+ @Override
+ public void handle(boolean selection)
+ {
+ getBuildBlock().setOnStart(selection);
+ }
+ };
+ return new Method[]
+ {
+ onCreateMethod
+ };
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#createIntermediateControls(org.eclipse.swt.widgets.Composite)
+ */
+ @Override
+ protected void createExtendedControls(Composite parent)
+ {
+ Composite mainComposite = new Composite(parent, SWT.FILL);
+ mainComposite.setLayout(new GridLayout(1, false));
+ mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ // Samples Tree Label
+ Label itemsTableLabel = new Label(mainComposite, SWT.NONE);
+ itemsTableLabel.setText(CodeUtilsNLS.UI_SampleSelectionPage_SamplesTreeLabel);
+
+ // Samples Tree Viewer
+ treeViewer = new TreeViewer(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
+ treeViewer.getControl().setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
+ treeViewer.setLabelProvider(new LabelProvider()
+ {
+ @Override
+ public Image getImage(Object obj)
+ {
+ return androidImg;
+ }
+
+ @Override
+ public String getText(Object element)
+ {
+ return element.toString();
+ }
+ });
+
+ content = new String[getBuildBlock().getAvailableSamples().size()];
+
+ int i = 0;
+ for (String currentSample : getBuildBlock().getAvailableSamples().keySet())
+ {
+ content[i] = currentSample;
+ i++;
+ }
+
+ treeViewer.setContentProvider(new SampleTreeContentProvider(content));
+ treeViewer.setInput(content);
+
+ final Group intentFilterGroup = new Group(mainComposite, SWT.NONE);
+
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener()
+ {
+ public void selectionChanged(SelectionChangedEvent e)
+ {
+ String selection = e.getSelection().toString();
+ getBuildBlock().setSample(selection.substring(1, selection.length() - 1));
+
+ getBuildBlock().setSampleCategoty(
+ ActivityBasedOnTemplate.SAMPLE_CATEGORY.SAMPLE_ACTIVITIES_CATEGORY);
+
+ if (selection.substring(1, selection.length() - 1).equals(
+ ActivityBasedOnTemplate.DATABASE_LIST_SAMPLE_LOCALIZED))
+ {
+ getBuildBlock().setDatabaseTemplateSelected(true);
+ }
+ else
+ {
+ getBuildBlock().setDatabaseTemplateSelected(false);
+ }
+
+ canFlip = true;
+
+ updateDescriptionPane();
+ getWizard().getContainer().updateButtons();
+ }
+ });
+
+ treeViewer.setComparator(new ViewerComparator());
+
+ treeViewer.expandAll();
+
+ intentFilterGroup.setText(CodeUtilsNLS.UI_SampleSelectionPage_SamplesDescriptionPane);
+ intentFilterGroup.setLayout(new GridLayout(1, false));
+ intentFilterGroup
+ .setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, true, false));
+
+ ScrolledComposite scrolledArea = new ScrolledComposite(intentFilterGroup, SWT.V_SCROLL);
+ GridData descriptionLabelData = new GridData(GridData.FILL, GridData.FILL, true, true);
+ descriptionLabelData.heightHint = 140;
+ scrolledArea.setLayoutData(descriptionLabelData);
+
+ descriptionLabel = new Label(scrolledArea, SWT.FILL | SWT.WRAP);
+ descriptionLabel.setText("");
+ scrolledArea.setContent(descriptionLabel);
+ descriptionLabel.setSize(descriptionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+
+ // Add a listener to the wizard to listen for page changes
+ if (getContainer() instanceof IPageChangeProvider)
+ {
+ ((IPageChangeProvider) getContainer()).addPageChangedListener(new PageChangeListener());
+ }
+ setControl(mainComposite);
+ }
+
+ /*
+ * Updates selected label description.
+ */
+ private void updateDescriptionPane()
+ {
+ descriptionLabel.setText(getBuildBlock().getSampleDescription());
+ // descriptionLabel.setVisible(true);
+ descriptionLabel.setSize(descriptionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ descriptionLabel.update();
+ descriptionLabel.getParent().update();
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getDefaultMessage()
+ */
+ @Override
+ public String getDefaultMessage()
+ {
+ return CodeUtilsNLS.UI_NewActivityMainPage_DescriptionCreateActivityBasedOnTemplate;
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizardPage#getWizardTitle()
+ */
+ @Override
+ public String getWizardTitle()
+ {
+ return CodeUtilsNLS.UI_NewActivityMainPage_TitleActivityBasedOnTemplate;
+ }
+
+ /* (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewLauncherWizardPage#getIntentFiltersActions()
+ */
+ @Override
+ protected String[] getIntentFiltersActions()
+ {
+ String[] intentFiltersActions = new String[0];
+ try
+ {
+ intentFiltersActions = AndroidUtils.getActivityActions(getBuildBlock().getProject());
+ }
+ catch (AndroidException e)
+ {
+ setErrorMessage(e.getMessage());
+ }
+ return intentFiltersActions;
+ }
+
+ /**
+ * Gets the help ID to be used for attaching
+ * context sensitive help.
+ *
+ * Classes that extends this class and want to set
+ * their on help should override this method
+ */
+ @Override
+ protected String getHelpId()
+ {
+ return NEW_ACTIVITY_BASED_ON_TEMPLATE_HELP;
+ }
+
+ /**
+ * Returns true if page has header false otherwise
+ *
+ * @return true if page has header false otherwise
+ */
+ @Override
+ public boolean hasHeader()
+ {
+ return false;
+ }
+}
+
+/**
+ * Fills tree viewer with sample options
+ */
+class SampleTreeContentProvider extends ArrayContentProvider implements ITreeContentProvider
+{
+
+ Object[] elements;
+
+ public SampleTreeContentProvider(Object[] elements)
+ {
+ this.elements = elements;
+ }
+
+ @Override
+ public Object[] getElements(Object inputElement)
+ {
+ return elements;
+ }
+
+ public Object[] getChildren(Object parentElement)
+ {
+ return new Object[0];
+ }
+
+ public Object getParent(Object element)
+ {
+ return new Object[0];
+ }
+
+ public boolean hasChildren(Object element)
+ {
+ return false;
+ }
+} \ No newline at end of file