| /******************************************************************************* |
| * Copyright (c) 2010 The Eclipse Foundation 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: |
| * The Eclipse Foundation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.epp.internal.mpc.ui.wizards; |
| |
| import java.text.MessageFormat; |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.epp.internal.mpc.ui.catalog.UserActionCatalogItem; |
| import org.eclipse.equinox.internal.p2.ui.discovery.wizards.DiscoveryResources; |
| import org.eclipse.jface.layout.GridDataFactory; |
| import org.eclipse.jface.layout.GridLayoutFactory; |
| import org.eclipse.jface.window.IShellProvider; |
| import org.eclipse.swt.SWT; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Control; |
| import org.eclipse.swt.widgets.Event; |
| import org.eclipse.swt.widgets.Label; |
| import org.eclipse.swt.widgets.Listener; |
| |
| public abstract class AbstractUserActionLinksItem extends UserActionViewerItem<UserActionCatalogItem> { |
| |
| private final Map<String, ActionLink> actions = new HashMap<String, ActionLink>(); |
| |
| public AbstractUserActionLinksItem(Composite parent, DiscoveryResources resources, |
| IShellProvider shellProvider, |
| UserActionCatalogItem element, MarketplaceViewer viewer) { |
| super(parent, resources, shellProvider, element, viewer); |
| } |
| |
| protected void createContent(ActionLink... actionLinks) { |
| Composite parent = this; |
| GridLayoutFactory.swtDefaults().numColumns(1).applyTo(parent); |
| |
| int vAlignLinks = SWT.CENTER; |
| String descriptionText = getDescriptionText(); |
| if (descriptionText != null) { |
| Label descriptionLabel = new Label(parent, SWT.CENTER); |
| descriptionLabel.setText(descriptionText); |
| GridDataFactory.swtDefaults() |
| .grab(true, false) |
| .align(SWT.CENTER, SWT.END) |
| .applyTo(descriptionLabel); |
| vAlignLinks = SWT.BEGINNING; |
| } |
| Listener listener = new Listener() { |
| public void handleEvent(Event event) { |
| Object data = event.data; |
| if (data == null) { |
| data = event.text; |
| if (data == null) { |
| data = event.widget.getData(); |
| } |
| } |
| actionPerformed(data); |
| } |
| }; |
| Composite linkParent = new Composite(parent, SWT.NONE); |
| GridDataFactory.swtDefaults().grab(true, false).align(SWT.CENTER, vAlignLinks).applyTo(linkParent); |
| GridLayoutFactory.swtDefaults().numColumns(3).applyTo(linkParent); |
| |
| boolean first = true; |
| for (ActionLink actionLink : actionLinks) { |
| actions.put(actionLink.getId(), actionLink); |
| if (first) { |
| first = false; |
| } else { |
| Label separator = new Label(linkParent, SWT.CENTER); |
| separator.setText(" | "); //$NON-NLS-1$ |
| GridDataFactory.swtDefaults().align(SWT.CENTER, vAlignLinks).applyTo(separator); |
| } |
| String linkText = getLinkText(actionLink); |
| String tooltip = actionLink.getTooltip(); |
| if (tooltip == null) { |
| tooltip = getLinkToolTipText(); |
| } |
| Control link = createActionLink(linkParent, linkText, tooltip); |
| link.setData(actionLink.getId()); |
| link.addListener(SWT.Selection, listener); |
| GridDataFactory.swtDefaults().align(SWT.END, vAlignLinks).applyTo(link); |
| } |
| } |
| |
| private String getLinkText(ActionLink actionLink) { |
| return MessageFormat.format("<a href=\"{0}\">{1}</a>", actionLink.getId(), actionLink.getLabel()); //$NON-NLS-1$ |
| } |
| |
| protected String getDescriptionText() { |
| return null; |
| } |
| |
| @Override |
| protected String getLinkText() { |
| return null; |
| } |
| |
| @Override |
| protected void actionPerformed(Object data) { |
| ActionLink actionLink = actions.get(data); |
| if (actionLink != null) { |
| actionLink.selected(); |
| } |
| } |
| } |