| /******************************************************************************* |
| * 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); |
| } |
| } |
| } |
| } |