net.sf.sveditor.ui.editor.outline.SVOutlinePage.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.sveditor.ui.editor.outline.SVOutlinePage.java

Source

/****************************************************************************
 * Copyright (c) 2008-2014 Matthew Ballance 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:
 *     Matthew Ballance - initial implementation
 ****************************************************************************/

package net.sf.sveditor.ui.editor.outline;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import net.sf.sveditor.core.Tuple;
import net.sf.sveditor.core.db.ISVDBChildItem;
import net.sf.sveditor.core.db.ISVDBChildParent;
import net.sf.sveditor.core.db.ISVDBItemBase;
import net.sf.sveditor.core.db.ISVDBNamedItem;
import net.sf.sveditor.core.db.SVDBFile;
import net.sf.sveditor.core.db.SVDBFileTree;
import net.sf.sveditor.core.db.SVDBItem;
import net.sf.sveditor.core.db.SVDBItemType;
import net.sf.sveditor.core.db.SVDBModIfcInst;
import net.sf.sveditor.core.db.index.ISVDBChangeListener;
import net.sf.sveditor.core.db.index.SVDBFilePath;
import net.sf.sveditor.core.db.stmt.SVDBVarDeclStmt;
import net.sf.sveditor.core.db.utils.SVDBSearchUtils;
import net.sf.sveditor.core.log.ILogHandle;
import net.sf.sveditor.core.log.ILogLevelListener;
import net.sf.sveditor.core.log.LogFactory;
import net.sf.sveditor.core.log.LogHandle;
import net.sf.sveditor.ui.SVDBIconUtils;
import net.sf.sveditor.ui.SVEditorUtil;
import net.sf.sveditor.ui.SVUiPlugin;
import net.sf.sveditor.ui.editor.SVEditor;
import net.sf.sveditor.ui.pref.SVEditorPrefsConstants;
import net.sf.sveditor.ui.svcp.SVDBDefaultContentFilter;
import net.sf.sveditor.ui.svcp.SVTreeContentProvider;

import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.IElementComparer;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TreePath;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.ViewerComparator;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.IShowInTarget;
import org.eclipse.ui.part.ShowInContext;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

