/* | |
* 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; | |
} | |
} |