Package com.bbn.openmap.omGraphics

Source Code of com.bbn.openmap.omGraphics.EditableOMAbstractLine

// **********************************************************************
//
// <copyright>
//
//  BBN Technologies
//  10 Moulton Street
//  Cambridge, MA 02138
//  (617) 873-8000
//
//  Copyright (C) BBNT Solutions LLC. All rights reserved.
//
// </copyright>
// **********************************************************************
//
// $Source: /cvs/distapps/openmap/src/openmap/com/bbn/openmap/omGraphics/EditableOMAbstractLine.java,v $
// $RCSfile: EditableOMAbstractLine.java,v $
// $Revision: 1.1.2.2 $
// $Date: 2005/08/10 22:45:13 $
// $Author: dietrick $
//
// **********************************************************************

package com.bbn.openmap.omGraphics;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Graphics2D;
import java.awt.Polygon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;

import javax.swing.ButtonGroup;
import javax.swing.ImageIcon;
import javax.swing.JMenu;
import javax.swing.JRadioButtonMenuItem;

import com.bbn.openmap.Environment;
import com.bbn.openmap.I18n;

/**
* The EditableOMAbstractLine encompasses an OMAbstractLine, providing
* a mechanism for adding an arrowhead menu in the line editor menu.
*/
public abstract class EditableOMAbstractLine extends EditableOMGraphic {

    protected JMenu arrowheadMenu = null;
   
    protected I18n i18n = Environment.getI18n();

    public Component getGUI(GraphicAttributes graphicAttributes) {
        if (graphicAttributes != null) {
            JMenu ahm = getArrowHeadMenu();
            graphicAttributes.setLineMenuAdditions(new JMenu[] { ahm });
            return graphicAttributes.getGUI();
        }
        return null;
    }

    public JMenu getArrowHeadMenu() {

        if (arrowheadMenu == null) {
            arrowheadMenu = new JMenu(i18n.get(EditableOMAbstractLine.class, "Arrows", "Arrows"));

            ActionListener listener = new ActionListener() {
                public void actionPerformed(ActionEvent ae) {
                    String command = ae.getActionCommand();
                    try {
                        int what = Integer.parseInt(command);
                        if (what < 0) {
                            ((OMAbstractLine) getGraphic()).addArrowHead(false);
                        } else {
                            ((OMAbstractLine) getGraphic()).addArrowHead(what);
                        }
                        generate(getProjection());
                        repaint();
                    } catch (NumberFormatException e) {
                    }
                }
            };

            boolean doArrowHead = ((OMAbstractLine) getGraphic()).hasArrowHead();
            int currentDirection = OMArrowHead.ARROWHEAD_DIRECTION_FORWARD;
           
            if (doArrowHead) {
                currentDirection = ((OMAbstractLine) getGraphic()).getArrowHead().getArrowDirectionType();
            }
           
            int descDir = -1; // this description direction

            ButtonGroup group = new ButtonGroup();
            ImageIcon ii = createArrowIcon(new BasicStroke(1), 50, 20, descDir);
            JRadioButtonMenuItem button = new JRadioButtonMenuItem(ii, !doArrowHead);
            button.setActionCommand(String.valueOf(descDir));
            group.add(button);
            button.addActionListener(listener);
            arrowheadMenu.add(button);

            for (descDir = OMArrowHead.ARROWHEAD_DIRECTION_FORWARD; descDir <= OMArrowHead.ARROWHEAD_DIRECTION_BOTH; descDir++) {
                ii = createArrowIcon(new BasicStroke(1), 50, 20, descDir);
                button = new JRadioButtonMenuItem(ii, doArrowHead
                        && currentDirection == descDir);
                button.setActionCommand(String.valueOf(descDir));
                group.add(button);
                button.addActionListener(listener);
                arrowheadMenu.add(button);
            }
        }
        return arrowheadMenu;
    }

    /**
     * Given some arrowhead parameters, create an ImageIcon that shows
     * it.
     *
     * @param stroke the BasicStroke to draw on the Icon.
     * @param width the width of the icon.
     * @param height the height of the icon.
     * @param arrowHeadType -1 for no arrowhead, use the OMArrowHead
     *        directions for other versions.
     */
    public ImageIcon createArrowIcon(BasicStroke stroke, int width, int height,
                                     int arrowHeadType) {

        BufferedImage bigImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
        Graphics2D g = (Graphics2D) bigImage.getGraphics();

        int middleY = height / 2;

        g.setBackground(OMColor.clear);
        g.setPaint(OMColor.clear);
        g.fillRect(0, 0, width, height);
        g.setPaint(Color.black);
        g.setStroke(stroke);
        g.drawLine(0, middleY, width, middleY);

        int upTip = (int) ((float) height * .25);
        int downTip = (int) ((float) height * .75);
        Polygon poly = null;
        if (arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_FORWARD
                || arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_BOTH) {
            int rightWingX = (int) ((float) width * .75);
            poly = new Polygon(new int[] { width, rightWingX, rightWingX }, new int[] {
                    middleY, upTip, downTip }, 3);
            g.fill(poly);
            g.draw(poly); // Seems to help with rendering problem.
        }

        if (arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_BACKWARD
                || arrowHeadType == OMArrowHead.ARROWHEAD_DIRECTION_BOTH) {
            int leftWingX = (int) ((float) width * .25);
            poly = new Polygon(new int[] { 0, leftWingX, leftWingX }, new int[] {
                    middleY, upTip, downTip }, 3);
            g.fill(poly);
            g.draw(poly); // Seems to help with rendering problem.
        }

        return new ImageIcon(bigImage);
    }
}
TOP

Related Classes of com.bbn.openmap.omGraphics.EditableOMAbstractLine

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.