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