Package org.epic.perleditor.views

Source Code of org.epic.perleditor.views.PerlOutlinePage$ShowSubroutineAction

package org.epic.perleditor.views;

import java.util.Iterator;

import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TreeItem;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;
import org.epic.core.ResourceMessages;
import org.epic.core.model.SourceFile;
import org.epic.core.model.Subroutine;
import org.epic.perleditor.PerlEditorPlugin;
import org.epic.perleditor.PerlPluginImages;
import org.epic.perleditor.preferences.PreferenceConstants;

public class PerlOutlinePage extends ContentOutlinePage
{
    private SourceFile source;
    private PerlOutlineContentProvider contentProvider;

    /**
     * Subroutine in which the caret was during last call to updateSelection We
     * keep track of it to speed up outline synchronisations in the common case
     * (caret movements within a sub).
     */
    private Subroutine lastCaretSub;

    public PerlOutlinePage(SourceFile source)
    {
        this.source = source;
        this.contentProvider = new PerlOutlineContentProvider();
    }

    public void createControl(Composite parent)
    {
        super.createControl(parent);

        TreeViewer viewer = getTreeViewer();
        viewer.setContentProvider(contentProvider);
        viewer.setLabelProvider(new PerlOutlineLabelProvider());
        if (PerlEditorPlugin.getDefault().getPreferenceStore()
            .getBoolean(PreferenceConstants.OUTLINE_SORT))
        {
            viewer.setSorter(new ViewerSorter());
        }
        viewer.setInput(source);
        contentProvider.correctViewerExpansion();

        IMenuManager menuMan = getSite().getActionBars().getMenuManager();
        menuMan.add(new RefreshAction());

        registerToolbarActions(this.getSite().getActionBars());
    }

    public void refresh()
    {
        if (source != null)
        {
            SourceFile sameSource = source;
            source = null;
            updateContent(sameSource);
            contentProvider.correctViewerExpansion();
        }
    }

    public void updateContent(SourceFile source)
    {
        lastCaretSub = null;
        if (!source.equals(this.source))
        {
            this.source = source;
            getTreeViewer().setInput(source);
        }
    }

    public void updateSelection(int caretLine)
    {
        // check lastCaretSub first to speed up things in the most common case
        if (lastCaretSub == null || caretLine < lastCaretSub.getStartLine()
            || caretLine > lastCaretSub.getEndLine())
        {
            lastCaretSub = null;
            for (Iterator i = source.getSubs(); i.hasNext();)
            {
                Subroutine sub = (Subroutine) i.next();
                if (caretLine >= sub.getStartLine()
                    && caretLine <= sub.getEndLine())
                {
                    lastCaretSub = sub;
                    break;
                }
            }
        }
        if (lastCaretSub != null) setSelection(new StructuredSelection(
            lastCaretSub));
        else setSelection(StructuredSelection.EMPTY);
    }

    /**
     * This action is here as a fault tolerance measure - the outline view may,
     * unfortunately, become garbled due to some bug in EPIC. To alleviate this
     * problem somewhat, we give the user a way for explicit recovery.
     */
    private class RefreshAction extends Action
    {
        public RefreshAction()
        {
            super();
            PlatformUI
                .getWorkbench()
                .getHelpSystem()
                .setHelp(
                    this,
                    ResourceMessages
                        .getString("PerlOutlinePage.RefreshAction.label"));
            setText(ResourceMessages
                .getString("PerlOutlinePage.RefreshAction.label")); //$NON-NLS-1$
            setImageDescriptor(PerlPluginImages
                .getDescriptor(PerlPluginImages.IMG_ICON_OUTLINE_REFRESH));
            setToolTipText(ResourceMessages
                .getString("PerlOutlinePage.RefreshAction.tooltip")); //$NON-NLS-1$
            setDescription(ResourceMessages
                .getString("PerlOutlinePage.RefreshAction.descr")); //$NON-NLS-1$
        }

        public void run()
        {
            refresh();
        }
    }

    class LexicalSortingAction extends Action
    {
        public LexicalSortingAction()
        {
            super();
            PlatformUI
                .getWorkbench()
                .getHelpSystem()
                .setHelp(
                    this,
                    ResourceMessages
                        .getString("PerlOutlinePage.RefreshAction.tooltip")); //$NON-NLS-1$
            setText(ResourceMessages
                .getString("PerlOutlinePage.LexicalSortAction.tooltip")); //$NON-NLS-1$
            setImageDescriptor(PerlPluginImages
                .getDescriptor(PerlPluginImages.IMG_ICON_OUTLINE_SORT));
            setToolTipText(ResourceMessages
                .getString("PerlOutlinePage.LexicalSortAction.tooltip")); //$NON-NLS-1$
            setDescription(ResourceMessages
                .getString("PerlOutlinePage.LexicalSortAction.descr")); //$NON-NLS-1$
            setChecked(PerlEditorPlugin.getDefault().getPreferenceStore()
                .getBoolean(PreferenceConstants.OUTLINE_SORT));
        }

