| /******************************************************************************* |
| * Copyright (c) 2004, 2016 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.graphics.Image; |
| import org.eclipse.swt.layout.GridData; |
| import org.eclipse.swt.layout.GridLayout; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.ui.forms.IFormColors; |
| import org.eclipse.ui.forms.widgets.Form; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.ImageHyperlink; |
| import org.eclipse.ui.forms.widgets.ScrolledPageBook; |
| import org.eclipse.ui.internal.intro.impl.model.IntroLink; |
| import org.eclipse.ui.internal.intro.impl.model.IntroModelRoot; |
| import org.eclipse.ui.internal.intro.impl.util.ImageUtil; |
| |
| /** |
| * Extends the UI of a PageForm and adds a navigation toolbar UI for the root |
| * page links. |
| */ |
| public class PageFormWithNavigation extends PageForm { |
| |
| private PageStyleManager rootPageStyleManager; |
| |
| // Id to this page. There is only a single instance of this page in the |
| // main page book. |
| public static String PAGE_FORM_WITH_NAVIGATION_ID = "pageFormWithNavigationId"; //$NON-NLS-1$ |
| |
| |
| /** |
| * |
| */ |
| public PageFormWithNavigation(FormToolkit toolkit, |
| IntroModelRoot modelRoot, Form parentForm) { |
| super(toolkit, modelRoot, parentForm); |
| } |
| |
| /** |
| * Extend parent behavior and add navigation. |
| * |
| * @param pageBook |
| */ |
| @Override |
| public void createPartControl(ScrolledPageBook mainPageBook, |
| SharedStyleManager sharedStyleManager) { |
| |
| super.createPartControl(mainPageBook, sharedStyleManager); |
| |
| // Create a style manager from shared style manager. We only need it |
| // for the UI navigation composite. |
| rootPageStyleManager = new PageStyleManager(model.getHomePage(), |
| sharedStyleManager.getProperties()); |
| |
| // Now create Navigation bar. |
| Composite navigationComposite = toolkit.createComposite(pageForm |
| .getBody()); |
| navigationComposite.setLayoutData(new GridData( |
| GridData.HORIZONTAL_ALIGN_CENTER)); |
| int numberOfLinks = model.getRootPage().getLinks().length; |
| GridLayout layout = new GridLayout(); |
| layout.numColumns = numberOfLinks; |
| navigationComposite.setLayout(layout); |
| createSmallNavigator(navigationComposite, model.getRootPage() |
| .getLinks()); |
| |
| pageForm.setText(rootPageStyleManager.getPageSubTitle()); |
| } |
| |
| /** |
| * Override parent id. |
| */ |
| @Override |
| protected String getId() { |
| return PAGE_FORM_WITH_NAVIGATION_ID; |
| } |
| |
| private void createSmallNavigator(Composite parent, IntroLink[] links) { |
| for (int i = 0; i < links.length; i++) { |
| Control c = createImageHyperlink(parent, links[i]); |
| c.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); |
| } |
| for (int i = 0; i < links.length; i++) { |
| Label text = toolkit.createLabel(parent, links[i].getLabel()); |
| text.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); |
| text.setForeground(toolkit.getColors().getColor(IFormColors.TITLE)); |
| } |
| } |
| |
| /** |
| * Creates an Image Hyperlink from an IntroLink. Model object is NOT cached. |
| * |
| * @param body |
| * @param link |
| */ |
| private Control createImageHyperlink(Composite body, IntroLink link) { |
| ImageHyperlink imageLink = toolkit.createImageHyperlink(body, SWT.NULL); |
| |
| // set link image. |
| Image image = rootPageStyleManager.getImage(link, "small-link-icon", //$NON-NLS-1$ |
| ImageUtil.DEFAULT_SMALL_ROOT_LINK); |
| imageLink.setImage(image); |
| |
| // set link hover image. |
| image = rootPageStyleManager.getImage(link, "small-hover-icon", null); //$NON-NLS-1$ |
| imageLink.setHoverImage(image); |
| imageLink.setToolTipText(link.getLabel()); |
| // each link is centered in cell. |
| GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); |
| imageLink.setLayoutData(gd); |
| imageLink.setHref(link.getUrl()); |
| imageLink.addHyperlinkListener(hyperlinkAdapter); |
| return imageLink; |
| } |
| |
| |
| } |