blob: 0eec7346e741799cdc4fa464c934d693c68f2ca6 [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.environment.ui.composites;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.apogy.common.emf.TimeSource;
import org.eclipse.apogy.common.emf.ui.Activator;
import org.eclipse.apogy.common.emf.ui.TimeSourceCompositeProvider;
import org.eclipse.apogy.common.emf.ui.composites.AbstractTimeSourceComposite;
import org.eclipse.apogy.core.environment.TimeSourcesList;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
public class ApogyEnvironmentTimeSourcesListComposite extends Composite {
private final Map<TimeSource, TabItem> timeSourceToTabItemMap = new HashMap<TimeSource, TabItem>();
private TimeSourcesList timeSourcesList;
private final TabFolder tabFolder;
public ApogyEnvironmentTimeSourcesListComposite(Composite parent, int style) {
this(parent, style, null);
}
public ApogyEnvironmentTimeSourcesListComposite(Composite parent, int style, TimeSourcesList timeSourcesList) {
super(parent, SWT.BORDER);
setTimeSourcesList(timeSourcesList);
// Creates and populate the TabFolder.
this.tabFolder = new TabFolder(this, SWT.NONE);
this.tabFolder.setLayout(new FillLayout());
}
public TimeSourcesList getTimeSourcesList() {
return this.timeSourcesList;
}
public void setTimeSourcesList(TimeSourcesList timeSourcesList) {
this.timeSourcesList = timeSourcesList;
// Populates the tabFolder
populateTabFolder(this.tabFolder);
}
public void enableTimeSourceTab(TimeSource timeSource) {
TabItem tabItem = getTabItem(timeSource);
if (tabItem != null)
tabItem.getControl().setEnabled(true);
}
public void disableTimeSourceTab(TimeSource timeSource) {
TabItem tabItem = getTabItem(timeSource);
if (tabItem != null)
tabItem.getControl().setEnabled(false);
}
public void setSelectedTimeSourceTab(TimeSource timeSource) {
if (!isDisposed()) {
// Disable all tab.
int numberItems = this.tabFolder.getItemCount();
for (int i = 0; i < numberItems; i++) {
TabItem tabItem = this.tabFolder.getItem(i);
if (tabItem != null && !tabItem.isDisposed()) {
if (tabItem.getControl() instanceof AbstractTimeSourceComposite) {
AbstractTimeSourceComposite atsc = (AbstractTimeSourceComposite) tabItem.getControl();
if (atsc.getTimeSource() == timeSource) {
atsc.activate(true);
// Selects the tab
this.tabFolder.setSelection(i);
} else {
atsc.activate(false);
}
}
}
}
}
}
protected TabItem getTabItem(TimeSource timeSource) {
return this.timeSourceToTabItemMap.get(timeSource);
}
protected void populateTabFolder(TabFolder tabFolder) {
this.timeSourceToTabItemMap.clear();
if (getTimeSourcesList() != null) {
for (TimeSource timeSource : getTimeSourcesList().getTimeSources()) {
TabItem tabItem = createTabItem(tabFolder, timeSource);
this.timeSourceToTabItemMap.put(timeSource, tabItem);
}
tabFolder.pack();
} else {
clearTabFolder(tabFolder);
}
}
protected void clearTabFolder(TabFolder tabFolder) {
if (tabFolder != null && tabFolder.getItemCount() > 0) {
// Clear items.
List<TabItem> items = new ArrayList<TabItem>();
int numberItems = tabFolder.getItemCount();
for (int i = 0; i < numberItems; i++) {
items.add(tabFolder.getItem(i));
}
for (TabItem item : items) {
if (item != null) {
item.dispose();
}
}
}
}
protected TabItem createTabItem(TabFolder tabFolder, TimeSource timeSource) {
TabItem tabItem = new TabItem(tabFolder, SWT.NONE);
tabItem.setText(getTimeSourceText(timeSource));
AbstractTimeSourceComposite composite = createAbstractTimeSourceComposite(tabFolder, timeSource);
tabItem.setControl(composite);
return tabItem;
}
protected String getTimeSourceText(TimeSource timeSource) {
String text = timeSource.eClass().getName();
return text;
}
@SuppressWarnings({ "rawtypes", "unchecked" })
protected AbstractTimeSourceComposite createAbstractTimeSourceComposite(Composite parent, TimeSource timeSource) {
AbstractTimeSourceComposite composite = null;
TimeSourceCompositeProvider provider = Activator.getDefault().getTimeSourceCompositeProvider(timeSource);
if (provider != null) {
composite = provider.getComposite(parent, SWT.NONE, timeSource);
}
return composite;
}
}