| /******************************************************************************* |
| * Copyright (c) 2016 QNX Software Systems and others. |
| * |
| * This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License 2.0 |
| * which accompanies this distribution, and is available at |
| * https://www.eclipse.org/legal/epl-2.0/ |
| * |
| * SPDX-License-Identifier: EPL-2.0 |
| *******************************************************************************/ |
| package org.eclipse.tools.templates.ui; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashSet; |
| import java.util.List; |
| import java.util.Set; |
| |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.core.runtime.Platform; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.wizard.IWizardPage; |
| import org.eclipse.jface.wizard.WizardPage; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.custom.SashForm; |
| import org.eclipse.swt.events.SelectionAdapter; |
| import org.eclipse.swt.events.SelectionEvent; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.tools.templates.ui.internal.Activator; |
| import org.eclipse.tools.templates.ui.internal.Tag; |
| import org.eclipse.tools.templates.ui.internal.TagListViewer; |
| import org.eclipse.tools.templates.ui.internal.Template; |
| import org.eclipse.tools.templates.ui.internal.TemplateExtension; |
| import org.eclipse.tools.templates.ui.internal.TemplateTable; |
| |
| public class TemplateSelectionPage extends WizardPage { |
| |
| private final String[] requestedTags; |
| private final List<Template> templates; |
| |
| private TagListViewer tagList; |
| private TemplateTable templateTable; |
| |
| public TemplateSelectionPage(String pageName, String... tags) { |
| super(pageName); |
| this.requestedTags = tags; |
| TemplateExtension templateExtension = Activator.getTemplateExtension(); |
| templates = new ArrayList<>(); |
| for (Template template : templateExtension.getTemplates()) { |
| for (String requestedTag : requestedTags) { |
| if (template.hasTag(requestedTag)) { |
| templates.add(template); |
| break; |
| } |
| } |
| } |
| } |
| |
| @Override |
| public void createControl(Composite parent) { |
| SashForm form = new SashForm(parent, SWT.HORIZONTAL); |
| setControl(form); |
| |
| tagList = new TagListViewer(form, SWT.BORDER); |
| tagList.addSelectionChangedListener(new ISelectionChangedListener() { |
| @Override |
| public void selectionChanged(SelectionChangedEvent event) { |
| Collection<Tag> selectedTags = tagList.getSelectedTags(); |
| List<Template> selectedTemplates = new ArrayList<>(); |
| for (Template template : templates) { |
| for (Tag tag : selectedTags) { |
| if (template.hasTag(tag.getId())) { |
| selectedTemplates.add(template); |
| break; |
| } |
| } |
| } |
| |
| Template selected = templateTable.getSelectedTemplate(); |
| templateTable.setTemplates(selectedTemplates); |
| templateTable.selectTemplate(selected); |
| |
| updateButtons(); |
| } |
| }); |
| |
| templateTable = new TemplateTable(form, SWT.V_SCROLL | SWT.SINGLE | SWT.BORDER); |
| templateTable.getTable().addSelectionListener(new SelectionAdapter() { |
| @Override |
| public void widgetSelected(SelectionEvent e) { |
| updateButtons(); |
| } |
| |
| @Override |
| public void widgetDefaultSelected(SelectionEvent e) { |
| widgetSelected(e); |
| getContainer().showPage(getNextPage()); |
| } |
| }); |
| |
| Set<Tag> tags = new HashSet<>(); |
| for (Template template : templates) { |
| tags.addAll(template.getTags()); |
| } |
| |
| if (requestedTags.length == 1) { |
| // Implies that the requested tag is actually the same as All. |
| // We can safely remove it. |
| for (Tag tag : tags) { |
| if (tag.getId().equals(requestedTags[0])) { |
| tags.remove(tag); |
| break; |
| } |
| } |
| } |
| |
| templateTable.setTemplates(templates); |
| tagList.setInput(tags); |
| tagList.getList().select(0); // All |
| |
| form.setWeights(new int[] { 20, 80 }); |
| } |
| |
| public void selectTemplate(String id) { |
| if (templateTable != null) { |
| for (Template template : templates) { |
| if (template.getId().equals(id)) { |
| templateTable.selectTemplate(template); |
| updateButtons(); |
| break; |
| } |
| } |
| } |
| } |
| |
| private void updateButtons() { |
| setPageComplete(templateTable.getSelectedTemplate() != null); |
| getContainer().updateButtons(); |
| } |
| |
| @Override |
| public IWizardPage getNextPage() { |
| Template template = templateTable.getSelectedTemplate(); |
| if (template != null) { |
| try { |
| NewWizard oldWizard = (NewWizard) getWizard(); |
| TemplateWizard nextWizard = (TemplateWizard) template.getWizard(); |
| oldWizard.initialize(nextWizard); |
| nextWizard.addPages(); |
| return nextWizard.getPages()[0]; |
| } catch (CoreException e) { |
| Platform.getLog(getClass()).log(e.getStatus()); |
| } |
| } |
| return super.getNextPage(); |
| } |
| |
| } |