org.eclipse.gef.examples.logicdesigner.LogicPlugin.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.gef.examples.logicdesigner.LogicPlugin.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2010 IBM Corporation 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:
 *     IBM Corporation - initial API and implementation
 *******************************************************************************/
package org.eclipse.gef.examples.logicdesigner;

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

import org.eclipse.jface.resource.ImageDescriptor;

import org.eclipse.draw2d.IFigure;
import org.eclipse.draw2d.geometry.Dimension;

import org.eclipse.gef.palette.CombinedTemplateCreationEntry;
import org.eclipse.gef.palette.ConnectionCreationToolEntry;
import org.eclipse.gef.palette.MarqueeToolEntry;
import org.eclipse.gef.palette.PaletteContainer;
import org.eclipse.gef.palette.PaletteDrawer;
import org.eclipse.gef.palette.PaletteEntry;
import org.eclipse.gef.palette.PaletteGroup;
import org.eclipse.gef.palette.PaletteRoot;
import org.eclipse.gef.palette.PaletteSeparator;
import org.eclipse.gef.palette.PaletteStack;
import org.eclipse.gef.palette.PanningSelectionToolEntry;
import org.eclipse.gef.palette.ToolEntry;
import org.eclipse.gef.requests.SimpleFactory;
import org.eclipse.gef.tools.MarqueeSelectionTool;

import org.eclipse.gef.examples.logicdesigner.figures.AndGateFigure;
import org.eclipse.gef.examples.logicdesigner.figures.GroundFigure;
import org.eclipse.gef.examples.logicdesigner.figures.LEDFigure;
import org.eclipse.gef.examples.logicdesigner.figures.LiveOutputFigure;
import org.eclipse.gef.examples.logicdesigner.figures.OrGateFigure;
import org.eclipse.gef.examples.logicdesigner.figures.XOrGateFigure;
import org.eclipse.gef.examples.logicdesigner.model.AndGate;
import org.eclipse.gef.examples.logicdesigner.model.Circuit;
import org.eclipse.gef.examples.logicdesigner.model.GroundOutput;
import org.eclipse.gef.examples.logicdesigner.model.LED;
import org.eclipse.gef.examples.logicdesigner.model.LiveOutput;
import org.eclipse.gef.examples.logicdesigner.model.LogicDiagramFactory;
import org.eclipse.gef.examples.logicdesigner.model.LogicFlowContainer;
import org.eclipse.gef.examples.logicdesigner.model.LogicLabel;
import org.eclipse.gef.examples.logicdesigner.model.OrGate;
import org.eclipse.gef.examples.logicdesigner.model.XORGate;
import org.eclipse.gef.examples.logicdesigner.tools.LogicCreationTool;

public class LogicPlugin extends org.eclipse.ui.plugin.AbstractUIPlugin {

    private static LogicPlugin singleton;

    public static Dimension getMaximumSizeFor(Class modelClass) {
        if (LED.class.equals(modelClass)) {
            return LEDFigure.SIZE;
        } else if (AndGate.class.equals(modelClass)) {
            return AndGateFigure.SIZE;
        } else if (OrGate.class.equals(modelClass)) {
            return OrGateFigure.SIZE;
        } else if (XORGate.class.equals(modelClass)) {
            return XOrGateFigure.SIZE;
        } else if (GroundOutput.class.isAssignableFrom(modelClass)) {
            return GroundFigure.SIZE;
        } else if (LiveOutput.class.equals(modelClass)) {
            return LiveOutputFigure.SIZE;
        }
        return IFigure.MAX_DIMENSION;
    }

