// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.gui.bbox; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.Dimension; import java.awt.Graphics; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import javax.accessibility.Accessible; import javax.accessibility.AccessibleAction; import javax.accessibility.AccessibleContext; import javax.swing.ImageIcon; import javax.swing.JComponent; import org.openstreetmap.josm.tools.ImageProvider; /** * Button allowing to control the dimension of a slippy map between two states (normal/enlarged). * @author Tim Haussmann * @since 1390 */ public class SizeButton extends JComponent implements Accessible { private final ImageIcon enlargeImage; private final ImageIcon shrinkImage; private boolean isEnlarged; private final SlippyMapBBoxChooser slippyMapBBoxChooser; private final transient MouseAdapter mouseAdapter = new MouseAdapter() { @Override public void mouseReleased(MouseEvent e) { if (e.getButton() == MouseEvent.BUTTON1) { toggle(); } } }; /** * Constructs a new {@code SizeButton}. * @param slippyMapBBoxChooser the associated slippy map */ public SizeButton(SlippyMapBBoxChooser slippyMapBBoxChooser) { this.slippyMapBBoxChooser = slippyMapBBoxChooser; enlargeImage = ImageProvider.get("view-fullscreen"); shrinkImage = ImageProvider.get("view-fullscreen-revert"); setPreferredSize(new Dimension(enlargeImage.getIconWidth(), enlargeImage.getIconHeight())); addMouseListener(mouseAdapter); setToolTipText(tr("Enlarge")); } @Override protected void paintComponent(Graphics g) { if (isEnlarged) { if (shrinkImage != null) g.drawImage(shrinkImage.getImage(), 0, 0, null); } else { if (enlargeImage != null) g.drawImage(enlargeImage.getImage(), 0, 0, null); } } /** * Toggles button state. */ public void toggle() { isEnlarged = !isEnlarged; setToolTipText(isEnlarged ? tr("Shrink") : tr("Enlarge")); slippyMapBBoxChooser.resizeSlippyMap(); } /** * Determines if the slippy map is enlarged. * @return {@code true} if the slippy map is enlarged, {@code false} otherwise */ public boolean isEnlarged() { return isEnlarged; } @Override public AccessibleContext getAccessibleContext() { if (accessibleContext == null) { accessibleContext = new AccessibleSizeButton(); } return accessibleContext; } class AccessibleSizeButton extends AccessibleJComponent implements AccessibleAction { @Override public int getAccessibleActionCount() { return 1; } @Override public String getAccessibleActionDescription(int i) { return "toggle"; } @Override public boolean doAccessibleAction(int i) { toggle(); return true; } } }