net.sf.eclipsensis.editor.outline.NSISContentOutlinePage.java Source code

Java tutorial

Introduction

Here is the source code for net.sf.eclipsensis.editor.outline.NSISContentOutlinePage.java

Source

/*******************************************************************************
 * Copyright (c) 2004-2010 Sunil Kamath (IcemanK).
 * All rights reserved.
 * This program is made available under the terms of the Common Public License
 * v1.0 which is available at http://www.eclipse.org/legal/cpl-v10.html
 *
 * Contributors:
 *     Sunil Kamath (IcemanK) - initial API and implementation
 *******************************************************************************/
package net.sf.eclipsensis.editor.outline;

import java.util.*;
import java.util.List;

import net.sf.eclipsensis.*;
import net.sf.eclipsensis.dialogs.NSISOutlineFilterDialog;
import net.sf.eclipsensis.editor.NSISEditor;
import net.sf.eclipsensis.util.*;

import org.eclipse.jface.action.*;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import org.eclipse.ui.texteditor.ITextEditor;
import org.eclipse.ui.views.contentoutline.ContentOutlinePage;

public class NSISContentOutlinePage extends ContentOutlinePage {
    private IEditorInput mInput;
    private NSISEditor mEditor;
    private boolean mDisposed = false;

    /**
     * Creates a content outline page using the given provider and the given
     * editor.
     */
    public NSISContentOutlinePage(NSISEditor editor) {
        super();
        mEditor = editor;
    }

    public void refreshLabels() {
        TreeViewer viewer = getTreeViewer();
        if (viewer != null) {
            viewer.refresh(true);
        }
    }

    void refresh() {
        TreeViewer viewer = getTreeViewer();
        if (viewer != null) {
            Object input = viewer.getInput();
            viewer.setInput(null);
            viewer.setInput(input);
            viewer.expandAll();
        }
    }

    private void revealSelection() {
        IStructuredSelection sel = (IStructuredSelection) getTreeViewer().getSelection();
        if (!sel.isEmpty()) {
            getTreeViewer().reveal(sel.getFirstElement());
        }
    }

    private void makeActions() {
        IAction collapseAllAction;
        IAction expandAllAction;
        IAction filterAction;

        IToolBarManager tbm = getSite().getActionBars().getToolBarManager();
        IMenuManager mm = getSite().getActionBars().getMenuManager();

        expandAllAction = new Action() {
            @Override
            public void run() {
                getTreeViewer().getTree().setRedraw(false);
                try {
                    getTreeViewer().expandAll();
                    revealSelection();
                } finally {
                    getTreeViewer().getTree().setRedraw(true);
                }
            }
        };
        expandAllAction.setText(EclipseNSISPlugin.getResourceString("expandall.text")); //$NON-NLS-1$
        expandAllAction.setToolTipText(EclipseNSISPlugin.getResourceString("expandall.tooltip")); //$NON-NLS-1$
        expandAllAction.setImageDescriptor(ImageDescriptor.createFromImage(CommonImages.EXPANDALL_ICON));
        expandAllAction
                .setDisabledImageDescriptor(ImageDescriptor.createFromImage(CommonImages.EXPANDALL_DISABLED_ICON));
        expandAllAction.setEnabled(true);

        collapseAllAction = new Action() {
            @Override
            public void run() {
                getTreeViewer().getTree().setRedraw(false);
                try {
                    getTreeViewer().collapseAll();
                    revealSelection();
                } finally {
                    getTreeViewer().getTree().setRedraw(true);
                }
            }
        };
        collapseAllAction.setText(EclipseNSISPlugin.getResourceString("collapseall.text")); //$NON-NLS-1$
        collapseAllAction.setToolTipText(EclipseNSISPlugin.getResourceString("collapseall.tooltip")); //$NON-NLS-1$
        collapseAllAction.setImageDescriptor(ImageDescriptor.createFromImage(CommonImages.COLLAPSEALL_ICON));
        collapseAllAction.setDisabledImageDescriptor(
                ImageDescriptor.createFromImage(CommonImages.COLLAPSEALL_DISABLED_ICON));
        collapseAllAction.setEnabled(true);

        filterAction = new Action() {
            @Override
            public void run() {
                List<String> oldList = mEditor.getOutlineContentProvider().getFilteredTypes();
                List<String> newList = new ArrayList<String>(oldList);
                NSISOutlineFilterDialog dialog = new NSISOutlineFilterDialog(getSite().getShell(), newList);
                if (dialog.open() == Window.OK) {
                    Collections.sort(newList);
                    if (!Common.objectsAreEqual(oldList, newList)) {
                        mEditor.getOutlineContentProvider().setFilteredTypes(newList);
                        getTreeViewer().refresh();
                    }
                }
            }
        };
        filterAction.setText(EclipseNSISPlugin.getResourceString("filter.action.label")); //$NON-NLS-1$
        filterAction.setToolTipText(EclipseNSISPlugin.getResourceString("filter.action.tooltip")); //$NON-NLS-1$
        filterAction.setImageDescriptor(EclipseNSISPlugin.getImageManager()
                .getImageDescriptor(EclipseNSISPlugin.getResourceString("filter.action.icon"))); //$NON-NLS-1$
        filterAction.setEnabled(true);

        mm.add(expandAllAction);
        mm.add(collapseAllAction);
        mm.add(new Separator());
        mm.add(filterAction);

        tbm.add(expandAllAction);
        tbm.add(collapseAllAction);
        tbm.add(new Separator());
        tbm.add(filterAction);
    }

