org.d3s.alricg.generator.views.RefreshableViewPartImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.d3s.alricg.generator.views.RefreshableViewPartImpl.java

Source

/*
 * Created 27.10.2007
 *
 * This file is part of the project Alricg. The file is copyright
 * protected and under the GNU General Public License.
 * For more information see "http://www.alricg.de/".
 */
package org.d3s.alricg.generator.views;

import org.d3s.alricg.common.logic.ProzessorObserver;
import org.d3s.alricg.editor.common.RefreshableViewPart;
import org.d3s.alricg.editor.common.Regulatoren.Regulator;
import org.d3s.alricg.editor.common.ViewUtils.ObjectCreator;
import org.d3s.alricg.editor.common.ViewUtils.TableObject;
import org.d3s.alricg.editor.common.ViewUtils.TreeObject;
import org.d3s.alricg.editor.common.ViewUtils.TreeOrTableObject;
import org.d3s.alricg.generator.common.CustomActions.SwapTreeTableAction;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuListener;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.swt.custom.StackLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.IActionBars;
import org.eclipse.ui.IWorkbenchActionConstants;
import org.eclipse.ui.part.ViewPart;

/**
 * Basisklasse fr alle Views!
 * @author Vincent
 */
public abstract class RefreshableViewPartImpl extends ViewPart implements ProzessorObserver, RefreshableViewPart {

    protected TableViewer viewerTable; // Fr die Darstellung als Tabelle
    protected TreeViewer viewerTree; // Fr die Darstellung als Tree
    protected Composite parentComp;

    protected Action swapTreeTable;
    protected Action swapInfoModus;
    protected Action showInfos;

    protected static final int DEFAULT_FIRSTCOLUMN_WIDTH = 200;

    private ObjectCreator objCreator = new ObjectCreator() {
        /* (non-Javadoc)
         * @see org.d3s.alricg.editor.common.ViewUtils.ObjectCreator#createTableObject(java.lang.Object)
         */
        @Override
        public TableObject createTableObject(Object element) {
            return new TableObject(element);
        }

        /* (non-Javadoc)
         * @see org.d3s.alricg.editor.common.ViewUtils.ObjectCreator#createTreeObject(java.lang.Object, org.d3s.alricg.editor.common.ViewUtils.TreeObject)
         */
        @Override
        public TreeObject createTreeObject(Object element, TreeObject parentNode) {
            return new TreeObject(element, parentNode);
        }

    };

    /**
     * This is a callback that will allow us to create the viewer and initialize
     * it.
     */
    @Override
    public void createPartControl(Composite parent) {
        parent.setLayout(new StackLayout());

        this.parentComp = parent;
        viewerTable = createTable(parent);
        viewerTree = createTree(parent);

        ((StackLayout) parent.getLayout()).topControl = viewerTree.getTree();
        parent.layout();

        makeActions();
        hookContextMenu();
        hookDoubleClickAction();
        contributeToActionBars();
    }

    /**
     * Setzt das Context-menu
     */
    protected void hookContextMenu() {
        MenuManager menuMgr = new MenuManager("#PopupMenu");
        menuMgr.setRemoveAllWhenShown(true);
        menuMgr.addMenuListener(new IMenuListener() {
            public void menuAboutToShow(IMenuManager manager) {
                RefreshableViewPartImpl.this.fillContextMenu(manager);
            }
        });

        menuMgr.addMenuListener(new IMenuListener() {

            @Override
            public void menuAboutToShow(IMenuManager manager) {
                // TODO implement Logik welche Action mglich sind
                // und "geenabled / disabled" werden
            }
        });

        // For Tree
        Menu menu = menuMgr.createContextMenu(viewerTree.getControl());
        viewerTree.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewerTree);

        // For Table
        menu = menuMgr.createContextMenu(viewerTable.getControl());
        viewerTable.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewerTable);
    }

    // Fllt Action-Bars
    protected void contributeToActionBars() {
        IActionBars bars = getViewSite().getActionBars();
        fillLocalToolBar(bars.getToolBarManager());
    }

    // Das Context Menu beim Rechts-klick
    protected void fillContextMenu(IMenuManager manager) {
        manager.add(this.showInfos);
        manager.add(new Separator());

        /* Um die Warnung
         * Context menu missing standard group 'org.eclipse.ui.IWorkbenchActionConstants.MB_ADDITIONS'
         * im Log zu verhindern */
        manager.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
    }

    // Bei DoppelKlick Info-View ffnen
    protected void hookDoubleClickAction() {
        viewerTree.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                showInfos.run();
            }
        });

        viewerTable.addDoubleClickListener(new IDoubleClickListener() {
            public void doubleClick(DoubleClickEvent event) {
                showInfos.run();
            }
        });
    }

    /*
     * Das "Pop-Up" Menu rechts Op
     */
    private void fillLocalToolBar(IToolBarManager manager) {
        //manager.add(this.showInfos);
        //manager.add(new Separator());
        manager.add(this.swapTreeTable);
        //manager.add(this.addToHeld);
        //manager.add(this.removeFromHeld);
    }

    /**
     * Erezugt den TableViewer.
     * Eine Ansicht der Elemente in Tabellen Ansicht
     */
    protected abstract TableViewer createTable(Composite parent);

    /**
     * Erezugt den TreeViewer.
     * Eine Ansicht der Elemente in Baum Ansicht
     */
    protected abstract TreeViewer createTree(Composite parent);

    protected void showMessage(String titel, String message) {
        MessageDialog.openInformation(((StackLayout) parentComp.getLayout()).topControl.getShell(), titel, message);

    }

    /**
     * Passing the focus request to the viewer's control.
     */
    public void setFocus() {
        ((StackLayout) parentComp.getLayout()).topControl.setFocus();
    }

    /**
     * Refresht den Tree und die Tabelle
     */
    public void refresh() {
        viewerTable.refresh();
        viewerTree.refresh();
    }

    /**
     * Refresht den Tree und die Tabelle
     */
    public void refresh(Object obj) {
        if (obj instanceof TableObject) {
            viewerTable.update(obj, null);
            viewerTree.refresh();
        } else {
            viewerTree.update(obj, null);
            viewerTable.refresh();
        }
    }

    public TableViewer getTableViewer() {
        return viewerTable;
    }

    public TreeViewer getTreeViewer() {
        return viewerTree;
    }

    /**
     * Erstellt die Actions
     */
    protected void makeActions() {
        // Ansichte wechseln Action
        swapTreeTable = new SwapTreeTableAction(this.parentComp);
    }

    protected ObjectCreator getObjectCreator() {
        return objCreator;
    }

    /**
     * @return Liefert das gerade selektierte Object vom Tree oder Table
     */
    public TreeOrTableObject getSelectedElement() {
        final Control topControl = ((StackLayout) parentComp.getLayout()).topControl;
        TreeOrTableObject value = null;

        if (topControl instanceof Tree && ((Tree) topControl).getSelection().length > 0) {
            value = (TreeOrTableObject) ((Tree) topControl).getSelection()[0].getData();

        } else if (topControl instanceof Table && ((Table) topControl).getSelection().length > 0) {
            value = (TreeOrTableObject) ((Table) topControl).getSelection()[0].getData();
        }

        return value;
    }

    /* (non-Javadoc)
     * @see org.d3s.alricg.editor.common.RefreshableViewPart#getTopControl()
     */
    @Override
    public Control getTopControl() {
        return ((StackLayout) parentComp.getLayout()).topControl;
    }

    public abstract Regulator getRegulator();

    public abstract Class getViewedClass();

}