/** * Copyright (c) 2015 committers of YAKINDU and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * Contributors: * committers of YAKINDU - initial API and implementation * */ package org.yakindu.sct.ui.editor.wizards; import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; 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.StructuredSelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.yakindu.base.base.BasePackage; import org.yakindu.sct.domain.extension.DomainRegistry; import org.yakindu.sct.domain.extension.IDomain; import org.yakindu.sct.ui.editor.DiagramActivator; /** * * @author andreas muelder - Initial contribution and API * */ public class DomainWizardPage extends WizardPage { private ComboViewer domainCombo; private Label description; private Label image; private Object domainDescriptors; protected DomainWizardPage(String pageName) { this(pageName, DomainRegistry.getDomains()); } protected DomainWizardPage(String pageName, List<IDomain> domainDescriptors) { super(pageName); this.domainDescriptors = domainDescriptors; } public void createControl(Composite parent) { final Composite composite = new Composite(parent, SWT.NONE); GridDataFactory.fillDefaults().grab(true, true).applyTo(composite); GridLayoutFactory.fillDefaults().applyTo(composite); final Group domainSelectionGroup = new Group(composite, SWT.NONE); domainSelectionGroup.setText("Select the statechart domain:"); GridLayoutFactory.fillDefaults().numColumns(2).applyTo(domainSelectionGroup); GridDataFactory.fillDefaults().grab(true, true).applyTo(domainSelectionGroup); Label spacer = new Label(domainSelectionGroup, SWT.NONE); GridDataFactory.fillDefaults().span(2, 1).applyTo(spacer); image = new Label(domainSelectionGroup, SWT.NONE); GridDataFactory.fillDefaults().grab(false, false).applyTo(image); domainCombo = new ComboViewer(domainSelectionGroup, SWT.READ_ONLY); GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).applyTo(domainCombo.getCombo()); domainCombo.setContentProvider(new ArrayContentProvider()); domainCombo.setLabelProvider(new LabelProvider() { @Override public String getText(Object element) { return ((IDomain) element).getName(); } }); domainCombo.setInput(domainDescriptors); description = new Label(domainSelectionGroup, SWT.WRAP); GridDataFactory.fillDefaults().grab(true, false).span(2, 1).applyTo(description); setControl(composite); domainCombo.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IDomain domain = unwrap(event.getSelection()); description.setText(domain.getDescription()); image.setImage(asImage(domain)); domainSelectionGroup.layout(); } private Image asImage(IDomain domain) { ImageRegistry imageRegistry = DiagramActivator.getDefault().getImageRegistry(); Image image = imageRegistry.get(domain.getImagePath().toString()); if (image == null) imageRegistry.put(domain.getImagePath().toString(), ImageDescriptor.createFromURL(domain.getImagePath()).createImage()); return imageRegistry.get(domain.getImagePath().toString()); } }); trySelectDefaultDomain(); IConfigurationElement[] configurationElements = Platform.getExtensionRegistry() .getConfigurationElementsFor("org.yakindu.sct.ui.wizard.create.contribution"); if (configurationElements.length > 0) { Label spacer2 = new Label(domainSelectionGroup, SWT.NONE); GridDataFactory.fillDefaults().span(2, 1).applyTo(spacer2); for (IConfigurationElement iConfigurationElement : configurationElements) { try { CreationWizardContribution contribution = (CreationWizardContribution) iConfigurationElement .createExecutableExtension("class"); contribution.toDomainWizardPage(composite); } catch (CoreException e) { e.printStackTrace(); } } } } private void trySelectDefaultDomain() { try { domainCombo.setSelection(new StructuredSelection( DomainRegistry.getDomain(BasePackage.Literals.DOMAIN_ELEMENT__DOMAIN_ID.getDefaultValueLiteral()))); } catch (IllegalArgumentException e) { // Can be ignored, if no default domain available no explicit domain // selection will be done and the first one initialized in // comboViewer will be selected implicitly } } public String getDomainID() { return unwrap(domainCombo.getSelection()).getDomainID(); } private IDomain unwrap(ISelection selection) { IDomain domain = (IDomain) ((StructuredSelection) selection).getFirstElement(); return domain; } }