Package org.enhydra.jawe.components.graph

Source Code of org.enhydra.jawe.components.graph.GraphControllerPanel

package org.enhydra.jawe.components.graph;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.MouseInfo;
import java.awt.Point;
import java.awt.PointerInfo;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.util.List;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JToolBar;
import javax.swing.JViewport;
import javax.swing.SwingConstants;
import javax.swing.ToolTipManager;

import org.enhydra.jawe.ActionBase;
import org.enhydra.jawe.BarFactory;
import org.enhydra.jawe.JaWEAction;
import org.enhydra.jawe.JaWEComponent;
import org.enhydra.jawe.JaWEComponentView;
import org.enhydra.jawe.JaWEManager;
import org.enhydra.jawe.Utils;
import org.enhydra.jawe.XMLElementChoiceButton;
import org.enhydra.jawe.base.controller.JaWEType;
import org.enhydra.jawe.base.controller.JaWETypes;
import org.enhydra.jawe.components.graph.actions.SetActivityMode;
import org.enhydra.jawe.components.graph.actions.SetEndMode;
import org.enhydra.jawe.components.graph.actions.SetParticipantMode;
import org.enhydra.jawe.components.graph.actions.SetParticipantModeFreeTextExpression;
import org.enhydra.jawe.components.graph.actions.SetSelectMode;
import org.enhydra.jawe.components.graph.actions.SetStartMode;
import org.enhydra.jawe.components.graph.actions.SetTransitionMode;
import org.enhydra.shark.xpdl.elements.Activity;
import org.enhydra.shark.xpdl.elements.Participant;
import org.enhydra.shark.xpdl.elements.Transition;

/**
*  Container for displaying menubar, toolbar, process graphs ...
*
@author Sasa Bojanic
*/
public class GraphControllerPanel extends JPanel implements JaWEComponentView {

    protected GraphController controller;
    // various things needed for initializing and further work
    protected JScrollPane graphScrollPane;
    protected JToolBar toolbar;
    protected XMLElementChoiceButton showParticipantChoiceButton;
    protected XMLElementChoiceButton asChoiceButton;

    public GraphControllerPanel(GraphController controller) {
        this.controller = controller;
    }

    public void configure() {
    }

    public void init() {
        setBorder(BorderFactory.createEtchedBorder());
        setLayout(new BorderLayout());
        JPanel toolbars = new JPanel();
        toolbars.setLayout(new BorderLayout());
        // creating toolbars
        toolbar = BarFactory.createToolbar("defaultToolbar", controller);
        toolbar.setFloatable(false);
        // creating working component
        graphScrollPane = createWorkingComponent();

        JToolBar toolbox = createToolbox();
        toolbox.setOrientation(SwingConstants.VERTICAL);
        toolbox.setFloatable(false);
        add(toolbar, BorderLayout.NORTH);
        toolbars.add(toolbox, BorderLayout.CENTER);
        add(toolbars, BorderLayout.WEST);
        add(graphScrollPane, BorderLayout.CENTER);
    }

    public JaWEComponent getJaWEComponent() {
        return controller;
    }

    public JComponent getDisplay() {
        return this;
    }

