org.eclipse.compare.internal.CompareEditorContributor.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.compare.internal.CompareEditorContributor.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2013 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.compare.internal;

import java.util.Iterator;
import java.util.List;
import java.util.ResourceBundle;

import org.eclipse.compare.CompareConfiguration;
import org.eclipse.compare.CompareEditorInput;
import org.eclipse.compare.CompareUI;
import org.eclipse.compare.NavigationAction;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.help.IWorkbenchHelpSystem;
import org.eclipse.ui.part.EditorActionBarContributor;
import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;

public class CompareEditorContributor extends EditorActionBarContributor {

    public final static String FILTER_SEPARATOR = "compare.filters"; //$NON-NLS-1$
    public final static String BUILTIN_SEPARATOR = "compare.builtin"; //$NON-NLS-1$

    private IEditorPart fActiveEditorPart = null;

    private ChangePropertyAction fIgnoreWhitespace;
    private NavigationAction fNext;
    private NavigationAction fPrevious;

    private NavigationAction fToolbarNext;
    private NavigationAction fToolbarPrevious;

    public CompareEditorContributor() {
        ResourceBundle bundle = CompareUI.getResourceBundle();

        IWorkbenchHelpSystem helpSystem = PlatformUI.getWorkbench().getHelpSystem();

        fIgnoreWhitespace = ChangePropertyAction.createIgnoreWhiteSpaceAction(bundle, null);
        helpSystem.setHelp(fIgnoreWhitespace, ICompareContextIds.IGNORE_WHITESPACE_ACTION);

        fNext = new NavigationAction(bundle, true);
        helpSystem.setHelp(fNext, ICompareContextIds.GLOBAL_NEXT_DIFF_ACTION);

        fPrevious = new NavigationAction(bundle, false);
        helpSystem.setHelp(fPrevious, ICompareContextIds.GLOBAL_PREVIOUS_DIFF_ACTION);

        fToolbarNext = new NavigationAction(bundle, true);
        helpSystem.setHelp(fToolbarNext, ICompareContextIds.NEXT_DIFF_ACTION);

        fToolbarPrevious = new NavigationAction(bundle, false);
        helpSystem.setHelp(fToolbarPrevious, ICompareContextIds.PREVIOUS_DIFF_ACTION);
    }

    /*
     * @see EditorActionBarContributor#contributeToToolBar(IToolBarManager)
     */
    public void contributeToToolBar(IToolBarManager tbm) {
        tbm.add(new Separator(FILTER_SEPARATOR));
        tbm.add(new Separator(BUILTIN_SEPARATOR));
        tbm.appendToGroup(BUILTIN_SEPARATOR, fIgnoreWhitespace);
        tbm.appendToGroup(BUILTIN_SEPARATOR, fToolbarNext);
        tbm.appendToGroup(BUILTIN_SEPARATOR, fToolbarPrevious);
    }

    /*
     * @see EditorActionBarContributor#contributeToMenu(IMenuManager)
     */
    public void contributeToMenu(IMenuManager menuManager) {
        // empty implementation
    }

    public void setActiveEditor(IEditorPart targetEditor) {

        if (fActiveEditorPart == targetEditor)
            return;

        fActiveEditorPart = targetEditor;

        if (fActiveEditorPart != null) {
            IEditorInput input = fActiveEditorPart.getEditorInput();
            if (input instanceof CompareEditorInput) {
                CompareEditorInput compareInput = (CompareEditorInput) input;
                fNext.setCompareEditorInput(compareInput);
                fPrevious.setCompareEditorInput(compareInput);
                // Begin fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105
                fToolbarNext.setCompareEditorInput(compareInput);
                fToolbarPrevious.setCompareEditorInput(compareInput);
                // End fix http://bugs.eclipse.org/bugs/show_bug.cgi?id=20105
            }
        }

        if (targetEditor instanceof CompareEditor) {
            IActionBars actionBars = getActionBars();

            CompareEditor editor = (CompareEditor) targetEditor;
            editor.setActionBars(actionBars);

            actionBars.setGlobalActionHandler(ActionFactory.NEXT.getId(), fNext);
            actionBars.setGlobalActionHandler(ActionFactory.PREVIOUS.getId(), fPrevious);

            actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, fNext);
            actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, fPrevious);

            CompareConfiguration cc = editor.getCompareConfiguration();
            fIgnoreWhitespace.setCompareConfiguration(cc);

            IContributionItem[] items = actionBars.getToolBarManager().getItems();
            boolean inFilters = false;
            for (int i = 0; i < items.length; i++) {
                if (items[i].getId().equals(FILTER_SEPARATOR)) {
                    inFilters = true;
                } else if (items[i].getId().equals(BUILTIN_SEPARATOR)) {
                    break;
                } else if (inFilters) {
                    if (items[i] instanceof ActionContributionItem) {
                        String definitionId = ((ActionContributionItem) items[i]).getAction()
                                .getActionDefinitionId();
                        if (definitionId != null) {
                            actionBars.setGlobalActionHandler(definitionId, null);
                        }
                    }
                    actionBars.getToolBarManager().remove(items[i]);
                }
            }

            IEditorInput input = editor.getEditorInput();
            if (input instanceof CompareEditorInput
                    && ((CompareEditorInput) input).getCompareConfiguration() != null) {
                Object filterActions = ((CompareEditorInput) input).getCompareConfiguration()
                        .getProperty(ChangeCompareFilterPropertyAction.COMPARE_FILTER_ACTIONS);
                if (filterActions instanceof List && !((List) filterActions).isEmpty()) {
                    Iterator i = ((List) filterActions).iterator();
                    while (i.hasNext()) {
                        Object next = i.next();
                        if (next instanceof ChangeCompareFilterPropertyAction) {
                            actionBars.getToolBarManager().appendToGroup(FILTER_SEPARATOR,
                                    (ChangeCompareFilterPropertyAction) next);
                            String definitionId = ((ChangeCompareFilterPropertyAction) next)
                                    .getActionDefinitionId();
                            if (definitionId != null) {
                                actionBars.setGlobalActionHandler(definitionId,
                                        (ChangeCompareFilterPropertyAction) next);
                            }
                        }
                    }
                    actionBars.getToolBarManager().markDirty();
                    actionBars.getToolBarManager().update(true);
                    actionBars.updateActionBars();
                }
            }
        } else {
            IActionBars actionBars = getActionBars();
            actionBars.setGlobalActionHandler(ActionFactory.NEXT.getId(), null);
            actionBars.setGlobalActionHandler(ActionFactory.PREVIOUS.getId(), null);
            actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_NEXT_ANNOTATION, null);
            actionBars.setGlobalActionHandler(ITextEditorActionDefinitionIds.GOTO_PREVIOUS_ANNOTATION, null);
        }
    }

    public void dispose() {
        setActiveEditor(null);
        super.dispose();
        fIgnoreWhitespace.dispose();
    }
}