Package cn.edu.pku.dr.requirement.elicitation.tools

Source Code of cn.edu.pku.dr.requirement.elicitation.tools.EdgeMenu

package cn.edu.pku.dr.requirement.elicitation.tools;

import java.awt.geom.Line2D;
import java.util.ArrayList;
import org.netbeans.api.visual.action.PopupMenuProvider;
import org.netbeans.api.visual.widget.ConnectionWidget;
import org.netbeans.api.visual.widget.Widget;
import org.netbeans.api.visual.graph.GraphScene;

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

/**
* @author didikiki
*/

public class EdgeMenu implements PopupMenuProvider, ActionListener {

    private static final String ADD_REMOVE_CP_ACTION = "addRemoveCPAction"; // NOI18N
    // private static final String DELETE_ALL_CP_ACTION = "deleteAllCPAction";
    // // NOI18N

    private static final String DELETE_TRANSITION = "deleteTransition"; // NOI18N

    private GraphScene.StringGraph scene;

    private JPopupMenu menu;

    private ConnectionWidget edge;

    private Point point;

    public EdgeMenu(GraphScene.StringGraph scene) {
        this.scene = scene;
        menu = new JPopupMenu("Transition Menu");
        JMenuItem item;

        item = new JMenuItem("���/ɾ����Ƶ�");
        item.setActionCommand(ADD_REMOVE_CP_ACTION);
        item.addActionListener(this);
        menu.add(item);

        menu.addSeparator();

        // item = new JMenuItem("Delete All Control Points");
        // item.setActionCommand(DELETE_ALL_CP_ACTION);
        // item.addActionListener(this);
        // item.setEnabled(false);
        // menu.add(item);

        item = new JMenuItem("ɾ���");
        item.setActionCommand(DELETE_TRANSITION);
        item.addActionListener(this);
        menu.add(item);

    }

    public JPopupMenu getPopupMenu(Widget widget, Point point) {
        if (widget instanceof ConnectionWidget) {
            this.edge = (ConnectionWidget) widget;
            this.point = point;
            return menu;
        }
        return null;
    }

    public void actionPerformed(ActionEvent e) {
        if (e.getActionCommand().equals(ADD_REMOVE_CP_ACTION)) {
            addRemoveControlPoint(point);
        } else if (e.getActionCommand().equals(DELETE_TRANSITION)) {
            scene.removeEdge((String) scene.findObject(edge));
        }
    }

    private void addRemoveControlPoint(Point localLocation) {
        ArrayList<Point> list = new ArrayList<Point>(edge.getControlPoints());
        double createSensitivity = 1.00, deleteSensitivity = 5.00;
        if (!removeControlPoint(localLocation, list, deleteSensitivity)) {
            Point exPoint = null;
            int index = 0;
            for (Point elem: list) {
                if (exPoint != null) {
                    Line2D l2d = new Line2D.Double(exPoint, elem);
                    if (l2d.ptLineDist(localLocation) < createSensitivity) {
                        list.add(index, localLocation);
                        break;
                    }
                }
                exPoint = elem;
                index++;
            }
        }
        edge.setControlPoints(list, false);
    }

    private boolean removeControlPoint(Point point, ArrayList<Point> list,
            double deleteSensitivity) {
        for (Point elem: list) {
            if (elem.distance(point) < deleteSensitivity) {
                list.remove(elem);
                return true;
            }
        }
        return false;
    }

}
TOP

Related Classes of cn.edu.pku.dr.requirement.elicitation.tools.EdgeMenu

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.