| /******************************************************************************* |
| * Copyright (c) 2004, 2006 IBM Corporation and others. |
| * 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: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.ui.internal.intro.impl.swt; |
| |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.ScrolledPageBook; |
| import org.eclipse.ui.forms.widgets.TableWrapData; |
| import org.eclipse.ui.forms.widgets.TableWrapLayout; |
| import org.eclipse.ui.internal.intro.impl.IIntroConstants; |
| import org.eclipse.ui.internal.intro.impl.model.AbstractIntroElement; |
| import org.eclipse.ui.internal.intro.impl.model.AbstractIntroPage; |
| import org.eclipse.ui.internal.intro.impl.model.IntroModelRoot; |
| import org.eclipse.ui.intro.config.IIntroContentProviderSite; |
| |
| /** |
| * A Composite that represents the content of an Intro Page. It is swapped in |
| * the categories page book in the PageForm class. |
| */ |
| public class PageContentForm implements IIntroConstants { |
| |
| private FormToolkit toolkit; |
| private IntroModelRoot model; |
| private PageStyleManager styleManager; |
| // composite to control reflow. |
| private Composite contentComposite; |
| |
| // the page we are modeling here. |
| private AbstractIntroPage page; |
| |
| // site is cached to hand down to the PageWidgetFactory for creating the UI |
| // for content providers.. |
| private IIntroContentProviderSite site; |
| |
| |
| public PageContentForm(FormToolkit toolkit, IntroModelRoot modelRoot) { |
| this.toolkit = toolkit; |
| this.model = modelRoot; |
| page = model.getCurrentPage(); |
| } |
| |
| public PageContentForm(FormToolkit toolkit, IntroModelRoot modelRoot, |
| AbstractIntroPage page) { |
| this(toolkit, modelRoot); |
| this.page = page; |
| } |
| |
| |
| /** |
| * Create the form for the root page. Number of columns there is equal to |
| * the number of links. Every image link does not cache a model object for |
| * data retrieval.. |
| * |
| * @param pageBook |
| */ |
| public void createPartControl(ScrolledPageBook contentPageBook, |
| PageStyleManager pageStyleManager) { |
| styleManager = pageStyleManager; |
| |
| // categoriesComposite has Table Layout with one col. Holds page |
| // description and composite with all other children. |
| contentComposite = contentPageBook.createPage(page.getId()); |
| // Util.highlight(contentComposite, SWT.COLOR_GREEN); |
| TableWrapLayout layout = new TableWrapLayout(); |
| layout.topMargin = 15; |
| layout.leftMargin = 15; |
| layout.rightMargin = 15; |
| layout.bottomMargin = 15; |
| layout.verticalSpacing = 15; |
| contentComposite.setLayout(layout); |
| |
| if (styleManager.getPageDescription() != null) { |
| Label label = toolkit.createLabel(contentComposite, styleManager |
| .getPageDescription(), SWT.WRAP); |
| label.setFont(PageStyleManager.getBannerFont()); |
| TableWrapData td = new TableWrapData(); |
| td.align = TableWrapData.FILL; |
| label.setLayoutData(td); |
| } |
| |
| // Store the sub-title data for this composite from this page's |
| // subtitle. Make sure you do this before creating the page content to |
| // filter out page sub-title from content area. |
| contentComposite.setData(PAGE_SUBTITLE, styleManager.getPageSubTitle()); |
| |
| createPageChildren(page, contentComposite); |
| |
| styleManager = null; |
| } |
| |
| private void createPageChildren(AbstractIntroPage page, Composite parent) { |
| // setup page composite/layout |
| PageWidgetFactory factory = new PageWidgetFactory(toolkit, styleManager); |
| factory.setContentProviderSite(site); |
| Composite pageComposite = createPageTableComposite(factory, toolkit, styleManager, parent); |
| // now add all children |
| AbstractIntroElement[] children = page.getChildren(); |
| for (int i = 0; i < children.length; i++) |
| factory.createIntroElement(pageComposite, children[i]); |
| |
| } |
| |
| /** |
| * Creates a composite with TableWrapLayout to hold all page children. The |
| * default number of columns is 1. |
| * |
| * @param parent |
| * @return |
| */ |
| static Composite createPageTableComposite(PageWidgetFactory factory, FormToolkit toolkit, |
| PageStyleManager styleManager, Composite parent) { |
| Composite client = toolkit.createComposite(parent); |
| TableWrapLayout layout = new TableWrapLayout(); |
| layout.topMargin = 0; |
| layout.bottomMargin = 0; |
| layout.leftMargin = 0; |
| layout.rightMargin = 0; |
| int numColumns = styleManager.getPageNumberOfColumns(); |
| layout.numColumns = numColumns == 0 ? 1 : numColumns; |
| layout.horizontalSpacing = styleManager.getPageHorizantalSpacing(); |
| layout.verticalSpacing = styleManager.getPageVerticalSpacing(); |
| client.setLayout(layout); |
| |
| // parent has TableWrapLayout, and so update layout of this child. |
| TableWrapData td = new TableWrapData(TableWrapData.FILL, |
| TableWrapData.FILL); |
| // td.align = TableWrapData.FILL; |
| td.grabHorizontal = true; |
| client.setLayoutData(td); |
| return client; |
| } |
| |
| |
| public void setContentProviderSite(IIntroContentProviderSite site) { |
| this.site = site; |
| } |
| |
| |
| |
| } |