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