| /******************************************************************************* |
| * Copyright (c) 2011, 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.help.ui.internal.views; |
| |
| import org.eclipse.help.internal.base.MissingContentManager; |
| import org.eclipse.help.internal.base.remote.RemoteStatusData; |
| import org.eclipse.help.ui.internal.Messages; |
| import org.eclipse.jface.action.IAction; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.dialogs.Dialog; |
| import org.eclipse.jface.resource.JFaceResources; |
| 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.ui.IMemento; |
| import org.eclipse.ui.forms.AbstractFormPart; |
| import org.eclipse.ui.forms.events.HyperlinkAdapter; |
| import org.eclipse.ui.forms.events.HyperlinkEvent; |
| import org.eclipse.ui.forms.widgets.FormToolkit; |
| import org.eclipse.ui.forms.widgets.ImageHyperlink; |
| |
| public class MissingContentPart extends AbstractFormPart implements IHelpPart { |
| |
| private Composite container; |
| private String id; |
| private ReusableHelpPart helpPart; |
| private ImageHyperlink statusLink; |
| private boolean wasRemoteHelpUnavailable = false; |
| private boolean wasUnresolvedPlaceholders = false; |
| |
| public MissingContentPart(Composite parent, FormToolkit toolkit) { |
| container = toolkit.createComposite(parent, SWT.NULL); |
| container.setBackgroundMode(SWT.INHERIT_DEFAULT); |
| GridLayout layout = new GridLayout(); |
| layout.marginHeight = 0; |
| layout.verticalSpacing = 0; |
| layout.marginTop = 2; |
| container.setLayout(layout); |
| updateStatus(); |
| } |
| |
| public void updateStatus() { |
| // Only update the controls if the status has changed |
| boolean isRemoteHelpUnavailable = RemoteStatusData.isAnyRemoteHelpUnavailable(); |
| if ( isRemoteHelpUnavailable && wasRemoteHelpUnavailable) { |
| return; // Nothing to do, remote help unavailable message already showing |
| } |
| boolean isUnresolvedPlaceholders = MissingContentManager.getInstance().isUnresolvedPlaceholders(); |
| if ( isRemoteHelpUnavailable == wasRemoteHelpUnavailable && isUnresolvedPlaceholders == wasUnresolvedPlaceholders ) { |
| return; |
| } |
| disposeLink(); |
| wasRemoteHelpUnavailable = isRemoteHelpUnavailable; |
| wasUnresolvedPlaceholders = isUnresolvedPlaceholders; |
| FormToolkit toolkit = new FormToolkit(container.getDisplay()); |
| if ( isRemoteHelpUnavailable ) { |
| createHelpMissingLink(container, toolkit, Dialog.DLG_IMG_MESSAGE_WARNING, Messages.remoteHelpUnavailable, |
| MissingContentManager.getInstance().getRemoteHelpUnavailablePage(true), true); |
| } else if ( isUnresolvedPlaceholders) { |
| createHelpMissingLink(container, toolkit, Dialog.DLG_IMG_MESSAGE_INFO, Messages.ReusableHelpPart_missingContent, |
| MissingContentManager.getInstance().getHelpMissingPage(true), false); |
| } |
| toolkit.dispose(); |
| } |
| |
| private void createHelpMissingLink(Composite container, FormToolkit toolkit, String imageKey, String linkText, String linkTarget, boolean isRemoteUnavailableLink) { |
| final String target = linkTarget; |
| final boolean isRemote = isRemoteUnavailableLink; |
| Composite padding = new Composite(container, SWT.NULL); |
| GridData paddingData = new GridData(); |
| paddingData.heightHint = 2; |
| padding.setLayoutData(paddingData); |
| toolkit.adapt(padding); |
| Image warningImage = JFaceResources.getImage(imageKey); |
| statusLink = toolkit.createImageHyperlink(container, SWT.NULL); |
| statusLink.setText(linkText); |
| statusLink.setImage(warningImage); |
| statusLink.addHyperlinkListener(new HyperlinkAdapter() { |
| |
| @Override |
| public void linkActivated(HyperlinkEvent e) { |
| helpPart.showURL(target); |
| if ( isRemote ) { |
| helpPart.checkRemoteStatus(); |
| } else { |
| helpPart.checkPlaceholderStatus(); |
| } |
| } |
| }); |
| GridData statusData = new GridData(GridData.BEGINNING, GridData.CENTER, false, false); |
| statusLink.setLayoutData(statusData); |
| } |
| |
| private void disposeLink() { |
| if (statusLink != null) { |
| statusLink.dispose(); |
| } |
| statusLink = null; |
| } |
| |
| public void setSubsequentPage(String subsequentPage) { |
| |
| } |
| |
| @Override |
| public void init(ReusableHelpPart parent, String id, IMemento memento) { |
| this.id = id; |
| this.helpPart = parent; |
| } |
| |
| @Override |
| public void saveState(IMemento memento) { |
| } |
| |
| @Override |
| public Control getControl() { |
| return container; |
| } |
| |
| @Override |
| public String getId() { |
| return id; |
| } |
| |
| @Override |
| public void setVisible(boolean visible) { |
| if (container != null) { |
| container.setVisible(visible); |
| } |
| } |
| |
| @Override |
| public boolean hasFocusControl(Control control) { |
| return false; |
| } |
| |
| @Override |
| public boolean fillContextMenu(IMenuManager manager) { |
| return false; |
| } |
| |
| @Override |
| public IAction getGlobalAction(String id) { |
| return null; |
| } |
| |
| @Override |
| public void stop() { |
| |
| } |
| |
| @Override |
| public void toggleRoleFilter() { |
| |
| } |
| |
| @Override |
| public void refilter() { |
| |
| } |
| |
| @Override |
| public void dispose() { |
| disposeLink(); |
| } |
| |
| } |