blob: fa2cd6cd04bc99fcfd36f7939a1b7ec5bf8ff84f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2016 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* 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;
}
}