package tern.eclipse.ide.internal.ui.views.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IPropertyListener;
import org.eclipse.ui.IWorkbenchCommandConstants;
import org.eclipse.ui.navigator.CommonViewer;
import org.eclipse.ui.navigator.INavigatorContentService;
import org.eclipse.ui.part.ISetSelectionTarget;
import tern.eclipse.ide.internal.ui.TernUIMessages;
import tern.eclipse.ide.ui.ImageResource;
import tern.eclipse.ide.ui.views.AbstractTernOutlineView;
public class LinkEditorAction extends Action implements IPropertyListener {
private final AbstractTernOutlineView commonNavigator;
private final CommonViewer commonViewer;
// private final LinkHelperService linkService;
private boolean ignoreSelectionChanged;
private boolean ignoreEditorActivation;
/**
* Create a LinkEditorAction for the given navigator and viewer.
*
* @param aNavigator
* The navigator which defines whether linking is enabled and
* implements {@link ISetSelectionTarget}.
* @param aViewer
* The common viewer instance with a
* {@link INavigatorContentService}.
* @param linkHelperService
*/
public LinkEditorAction(AbstractTernOutlineView aNavigator, CommonViewer aViewer) {
super(TernUIMessages.LinkEditorActionDelegate_0);
setToolTipText(TernUIMessages.LinkEditorActionDelegate_1);
commonNavigator = aNavigator;
commonViewer = aViewer;
ImageDescriptor syncIcon = ImageResource.getImageDescriptor(ImageResource.IMG_ELCL_SYNCED); // $NON-NLS-1$
super.setImageDescriptor(syncIcon);
super.setHoverImageDescriptor(syncIcon);
setActionDefinitionId(IWorkbenchCommandConstants.NAVIGATE_TOGGLE_LINK_WITH_EDITOR);
// PlatformUI.getWorkbench().getHelpSystem().setHelp(this,
// TernUIPlugin.PLUGIN_ID + ".link_editor_action"); //$NON-NLS-1$
init();
}
/**
* @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart)
*/
protected void init() {
updateLinkingEnabled(commonNavigator.isLinkingEnabled());
commonNavigator.addPropertyListener(this);
}
/**
*
*/
public void dispose() {
commonNavigator.removePropertyListener(this);
}
/**
* @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
*/
@Override
public void run() {
commonNavigator.setLinkingEnabled(!commonNavigator.isLinkingEnabled());
}
/**
* Update the active editor based on the current selection in the Navigator.
*/
protected void activateEditor() {
ISelection selection = commonViewer.getSelection();
if (selection != null && !selection.isEmpty() && selection instanceof IStructuredSelection) {
/*
* Create and schedule a UI Job to activate the editor in a valid
* Display thread
*/
// activateEditorJob.schedule(NavigatorPlugin.LINK_HELPER_DELAY);
}
}
@Override
public void propertyChanged(Object aSource, int aPropertyId) {
switch (aPropertyId) {
case AbstractTernOutlineView.IS_LINKING_ENABLED_PROPERTY:
updateLinkingEnabled(((AbstractTernOutlineView) aSource).isLinkingEnabled());
}
}
/**
* @param toEnableLinking
*/
private void updateLinkingEnabled(boolean toEnableLinking) {
setChecked(toEnableLinking);
}
}