001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.gui.bbox;
003
004import static org.openstreetmap.josm.tools.I18n.tr;
005
006import java.awt.Dimension;
007import java.awt.Graphics;
008import java.awt.Point;
009import java.awt.event.MouseAdapter;
010import java.awt.event.MouseEvent;
011
012import javax.swing.ImageIcon;
013import javax.swing.JComponent;
014
015import org.openstreetmap.josm.tools.ImageProvider;
016
017/**
018 * @author Tim Haussmann
019 */
020public class SizeButton extends JComponent {
021
022    private int x;
023    private int y;
024
025    private ImageIcon enlargeImage;
026    private ImageIcon shrinkImage;
027    private boolean isEnlarged;
028    private final SlippyMapBBoxChooser slippyMapBBoxChooser;
029
030    public SizeButton(SlippyMapBBoxChooser slippyMapBBoxChooser) {
031        this.slippyMapBBoxChooser = slippyMapBBoxChooser;
032        enlargeImage = ImageProvider.get("view-fullscreen");
033        shrinkImage = ImageProvider.get("view-fullscreen-revert");
034        setPreferredSize(new Dimension(enlargeImage.getIconWidth(), enlargeImage.getIconHeight()));
035        addMouseListener(mouseListener);
036        setToolTipText(tr("Enlarge"));
037    }
038
039    private final transient MouseAdapter mouseListener = new MouseAdapter() {
040        @Override
041        public void mouseReleased(MouseEvent e) {
042            if (e.getButton() == MouseEvent.BUTTON1) {
043                toggle();
044                slippyMapBBoxChooser.resizeSlippyMap();
045            }
046        }
047    };
048
049    @Override
050    protected void paintComponent(Graphics g) {
051        if (isEnlarged) {
052            if (shrinkImage != null)
053                g.drawImage(shrinkImage.getImage(), x, y, null);
054        } else {
055            if (enlargeImage != null)
056                g.drawImage(enlargeImage.getImage(), x, y, null);
057        }
058    }
059
060    public void toggle() {
061        isEnlarged = !isEnlarged;
062        setToolTipText(isEnlarged ? tr("Shrink") : tr("Enlarge"));
063    }
064
065    public boolean isEnlarged() {
066        return isEnlarged;
067    }
068
069    public boolean hit(Point point) {
070        if (x < point.x && point.x < x + enlargeImage.getIconWidth()) {
071            if (y < point.y && point.y < y + enlargeImage.getIconHeight()) {
072                return true;
073            }
074        }
075        return false;
076    }
077
078}