public class SVOutlinePage extends ContentOutlinePage
        implements IShowInTarget, IAdaptable, Runnable, ISVDBChangeListener, ILogLevelListener {
    private SVOutlineContent fContent;
    private SVOutlineContentProvider fContentProvider;
    private SVEditor fEditor;
    private boolean fIgnoreSelectionChange = false;
    private ISVDBItemBase fLastSelection;
    private Action ToggleAssign;
    private Action ToggleAlways;
    private Action ToggleDefines;
    private Action ToggleInitial;
    private Action ToggleGenerate;
    private Action ToggleVariables;
    private Action ToggleModuleInstances;
    private Action ToggleInclude;
    private Action ToggleTaskFunction;
    private Action ToggleEnumTypedefs;
    private Action ToggleAssertionProperties;
    private Action ToggleCoverPointGroupCross;
    private Action ToggleConstraints;
    private Action ToggleSort;
    private Action fEnableEditorLinking;
    private SVDBDefaultContentFilter DefaultContentFilter;
    private ViewerComparator ViewerComapartor;
    private LogHandle fLog;
    private boolean fDebugEn;
    private boolean fLinkWithEditor = true;

    public SVOutlinePage(SVEditor editor) {
        fEditor = editor;
        fContentProvider = new SVOutlineContentProvider();

        fContent = new SVOutlineContent(new SVDBFile(""), null);

        fLog = LogFactory.getLogHandle("SVOutlinePage");
        fDebugEn = fLog.isEnabled();

    }

    public void logLevelChanged(ILogHandle handle) {
        fDebugEn = handle.isEnabled();
    }

    public ITreeContentProvider getContentProvider() {
        return fContentProvider;
    }

    public SVOutlineContent getContent() {
        return fContent;
    }

    @Override
    public void setSelection(ISelection selection) {
        if (fDebugEn) {
            fLog.debug("setSelection: " + selection);
        }
        super.setSelection(selection);
    }

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

        fContentProvider = new SVOutlineContentProvider();
        DefaultContentFilter = new SVDBDefaultContentFilter();
        ViewerComapartor = new ViewerComparator();

        // Set up the preferences from the preference store
        DefaultContentFilter.HideAlwaysStatements(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ALWAYS_BLOCKS));
        DefaultContentFilter.HideAssignStatements(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ASSIGN_STATEMENTS));
        DefaultContentFilter.HideDefineStatements(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_DEFINE_STATEMENTS));
        DefaultContentFilter.HideGenerateBlocks(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_GENERATE_BLOCKS));
        DefaultContentFilter.HideIncludeFiles(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_INCLUDE_FILES));
        DefaultContentFilter.HideInitialBlocks(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_INITIAL_BLOCKS));
        DefaultContentFilter.HideModuleInstances(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_MODULE_INSTANCES));
        DefaultContentFilter.HideTaskFunctions(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_TASK_FUNCTION_DECLARATIONS));
        DefaultContentFilter.HideVariableDeclarations(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_SIGNAL_DECLARATIONS));
        DefaultContentFilter.HideEnumTypedefs(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ENUM_TYPEDEFS));
        DefaultContentFilter.HideAssertionProperties(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ASSERTION_PROPERTIES));
        DefaultContentFilter.HideCoverPointGroupCross(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_COVER_POINT_GROUP_CROSS));
        DefaultContentFilter.HideConstraints(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_CONSTRAINTS));

        getTreeViewer().setContentProvider(fContentProvider);
        getTreeViewer().addFilter(DefaultContentFilter);
        // Check whether we have sorting enabled or not
        if (SVUiPlugin.getDefault().getPreferenceStore().getBoolean(SVEditorPrefsConstants.P_OUTLINE_SORT)) {
            getTreeViewer().setComparator(ViewerComapartor);
        } else {
            getTreeViewer().setComparator(null);
        }
        getTreeViewer().setLabelProvider(new SVOutlineLabelProvider());
        getTreeViewer().setComparer(new IElementComparer() {
            public int hashCode(Object element) {
                return element.hashCode();
            }

            public boolean equals(Object a, Object b) {
                // Just do a simple compare
                return (a == b);
            }
        });

        getTreeViewer().setInput(fContent);

        getTreeViewer().addSelectionChangedListener(fSelectionListener);
        getTreeViewer().addDoubleClickListener(fDoubleClickListener);
        getTreeViewer().setAutoExpandLevel(TreeViewer.ALL_LEVELS);

        // Get initial contents
        refresh();
    }

    public void clearIgnoreSelectionChange() {
        if (fDebugEn) {
            fLog.debug("clearIgnoreSelectionChange");
        }
        fIgnoreSelectionChange = false;
    }

    public void updateCursorLocation(int offset) {
        IDocument doc = fEditor.getDocument();

        int line = -1;
        try {
            line = doc.getLineOfOffset(offset);
        } catch (BadLocationException e) {
        }

        if (line != -1 && fLinkWithEditor) {
            line++;
            // Find element corresponding to line

            ISVDBItemBase it = SVDBSearchUtils.findActiveStructItem(fEditor.getSVDBFile(), line,
                    SVTreeContentProvider.fDoNotRecurseScopes, SVTreeContentProvider.fExpandInLineItems,
                    SVTreeContentProvider.fIgnoreItems);

            if (it != null) {
                fIgnoreSelectionChange = true;
                getTreeViewer().reveal(it);
                getTreeViewer().setSelection(new StructuredSelection(it));
                fIgnoreSelectionChange = false;
            }
        }
    }

    public void SVDBFileChanged(SVDBFile file, List<SVDBItem> adds, List<SVDBItem> removes,
            List<SVDBItem> changes) {
        if (file.getFilePath().equals(fEditor.getFilePath())) {
            if (getTreeViewer() != null && !getTreeViewer().getControl().isDisposed()) {
                Display.getDefault().asyncExec(this);
            }
        }
    }

    public void refresh() {
        if (getTreeViewer() != null && !getTreeViewer().getControl().isDisposed()) {
            if (fDebugEn) {
                fLog.debug("refresh: schedule refresh of content");
            }
            Display.getDefault().asyncExec(this);
        }
    }

    public void run() {
        if (getTreeViewer() != null && !getTreeViewer().getControl().isDisposed()) {
            if (fDebugEn) {
                fLog.debug("run: refresh content");
            }
            SVDBFilePath file_path = null;
            List<SVDBFilePath> curr_path = fEditor.getSVDBFilePath();

            if (curr_path != null && curr_path.size() > 0) {
                file_path = curr_path.get(0);
            }

            fContent = new SVOutlineContent(fEditor.getSVDBFile(), file_path);

            List<Object> exp_path_list = getExpansionPaths();

            ISelection sel = getTreeViewer().getSelection();

            getTreeViewer().setInput(fContent);

            // Apply selection and expansions previously saved
            setExpansionPaths(exp_path_list);

            setSavedSelection(sel);
        } else {
            if (fDebugEn) {
                fLog.debug("run: ignore due to page closing");
            }
        }
    }

    private List<Object> getExpansionPaths() {
        List<Object> ret = new ArrayList<Object>();
        for (TreePath p : getTreeViewer().getExpandedTreePaths()) {
            Object last_seg_o = p.getLastSegment();

            if (last_seg_o instanceof ISVDBItemBase || last_seg_o instanceof Tuple
                    || last_seg_o instanceof SVDBFilePath) {
                ret.add(last_seg_o);
            }
        }

        return ret;
    }

    @SuppressWarnings("unchecked")
    private void setExpansionPaths(List<Object> exp_paths) {
        List<Object> path = new ArrayList<Object>();
        List<Object> target_path = new ArrayList<Object>();
        List<TreePath> exp_tree_paths = new ArrayList<TreePath>();

        for (Object item : exp_paths) {
            path.clear();
            target_path.clear();

            if (item instanceof Tuple) {
                // Build the path
                Tuple<SVDBFileTree, ISVDBItemBase> t = (Tuple<SVDBFileTree, ISVDBItemBase>) item;
                target_path.add(fContent.getFilePath());
                for (Tuple<SVDBFileTree, ISVDBItemBase> i : fContent.getFilePath().getPath()) {
                    if (i.first().getFilePath().equals(t.first().getFilePath())) {
                        target_path.add(i);
                        break;
                    }
                }

                if (target_path.size() < 2) {
                    target_path.clear();
                }
            } else if (item instanceof SVDBFilePath) {
                target_path.add(fContent.getFilePath());
            } else if (item instanceof ISVDBItemBase) {
                // Build the path
                buildFullPath(path, (ISVDBItemBase) item);

                // Find the corresponding path
                lookupPath(fContent.getFile(), path.iterator(), target_path);
            }

            if (target_path.size() > 0) {
                exp_tree_paths.add(new TreePath(target_path.toArray()));
            }
        }

        if (exp_tree_paths.size() > 0) {
            getTreeViewer().setExpandedTreePaths(exp_tree_paths.toArray(new TreePath[exp_tree_paths.size()]));
        }
    }

    private void buildFullPath(List<Object> path, ISVDBItemBase leaf) {
        ISVDBItemBase item_tmp = leaf;
        while (item_tmp != null && item_tmp.getType() != SVDBItemType.File) {
            // Don't record the container, since there isn't an
            // identifier to use
            if (!(item_tmp instanceof SVDBVarDeclStmt) && !(item_tmp instanceof SVDBModIfcInst)) {
                path.add(0, item_tmp);
            }
            if (item_tmp instanceof ISVDBChildItem) {
                item_tmp = ((ISVDBChildItem) item_tmp).getParent();
            } else {
                item_tmp = null;
            }
        }
    }

    @SuppressWarnings("unchecked")
    private void setSavedSelection(ISelection sel) {
        if (fDebugEn) {
            fLog.debug("--> setSavedSelection: set fIgnoreSelectionChange=true");
        }
        fIgnoreSelectionChange = true;
        try {
            if (!sel.isEmpty() && sel instanceof IStructuredSelection) {
                List<Object> path = new ArrayList<Object>();
                IStructuredSelection ss = (IStructuredSelection) sel;
                List<Object> new_sel_l = new ArrayList<Object>();
                List<Object> target_path = new ArrayList<Object>();

                for (Object sel_it : ss.toList()) {
                    if (sel_it instanceof ISVDBItemBase) {
                        path.clear();
                        target_path.clear();
                        buildFullPath(path, (ISVDBItemBase) sel_it);

                        if (lookupPath(fContent.getFile(), path.iterator(), target_path)) {
                            Object sel_t = target_path.get(target_path.size() - 1);
                            new_sel_l.add(sel_t);
                        }
                    } else if (sel_it instanceof SVDBFilePath) {
                        new_sel_l.add(fContent.getFilePath());
                    } else if (sel_it instanceof Tuple) {
                        Tuple<SVDBFileTree, ISVDBItemBase> t = (Tuple<SVDBFileTree, ISVDBItemBase>) sel_it;

                        // See if we can find the old selection
                        for (Tuple<SVDBFileTree, ISVDBItemBase> i : fContent.getFilePath().getPath()) {
                            if (i.first().getFilePath().equals(t.first().getFilePath())) {
                                new_sel_l.add(i);
                                break;
                            }
                        }
                    }
                }
                StructuredSelection new_sel = new StructuredSelection(new_sel_l);

                getTreeViewer().setSelection(new_sel);
            }
        } finally {
            fIgnoreSelectionChange = false;
        }
        if (fDebugEn) {
            fLog.debug("<-- setSavedSelection: set fIgnoreSelectionChange=true");
        }
    }

    private boolean lookupPath(ISVDBChildParent scope, Iterator<Object> path_it, List<Object> target_path) {
        ISVDBItemBase path_item = (ISVDBItemBase) path_it.next();
        ISVDBItemBase target_item = null;
        boolean ret = false;

        if (!(path_item instanceof ISVDBNamedItem)) {
            // TODO:
            return ret;
        }

        ISVDBNamedItem ni = (ISVDBNamedItem) path_item;

        for (ISVDBChildItem ci : scope.getChildren()) {
            if (ci instanceof ISVDBNamedItem) {
                ISVDBNamedItem ci_ni = (ISVDBNamedItem) ci;
                if (ni.getName().equals(ci_ni.getName()) && ni.getType() == ci_ni.getType()) {
                    target_item = ci;
                    break;
                }
            } else if (ci instanceof SVDBVarDeclStmt || ci instanceof SVDBModIfcInst) {
                // instance list
                ISVDBChildParent inst_list = (ISVDBChildParent) ci;
                for (ISVDBChildItem ci_inst : inst_list.getChildren()) {
                    ISVDBNamedItem ci_inst_ni = (ISVDBNamedItem) ci_inst;
                    if (ni.getName().equals(ci_inst_ni.getName()) && ni.getType() == ci_inst_ni.getType()) {
                        target_item = ci_inst;
                        break;
                    }
                }
                if (target_item != null) {
                    break;
                }
            } else {
                // TODO: How to match?
            }
        }

        if (target_item != null) {
            target_path.add(target_item);
        }

        if (path_it.hasNext() && target_item != null && target_item instanceof ISVDBChildParent) {
            ret = lookupPath((ISVDBChildParent) target_item, path_it, target_path);
        } else if (!path_it.hasNext() && target_item != null) {
            ret = true;
        }

        return ret;
    }

    public void dispose() {
        if (getTreeViewer() != null) {
            getTreeViewer().removeSelectionChangedListener(fSelectionListener);
        }
    }

    @SuppressWarnings("rawtypes")
    public Object getAdapter(Class adapter) {
        if (IShowInTarget.class.equals(adapter)) {
            return this;
        }
        return null;
    }

    public boolean show(ShowInContext context) {
        // TODO Auto-generated method stub
        return true;
    }

    private IDoubleClickListener fDoubleClickListener = new IDoubleClickListener() {

        @SuppressWarnings("unchecked")
        public void doubleClick(DoubleClickEvent event) {
            IStructuredSelection sel = (IStructuredSelection) getSelection();

            if (sel.getFirstElement() != null && sel.getFirstElement() instanceof Tuple) {
                Tuple<SVDBFileTree, ISVDBItemBase> t = (Tuple<SVDBFileTree, ISVDBItemBase>) sel.getFirstElement();

                if (t.second() != null) { // Don't mess with 'this' file
                    try {
                        SVEditorUtil.openEditor(t.second());
                    } catch (PartInitException e) {
                        fLog.error("Failed to open editor", e);
                    }
                }
            }
        }
    };

    private ISelectionChangedListener fSelectionListener = new ISelectionChangedListener() {

        public void selectionChanged(SelectionChangedEvent event) {
            if (fDebugEn) {
                fLog.debug("selectionChanged: " + event.getSelection() + " fIgnoreSelectionChange="
                        + fIgnoreSelectionChange);
            }

            if (fIgnoreSelectionChange) {
                if (fDebugEn) {
                    fLog.debug("  Toggle fIgnoreSelectionChange=false and return");
                }
                //               fIgnoreSelectionChange = false;
                return;
            }

            removeSelectionChangedListener(this);

            if (fDebugEn) {
                if (event.getSelection() == null) {
                    fLog.debug("  Selection is null");
                } else {
                    fLog.debug("  Selection is of type " + event.getSelection().getClass().getName());
                }
            }

            if (event.getSelection() instanceof StructuredSelection) {
                StructuredSelection sel = (StructuredSelection) event.getSelection();
                if (fDebugEn) {
                    if (sel.getFirstElement() == null) {
                        fLog.debug("  Selection target is null");
                    } else {
                        fLog.debug("  Selection target is of type " + sel.getFirstElement().getClass().getName());
                    }
                }
                if (sel.getFirstElement() instanceof ISVDBItemBase) {
                    ISVDBItemBase it = (ISVDBItemBase) sel.getFirstElement();

                    if (fLastSelection == null || !fLastSelection.equals(it, true)) {
                        if (fDebugEn) {
                            fLog.debug("Setting SVEditor selection: " + SVDBItem.getName(it) + " @ "
                                    + ((it.getLocation() != null) ? it.getLocation().getLine() : -1));
                        }
                        fEditor.setSelection(it, false);
                        fLastSelection = it;
                    }
                }
            }

            addSelectionChangedListener(this);
        }
    };

    public void createActions() {
    }

    private class SortAction extends Action {
        public SortAction() {
            super("sort", Action.AS_CHECK_BOX);
            setImageDescriptor(SVUiPlugin.getImageDescriptor("/icons/elcl16/alphab_sort_co.gif"));
        }

        public void run() {
            boolean new_value = true;
            if (SVUiPlugin.getDefault().getPreferenceStore().getBoolean(SVEditorPrefsConstants.P_OUTLINE_SORT)) {
                new_value = false;
            }
            // Update the preferences
            SVUiPlugin.getDefault().getPreferenceStore().setValue(SVEditorPrefsConstants.P_OUTLINE_SORT, new_value);
            // Update the value
            ToggleSort.setChecked(new_value);
            // enable or disable the sorter
            if (new_value) {
                getTreeViewer().setComparator(ViewerComapartor);
            } else {
                getTreeViewer().setComparator(null);
            }
            refresh();
        }
    }

    @Override
    public void init(IPageSite pageSite) {
        super.init(pageSite);

        // Add button to toggle assign statements on and off
        ToggleSort = new SortAction();
        pageSite.getActionBars().getToolBarManager().add(ToggleSort);

        // Add button to toggle assign statements on and off
        ToggleAssign = new Action("Assign", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleAssign.setChecked(DefaultContentFilter.ToggleAssignStatements());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_ASSIGN_STATEMENTS, ToggleAssign.isChecked());
                refresh();
            }
        };
        ToggleAssign.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.Assign));
        pageSite.getActionBars().getToolBarManager().add(ToggleAssign);

        // Add button to toggle Always statements on and off
        ToggleAlways = new Action("Always", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleAlways.setChecked(DefaultContentFilter.ToggleAlwaysStatements());
                SVUiPlugin.getDefault().getPreferenceStore()
                        .setValue(SVEditorPrefsConstants.P_OUTLINE_SHOW_ALWAYS_BLOCKS, ToggleAlways.isChecked());
                refresh();
            }
        };
        ToggleAlways.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.AlwaysStmt));
        pageSite.getActionBars().getToolBarManager().add(ToggleAlways);

        // Add button to toggle `define statements on and off
        ToggleDefines = new Action("`define", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleDefines.setChecked(DefaultContentFilter.ToggleDefineStatements());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_DEFINE_STATEMENTS, ToggleDefines.isChecked());
                refresh();
            }
        };
        ToggleDefines.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.MacroDef));
        pageSite.getActionBars().getToolBarManager().add(ToggleDefines);

        // Add button to toggle Initial statements on and off
        ToggleInitial = new Action("Initial", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleInitial.setChecked(DefaultContentFilter.ToggleInitialBlocks());
                SVUiPlugin.getDefault().getPreferenceStore()
                        .setValue(SVEditorPrefsConstants.P_OUTLINE_SHOW_INITIAL_BLOCKS, ToggleInitial.isChecked());
                refresh();
            }
        };
        ToggleInitial.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.InitialStmt));
        pageSite.getActionBars().getToolBarManager().add(ToggleInitial);

        // Add button to toggle Generate statements on and off
        ToggleGenerate = new Action("Generate", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleGenerate.setChecked(DefaultContentFilter.ToggleGenerateBlocks());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_GENERATE_BLOCKS, ToggleGenerate.isChecked());
                refresh();
            }
        };
        ToggleGenerate.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.GenerateBlock));
        pageSite.getActionBars().getToolBarManager().add(ToggleGenerate);

        // Add button to toggle Variables statements on and off
        ToggleVariables = new Action("Signals", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleVariables.setChecked(DefaultContentFilter.ToggleVariableDeclarations());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_SIGNAL_DECLARATIONS, ToggleVariables.isChecked());
                refresh();
            }
        };
        ToggleVariables.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.VarDeclItem));
        pageSite.getActionBars().getToolBarManager().add(ToggleVariables);

        // Add button to toggle Module Instances statements on and off
        ToggleModuleInstances = new Action("Module Instances", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleModuleInstances.setChecked(DefaultContentFilter.ToggleModuleInstances());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_MODULE_INSTANCES, ToggleModuleInstances.isChecked());
                refresh();
            }
        };
        ToggleModuleInstances.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.ModIfcInst));
        pageSite.getActionBars().getToolBarManager().add(ToggleModuleInstances);

        // Add button to toggle Include files statements on and off
        ToggleInclude = new Action("Include/Import", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleInclude.setChecked(DefaultContentFilter.ToggleIncludeFiles());
                SVUiPlugin.getDefault().getPreferenceStore()
                        .setValue(SVEditorPrefsConstants.P_OUTLINE_SHOW_INCLUDE_FILES, ToggleInclude.isChecked());
                refresh();
            }
        };
        ToggleInclude.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.Include));
        pageSite.getActionBars().getToolBarManager().add(ToggleInclude);

        // Add button to toggle Task / Function statements on and off
        ToggleTaskFunction = new Action("Task/Function", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleTaskFunction.setChecked(DefaultContentFilter.ToggleTaskFunctions());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_TASK_FUNCTION_DECLARATIONS,
                        ToggleTaskFunction.isChecked());
                refresh();
            }
        };
        ToggleTaskFunction.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.Task));
        pageSite.getActionBars().getToolBarManager().add(ToggleTaskFunction);

        // Add button to toggle Enumerated Types & Typedefs statements on and off
        ToggleEnumTypedefs = new Action("Enum/Typedef", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleEnumTypedefs.setChecked(DefaultContentFilter.ToggleEnumTypedefs());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_ENUM_TYPEDEFS, ToggleEnumTypedefs.isChecked());
                refresh();
            }
        };
        ToggleEnumTypedefs.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.TypedefStmt));
        pageSite.getActionBars().getToolBarManager().add(ToggleEnumTypedefs);

        // Add button to toggle Constraints statements on and off
        ToggleConstraints = new Action("Constraints", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleConstraints.setChecked(DefaultContentFilter.ToggleConstraints());
                SVUiPlugin.getDefault().getPreferenceStore()
                        .setValue(SVEditorPrefsConstants.P_OUTLINE_SHOW_CONSTRAINTS, ToggleConstraints.isChecked());
                refresh();
            }
        };
        ToggleConstraints.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.Constraint));
        pageSite.getActionBars().getToolBarManager().add(ToggleConstraints);

        // Add button to toggle AssertionProperties statements on and off
        ToggleAssertionProperties = new Action("Assertions/Properties/Sequences", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleAssertionProperties.setChecked(DefaultContentFilter.ToggleAssertionProperties());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_ASSERTION_PROPERTIES,
                        ToggleAssertionProperties.isChecked());
                refresh();
            }
        };
        ToggleAssertionProperties.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.Property));
        pageSite.getActionBars().getToolBarManager().add(ToggleAssertionProperties);

        // Add button to toggle Coverpoint/Groupstatements on and off
        ToggleCoverPointGroupCross = new Action("CoverGroup/CrossCover/CoverPoint", Action.AS_CHECK_BOX) {
            public void run() {
                ToggleCoverPointGroupCross.setChecked(DefaultContentFilter.ToggleCoverPointGroupCross());
                SVUiPlugin.getDefault().getPreferenceStore().setValue(
                        SVEditorPrefsConstants.P_OUTLINE_SHOW_COVER_POINT_GROUP_CROSS,
                        ToggleCoverPointGroupCross.isChecked());
                refresh();
            }
        };
        ToggleCoverPointGroupCross.setImageDescriptor(SVDBIconUtils.getImageDescriptor(SVDBItemType.Coverpoint));
        pageSite.getActionBars().getToolBarManager().add(ToggleCoverPointGroupCross);

        // Set up which of the content filters are enabled
        // Now, format the new addition if auto-indent is enabled
        IPreferenceStore ps = SVUiPlugin.getDefault().getPreferenceStore();
        ToggleSort.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SORT));
        ToggleAlways.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ALWAYS_BLOCKS));
        ToggleAssign.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ASSIGN_STATEMENTS));
        ToggleDefines.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_DEFINE_STATEMENTS));
        ToggleGenerate.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_GENERATE_BLOCKS));
        ToggleInclude.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_INCLUDE_FILES));
        ToggleInitial.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_INITIAL_BLOCKS));
        ToggleModuleInstances.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_MODULE_INSTANCES));
        ToggleTaskFunction
                .setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_TASK_FUNCTION_DECLARATIONS));
        ToggleEnumTypedefs.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ENUM_TYPEDEFS));
        ToggleAssertionProperties
                .setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_ASSERTION_PROPERTIES));
        ToggleCoverPointGroupCross
                .setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_COVER_POINT_GROUP_CROSS));
        ToggleConstraints.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_CONSTRAINTS));
        ToggleVariables.setChecked(ps.getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_SIGNAL_DECLARATIONS));

        fEnableEditorLinking = new Action("Link with Editor", Action.AS_CHECK_BOX) {
            public void run() {
                fLinkWithEditor = isChecked();
                SVUiPlugin.getDefault().getPreferenceStore()
                        .setValue(SVEditorPrefsConstants.P_OUTLINE_SHOW_SIGNAL_DECLARATIONS, isChecked());
            }
        };
        fEnableEditorLinking.setImageDescriptor(SVUiPlugin.getImageDescriptor("/icons/eview16/synced.gif"));
        fEnableEditorLinking.setChecked(SVUiPlugin.getDefault().getPreferenceStore()
                .getBoolean(SVEditorPrefsConstants.P_OUTLINE_SHOW_SIGNAL_DECLARATIONS));
        pageSite.getActionBars().getMenuManager().add(fEnableEditorLinking);
    }
}