001package jmri.jmrit.display.controlPanelEditor.shape;
002
003import java.awt.Rectangle;
004import java.awt.event.ActionEvent;
005import java.awt.geom.Ellipse2D;
006
007import javax.swing.BoxLayout;
008import javax.swing.JLabel;
009import javax.swing.JPanel;
010import javax.swing.JTextField;
011
012import jmri.jmrit.display.Editor;
013import jmri.util.swing.JmriMouseEvent;
014import jmri.util.swing.JmriMouseMotionListener;
015
016/**
017 * Frame to create/edit a Control Panel shape Circle object.
018 * @author Pete Cressman Copyright (c) 2012
019 */
020public class DrawCircle extends DrawFrame {
021
022    private JTextField _diameterText;
023
024    public DrawCircle(String which, String title, PositionableShape ps, Editor ed, boolean create) {
025        super(which, title, ps, ed, create);
026    }
027
028    @Override
029    protected JPanel makeParamsPanel() {
030        JPanel panel = super.makeParamsPanel();
031
032        JPanel p = new JPanel();
033        p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
034//        p.add(new JLabel(Bundle.getMessage("Circle")));
035        JPanel pp = new JPanel();
036        _diameterText = new JTextField(6);
037        _diameterText.setText(Integer.toString(_shape.getWidth()));
038        _diameterText.setHorizontalAlignment(JTextField.RIGHT);
039        pp.add(_diameterText);
040        _diameterText.addMouseMotionListener(JmriMouseMotionListener.adapt(
041                new JmriMouseMotionListener() {
042                    @Override
043                    public void mouseDragged(JmriMouseEvent e) {
044                        updateShape();
045                    }
046
047                    @Override
048                    public void mouseMoved(JmriMouseEvent e) {
049                        _shape.setWidth(getInteger(_diameterText, _shape.getWidth()));
050                        updateShape();
051                    }
052                }));
053        _diameterText.addActionListener((ActionEvent e) -> {
054            _shape.setWidth(getInteger(_diameterText, _shape.getWidth()));
055            updateShape();
056        });
057        pp.add(new JLabel(Bundle.getMessage("circleRadius")));
058        p.add(pp);
059        panel.add(p);
060        return panel;
061    }
062
063    @Override
064    protected PositionableShape makeFigure(Rectangle r, Editor ed) {
065        if (r != null) {
066            int dia = Math.max(r.width, r.height);
067            Ellipse2D.Double rr = new Ellipse2D.Double(0, 0, dia, dia);
068            _shape = new PositionableCircle(ed, rr);
069        }
070        return _shape;
071    }
072
073    @Override
074    void setDisplayWidth(int w) {
075        _diameterText.setText(Integer.toString(w));
076    }
077
078    @Override
079    void setDisplayHeight(int h) {
080        _diameterText.setText(Integer.toString(h));
081    }
082}