package org.openstreetmap.josm.gui.bbox;
import java.awt.Graphics;
import java.awt.Point;
import javax.swing.ImageIcon;
import org.openstreetmap.josm.tools.ImageProvider;
public class SourceButton {
private int x = 0;
private int y = 30;
private ImageIcon enlargeImage;
private ImageIcon shrinkImage;
private ImageIcon imageMapnik;
private ImageIcon imageOsmarender;
private ImageIcon imageCycleMap;
private boolean isEnlarged = false;
private int currentMap = MAPNIK;
public static final int HIDE_OR_SHOW = 1;
public static final int MAPNIK = 2;
public static final int OSMARENDER = 3;
public static final int CYCLEMAP = 4;
public SourceButton() {
enlargeImage = ImageProvider.get("layer-switcher-maximize.png");
shrinkImage = ImageProvider.get("layer-switcher-minimize.png");
imageMapnik = ImageProvider.get("blue_Mapnik.png");
imageOsmarender = ImageProvider.get("blue_Osmarender.png");
imageCycleMap = ImageProvider.get("blue_CycleMap.png");
}
public void paint(Graphics g) {
if (isEnlarged) {
if (currentMap == MAPNIK) {
g.drawImage(imageMapnik.getImage(), g.getClipBounds().width
- imageMapnik.getIconWidth(), y, null);
}else if(currentMap == CYCLEMAP){
g.drawImage(imageCycleMap.getImage(), g.getClipBounds().width
- imageCycleMap.getIconWidth(), y, null);
}
else {
g.drawImage(imageOsmarender.getImage(), g.getClipBounds().width
- imageMapnik.getIconWidth(), y, null);
}
if (shrinkImage != null) {
this.x = g.getClipBounds().width - shrinkImage.getIconWidth();
g.drawImage(shrinkImage.getImage(), x, y, null);
}
} else {
if (enlargeImage != null) {
this.x = g.getClipBounds().width - enlargeImage.getIconWidth();
g.drawImage(enlargeImage.getImage(), x, y, null);
}
}
}
public void toggle() {
this.isEnlarged = !this.isEnlarged;
}
public int hit(Point point) {
if (isEnlarged) {
if (x < point.x && point.x < x + shrinkImage.getIconWidth()) {
if (y < point.y && point.y < y + shrinkImage.getIconHeight()) {
return HIDE_OR_SHOW;
}
} else if (x - imageMapnik.getIconWidth() < point.x && point.x < x) {
if (y < point.y && point.y < y + imageMapnik.getIconHeight() / 3) {
currentMap = OSMARENDER;
return OSMARENDER;
} else if (y + imageMapnik.getIconHeight() / 3 < point.y
&& point.y < y + imageMapnik.getIconHeight() *2/3) {
currentMap = MAPNIK;
return MAPNIK;
} else if (y + imageMapnik.getIconHeight()* 2/3 < point.y
&& point.y < y + imageMapnik.getIconHeight()) {
currentMap = CYCLEMAP;
return CYCLEMAP;
}
}
} else {
if (x < point.x && point.x < x + enlargeImage.getIconWidth()) {
if (y < point.y && point.y < y + enlargeImage.getIconHeight()) {
return HIDE_OR_SHOW;
}
}
}
return 0;
}
/**
* One of the constants OSMARENDER,MAPNIK or CYCLEMAP
*/
public void setMapStyle (int style) {
currentMap = (style < 2 || style > 4) ? MAPNIK : style;
}
}