package org.simantics.plant3d.dialog; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; 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.ExpandBar; import org.eclipse.swt.widgets.ExpandItem; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.simantics.Simantics; import org.simantics.db.Session; import org.simantics.db.exception.DatabaseException; import org.simantics.plant3d.ontology.Plant3D; import org.simantics.plant3d.scenegraph.Equipment; import org.simantics.plant3d.scenegraph.Nozzle; import org.simantics.plant3d.scenegraph.P3DRootNode; import org.simantics.plant3d.utils.Item; import org.simantics.plant3d.utils.P3DUtil; import org.simantics.utils.ui.ExceptionUtils; public class EquipmentSelectionDialog extends Dialog implements ISelectionChangedListener{ private String libUri; private Item selected; private Item selectedNozzle; ListViewer equipmentViewer; ListViewer nozzleViewer; public EquipmentSelectionDialog(Shell parentShell, P3DRootNode root) { this(parentShell,root,Plant3D.URIs.Builtin); } public EquipmentSelectionDialog(Shell parentShell, P3DRootNode root, String libUri){ super(parentShell); this.libUri = libUri; } protected List getItems(Class c, String libUri) throws DatabaseException{ Session session = Simantics.getSession(); if (Equipment.class.equals(c)) { return P3DUtil.getEquipments(session, libUri); } else if (Nozzle.class.equals(c)) { return P3DUtil.getNozzles(session, libUri); } return null; } @Override protected Control createDialogArea(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(2,false); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); applyDialogFont(composite); List equipment = null; List nozzles = null; try { equipment = getItems(Equipment.class, libUri); nozzles = getItems(Nozzle.class, libUri); } catch (DatabaseException e) { Label label = new Label(composite, SWT.NONE); label.setText("Cannot load equipment data: " + e.getMessage()); ExceptionUtils.logError(e); return composite; } ExpandBar expandBar = new ExpandBar(composite, SWT.NONE); ExpandItem equipmentItem = new ExpandItem(expandBar, SWT.NONE); equipmentItem.setText("Equipment"); equipmentViewer = new ListViewer(expandBar); equipmentViewer.setLabelProvider(new ComponentLabelProvider()); equipmentViewer.setContentProvider(new ComponentContentProvider()); ExpandItem nozzleItem = new ExpandItem(expandBar, SWT.NONE); nozzleItem.setText("Nozzles"); nozzleViewer = new ListViewer(expandBar); nozzleViewer.setLabelProvider(new ComponentLabelProvider()); nozzleViewer.setContentProvider(new ComponentContentProvider()); equipmentItem.setControl(equipmentViewer.getList()); nozzleItem.setControl(nozzleViewer.getList()); equipmentViewer.setInput(equipment); nozzleViewer.setInput(nozzles); equipmentItem.setHeight(equipmentViewer.getList().computeSize(SWT.DEFAULT, SWT.DEFAULT).y); nozzleItem.setHeight(nozzleViewer.getList().computeSize(SWT.DEFAULT, SWT.DEFAULT).y); equipmentViewer.addSelectionChangedListener(this); nozzleViewer.addSelectionChangedListener(this); GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).span(2, 1).applyTo(expandBar); GridDataFactory.fillDefaults().minSize(500, 500).hint(500, 500).applyTo(composite); return composite; } @Override public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection sel = (IStructuredSelection)event.getSelection(); Item i = (Item)sel.getFirstElement(); if (i != null) { if (event.getSource() == equipmentViewer) { selected = i; } else if (event.getSource() == nozzleViewer) { selectedNozzle = i; } } else { if (event.getSource() == equipmentViewer) { selected = i; } else if (event.getSource() == nozzleViewer) { selectedNozzle = i; } } } public Item getSelected() { return selected; } public Item getSelectedNozzle() { return selectedNozzle; } }