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 final ImageIcon enlargeImage; 026 private final 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}