blob: 11bc8a613769913941bee54a24a3405b48ec829e [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,
* Olivier L. Larouche - initial API and implementation
*
* SPDX-License-Identifier: EPL-1.0
*
*******************************************************************************/
package org.eclipse.apogy.core.invocator.ui.composites;
import org.eclipse.apogy.core.invocator.InitialConditions;
import org.eclipse.apogy.core.invocator.InitialConditionsList;
import org.eclipse.apogy.core.invocator.TypeMemberInitialConditions;
import org.eclipse.apogy.core.invocator.VariableInitialConditions;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.layout.FillLayout;
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.Section;
public class InitialConditionsComposite extends ScrolledComposite {
private InitialConditionsList initialConditionsList;
private final FormToolkit formToolkit = new FormToolkit(Display.getDefault());
private final InitialConditionsListComposite initialConditionsListComposite;
private final InitialConditionsOverviewComposite initialConditionsOverviewComposite;
private final InitialConditionsTreeComposite initialConditionsTreeComposite;
private final AbstractInitialConditionsDetailsComposite abstractInitialConditionsDetailsComposite;
public InitialConditionsComposite(Composite parent, int style) {
super(parent, style);
setLayout(new FillLayout());
setExpandHorizontal(true);
setExpandVertical(true);
Composite composite = new Composite(this, SWT.None);
composite.setLayout(new GridLayout(3, false));
// Available Initial Conditions.
Section sctnAvailableInitialConditions = this.formToolkit.createSection(composite,
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
sctnAvailableInitialConditions.setLayoutData(new GridData(SWT.LEFT, SWT.FILL, false, true, 1, 2));
this.formToolkit.paintBordersFor(sctnAvailableInitialConditions);
sctnAvailableInitialConditions.setText("Available Initial Conditions");
this.initialConditionsListComposite = new InitialConditionsListComposite(sctnAvailableInitialConditions,
SWT.NONE) {
@Override
protected void newInitialConditionsSelected(InitialConditions initialConditions) {
InitialConditionsComposite.this.initialConditionsTreeComposite.setInitialConditions(initialConditions);
InitialConditionsComposite.this.initialConditionsOverviewComposite
.setInitialConditions(initialConditions);
}
};
this.formToolkit.adapt(this.initialConditionsListComposite);
this.formToolkit.paintBordersFor(this.initialConditionsListComposite);
sctnAvailableInitialConditions.setClient(this.initialConditionsListComposite);
// Initial Condition Overview
Section sctnInitialConditionsOverview = this.formToolkit.createSection(composite,
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
sctnInitialConditionsOverview.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
this.formToolkit.paintBordersFor(sctnInitialConditionsOverview);
sctnInitialConditionsOverview.setText("Initial Conditions Overview");
this.initialConditionsOverviewComposite = new InitialConditionsOverviewComposite(sctnInitialConditionsOverview,
SWT.NONE);
this.formToolkit.adapt(this.initialConditionsOverviewComposite);
this.formToolkit.paintBordersFor(this.initialConditionsOverviewComposite);
sctnInitialConditionsOverview.setClient(this.initialConditionsOverviewComposite);
// Initialization Details
Section sctnInitializationDetails = this.formToolkit.createSection(composite,
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
sctnInitializationDetails.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 2));
this.formToolkit.paintBordersFor(sctnInitializationDetails);
sctnInitializationDetails.setText("Initialization Details");
this.abstractInitialConditionsDetailsComposite = new AbstractInitialConditionsDetailsComposite(
sctnInitializationDetails, SWT.BORDER);
this.formToolkit.adapt(this.abstractInitialConditionsDetailsComposite);
this.formToolkit.paintBordersFor(this.abstractInitialConditionsDetailsComposite);
sctnInitializationDetails.setClient(this.abstractInitialConditionsDetailsComposite);
// Initial Condition Details
Section sctnInitialConditionsDetails = this.formToolkit.createSection(composite,
ExpandableComposite.EXPANDED | ExpandableComposite.TWISTIE | ExpandableComposite.TITLE_BAR);
sctnInitialConditionsDetails.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false, 1, 1));
this.formToolkit.paintBordersFor(sctnInitialConditionsDetails);
sctnInitialConditionsDetails.setText("Initial Conditions Details");
this.initialConditionsTreeComposite = new InitialConditionsTreeComposite(sctnInitialConditionsDetails, style) {
@Override
protected void newTypeMemberInitialConditionsSelected(
TypeMemberInitialConditions typeMemberInitialConditions) {
InitialConditionsComposite.this.abstractInitialConditionsDetailsComposite
.setAbstractInitialConditions(typeMemberInitialConditions);
}
@Override
protected void newVariableInitialConditionsSelected(VariableInitialConditions variableInitialConditions) {
InitialConditionsComposite.this.abstractInitialConditionsDetailsComposite
.setAbstractInitialConditions(variableInitialConditions);
}
};
this.formToolkit.adapt(this.initialConditionsTreeComposite);
this.formToolkit.paintBordersFor(this.initialConditionsTreeComposite);
sctnInitialConditionsDetails.setClient(this.initialConditionsTreeComposite);
/**
* Perform a layout otherwise the VariableImplementation Content is not
* displayed without resize.
*/
composite.layout(true, true);
setContent(composite);
setMinSize(composite.computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
public InitialConditionsList getInitialConditionsList() {
return this.initialConditionsList;
}
public void setInitialConditionsList(InitialConditionsList initialConditionsList) {
this.initialConditionsList = initialConditionsList;
if (!this.initialConditionsListComposite.isDisposed()) {
this.initialConditionsListComposite.setInitialConditionsList(initialConditionsList);
InitialConditions initialConditions = null;
if (initialConditionsList != null && !initialConditionsList.getInitialConditions().isEmpty()) {
initialConditions = initialConditionsList.getInitialConditions().get(0);
}
if (!this.initialConditionsTreeComposite.isDisposed()) {
this.initialConditionsTreeComposite.setInitialConditions(initialConditions);
}
if (!this.initialConditionsOverviewComposite.isDisposed()) {
this.initialConditionsOverviewComposite.setInitialConditions(initialConditions);
}
if (!this.abstractInitialConditionsDetailsComposite.isDisposed()) {
this.abstractInitialConditionsDetailsComposite.setAbstractInitialConditions(null);
}
}
}
}