de.walware.statet.r.internal.ui.editors.ROutlinePage.java Source code

Java tutorial

Introduction

Here is the source code for de.walware.statet.r.internal.ui.editors.ROutlinePage.java

Source

/*=============================================================================#
 # Copyright (c) 2007-2015 Stephan Wahlbrink (WalWare.de) 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:
 #     Stephan Wahlbrink - initial API and implementation
 #=============================================================================*/

package de.walware.statet.r.internal.ui.editors;

import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.menus.CommandContributionItem;
import org.eclipse.ui.menus.CommandContributionItemParameter;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.services.IServiceLocator;

import de.walware.ecommons.ltk.core.model.IModelElement;
import de.walware.ecommons.ltk.ui.ElementNameComparator;
import de.walware.ecommons.ltk.ui.sourceediting.SourceEditor2OutlinePage;
import de.walware.ecommons.ui.SharedMessages;
import de.walware.ecommons.ui.SharedUIResources;
import de.walware.ecommons.ui.actions.HandlerCollection;
import de.walware.ecommons.ui.util.DialogUtil;
import de.walware.ecommons.ui.util.UIAccess;

import de.walware.statet.base.ui.IStatetUIMenuIds;

import de.walware.statet.r.core.model.IRElement;
import de.walware.statet.r.core.model.RElementName;
import de.walware.statet.r.core.model.RModel;
import de.walware.statet.r.core.refactoring.RRefactoring;
import de.walware.statet.r.internal.ui.RUIMessages;
import de.walware.statet.r.internal.ui.RUIPlugin;
import de.walware.statet.r.launching.RCodeLaunching;
import de.walware.statet.r.ui.RLabelProvider;
import de.walware.statet.r.ui.RUI;

/**
 * Outline page for R sources
 */
public class ROutlinePage extends SourceEditor2OutlinePage {

    private static final ViewerComparator ALPHA_COMPARATOR = new ElementNameComparator(
            RElementName.NAMEONLY_COMPARATOR);

    private class AlphaSortAction extends ToggleAction {

        public AlphaSortAction() {
            super("sort.alphabetically.enabled", false, 2); //$NON-NLS-1$
            setText(SharedMessages.ToggleSortAction_name);
            setImageDescriptor(
                    SharedUIResources.getImages().getDescriptor(SharedUIResources.LOCTOOL_SORT_ALPHA_IMAGE_ID));
            setToolTipText(SharedMessages.ToggleSortAction_tooltip);
        }

        @Override
        protected void configure(final boolean on) {
            final TreeViewer viewer = getViewer();
            if (UIAccess.isOkToUse(viewer)) {
                viewer.setComparator(on ? ALPHA_COMPARATOR : null);
            }
        }

    }

    private class FilterCommonVariables extends ToggleAction {

        public FilterCommonVariables() {
            super("filter.common_var.enabled", false, 2); //$NON-NLS-1$
            setText(RUIMessages.Outline_HideGeneralVariables_name);
            setImageDescriptor(RUI.getImageDescriptor(RUIPlugin.IMG_LOCTOOL_FILTER_GENERAL));
            setToolTipText(RUIMessages.Outline_HideGeneralVariables_name);
        }

        @Override
        protected void configure(final boolean on) {
            final TreeViewer viewer = getViewer();
            fFilter.hideCommonVariables = on;
            if (UIAccess.isOkToUse(viewer)) {
                viewer.refresh(false);
            }
        }

    }

    private class FilterLocalDefinitions extends ToggleAction {

        public FilterLocalDefinitions() {
            super("filter.local.enabled", false, 2); //$NON-NLS-1$
            setText(RUIMessages.Outline_HideLocalElements_name);
            setImageDescriptor(RUI.getImageDescriptor(RUIPlugin.IMG_LOCTOOL_FILTER_LOCAL));
            setToolTipText(RUIMessages.Outline_HideLocalElements_name);
        }

        @Override
        protected void configure(final boolean on) {
            final TreeViewer viewer = getViewer();
            fFilter.hideLocalDefinitions = on;
            if (UIAccess.isOkToUse(viewer)) {
                viewer.refresh(false);
            }
        }

    }

    private class ContentFilter implements IModelElement.Filter {

        private boolean hideCommonVariables;
        private boolean hideLocalDefinitions;

        @Override
        public boolean include(final IModelElement element) {
            switch (element.getElementType()) {
            case IRElement.R_ARGUMENT:
                return false;
            case IRElement.R_GENERAL_VARIABLE:
                return !hideCommonVariables;
            case IRElement.R_GENERAL_LOCAL_VARIABLE:
                return !hideCommonVariables && !hideLocalDefinitions;
            case IRElement.R_COMMON_LOCAL_FUNCTION:
                return !hideLocalDefinitions;
            default:
                return true;
            }
        };

    }

    private final ContentFilter fFilter = new ContentFilter();

    public ROutlinePage(final REditor editor) {
        super(editor, RModel.TYPE_ID, RRefactoring.getFactory(), "de.walware.r.menu.ROutlineViewContextMenu"); //$NON-NLS-1$
    }

    @Override
    protected IDialogSettings getDialogSettings() {
        return DialogUtil.getDialogSettings(RUIPlugin.getDefault(), "ROutlineView"); //$NON-NLS-1$
    }

    @Override
    protected IModelElement.Filter getContentFilter() {
        return fFilter;
    }

    @Override
    protected void configureViewer(final TreeViewer viewer) {
        super.configureViewer(viewer);

        viewer.setLabelProvider(new RLabelProvider());
    }

    @Override
    protected void contributeToActionBars(final IServiceLocator serviceLocator, final IActionBars actionBars,
            final HandlerCollection handlers) {
        super.contributeToActionBars(serviceLocator, actionBars, handlers);

        final IToolBarManager toolBarManager = actionBars.getToolBarManager();

        toolBarManager.appendToGroup(SharedUIResources.VIEW_SORT_MENU_ID, new AlphaSortAction());
        toolBarManager.appendToGroup(SharedUIResources.VIEW_FILTER_MENU_ID, new FilterCommonVariables());
        toolBarManager.appendToGroup(SharedUIResources.VIEW_FILTER_MENU_ID, new FilterLocalDefinitions());
    }

    @Override
    protected void contextMenuAboutToShow(final IMenuManager m) {
        super.contextMenuAboutToShow(m);
        final IPageSite site = getSite();

        if (m.find(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID) == null) {
            m.insertBefore(SharedUIResources.ADDITIONS_MENU_ID,
                    new Separator(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID));
        }

        m.appendToGroup(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID,
                new CommandContributionItem(new CommandContributionItemParameter(site, null,
                        RCodeLaunching.SUBMIT_SELECTION_COMMAND_ID, null, null, null, null, null, "R", null, //$NON-NLS-1$
                        CommandContributionItem.STYLE_PUSH, null, false)));
        m.appendToGroup(IStatetUIMenuIds.GROUP_SUBMIT_MENU_ID,
                new CommandContributionItem(new CommandContributionItemParameter(site, null,
                        RCodeLaunching.SUBMIT_UPTO_SELECTION_COMMAND_ID, null, null, null, null, null, "U", null, //$NON-NLS-1$
                        CommandContributionItem.STYLE_PUSH, null, false)));

        m.add(new Separator(IStatetUIMenuIds.GROUP_ADD_MORE_ID));
    }

}