    protected JToolBar createToolbox() {
        String toolbarName = "toolbox";
        String actionOrder = controller.getSettings().getToolbarActionOrder(toolbarName);

        JaWETypes jts = JaWEManager.getInstance().getJaWEController().getJaWETypes();

        // set tooltip delay to 100ms
        ToolTipManager.sharedInstance().setInitialDelay(100);

        JToolBar toolbar = new JToolBar();
        toolbar.setRollover(true);
        String[] act = Utils.tokenize(actionOrder, BarFactory.ACTION_DELIMITER);

        for (int j = 0; j < act.length; j++) {
            if (act[j].equals(BarFactory.ACTION_SEPARATOR)) {
                toolbar.addSeparator();
            } else if (act[j].equals("SetSelectMode")) {
                JaWEAction ja = new JaWEAction();
                ja.setAction(new SetSelectMode(controller));
                ja.setIcon(((GraphSettings) controller.getSettings()).getSelectionIcon());
                ja.setLangDepName(controller.getSettings().getLanguageDependentString("SelectionKey"));
                JButton b = BarFactory.createToolbarButton(ja, controller);
                decorateToolboxButton(b, ja);
                toolbar.add(b);
                controller.getSettings().addAction("SetSelectMode", ja);
            } else if (act[j].equals("SetParticipantModeCommonExpression")) {
                JaWEAction ja = new JaWEAction();
                try {
                    String clsName = "org.enhydra.jawe.components.graph.actions.SetParticipantModeCommonExpression";
                    ActionBase action = (ActionBase) Class.forName(clsName).getConstructor(new Class[]{
                                GraphController.class
                            }).newInstance(new Object[]{
                                controller
                            });
                    ja.setAction(action);
                } catch (Exception ex) {
                }
                ja.setIcon(((GraphSettings) controller.getSettings()).getCommonExpresionParticipantIcon());
                ja.setLangDepName(controller.getSettings().getLanguageDependentString("CommonExpressionParticipantKey"));
                JButton b = BarFactory.createToolbarButton(ja, controller);
                decorateToolboxButton(b, ja);
                toolbar.add(b);
                controller.getSettings().addAction("SetParticipantModeCommonExpression", ja);
            } else if (act[j].equals("SetParticipantModeFreeTextExpression")) {
                JaWEAction ja = new JaWEAction();
                ja.setAction(new SetParticipantModeFreeTextExpression(controller));
                ja.setIcon(((GraphSettings) controller.getSettings()).getFreeTextParticipantIcon());
                ja.setLangDepName(controller.getSettings().getLanguageDependentString("FreeTextExpressionParticipantKey"));
                JButton b = BarFactory.createToolbarButton(ja, controller);
                decorateToolboxButton(b, ja);
                toolbar.add(b);
                controller.getSettings().addAction("SetParticipantModeFreeTextExpression", ja);
            } //CUSTOM
            else if (act[j].equals("SetStartMode")) {
                JaWEAction ja = new JaWEAction();
                ja.setAction(new SetStartMode(controller));
                ja.setIcon(((GraphSettings) controller.getSettings()).getBubbleStartIcon());
                ja.setLangDepName(controller.getSettings().getLanguageDependentString("StartBubbleKey"));
                JButton b = BarFactory.createToolbarButton(ja, controller);
                decorateToolboxButton(b, ja);
                toolbar.add(b);
                controller.getSettings().addAction("SetStartMode", ja);
            } else if (act[j].equals("SetEndMode")) {
                JaWEAction ja = new JaWEAction();
                ja.setAction(new SetEndMode(controller));
                ja.setIcon(((GraphSettings) controller.getSettings()).getBubbleEndIcon());
                ja.setLangDepName(controller.getSettings().getLanguageDependentString("EndBubbleKey"));
                JButton b = BarFactory.createToolbarButton(ja, controller);
                decorateToolboxButton(b, ja);
                toolbar.add(b);
                controller.getSettings().addAction("SetEndMode", ja);
                //END CUSTOM
            } else if (act[j].startsWith("SetParticipantMode")) {
                String type = act[j].substring("SetParticipantMode".length());
                if (type.equals("*")) {
                    List parTypes = jts.getTypes(Participant.class);
                    for (int i = 0; i < parTypes.size(); i++) {
                        JaWEType jt = (JaWEType) parTypes.get(i);
                        JaWEAction ja = new JaWEAction();
                        ja.setAction(new SetParticipantMode(controller, jt.getTypeId()));
                        ja.setIcon(jt.getIcon());
                        ja.setLangDepName(jt.getDisplayName());
                        JButton b = BarFactory.createToolbarButton(ja, controller);
                        decorateToolboxButton(b, ja);
                        toolbar.add(b);
                        controller.getSettings().addAction(jt.getTypeId(), ja);
                    }
                } else if (!(type.equals("SetParticipantModeCommonExpression") || type.equals("SetParticipantModeFreeTextExpression"))) {
                    JaWEType jt = jts.getType(type);
                    if (jt == null) {
                        continue;
                    }
                    JaWEAction ja = new JaWEAction();
                    ja.setAction(new SetParticipantMode(controller, jt.getTypeId()));
                    ja.setIcon(jt.getIcon());
                    ja.setLangDepName(jt.getDisplayName());
                    JButton b = BarFactory.createToolbarButton(ja, controller);
                    decorateToolboxButton(b, ja);
                    toolbar.add(b);
                    controller.getSettings().addAction(jt.getTypeId(), ja);
                }
            } else if (act[j].startsWith("SetActivityMode")) {
                String type = act[j].substring("SetActivityMode".length());
                if (type.equals("*")) {
                    List actTypes = jts.getTypes(Activity.class);
                    for (int i = 0; i < actTypes.size(); i++) {
                        JaWEType jt = (JaWEType) actTypes.get(i);
                        JaWEAction ja = new JaWEAction();
                        ja.setAction(new SetActivityMode(controller, jt.getTypeId()));
                        ja.setIcon(jt.getIcon());
                        ja.setLangDepName(jt.getDisplayName());
                        JButton b = BarFactory.createToolbarButton(ja, controller);
                        decorateToolboxButton(b, ja);
                        toolbar.add(b);
                        controller.getSettings().addAction(jt.getTypeId(), ja);
                    }
                } else {
                    JaWEType jt = jts.getType(type);
                    if (jt == null) {
                        continue;
                    }
                    JaWEAction ja = new JaWEAction();
                    ja.setAction(new SetActivityMode(controller, jt.getTypeId()));
                    ja.setIcon(jt.getIcon());
                    ja.setLangDepName(jt.getDisplayName());
                    JButton b = BarFactory.createToolbarButton(ja, controller);
                    decorateToolboxButton(b, ja);
                    toolbar.add(b);
                    controller.getSettings().addAction(jt.getTypeId(), ja);
                }
            } else if (act[j].startsWith("SetTransitionMode")) {
                String type = act[j].substring("SetTransitionMode".length());
                if (type.equals("*")) {
                    List traTypes = jts.getTypes(Transition.class);
                    for (int i = 0; i < traTypes.size(); i++) {
                        JaWEType jt = (JaWEType) traTypes.get(i);
                        JaWEAction ja = new JaWEAction();
                        ja.setAction(new SetTransitionMode(controller, jt.getTypeId()));
                        ja.setIcon(jt.getIcon());
                        ja.setLangDepName(jt.getDisplayName());
                        JButton b = BarFactory.createToolbarButton(ja, controller);
                        decorateToolboxButton(b, ja);
                        toolbar.add(b);
                        controller.getSettings().addAction(jt.getTypeId(), ja);
                    }
                } else {
                    JaWEType jt = jts.getType(type);
                    if (jt == null) {
                        continue;
                    }
                    JaWEAction ja = new JaWEAction();
                    ja.setAction(new SetTransitionMode(controller, jt.getTypeId()));
                    ja.setIcon(jt.getIcon());
                    ja.setLangDepName(jt.getDisplayName());
                    JButton b = BarFactory.createToolbarButton(ja, controller);
                    decorateToolboxButton(b, ja);
                    toolbar.add(b);
                    controller.getSettings().addAction(jt.getTypeId(), ja);
                }
            }
        }

        toolbar.setName(controller.getSettings().getLanguageDependentString(toolbarName + BarFactory.LABEL_POSTFIX));

        return toolbar;

    }

