/*******************************************************************************
* Copyright (c) 2014 Wind River Systems, Inc. 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:
* Wind River Systems - initial API and implementation
*******************************************************************************/
package org.eclipse.tcf.te.tcf.ui.editor;
import java.util.EventObject;
import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.tcf.te.runtime.concurrent.util.ExecutorsUtil;
import org.eclipse.tcf.te.runtime.events.ChangeEvent;
import org.eclipse.tcf.te.runtime.events.EventManager;
import org.eclipse.tcf.te.runtime.interfaces.events.IEventListener;
import org.eclipse.tcf.te.runtime.services.ServiceManager;
import org.eclipse.tcf.te.tcf.locator.interfaces.nodes.IPeerNode;
import org.eclipse.tcf.te.tcf.locator.interfaces.services.IDefaultContextService;
import org.eclipse.tcf.te.tcf.ui.nls.Messages;
import org.eclipse.ui.forms.events.HyperlinkEvent;
import org.eclipse.ui.forms.events.IHyperlinkListener;
import org.eclipse.ui.forms.widgets.ImageHyperlink;
/**
* AbstractTreeViewerExplorerEditorPage
*/
public abstract class AbstractTreeViewerExplorerEditorPage extends org.eclipse.tcf.te.ui.views.editor.pages.AbstractTreeViewerExplorerEditorPage {
/* (non-Javadoc)
* @see org.eclipse.tcf.te.ui.views.editor.pages.AbstractCustomFormToolkitEditorPage#doCreateLinkContribution(org.eclipse.jface.action.IToolBarManager)
*/
@Override
protected IContributionItem doCreateLinkContribution(final IToolBarManager tbManager) {
return new ControlContribution("SetAsDefaultContextLink") { //$NON-NLS-1$
IEventListener eventListener = null;
@Override
public void dispose() {
super.dispose();
if (eventListener == null) {
EventManager.getInstance().removeEventListener(eventListener);
}
}
@Override
protected Control createControl(Composite parent) {
final ImageHyperlink hyperlink = new ImageHyperlink(parent, SWT.NONE);
hyperlink.setText(Messages.AbstractCustomFormToolkitEditorPage_setAsDefault_link);
hyperlink.setUnderlined(true);
hyperlink.setForeground(getManagedForm().getToolkit().getHyperlinkGroup().getForeground());
IPeerNode defaultNode = ServiceManager.getInstance().getService(IDefaultContextService.class).getDefaultContext(null);
setVisible(defaultNode == null || defaultNode != getEditorInputNode());
hyperlink.addHyperlinkListener(new IHyperlinkListener() {
@Override
public void linkActivated(HyperlinkEvent e) {
ServiceManager.getInstance().getService(IDefaultContextService.class).setDefaultContext((IPeerNode)getEditorInputNode());
}
@Override
public void linkEntered(HyperlinkEvent e) {
hyperlink.setForeground(getManagedForm().getToolkit().getHyperlinkGroup().getActiveForeground());
}
@Override
public void linkExited(HyperlinkEvent e) {
hyperlink.setForeground(getManagedForm().getToolkit().getHyperlinkGroup().getForeground());
}
});
eventListener = new IEventListener() {
@Override
public void eventFired(EventObject event) {
if (event instanceof ChangeEvent) {
ChangeEvent changeEvent = (ChangeEvent)event;
if (changeEvent.getSource() instanceof IDefaultContextService) {
IPeerNode defaultNode = ServiceManager.getInstance().getService(IDefaultContextService.class).getDefaultContext(null);
setVisible(defaultNode == null || getEditorInputNode() == null || defaultNode != getEditorInputNode());
ExecutorsUtil.executeInUI(new Runnable() {
@Override
public void run() {
tbManager.update(true);
}
});
}
}
}
};
EventManager.getInstance().addEventListener(eventListener, ChangeEvent.class);
return hyperlink;
}
};
}
}