msi.gama.gui.navigator.GamaNavigator.java Source code

Java tutorial

Introduction

Here is the source code for msi.gama.gui.navigator.GamaNavigator.java

Source

/*********************************************************************************************
 *
 *
 * 'GamaNavigator.java', in plugin 'msi.gama.application', is part of the source code of the
 * GAMA modeling and simulation platform.
 * (c) 2007-2014 UMI 209 UMMISCO IRD/UPMC & Partners
 *
 * Visit https://code.google.com/p/gama-platform/ for license information and developers contact.
 *
 *
 **********************************************************************************************/
package msi.gama.gui.navigator;

import msi.gama.gui.swt.IGamaColors;
import msi.gama.gui.swt.controls.GamaToolbar2;
import msi.gama.gui.views.IToolbarDecoratedView;
import msi.gama.gui.views.actions.GamaToolbarFactory;
import org.eclipse.core.resources.*;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.action.*;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.*;
import org.eclipse.ui.actions.ActionGroup;
import org.eclipse.ui.internal.navigator.CommonNavigatorActionGroup;
import org.eclipse.ui.internal.navigator.actions.LinkEditorAction;
import org.eclipse.ui.navigator.*;

public class GamaNavigator extends CommonNavigator implements IToolbarDecoratedView, ISelectionChangedListener {

    // String OPEN_BROWSER_COMMAND_ID = "msi.gama.application.commands.OpenBrowser";

    IResourceChangeListener listener;
    IAction link, collapse;
    ToolItem linkItem; // collapseItem, newFileItem, newProjectItem, importItem;
    protected Composite parent;
    protected GamaToolbar2 toolbar;
    private IDescriptionProvider commonDescriptionProvider;

    @Override
    protected CommonNavigatorManager createCommonManager() {
        CommonNavigatorManager manager = new CommonNavigatorManager(this, memento);
        commonDescriptionProvider = /* getNavigatorContentService().createCommonDescriptionProvider(); */
                new IDescriptionProvider() {

                    @Override
                    public String getDescription(final Object anElement) {
                        if (anElement instanceof IStructuredSelection) {
                            IStructuredSelection selection = (IStructuredSelection) anElement;
                            if (selection.isEmpty()) {
                                return "";
                            }
                            String message = null;
                            if (selection.size() > 1) {
                                message = "Multiple elements";
                            } else if (selection.getFirstElement() instanceof VirtualContent) {
                                message = ((VirtualContent) selection.getFirstElement()).getName();
                            } else if (selection.getFirstElement() instanceof IResource) {
                                message = ((IResource) selection.getFirstElement()).getName();
                            }
                            return message;
                        }
                        return "";
                    }
                };
        getCommonViewer().addPostSelectionChangedListener(this);
        return manager;
    }

