blob: 821a637a45cfde9b7a50d99b9d6f22cb3357b75b [file] [log] [blame]
/*******************************************************************************
* 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 - initial API and implementation
*
* SPDX-License-Identifier: EPL-1.0
*******************************************************************************/
package org.eclipse.apogy.core.ui.composites;
import org.eclipse.apogy.common.topology.ui.composites.TopologyTreeEditingComposite;
import org.eclipse.apogy.core.AssemblyLink;
import org.eclipse.apogy.core.AssemblyLinksList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
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.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 AssemblyLinksComposite extends Composite {
private AssemblyLinksList assemblyLinksList;
private final AssemblyLinkListComposite assemblyLinkListComposite;
private final AssemblyLinkOverviewComposite assemblyLinkOverviewComposite;
private final TopologyTreeEditingComposite topologyTreeEditingComposite;
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
public AssemblyLinksComposite(Composite parent, int style) {
super(parent, style);
setLayout(new GridLayout(1, true));
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 = 2;
tableWrapLayout.makeColumnsEqualWidth = true;
scrolledForm.getBody().setLayout(tableWrapLayout);
}
Section sctnAssemblyList = this.formToolkit.createSection(scrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnAssemblyList = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 3, 1);
twd_sctnAssemblyList.valign = TableWrapData.FILL;
twd_sctnAssemblyList.grabVertical = true;
twd_sctnAssemblyList.grabHorizontal = true;
sctnAssemblyList.setLayoutData(twd_sctnAssemblyList);
this.formToolkit.paintBordersFor(sctnAssemblyList);
sctnAssemblyList.setText("Assembly Links");
this.assemblyLinkListComposite = new AssemblyLinkListComposite(sctnAssemblyList, SWT.NONE) {
@Override
protected void newAssemblyLinkSelected(AssemblyLink selectedAssemblyLink) {
AssemblyLinksComposite.this.assemblyLinkOverviewComposite.setAssemblyLink(selectedAssemblyLink);
if (selectedAssemblyLink != null) {
AssemblyLinksComposite.this.topologyTreeEditingComposite
.setRoot(selectedAssemblyLink.getGeometryNode());
} else {
AssemblyLinksComposite.this.topologyTreeEditingComposite.setRoot(null);
}
}
};
this.formToolkit.adapt(this.assemblyLinkListComposite);
this.formToolkit.paintBordersFor(this.assemblyLinkListComposite);
sctnAssemblyList.setClient(this.assemblyLinkListComposite);
// Overview
Section sctnDemoverview = this.formToolkit.createSection(scrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnDemoverview = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 3, 1);
twd_sctnDemoverview.valign = TableWrapData.FILL;
twd_sctnDemoverview.grabVertical = true;
twd_sctnDemoverview.grabHorizontal = true;
sctnDemoverview.setLayoutData(twd_sctnDemoverview);
this.formToolkit.paintBordersFor(sctnDemoverview);
sctnDemoverview.setText("Assembly Link Overview");
this.assemblyLinkOverviewComposite = new AssemblyLinkOverviewComposite(sctnDemoverview, SWT.NONE);
this.formToolkit.adapt(this.assemblyLinkOverviewComposite);
this.formToolkit.paintBordersFor(this.assemblyLinkOverviewComposite);
sctnDemoverview.setClient(this.assemblyLinkOverviewComposite);
// Topology
Section sctnTopology = this.formToolkit.createSection(scrolledForm.getBody(),
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
TableWrapData twd_sctnTopology = new TableWrapData(TableWrapData.FILL, TableWrapData.TOP, 1, 2);
twd_sctnTopology.valign = TableWrapData.FILL;
twd_sctnTopology.grabVertical = true;
twd_sctnTopology.grabHorizontal = true;
sctnTopology.setLayoutData(twd_sctnTopology);
this.formToolkit.paintBordersFor(sctnTopology);
sctnTopology.setText("Assembly Link Topology");
this.topologyTreeEditingComposite = new TopologyTreeEditingComposite(sctnTopology, SWT.NONE, true);
this.formToolkit.adapt(this.topologyTreeEditingComposite);
this.formToolkit.paintBordersFor(this.topologyTreeEditingComposite);
sctnTopology.setClient(this.topologyTreeEditingComposite);
// Do clean up upon dispose.
addDisposeListener(new DisposeListener() {
@Override
public void widgetDisposed(DisposeEvent arg0) {
AssemblyLinksComposite.this.assemblyLinksList = null;
}
});
}
public AssemblyLinksList getAssemblyLinksList() {
return this.assemblyLinksList;
}
public void setAssemblyLinksList(AssemblyLinksList assemblyLinksList) {
this.assemblyLinksList = assemblyLinksList;
if (this.assemblyLinkListComposite != null && !this.assemblyLinkListComposite.isDisposed()) {
if (assemblyLinksList != null) {
this.assemblyLinkListComposite.setAssemblyLinksList(assemblyLinksList);
} else {
this.assemblyLinkListComposite.setAssemblyLinksList(null);
}
}
if (this.assemblyLinkOverviewComposite != null && !this.assemblyLinkOverviewComposite.isDisposed()) {
if (assemblyLinksList != null && assemblyLinksList.getAssemblyLinks().size() > 0) {
this.assemblyLinkOverviewComposite.setAssemblyLink(assemblyLinksList.getAssemblyLinks().get(0));
} else {
this.assemblyLinkOverviewComposite.setAssemblyLink(null);
}
}
if (this.topologyTreeEditingComposite != null && !this.topologyTreeEditingComposite.isDisposed()) {
if (assemblyLinksList != null && assemblyLinksList.getAssemblyLinks().size() > 0) {
this.topologyTreeEditingComposite
.setRoot(assemblyLinksList.getAssemblyLinks().get(0).getGeometryNode());
} else {
this.topologyTreeEditingComposite.setRoot(null);
}
}
}
}