Java tutorial
/* * Copyright (c) 2010-2012 Research In Motion Limited. All rights reserved. * * This program and the accompanying materials are made available * under the terms of the Eclipse Public License, Version 1.0, * which accompanies this distribution and is available at * * http://www.eclipse.org/legal/epl-v10.html * */ package net.rim.ejde.internal.ui.wizards.templates; import java.util.Iterator; import net.rim.ejde.internal.ui.wizards.BlackBerryProjectWizardPageTwo; import net.rim.ejde.internal.util.Messages; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.IWizardNode; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.WizardSelectionPage; import org.eclipse.pde.internal.ui.IHelpContextIds; import org.eclipse.pde.internal.ui.PDEUIMessages; import org.eclipse.pde.internal.ui.elements.ElementList; import org.eclipse.pde.internal.ui.elements.ListContentProvider; import org.eclipse.pde.internal.ui.parts.FormBrowser; import org.eclipse.pde.internal.ui.wizards.ListUtil; import org.eclipse.pde.ui.IBasePluginWizard; import org.eclipse.pde.ui.IPluginContentWizard; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.eclipse.ui.PlatformUI; public class BBTemplateSelectionPage extends WizardSelectionPage implements ISelectionChangedListener { private BlackBerryProjectWizardPageTwo fContentPage; private String fInitialTemplateId; protected TableViewer wizardSelectionViewer; protected ElementList wizardElements; private WizardSelectedAction doubleClickAction = new WizardSelectedAction(); private String label; private FormBrowser descriptionBrowser; private boolean _firstTimeShow = true; private class WizardSelectedAction extends Action { public WizardSelectedAction() { super("wizardSelection"); //$NON-NLS-1$ } public void run() { selectionChanged( new SelectionChangedEvent(wizardSelectionViewer, wizardSelectionViewer.getSelection())); advanceToNextPage(); } } static class WizardFilter extends ViewerFilter { public boolean select(Viewer viewer, Object parentElement, Object element) { return true; } } /** * Constructor * * @param wizardElements * a list of TemplateElementWizard objects * @param page * content wizard page * @param message * message to provide to the user */ public BBTemplateSelectionPage(ElementList wizardElements, BlackBerryProjectWizardPageTwo page, String message) { super("List Selection"); this.wizardElements = wizardElements; this.label = message; fContentPage = page; descriptionBrowser = new FormBrowser(SWT.BORDER | SWT.V_SCROLL); descriptionBrowser.setText(""); //$NON-NLS-1$ setTitle(Messages.BBTemplateSelectionPage_title); setDescription(Messages.BBTemplateSelectionPage_desc); } /* * (non-Javadoc) * * @see org.eclipse.pde.internal.ui.wizards.WizardListSelectionPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite container = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.verticalSpacing = 10; container.setLayout(layout); container.setLayoutData(new GridData(GridData.FILL_BOTH)); createAbove(container, 1); Label label = new Label(container, SWT.NONE); label.setText(getLabel()); GridData gd = new GridData(); label.setLayoutData(gd); SashForm sashForm = new SashForm(container, SWT.HORIZONTAL); gd = new GridData(GridData.FILL_BOTH); gd.widthHint = 300; sashForm.setLayoutData(gd); wizardSelectionViewer = new TableViewer(sashForm, SWT.BORDER); wizardSelectionViewer.setContentProvider(new ListContentProvider()); wizardSelectionViewer.setLabelProvider(ListUtil.TABLE_LABEL_PROVIDER); // don't sort the template list // wizardSelectionViewer.setComparator( ListUtil.NAME_COMPARATOR ); wizardSelectionViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { doubleClickAction.run(); } }); createDescriptionIn(sashForm); createBelow(container, 1); initializeViewer(); wizardSelectionViewer.setInput(wizardElements); wizardSelectionViewer.addSelectionChangedListener(this); Dialog.applyDialogFont(container); setControl(container); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.NEW_PROJECT_CODE_GEN_PAGE); } public void createAbove(Composite container, int span) { // do nothing } protected void initializeViewer() { wizardSelectionViewer.addFilter(new WizardFilter()); if (getInitialTemplateId() != null) selectInitialTemplate(); } private void selectInitialTemplate() { Object[] children = wizardElements.getChildren(); for (int i = 0; i < children.length; i++) { BBWizardElement welement = (BBWizardElement) children[i]; if (welement.getID().equals(getInitialTemplateId())) { wizardSelectionViewer.setSelection(new StructuredSelection(welement), true); setSelectedNode(createWizardNode(welement)); setDescriptionText(welement.getDescription()); break; } } } protected IWizardNode createWizardNode(BBWizardElement element) { return new BBWizardNode(this, element) { public IBasePluginWizard createWizard() throws CoreException { IPluginContentWizard wizard = (IPluginContentWizard) wizardElement.createExecutableExtension(); wizard.init(fContentPage.getData()); return wizard; } }; } public IPluginContentWizard getSelectedWizard() { IWizardNode node = getSelectedNode(); if (node != null) { return (IPluginContentWizard) node.getWizard(); } return null; } public boolean isPageComplete() { return true; } /* * (non-Javadoc) * * @see org.eclipse.jface.wizard.WizardSelectionPage#canFlipToNextPage() */ public boolean canFlipToNextPage() { IStructuredSelection ssel = (IStructuredSelection) wizardSelectionViewer.getSelection(); if (ssel != null && !ssel.isEmpty()) { return true; } return false; } /** * @return Returns the fInitialTemplateId. */ public String getInitialTemplateId() { return fInitialTemplateId; } /** * @param initialTemplateId * The fInitialTemplateId to set. */ public void setInitialTemplateId(String initialTemplateId) { fInitialTemplateId = initialTemplateId; } public void setVisible(boolean visible) { if (visible) { wizardSelectionViewer.refresh(); } super.setVisible(visible); if (visible && _firstTimeShow) { _firstTimeShow = false; focusAndSelectFirst(); } } /** * @return Returns <code>false</code> if no Template is available, and <code>true</code> otherwise. */ public boolean isAnyTemplateAvailable() { if (wizardSelectionViewer != null) { wizardSelectionViewer.refresh(); Object firstElement = wizardSelectionViewer.getElementAt(0); if (firstElement != null) { return true; } } return false; } protected void createBelow(Composite container, int span) { } public void selectionChanged(SelectionChangedEvent event) { setErrorMessage(null); IStructuredSelection selection = (IStructuredSelection) event.getSelection(); BBWizardElement currentWizardSelection = null; Iterator iter = selection.iterator(); if (iter.hasNext()) currentWizardSelection = (BBWizardElement) iter.next(); if (currentWizardSelection == null) { setDescriptionText(""); //$NON-NLS-1$ setSelectedNode(null); return; } final BBWizardElement finalSelection = currentWizardSelection; setSelectedNode(createWizardNode(finalSelection)); setDescriptionText(finalSelection.getDescription()); getContainer().updateButtons(); } public IWizardPage getNextPage(boolean shouldCreate) { if (!shouldCreate) return super.getNextPage(); IWizardNode selectedNode = getSelectedNode(); selectedNode.dispose(); IWizard wizard = selectedNode.getWizard(); if (wizard == null) { super.setSelectedNode(null); return null; } if (shouldCreate) // Allow the wizard to create its pages wizard.addPages(); return wizard.getStartingPage(); } protected void focusAndSelectFirst() { Table table = wizardSelectionViewer.getTable(); table.setFocus(); TableItem[] items = table.getItems(); if (items.length > 0) { TableItem first = items[0]; Object obj = first.getData(); wizardSelectionViewer.setSelection(new StructuredSelection(obj)); } } /* * (non-Javadoc) * * @see org.eclipse.core.runtime.IExecutableExtension#setInitializationData(org.eclipse.core.runtime.IConfigurationElement, * java.lang.String, java.lang.Object) */ public void setInitializationData(IConfigurationElement config, String propertyName, Object data) throws CoreException { } public void createDescriptionIn(Composite composite) { descriptionBrowser.createControl(composite); Control c = descriptionBrowser.getControl(); GridData gd = new GridData(GridData.FILL_BOTH); gd.widthHint = 200; c.setLayoutData(gd); } public String getLabel() { return label; } public void setDescriptionText(String text) { if (text == null) text = PDEUIMessages.BaseWizardSelectionPage_noDesc; descriptionBrowser.setText(text); } public void setDescriptionEnabled(boolean enabled) { Control dcontrol = descriptionBrowser.getControl(); if (dcontrol != null) dcontrol.setEnabled(enabled); } public void advanceToNextPage() { getContainer().showPage(getNextPage()); } public ElementList getWizardElements() { return wizardElements; } }