blob: 0b5380087c9c12f09b8358eaa9854290c4c02f5e [file] [log] [blame]
/*
* 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;
}
}