    protected void decorateToolboxButton(final JButton b, final JaWEAction ja) {
        b.setText(ja.getLangDepName());
        b.setFont(new Font("sansserif",Font.PLAIN,10));
        b.setHorizontalTextPosition(SwingConstants.CENTER);
        b.setVerticalTextPosition(SwingConstants.BOTTOM);
        b.setMinimumSize(new Dimension(70, 40));
        b.setMaximumSize(new Dimension(70, 40));
        b.setPreferredSize(new Dimension(70, 40));
        // make it draggable
        b.addMouseListener(new MouseAdapter() {
            boolean pressed = false;

            @Override
            public void mousePressed(MouseEvent e) {
                pressed = true;
            }

            @Override
            public void mouseExited(MouseEvent e) {
                if (pressed) {
                    ja.getAction().actionPerformed(null);
                }
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                Graph graph = controller.getSelectedGraph();
                PointerInfo pointerInfo = MouseInfo.getPointerInfo();
                Point location = graph.getLocationOnScreen();
                int pointerX = (int)pointerInfo.getLocation().getX();
                int pointerY = (int)pointerInfo.getLocation().getY();
                int graphX = (int)graph.getParent().getLocationOnScreen().getX();
                int x = (int)pointerX - (int)location.getX();
                int y = (int)pointerY -  (int)location.getY();
                if (pressed && x > 0 && pointerX > graphX) {
                    if (graph.isEditable()) {
                        GraphMarqueeHandler marquee = (GraphMarqueeHandler)graph.getMarqueeHandler();
                        int status = marquee.getStatus();
                        if (status == JaWEGraphUI.INSERT_PARTICIPANT) {
                            marquee.insertParticipant();
                        } else if (status == JaWEGraphUI.INSERT_ELEMENT) {
                            marquee.insertElement((Point) graph.fromScreen(new Point(x, y)));
                        } else if (status == JaWEGraphUI.INSERT_TRANSITION_START) {
                            JaWEGraphUI ui = (JaWEGraphUI)graph.getUI();
                            ui.insertTransitionStart(x, y);
                        }
                        // reset to selection mode for non-transitions
                        if (status != JaWEGraphUI.INSERT_TRANSITION_START) {
                            marquee.setSelectionMode();
                        }
                    }
                }
                pressed = false;
            }

        });

    }

    protected JScrollPane createWorkingComponent() {
        JScrollPane lGraphScrollPane = new JScrollPane();
        JViewport port = lGraphScrollPane.getViewport();
        port.setScrollMode(JViewport.BLIT_SCROLL_MODE);

        // Harald Meister: set bigger scroll-amounts, especially useful for
        // mouse-wheel-scolling in large workflows
        lGraphScrollPane.getVerticalScrollBar().setUnitIncrement(20);
        lGraphScrollPane.getHorizontalScrollBar().setUnitIncrement(40);

        return lGraphScrollPane;
    }

    public void graphSelected(Graph graph) {
        graphScrollPane.setViewportView(graph);
    }

    public void enableDisableButtons() {
    }
}
TOP

Related Classes of org.enhydra.jawe.components.graph.GraphControllerPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.