summaryrefslogtreecommitdiff
path: root/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewActivityWizardListTemplatesPage.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewActivityWizardListTemplatesPage.java')
-rw-r--r--src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewActivityWizardListTemplatesPage.java383
1 files changed, 383 insertions, 0 deletions
diff --git a/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewActivityWizardListTemplatesPage.java b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewActivityWizardListTemplatesPage.java
new file mode 100644
index 0000000..0b53800
--- /dev/null
+++ b/src/plugins/android.codeutils/src/com/motorola/studio/android/wizards/buildingblocks/NewActivityWizardListTemplatesPage.java
@@ -0,0 +1,383 @@
+/*
+ * 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.net.URL;
+
+import org.eclipse.core.runtime.FileLocator;
+import org.eclipse.core.runtime.IPath;
+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.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+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 NewActivityWizardListTemplatesPage extends NewLauncherWizardPage
+{
+
+ private TreeViewer treeViewer;
+
+ private Label imgLabel;
+
+ private Label descriptionLabel;
+
+ private String content[];
+
+ private static final String NEW_ACTIVITY_HELP = CodeUtilsActivator.PLUGIN_ID + ".newactivity";
+
+ private static Image androidImg = null;
+
+ public static final String PAGE_NAME = "List Activities Page";
+
+ //private boolean canFlip = false;
+
+ /*
+ * Listener to update description pane whenever this page is open
+ */
+ private class PageChangeListener implements IPageChangedListener
+ {
+ public void pageChanged(PageChangedEvent event)
+ {
+ if ((event.getSelectedPage() == NewActivityWizardListTemplatesPage.this))
+ {
+ if (!treeViewer.getSelection().isEmpty())
+ {
+ updateTreeViewAfterSelection(treeViewer.getSelection());
+ }
+
+ NewActivityWizardListTemplatesPage.this.getControl().update();
+ ((NewActivityWizardListTemplatesPage) event.getSelectedPage())
+ .updateDescriptionPane();
+ }
+ }
+ }
+
+ protected NewActivityWizardListTemplatesPage(ActivityBasedOnTemplate activity)
+ {
+ super(activity, PAGE_NAME);
+
+ activity.evaluateSamplesList(ActivityBasedOnTemplate.SAMPLE_CATEGORY.LIST_ACTIVITIES_CATEGORY);
+
+ ImageDescriptor descr =
+ CodeUtilsActivator.imageDescriptorFromPlugin(CodeUtilsActivator.PLUGIN_ID,
+ "icons/device_refresh_on.png");
+ androidImg = descr.createImage();
+ }
+
+ /*
+ * (non-Javadoc)
+ * */
+ @Override
+ public boolean canFlipToNextPage()
+ {
+ return getBuildBlock().isListActivitySelected();
+ }
+
+ @Override
+ public IWizardPage getNextPage()
+ {
+ return this.getWizard().getPage(CodeUtilsNLS.UI_NewActivityMainPage_PageTitle);
+ }
+
+ @Override
+ public IWizardPage getPreviousPage()
+ {
+ return this.getWizard().getPage(ActivitySampleSelectionPage.PAGE_NAME);
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see com.motorola.studio.android.wizards.buildingblocks.NewBuildingBlocksWizard#getBuildBlock()
+ */
+ @Override
+ public ActivityBasedOnTemplate getBuildBlock()
+ {
+ return (ActivityBasedOnTemplate) super.getBuildBlock();
+ }
+
+ /* (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(2, false));
+ mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
+
+ // Samples Tree Label
+ Label itemsTableLabel = new Label(mainComposite, SWT.NONE);
+ itemsTableLabel
+ .setLayoutData(new GridData(GridData.FILL, GridData.FILL, true, false, 2, 1));
+ 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, 1, 1));
+ 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().getListActivitiesSamples().size()];
+
+ int i = 0;
+ for (String currentSample : getBuildBlock().getListActivitiesSamples().keySet())
+ {
+ content[i] = currentSample;
+ i++;
+ }
+
+ //sets tree content and icon
+ treeViewer.setContentProvider(new SampleTreeContentProvider(content));
+ treeViewer.setInput(content);
+
+ final Group previewGroup = new Group(mainComposite, SWT.NONE);
+ previewGroup.setText(CodeUtilsNLS.UI_ListActivityPage_Preview);
+ previewGroup.setLayout(new GridLayout(1, false));
+ previewGroup.setLayoutData(new GridData(GridData.FILL, GridData.FILL, false, true, 1, 1));
+
+ imgLabel = new Label(previewGroup, SWT.NONE);
+ imgLabel.setImage(null);
+
+ GridData imageLabelData = new GridData(GridData.FILL, GridData.FILL, true, true);
+ imageLabelData.widthHint = 200;
+ imgLabel.setLayoutData(imageLabelData);
+
+ final Group descriptionGroup = new Group(mainComposite, SWT.NONE);
+
+ treeViewer.addSelectionChangedListener(new ISelectionChangedListener()
+ {
+ public void selectionChanged(SelectionChangedEvent e)
+ {
+ updateTreeViewAfterSelection(e.getSelection());
+
+ updateDescriptionPane();
+ getWizard().getContainer().updateButtons();
+ }
+ });
+
+ //sort tree
+ treeViewer.setComparator(new ViewerComparator());
+ treeViewer.expandAll();
+
+ //description pane
+ descriptionGroup.setText(CodeUtilsNLS.UI_SampleSelectionPage_SamplesDescriptionPane);
+ descriptionGroup.setLayout(new GridLayout(1, false));
+ descriptionGroup.setLayoutData(new GridData(GridData.FILL, GridData.CENTER, true, false, 2,
+ 1));
+
+ ScrolledComposite scroll = new ScrolledComposite(descriptionGroup, SWT.V_SCROLL);
+ GridData scrollData = new GridData(GridData.FILL, GridData.FILL, true, true);
+ scroll.setLayoutData(scrollData);
+ scroll.setMinSize(100, 140);
+
+ descriptionLabel = new Label(scroll, SWT.FILL | SWT.WRAP);
+ descriptionLabel.setText("");
+
+ scroll.setContent(descriptionLabel);
+
+ // Add a listener to the wizard to listen for page changes
+ if (getContainer() instanceof IPageChangeProvider)
+ {
+ ((IPageChangeProvider) getContainer()).addPageChangedListener(new PageChangeListener());
+ }
+
+ setControl(mainComposite);
+ }
+
+ private void updateTreeViewAfterSelection(ISelection selection)
+ {
+ String template = selection.toString();
+
+ getBuildBlock().setSample(template.substring(1, template.length() - 1));
+
+ //condition to enable finish button
+ getBuildBlock().setIsListActivitySelected(true);
+ //category of sample, used to load the correct files
+ getBuildBlock().setSampleCategoty(
+ ActivityBasedOnTemplate.SAMPLE_CATEGORY.LIST_ACTIVITIES_CATEGORY);
+
+ String strPreview = getBuildBlock().getSamplePreview();
+ if (strPreview != null)
+ {
+ URL url = null;
+ try
+ {
+ //loads the selected sample preview image
+ url =
+ FileLocator.toFileURL(CodeUtilsActivator
+ .getDefault()
+ .getBundle()
+ .getEntry(
+ ActivityBasedOnTemplate.ACTIVITY_SAMPLES_FOLDER
+ + IPath.SEPARATOR + strPreview));
+
+ ImageDescriptor imageDesc = ImageDescriptor.createFromURL(url);
+ Image image = imageDesc.createImage();
+
+ Image previousImage = imgLabel.getImage();
+ if (previousImage != null)
+ {
+ previousImage.dispose();
+ }
+
+ imgLabel.setImage(image);
+ }
+ catch (Exception ex)
+ {
+ imgLabel.setImage(null);
+ }
+ }
+ else
+ {
+ imgLabel.setImage(null);
+ }
+ }
+
+ /*
+ * Updates selected label description
+ */
+ private void updateDescriptionPane()
+ {
+ if (getBuildBlock().isListActivitySelected())
+ {
+ descriptionLabel.setText(getBuildBlock().getSampleDescription());
+ }
+ else
+ {
+ descriptionLabel.setText("");
+ imgLabel.setImage(null);
+ }
+ descriptionLabel.update();
+ descriptionLabel.setSize(descriptionLabel.computeSize(SWT.DEFAULT, SWT.DEFAULT));
+ descriptionLabel.getParent().layout();
+ }
+
+ /* (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_ListActivityPage_TitleWizard;
+ }
+
+ /* (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_HELP;
+ }
+
+ /**
+ * Returns true if page has header false otherwise
+ *
+ * @return true if page has header false otherwise
+ */
+ @Override
+ public boolean hasHeader()
+ {
+ return false;
+ }
+}