/*******************************************************************************
* Copyright (c) 2008 Hallvard Traetteberg.
* 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:
* Hallvard Traetteberg - initial API and implementation
******************************************************************************/
package org.eclipse.e4.tm.ui;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.SashForm;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
public abstract class TmPartStyle {
protected Composite treeParent;
protected List<Composite> tmComposites = new ArrayList<Composite>();
public Composite getTreeParent() {
return treeParent;
}
protected List<Object> tmCompositeKeys = new ArrayList<Object>();
protected void addTmComposite(Object key, Composite composite) {
tmCompositeKeys.add(key);
tmComposites.add(composite);
}
public abstract Composite addTmComposite(Object key);
public Composite getTmComposite(Object key) {
return tmComposites.get((tmCompositeKeys.indexOf(key)));
}
protected void disposeTmComposite(Object key) {
tmComposites.get(tmCompositeKeys.indexOf(key)).dispose();
tmCompositeKeys.remove(key);
}
public void createPageContainer(Composite parent) {
if (treeParent == null) {
createTreeParent(parent);
}
}
protected Composite createTmComposite(Composite parent) {
return new Composite(parent, SWT.V_SCROLL);
}
abstract void createTreeParent(Composite parent);
public static class SashStyle extends TmPartStyle {
private SashForm sashForm;
public void createTreeParent(Composite parent) {
sashForm = new SashForm(parent, SWT.HORIZONTAL);
treeParent = new Composite(sashForm, SWT.NONE);
}
public Composite addTmComposite(Object key) {
Composite composite = createTmComposite(sashForm);
sashForm.layout();
addTmComposite(key, composite);
return composite;
}
}
public static class TabFolderStyle extends TmPartStyle {
private String treeTabTitle;
public TabFolderStyle(String treeTabTitle) {
this.treeTabTitle = treeTabTitle;
}
public TabFolderStyle() {
this("Toolkit model");
}
private TabFolder tabFolder;
public void createTreeParent(Composite parent) {
tabFolder = new TabFolder(parent, SWT.BOTTOM);
TabItem treeTab = new TabItem(tabFolder, SWT.NONE);
treeTab.setText(treeTabTitle);
treeParent = new Composite(tabFolder, SWT.NONE);
treeTab.setControl(treeParent);
}
public Composite addTmComposite(Object key) {
TabItem tmTab = new TabItem(tabFolder, SWT.NONE);
tmTab.setText(key.toString());
Composite composite = createTmComposite(tabFolder);
tmTab.setControl(composite);
return composite;
}
}
public static class SashTabFolderStyle extends TmPartStyle {
private TabFolder tabFolder;
public void createTreeParent(Composite parent) {
SashForm sashForm = new SashForm(parent, SWT.HORIZONTAL);
treeParent = new Composite(sashForm, SWT.NONE);
tabFolder = new TabFolder(sashForm, SWT.BOTTOM);
}
public Composite addTmComposite(Object key) {
TabItem tmTab = new TabItem(tabFolder, SWT.NONE);
tmTab.setText(key.toString());
Composite composite = createTmComposite(tabFolder);
tmTab.setControl(composite);
return composite;
}
}
}