    @Override
    public void createPartControl(final Composite compo) {
        this.parent = GamaToolbarFactory.createToolbars(this, compo);

        super.createPartControl(parent);
        // getCommonViewer().getControl().setLayoutData(GamaToolbarFactory.getLayoutDataForChild());
        IToolBarManager toolbar = getViewSite().getActionBars().getToolBarManager();
        for (IContributionItem item : toolbar.getItems()) {
            if (item instanceof ActionContributionItem) {
                ActionContributionItem aci = (ActionContributionItem) item;
                IAction action = aci.getAction();
                if (action instanceof LinkEditorAction) {
                    link = action;
                    toolbar.remove(aci);
                } else if (action instanceof org.eclipse.ui.internal.navigator.actions.CollapseAllAction) {
                    collapse = action;
                    toolbar.remove(aci);
                }

            }
        }
        // toolbar.removeAll();
        linkItem.setSelection(link.isChecked());
        try {
            IDecoratorManager mgr = PlatformUI.getWorkbench().getDecoratorManager();
            mgr.setEnabled("msi.gama.application.date.decorator", false);
        } catch (CoreException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void initListeners(final TreeViewer viewer) {
        super.initListeners(viewer);
        listener = new IResourceChangeListener() {

            @Override
            public void resourceChanged(final IResourceChangeEvent event) {

                if (event.getType() == IResourceChangeEvent.PRE_BUILD
                        || event.getType() == IResourceChangeEvent.PRE_CLOSE
                        || event.getType() == IResourceChangeEvent.PRE_DELETE) {
                    return;
                }

                Display.getDefault().asyncExec(new Runnable() {

                    @Override
                    public void run() {
                        TreePath[] treePaths = viewer.getExpandedTreePaths();
                        if (!viewer.isBusy()) {
                            viewer.refresh();
                            viewer.setExpandedTreePaths(treePaths);
                        }
                    }
                });
            }
        };
        ResourcesPlugin.getWorkspace().addResourceChangeListener(listener);

        // viewer.getControl().addMouseTrackListener(new MouseTrackListener() {
        //
        // TreeItem previous;
        //
        // @Override
        // public void mouseHover(final MouseEvent e) {
        // Point p = new Point(e.x, e.y);
        // Tree c = (Tree) viewer.getControl();
        // TreeItem i = c.getItem(p);
        // if ( i == null ) {
        // if ( previous != null ) {
        // previous.setBackground(IGamaColors.WHITE.color());
        // }
        // } else {
        // i.setBackground(IGamaColors.OK.color());
        // if ( previous != null && i != previous ) {
        // previous.setBackground(IGamaColors.WHITE.color());
        // }
        // previous = i;
        // }
        //
        // }
        //
        // @Override
        // public void mouseExit(final MouseEvent e) {}
        //
        // @Override
        // public void mouseEnter(final MouseEvent e) {}
        // });
    }

    @Override
    public void dispose() {
        super.dispose();
        if (listener != null) {
            ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener);
            listener = null;
        }
    }

    @Override
    protected Object getInitialInput() {
        return new NavigatorRoot();
    }

    @Override
    protected void handleDoubleClick(final DoubleClickEvent anEvent) {
        IStructuredSelection selection = (IStructuredSelection) anEvent.getSelection();
        Object element = selection.getFirstElement();
        if (element instanceof IFile) {
            TreeViewer viewer = getCommonViewer();
            if (viewer.isExpandable(element)) {
                viewer.setExpandedState(element, !viewer.getExpandedState(element));
            }
        }
        if (element instanceof VirtualContent && ((VirtualContent) element).handleDoubleClick()) {
            return;
        } else {
            super.handleDoubleClick(anEvent);
        }
    }

    @Override
    protected ActionGroup createCommonActionGroup() {
        return new CommonNavigatorActionGroup(this, getCommonViewer(), getLinkHelperService()) {

            @Override
            protected void fillViewMenu(final IMenuManager menu) {
                menu.removeAll();
            }

        };
    }

    /**
     * Method createToolItem()
     * @see msi.gama.gui.views.IToolbarDecoratedView#createToolItem(int, msi.gama.gui.swt.controls.GamaToolbar2)
     */
    @Override
    public void createToolItems(final GamaToolbar2 tb) {
        this.toolbar = tb;

        // Menu: { IMPORT, NEW, SEP, SORT, COLLAPSE, LINK };
        tb.menu("navigator/navigator.import2", "", "Import...", new SelectionAdapter() {

            @Override
            public void widgetSelected(final SelectionEvent trigger) {
                GamaNavigatorImportMenu menu = new GamaNavigatorImportMenu(
                        (IStructuredSelection) getCommonViewer().getSelection());
                final ToolItem target = (ToolItem) trigger.widget;
                final ToolBar toolBar = target.getParent();
                menu.open(toolBar, trigger);

            }

        }, SWT.RIGHT);
        tb.menu("navigator/navigator.new2", "", "New...", new SelectionAdapter() {

            @Override
            public void widgetSelected(final SelectionEvent trigger) {
                GamaNavigatorNewMenu menu = new GamaNavigatorNewMenu(
                        (IStructuredSelection) getCommonViewer().getSelection());
                final ToolItem target = (ToolItem) trigger.widget;
                final ToolBar toolBar = target.getParent();
                menu.open(toolBar, trigger);

            }

        }, SWT.RIGHT);
        tb.sep(GamaToolbarFactory.TOOLBAR_SEP, SWT.RIGHT);
        tb.check("navigator/navigator.date2", "", "Sort by modification date", new SelectionAdapter() {

            @Override
            public void widgetSelected(final SelectionEvent trigger) {
                boolean enabled = ((ToolItem) trigger.widget).getSelection();

                try {
                    IDecoratorManager mgr = PlatformUI.getWorkbench().getDecoratorManager();
                    mgr.setEnabled("msi.gama.application.date.decorator", enabled);
                } catch (CoreException e) {
                    e.printStackTrace();
                }

                FileFolderSorter.BY_DATE = enabled;
                Object[] expanded = getCommonViewer().getExpandedElements();
                getCommonViewer().refresh();
                getCommonViewer().setExpandedElements(expanded);
            }

        }, SWT.RIGHT);
        tb.button("navigator/navigator.collapse2", "", "Collapse all items", new SelectionAdapter() {

            @Override
            public void widgetSelected(final SelectionEvent e) {
                collapse.run();
            }

        }, SWT.RIGHT);
        linkItem = tb.check("navigator/navigator.link2", "", "Stay in sync with the editor",
                new SelectionAdapter() {

                    @Override
                    public void widgetSelected(final SelectionEvent e) {
                        link.run();
                    }

                }, SWT.RIGHT);

    }

    /**
     * Method selectionChanged()
     * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
     */
    @Override
    public void selectionChanged(final SelectionChangedEvent event) {
        IStructuredSelection selection = (IStructuredSelection) event.getSelection();
        if (selection == null || selection.isEmpty()) {
            toolbar.wipe(SWT.LEFT, true);
            return;
        }
        String message = commonDescriptionProvider.getDescription(selection);
        Image img = ((ILabelProvider) getCommonViewer().getLabelProvider()).getImage(selection.getFirstElement());
        toolbar.status(img, message, IGamaColors.BLUE, SWT.LEFT);
    }

    public Menu getSubMenu(final String text) {
        Menu m = getCommonViewer().getTree().getMenu();
        for (MenuItem mi : m.getItems()) {
            if (text.equals(mi.getText())) {
                return mi.getMenu();
            }
        }
        return m;
    }

}