    public static Dimension getMinimumSizeFor(Class modelClass) {
        if (LogicLabel.class.equals(modelClass)) {
            return new Dimension(IFigure.MIN_DIMENSION.width, 30);
        } else if (Circuit.class.equals(modelClass)) {
            return new Dimension(25, 20);
        } else if (LED.class.equals(modelClass)) {
            return LEDFigure.SIZE;
        } else if (AndGate.class.equals(modelClass)) {
            return AndGateFigure.SIZE;
        } else if (OrGate.class.equals(modelClass)) {
            return OrGateFigure.SIZE;
        } else if (XORGate.class.equals(modelClass)) {
            return XOrGateFigure.SIZE;
        } else if (GroundOutput.class.isAssignableFrom(modelClass)) {
            return GroundFigure.SIZE;
        } else if (LiveOutput.class.equals(modelClass)) {
            return LiveOutputFigure.SIZE;
        }
        return IFigure.MIN_DIMENSION;
    }

    static private List createCategories(PaletteRoot root) {
        List categories = new ArrayList();

        categories.add(createControlGroup(root));
        categories.add(createComponentsDrawer());
        categories.add(createComplexPartsDrawer());
        // categories.add(createTemplateComponentsDrawer());
        // categories.add(createComplexTemplatePartsDrawer());

        return categories;
    }

