/******************************************************************************* * Copyright (c) 2008 Olivier Moises * * 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: * Olivier Moises- initial API and implementation *******************************************************************************/ package org.eclipse.wazaabi.ui.runtime.parts; import java.util.ArrayList; import java.util.List; import org.eclipse.emf.common.util.URI; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.ScrolledComposite; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.wazaabi.mm.core.styles.CoreStylesPackage; import org.eclipse.wazaabi.mm.core.styles.StackLayoutRule; import org.eclipse.wazaabi.mm.core.styles.TabRule; import org.eclipse.wazaabi.mm.core.widgets.AbstractComponent; import org.eclipse.wazaabi.mm.core.widgets.Container; import org.eclipse.wazaabi.ui.model.parts.Page; public class TabbedPropertySheetPage extends PropertySheetPage { public TabbedPropertySheetPage() { super(); } public TabbedPropertySheetPage(Page modelPage) { super(modelPage); } public TabbedPropertySheetPage(String uri) { super(uri); } public TabbedPropertySheetPage(URI uri) { super(uri); } private Composite leftComposite = null; private boolean displayTitle = false; private ScrolledComposite scrolledComposite = null; private TabbedPropertyList listComposite = null; protected TabbedPropertyList getListComposite() { return listComposite; } private Composite mainComposite = null; @Override public void createControl(Composite parent) { mainComposite = new Composite(parent, SWT.NO_FOCUS); mainComposite.setLayout(new FormLayout()); if (displayTitle) { // title = new TabbedPropertyTitle(mainComposite, factory); // // FormData data = new FormData(); // data.left = new FormAttachment(0, 0); // data.right = new FormAttachment(100, 0); // data.top = new FormAttachment(0, 0); // title.setLayoutData(data); } leftComposite = new Composite(mainComposite, SWT.NO_FOCUS); leftComposite.setLayout(new FormLayout()); scrolledComposite = new ScrolledComposite(mainComposite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.NO_FOCUS); FormData formData = new FormData(); formData.left = new FormAttachment(leftComposite, 0); formData.right = new FormAttachment(100, 0); if (displayTitle) { // formData.top = new FormAttachment(title, 0); } else { formData.top = new FormAttachment(0, 0); } formData.bottom = new FormAttachment(100, 0); scrolledComposite.setLayoutData(formData); formData = new FormData(); formData.left = new FormAttachment(0, 0); formData.right = new FormAttachment(scrolledComposite, 0); if (displayTitle) { // formData.top = new FormAttachment(title, 0); } else { formData.top = new FormAttachment(0, 0); } formData.bottom = new FormAttachment(100, 0); leftComposite.setLayoutData(formData); super.createControl(scrolledComposite); scrolledComposite.setContent(getViewer().getControl()); scrolledComposite.setAlwaysShowScrollBars(false); scrolledComposite.setExpandVertical(true); scrolledComposite.setExpandHorizontal(true); listComposite = new TabbedPropertyList(leftComposite, this); formData = new FormData(); formData.left = new FormAttachment(0, 0); formData.right = new FormAttachment(100, 0); formData.top = new FormAttachment(0, 0); formData.bottom = new FormAttachment(100, 0); listComposite.setLayoutData(formData); } @Override public Control getControl() { return mainComposite; } public void selectTab(int tabIndex) { if (getSelectedComponent() instanceof Container) { StackLayoutRule stackLayoutRule = (StackLayoutRule) getSelectedComponent() .getFirstStyleRule("layout", CoreStylesPackage.Literals.STACK_LAYOUT_RULE); if (stackLayoutRule != null) stackLayoutRule.setTop(tabIndex); } } @Override protected void updateSelectedComponent(Object input) { super.updateSelectedComponent(input); TabItem tabItems[] = new TabItem[] {}; List<String> labels = new ArrayList<String>(); int topIndex = 0; if (getSelectedComponent() instanceof Container) { StackLayoutRule stackLayoutRule = (StackLayoutRule) getSelectedComponent() .getFirstStyleRule("layout", //$NON-NLS-1$ CoreStylesPackage.Literals.STACK_LAYOUT_RULE); if (stackLayoutRule != null) topIndex = stackLayoutRule.getTop(); for (AbstractComponent child : ((Container) getSelectedComponent()) .getChildren()) { TabRule tabRule = (TabRule) child.getFirstStyleRule( "layout-data", CoreStylesPackage.Literals.TAB_RULE); //$NON-NLS-1$ if (tabRule != null) labels.add(tabRule.getLabel() != null ? tabRule.getLabel() : ""); //$NON-NLS-1$ } } if (!labels.isEmpty()) { tabItems = new TabItem[labels.size()]; for (int i = 0; i < labels.size(); i++) tabItems[i] = new TabItem(labels.get(i)); } getListComposite().setElements(tabItems); getListComposite().select(topIndex); } }