    /*
     * (non-Javadoc) Method declared on ContentOutlinePage
     */
    @Override
    public void createControl(Composite parent) {
        super.createControl(parent);
        if (mEditor != null) {
            NSISOutlineContentResources.getInstance().connect(this);
            NSISOutlineContentProvider contentProvider = mEditor.getOutlineContentProvider();
            if (contentProvider != null) {
                TreeViewer viewer = getTreeViewer();
                viewer.setContentProvider(contentProvider);
                viewer.setLabelProvider(new NSISOutlineLabelProvider(mEditor));
                viewer.addSelectionChangedListener(mEditor);
                if (mInput != null) {
                    viewer.setInput(mInput);
                    viewer.expandAll();
                }
                Point sel = mEditor.getSelectedRange();
                NSISOutlineElement element = contentProvider.findElement(sel.x, sel.y);
                if (element != null) {
                    setSelection(new StructuredSelection(element));
                }
            }
        }
        makeActions();
        PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(),
                INSISConstants.PLUGIN_CONTEXT_PREFIX + "nsis_outline_context"); //$NON-NLS-1$
    }

    /* (non-Javadoc)
     * @see org.eclipse.ui.part.IPage#dispose()
     */
    @Override
    public void dispose() {
        super.dispose();
        if (mEditor != null) {
            TreeViewer tv = getTreeViewer();
            if (tv != null) {
                tv.removeSelectionChangedListener(mEditor);
            }
            NSISOutlineContentProvider provider = mEditor.getOutlineContentProvider();
            if (provider != null) {
                provider.inputChanged(null, mEditor.getEditorInput());
            }
        }
        NSISOutlineContentResources.getInstance().disconnect(this);
        mDisposed = true;
    }

    public boolean isDisposed() {
        return mDisposed;
    }

    /**
     * Sets the input of the outline page
     */
    public void setInput(IEditorInput input) {
        mInput = input;
        update();
    }

    /**
     * Updates the outline page.
     */
    public void update() {
        TreeViewer viewer = getTreeViewer();

        if (viewer != null) {
            Control control = viewer.getControl();
            if (control != null && !control.isDisposed()) {
                control.setRedraw(false);
                viewer.setInput(null);
                viewer.setInput(mInput);
                viewer.expandAll();
                control.setRedraw(true);
            }
        }
    }

    /**
     * @return Returns the textEditor.
     */
    ITextEditor getTextEditor() {
        return mEditor;
    }
}