    static private PaletteContainer createComplexPartsDrawer() {
        PaletteDrawer drawer = new PaletteDrawer(LogicMessages.LogicPlugin_Category_ComplexParts_Label,
                ImageDescriptor.createFromFile(Circuit.class, "icons/can.gif")); //$NON-NLS-1$

        List entries = new ArrayList();

        CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
                LogicMessages.LogicPlugin_Tool_CreationTool_HalfAdder_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_HalfAdder_Description,
                LogicDiagramFactory.getHalfAdderFactory(),
                ImageDescriptor.createFromFile(Circuit.class, "icons/halfadder16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/halfadder24.gif") //$NON-NLS-1$
        );
        entries.add(combined);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_FullAdder_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_FullAdder_Description,
                LogicDiagramFactory.getFullAdderFactory(),
                ImageDescriptor.createFromFile(Circuit.class, "icons/fulladder16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/fulladder24.gif") //$NON-NLS-1$
        );
        entries.add(combined);

        drawer.addAll(entries);
        return drawer;
    }

    static private PaletteContainer createComponentsDrawer() {

        PaletteDrawer drawer = new PaletteDrawer(LogicMessages.LogicPlugin_Category_Components_Label,
                ImageDescriptor.createFromFile(Circuit.class, "icons/comp.gif"));//$NON-NLS-1$

        List entries = new ArrayList();

        CombinedTemplateCreationEntry combined = new CombinedTemplateCreationEntry(
                LogicMessages.LogicPlugin_Tool_CreationTool_FlowContainer_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_FlowContainer_Description,
                new SimpleFactory(LogicFlowContainer.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/logicflow16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/logicflow24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        entries.add(combined);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_Circuit_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_Circuit_Description, new SimpleFactory(Circuit.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/circuit16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/circuit24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        entries.add(combined);

        entries.add(new PaletteSeparator());

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_Label_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_Label_Description, new SimpleFactory(LogicLabel.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/label16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/label24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        entries.add(combined);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_LED_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_LED_Description, new SimpleFactory(LED.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/ledicon16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/ledicon24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        entries.add(combined);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_ORGate_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_ORGate_Description, new SimpleFactory(OrGate.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/or16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/or24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        entries.add(combined);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_XORGate_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_XORGate_Description, new SimpleFactory(XORGate.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/xor16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/xor24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        entries.add(combined);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_ANDGate_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_ANDGate_Description, new SimpleFactory(AndGate.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/and16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/and24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        entries.add(combined);

        PaletteStack liveGroundStack = new PaletteStack(
                LogicMessages.LogicPlugin_Tool_CreationTool_LiveGroundStack_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_LiveGroundStack_Description, null);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_LiveOutput_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_LiveOutput_Description,
                new SimpleFactory(LiveOutput.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/live16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/live24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        liveGroundStack.add(combined);

        combined = new CombinedTemplateCreationEntry(LogicMessages.LogicPlugin_Tool_CreationTool_Ground_Label,
                LogicMessages.LogicPlugin_Tool_CreationTool_Ground_Description,
                new SimpleFactory(GroundOutput.class),
                ImageDescriptor.createFromFile(Circuit.class, "icons/ground16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/ground24.gif")//$NON-NLS-1$
        );
        combined.setToolClass(LogicCreationTool.class);
        liveGroundStack.add(combined);

        entries.add(liveGroundStack);

        drawer.addAll(entries);
        return drawer;
    }

    static private PaletteContainer createControlGroup(PaletteRoot root) {
        PaletteGroup controlGroup = new PaletteGroup(LogicMessages.LogicPlugin_Category_ControlGroup_Label);

        List entries = new ArrayList();

        ToolEntry tool = new PanningSelectionToolEntry();
        entries.add(tool);
        root.setDefaultEntry(tool);

        PaletteStack marqueeStack = new PaletteStack(LogicMessages.Marquee_Stack, "", null); //$NON-NLS-1$

        // NODES CONTAINED (default)
        marqueeStack.add(new MarqueeToolEntry());

        // NODES TOUCHED
        MarqueeToolEntry marquee = new MarqueeToolEntry();
        marquee.setToolProperty(MarqueeSelectionTool.PROPERTY_MARQUEE_BEHAVIOR,
                new Integer(MarqueeSelectionTool.BEHAVIOR_NODES_TOUCHED));
        marqueeStack.add(marquee);

        // NODES CONTAINED AND RELATED CONNECTIONS

        marquee = new MarqueeToolEntry();
        marquee.setToolProperty(MarqueeSelectionTool.PROPERTY_MARQUEE_BEHAVIOR,
                new Integer(MarqueeSelectionTool.BEHAVIOR_NODES_CONTAINED_AND_RELATED_CONNECTIONS));
        marqueeStack.add(marquee);

        // NODES TOUCHED AND RELATED CONNECTIONS
        marquee = new MarqueeToolEntry();
        marquee.setToolProperty(MarqueeSelectionTool.PROPERTY_MARQUEE_BEHAVIOR,
                new Integer(MarqueeSelectionTool.BEHAVIOR_NODES_TOUCHED_AND_RELATED_CONNECTIONS));
        marqueeStack.add(marquee);

        // CONNECTIONS CONTAINED
        marquee = new MarqueeToolEntry();
        marquee.setToolProperty(MarqueeSelectionTool.PROPERTY_MARQUEE_BEHAVIOR,
                new Integer(MarqueeSelectionTool.BEHAVIOR_CONNECTIONS_CONTAINED));
        marqueeStack.add(marquee);

        // CONNECTIONS TOUCHED
        marquee = new MarqueeToolEntry();
        marquee.setToolProperty(MarqueeSelectionTool.PROPERTY_MARQUEE_BEHAVIOR,
                new Integer(MarqueeSelectionTool.BEHAVIOR_CONNECTIONS_TOUCHED));
        marqueeStack.add(marquee);

        marqueeStack.setUserModificationPermission(PaletteEntry.PERMISSION_NO_MODIFICATION);
        entries.add(marqueeStack);

        tool = new ConnectionCreationToolEntry(
                LogicMessages.LogicPlugin_Tool_ConnectionCreationTool_ConnectionCreationTool_Label,
                LogicMessages.LogicPlugin_Tool_ConnectionCreationTool_ConnectionCreationTool_Description, null,
                ImageDescriptor.createFromFile(Circuit.class, "icons/connection16.gif"), //$NON-NLS-1$
                ImageDescriptor.createFromFile(Circuit.class, "icons/connection24.gif")//$NON-NLS-1$
        );
        entries.add(tool);
        controlGroup.addAll(entries);
        return controlGroup;
    }

    static PaletteRoot createPalette() {
        PaletteRoot logicPalette = new PaletteRoot();
        logicPalette.addAll(createCategories(logicPalette));
        return logicPalette;
    }

    public static LogicPlugin getDefault() {
        return singleton;
    }

    public LogicPlugin() {
        if (singleton == null) {
            singleton = this;
        }
    }

}