        public void run()
        {
            if (PerlEditorPlugin.getDefault().getPreferenceStore()
                .getBoolean(PreferenceConstants.OUTLINE_SORT))
            {
                getTreeViewer().setSorter(null);
                PerlEditorPlugin.getDefault().getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_SORT, false);
                setChecked(false);
            }
            else
            {
                getTreeViewer().setSorter(new ViewerSorter());
                PerlEditorPlugin.getDefault().getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_SORT, true);
                setChecked(true);
            }
        }
    }

    class CollapseAllAction extends Action
    {
        public CollapseAllAction()
        {
            super();
            PlatformUI
                .getWorkbench()
                .getHelpSystem()
                .setHelp(
                    this,
                    ResourceMessages
                        .getString("PerlOutlinePage.CollapseAllAction.tooltip"));
            setText(ResourceMessages
                .getString("PerlOutlinePage.CollapseAllAction.tooltip"));
            setImageDescriptor(PerlPluginImages
                .getDescriptor(PerlPluginImages.IMG_ICON_OUTLINE_COLLAPSE));
            setToolTipText(ResourceMessages
                .getString("PerlOutlinePage.CollapseAllAction.tooltip")); //$NON-NLS-1$
            setDescription(ResourceMessages
                .getString("PerlOutlinePage.CollapseAllAction.descr")); //$NON-NLS-1$
        }

        public void run()
        {
            if (PerlEditorPlugin.getDefault().getPreferenceStore()
                .getBoolean(PreferenceConstants.OUTLINE_COLLAPSE_ALL))
            {
                PerlEditorPlugin.getDefault().getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_COLLAPSE_ALL, false);
                setChecked(false);
            }
            else
            {
                PerlEditorPlugin.getDefault().getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_COLLAPSE_ALL, true);
                setChecked(true);
            }
            contentProvider.correctViewerExpansion();

        }
    }

    class HideModulesAction extends Action
    {
        public HideModulesAction()
        {
            super();
            PlatformUI
                .getWorkbench()
                .getHelpSystem()
                .setHelp(
                    this,
                    ResourceMessages
                        .getString("PerlOutlinePage.HideModules.tooltip"));
            setText(ResourceMessages
                .getString("PerlOutlinePage.HideModules.tooltip"));
            setImageDescriptor(PerlPluginImages
                .getDescriptor(PerlPluginImages.IMG_ICON_USE_NODE));
            setToolTipText(ResourceMessages
                .getString("PerlOutlinePage.HideModules.tooltip")); //$NON-NLS-1$
            setDescription(ResourceMessages
                .getString("PerlOutlinePage.HideModules.descr")); //$NON-NLS-1$
            setChecked(PerlEditorPlugin.getDefault().getPreferenceStore()
                .getBoolean(PreferenceConstants.OUTLINE_MODULE_FOLDING));
        }

        public void run()
        {
            if (PerlEditorPlugin.getDefault().getPreferenceStore()
                .getBoolean(PreferenceConstants.OUTLINE_MODULE_FOLDING))
            {
                PerlEditorPlugin
                    .getDefault()
                    .getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_MODULE_FOLDING, false);
                setChecked(false);
            }
            else
            {
                PerlEditorPlugin.getDefault().getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_MODULE_FOLDING, true);
                setChecked(true);
            }
            contentProvider.correctViewerExpansion();
        }
    }

    class ShowSubroutineAction extends Action
    {
        public ShowSubroutineAction()
        {
            super();
            PlatformUI
                .getWorkbench()
                .getHelpSystem()
                .setHelp(
                    this,
                    ResourceMessages
                        .getString("PerlOutlinePage.HideMethods.tooltip"));
            setText(ResourceMessages
                .getString("PerlOutlinePage.HideMethods.tooltip"));
            setImageDescriptor(PerlPluginImages
                .getDescriptor(PerlPluginImages.IMG_ICON_SUBROUTINE_NODE));
            setToolTipText(ResourceMessages
                .getString("PerlOutlinePage.HideMethods.tooltip")); // $$NON-NLS-1$
            setDescription(ResourceMessages
                .getString("PerlOutlinePage.HideMethods.descr")); // $$NON-NLS-1$
            setChecked(PerlEditorPlugin.getDefault().getPreferenceStore()
                .getBoolean(PreferenceConstants.OUTLINE_SUBROUTINE_FOLDING));
        }

        public void run()
        {
            if (PerlEditorPlugin.getDefault().getPreferenceStore()
                .getBoolean(PreferenceConstants.OUTLINE_SUBROUTINE_FOLDING))
            {
                PerlEditorPlugin
                    .getDefault()
                    .getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_SUBROUTINE_FOLDING,
                        false);
                setChecked(false);
            }
            else
            {
                PerlEditorPlugin
                    .getDefault()
                    .getPreferenceStore()
                    .setValue(PreferenceConstants.OUTLINE_SUBROUTINE_FOLDING,
                        true);
                setChecked(true);
            }
            contentProvider.correctViewerExpansion();
        }
    }

    private void registerToolbarActions(IActionBars actionBars)
    {
        IToolBarManager toolBarManager = actionBars.getToolBarManager();
        toolBarManager.add(new CollapseAllAction());
        toolBarManager.add(new LexicalSortingAction());
        toolBarManager.add(new HideModulesAction());
        toolBarManager.add(new ShowSubroutineAction());
    }
}
TOP

Related Classes of org.epic.perleditor.views.PerlOutlinePage$ShowSubroutineAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.