blob: f8c4af900104e439393fd8444d6636a821d409fe [file] [log] [blame]
/*******************************************************************************
* 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();
}
}