| /******************************************************************************* |
| * Copyright (c) 2018 Agence spatiale canadienne / Canadian Space Agency |
| * 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: |
| * Pierre Allard, |
| * Regent L'Archeveque, |
| * Olivier L. Larouche - initial API and implementation |
| * |
| * SPDX-License-Identifier: EPL-1.0 |
| *******************************************************************************/ |
| package org.eclipse.apogy.core.topology.ui.composites; |
| |
| import org.eclipse.apogy.common.topology.Node; |
| import org.eclipse.apogy.common.topology.ui.MeshPresentationMode; |
| import org.eclipse.apogy.common.topology.ui.composites.TopologyTreeEditingComposite; |
| import org.eclipse.apogy.core.ApogySystem; |
| import org.eclipse.apogy.core.topology.ui.DisplayedTopology; |
| import org.eclipse.apogy.core.topology.ui.internal.ApogySystem3dUtils; |
| import org.eclipse.emf.common.notify.AdapterFactory; |
| import org.eclipse.emf.edit.provider.ComposedAdapterFactory; |
| import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider; |
| import org.eclipse.jface.viewers.ArrayContentProvider; |
| import org.eclipse.jface.viewers.ComboViewer; |
| import org.eclipse.jface.viewers.ISelectionChangedListener; |
| import org.eclipse.jface.viewers.SelectionChangedEvent; |
| import org.eclipse.jface.viewers.StructuredSelection; |
| 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.Display; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.ui.forms.widgets.ExpandableComposite; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.ScrolledForm; |
| import org.eclipse.ui.forms.widgets.Section; |
| import org.eclipse.ui.forms.widgets.TableWrapData; |
| import org.eclipse.ui.forms.widgets.TableWrapLayout; |
| |
| public class ApogySystemTopologyComposite extends Composite { |
| private final AdapterFactory adapterFactory = new ComposedAdapterFactory( |
| ComposedAdapterFactory.Descriptor.Registry.INSTANCE); |
| |
| protected ApogySystem apogySystem; |
| protected DisplayedTopology displayedTopology = DisplayedTopology.ASSEMBLY; |
| |
| protected Node systemRoot; |
| protected Node assemblyRoot; |
| |
| private final TopologyTreeEditingComposite systemTopologyTreeEditingComposite; |
| private final TopologyTreeEditingComposite assemblyTopologyTreeEditingComposite; |
| |
| protected final FormToolkit formToolkit = new FormToolkit(Display.getDefault()); |
| |
| public ApogySystemTopologyComposite(Composite parent, int style) { |
| super(parent, style); |
| setLayout(new GridLayout(1, false)); |
| |
| ScrolledForm scrolledForm = this.formToolkit.createScrolledForm(this); |
| scrolledForm.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 1, 1)); |
| this.formToolkit.paintBordersFor(scrolledForm); |
| { |
| TableWrapLayout tableWrapLayout = new TableWrapLayout(); |
| tableWrapLayout.numColumns = 1; |
| tableWrapLayout.makeColumnsEqualWidth = true; |
| scrolledForm.getBody().setLayout(tableWrapLayout); |
| } |
| |
| // Display settings. |
| Section sctnDisplaySettings = this.formToolkit.createSection(scrolledForm.getBody(), |
| ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); |
| TableWrapData twd_sctnDisplaySettings = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 1); |
| twd_sctnDisplaySettings.valign = TableWrapData.FILL; |
| twd_sctnDisplaySettings.grabVertical = true; |
| twd_sctnDisplaySettings.grabHorizontal = true; |
| sctnDisplaySettings.setLayoutData(twd_sctnDisplaySettings); |
| this.formToolkit.paintBordersFor(sctnDisplaySettings); |
| sctnDisplaySettings.setText("3D Display Settings"); |
| |
| Composite displaySettingsComposite = new Composite(sctnDisplaySettings, SWT.NONE); |
| displaySettingsComposite.setLayout(new GridLayout(4, false)); |
| GridData gd_displaySettingsComposite = new GridData(SWT.FILL, SWT.TOP, true, false); |
| displaySettingsComposite.setLayoutData(gd_displaySettingsComposite); |
| |
| this.formToolkit.adapt(displaySettingsComposite); |
| this.formToolkit.paintBordersFor(displaySettingsComposite); |
| sctnDisplaySettings.setClient(displaySettingsComposite); |
| |
| Label lblDisplayedTopologyChoice = new Label(displaySettingsComposite, SWT.NONE); |
| lblDisplayedTopologyChoice.setText("Displayed Topology"); |
| |
| ComboViewer comboViewerDisplayedTopology = new ComboViewer(displaySettingsComposite, SWT.NONE); |
| comboViewerDisplayedTopology.setContentProvider(new ArrayContentProvider()); |
| comboViewerDisplayedTopology.setLabelProvider(new AdapterFactoryLabelProvider(this.adapterFactory)); |
| comboViewerDisplayedTopology.setInput(DisplayedTopology.values()); |
| comboViewerDisplayedTopology.setSelection(new StructuredSelection(this.displayedTopology), true); |
| comboViewerDisplayedTopology.addSelectionChangedListener(new ISelectionChangedListener() { |
| @Override |
| public void selectionChanged(SelectionChangedEvent event) { |
| DisplayedTopology displayedTopology = (DisplayedTopology) comboViewerDisplayedTopology |
| .getStructuredSelection().getFirstElement(); |
| setDisplayedTopology(displayedTopology); |
| } |
| }); |
| |
| Label cadNodeDisplayMode = new Label(displaySettingsComposite, SWT.NONE); |
| cadNodeDisplayMode.setText("Sub-System Display Mode:"); |
| |
| ComboViewer comboSubSystemPresentationMode = new ComboViewer(displaySettingsComposite, SWT.NONE); |
| comboSubSystemPresentationMode.setContentProvider(new ArrayContentProvider()); |
| comboSubSystemPresentationMode.setLabelProvider(new AdapterFactoryLabelProvider(this.adapterFactory)); |
| comboSubSystemPresentationMode.setInput(MeshPresentationMode.values()); |
| comboSubSystemPresentationMode.setSelection(new StructuredSelection(MeshPresentationMode.SURFACE), true); |
| comboSubSystemPresentationMode.addSelectionChangedListener(new ISelectionChangedListener() { |
| @Override |
| public void selectionChanged(SelectionChangedEvent event) { |
| MeshPresentationMode meshPresentationMode = (MeshPresentationMode) comboSubSystemPresentationMode |
| .getStructuredSelection().getFirstElement(); |
| setSubSystemDisplayMode(meshPresentationMode); |
| } |
| }); |
| |
| // System Topology |
| Section sctnSystemTopology = this.formToolkit.createSection(scrolledForm.getBody(), |
| ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); |
| TableWrapData twd_sctnDemlist = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 1); |
| twd_sctnDemlist.valign = TableWrapData.FILL; |
| twd_sctnDemlist.grabVertical = true; |
| twd_sctnDemlist.grabHorizontal = true; |
| sctnSystemTopology.setLayoutData(twd_sctnDemlist); |
| this.formToolkit.paintBordersFor(sctnSystemTopology); |
| sctnSystemTopology.setText("System"); |
| |
| this.systemTopologyTreeEditingComposite = new TopologyTreeEditingComposite(sctnSystemTopology, SWT.NONE, true) { |
| @Override |
| protected void nodeSelected(Node node) { |
| ApogySystemTopologyComposite.this.nodeSelected(node); |
| } |
| }; |
| this.formToolkit.adapt(this.systemTopologyTreeEditingComposite); |
| this.formToolkit.paintBordersFor(this.systemTopologyTreeEditingComposite); |
| sctnSystemTopology.setClient(this.systemTopologyTreeEditingComposite); |
| |
| // Assembly Topology |
| Section sctnAssemblyTopology = this.formToolkit.createSection(scrolledForm.getBody(), |
| ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR); |
| TableWrapData twd_sctnAssemblyTopology = new TableWrapData(TableWrapData.LEFT, TableWrapData.TOP, 1, 1); |
| twd_sctnAssemblyTopology.valign = TableWrapData.FILL; |
| twd_sctnAssemblyTopology.grabVertical = true; |
| twd_sctnAssemblyTopology.grabHorizontal = true; |
| sctnAssemblyTopology.setLayoutData(twd_sctnAssemblyTopology); |
| this.formToolkit.paintBordersFor(sctnAssemblyTopology); |
| sctnAssemblyTopology.setText("Assembly"); |
| |
| this.assemblyTopologyTreeEditingComposite = new TopologyTreeEditingComposite(sctnAssemblyTopology, SWT.NONE, |
| false) { |
| @Override |
| protected void nodeSelected(Node node) { |
| ApogySystemTopologyComposite.this.nodeSelected(node); |
| } |
| }; |
| this.formToolkit.adapt(this.assemblyTopologyTreeEditingComposite); |
| this.formToolkit.paintBordersFor(this.assemblyTopologyTreeEditingComposite); |
| sctnAssemblyTopology.setClient(this.assemblyTopologyTreeEditingComposite); |
| } |
| |
| public ApogySystem getApogySystem() { |
| return this.apogySystem; |
| } |
| |
| public void setApogySystem(ApogySystem newApogySystem) { |
| // Cleanup previous |
| if (this.apogySystem != newApogySystem && this.apogySystem != null) { |
| // TODO. |
| } |
| |
| this.apogySystem = newApogySystem; |
| |
| if (newApogySystem != null) { |
| // Get the system root topology. |
| if (newApogySystem.getTopologyRoot() != null) { |
| setSystemRoot(newApogySystem.getTopologyRoot().getOriginNode()); |
| } else { |
| setSystemRoot(null); |
| } |
| } else { |
| setSystemRoot(null); |
| setAssemblyRoot(null); |
| } |
| } |
| |
| public Node getAssemblyRoot() { |
| return this.assemblyRoot; |
| } |
| |
| public void setAssemblyRoot(Node newNode) { |
| this.assemblyRoot = newNode; |
| this.assemblyTopologyTreeEditingComposite.setRoot(newNode); |
| } |
| |
| public void selectNode(Node selectedNode) { |
| if (this.assemblyTopologyTreeEditingComposite != null |
| && !this.assemblyTopologyTreeEditingComposite.isDisposed()) { |
| this.assemblyTopologyTreeEditingComposite.selectNode(selectedNode); |
| } |
| |
| nodeSelected(selectedNode); |
| } |
| |
| /** |
| * Method called when the topology to be displayed choice is changed. To be |
| * overloaded. |
| * |
| * @param newDisplayedTopology The new topology display choice. |
| */ |
| protected void newDisplayedTopologySelected(DisplayedTopology newDisplayedTopology) { |
| } |
| |
| protected Node getSystemRoot() { |
| return this.systemRoot; |
| } |
| |
| protected void setSystemRoot(Node newSystemRoot) { |
| this.systemRoot = newSystemRoot; |
| |
| this.systemTopologyTreeEditingComposite.setRoot(newSystemRoot); |
| } |
| |
| protected void nodeSelected(Node node) { |
| } |
| |
| private void setDisplayedTopology(DisplayedTopology newDisplayedTopology) { |
| this.displayedTopology = newDisplayedTopology; |
| newDisplayedTopologySelected(newDisplayedTopology); |
| } |
| |
| private void setSubSystemDisplayMode(MeshPresentationMode newMeshPresentationMode) { |
| ApogySystem3dUtils.setSubSystemMode(getAssemblyRoot(), newMeshPresentationMode); |
| } |
| } |