package haven; import java.awt.*; import java.awt.image.BufferedImage; import java.util.LinkedList; import java.util.List; public abstract class Breadcrumbs extends Widget { private static final Coord border = new Coord(2,2); private static final BufferedImage separator = Resource.loadimg("gfx/hud/breadcrumb"); private final Coord SZ; private List<Crumb> crumbs; private List<IButton> buttons; public Breadcrumbs(Coord c, Coord sz, Widget parent) { super(c, sz.add(0, border.x*2), parent); int d = sz.y; SZ = new Coord(d, d); buttons = new LinkedList<IButton>(); } public void setCrumbs(List<Crumb> crumbs){ this.crumbs = crumbs; cleanButtons(); createButtons(); } @Override public void wdgmsg(Widget sender, String msg, Object... args) { if (sender instanceof IButton && buttons.contains(sender)) { if(msg.equals("activate")){ int k = buttons.indexOf(sender); selected(crumbs.get(k).data); } return; } super.wdgmsg(sender, msg, args); } public abstract void selected(Object data); @Override public void draw(GOut g) { for(int i = 1; i<buttons.size(); i++){ g.image(separator,buttons.get(i).c.sub(12,-2)); } super.draw(g); } private void createButtons() { int w = 0; for(Crumb item : crumbs){ BufferedImage txt = Text.render(item.text).img; Coord isz = Utils.imgsz(txt).add(border.x*3+SZ.x,0); int ty = (sz.y - isz.y)/2; isz.y = sz.y; BufferedImage up = TexI.mkbuf(isz); Graphics g = up.getGraphics(); g.drawImage(item.img, border.x, border.y, SZ.x, SZ.y,null); g.drawImage(txt, SZ.x+border.x*2, ty, null); BufferedImage down = highlight(up, new Color(0x44EFE40A, true)); BufferedImage over = highlight(up, new Color(0x44C5C3BD, true)); IButton btn = new IButton(new Coord(w, 0), this, up, down, over); btn.recthit = true; buttons.add(btn); w += isz.x + 14; } } private BufferedImage highlight(BufferedImage img, Color color) { Coord imgsz = Utils.imgsz(img); BufferedImage ret = TexI.mkbuf(imgsz); Graphics g = ret.getGraphics(); g.drawImage(img, 0, 0, color, null); return ret; } private void cleanButtons() { for(IButton btn : buttons){ ui.destroy(btn); } buttons.clear(); } public static class Crumb{ public BufferedImage img; public String text; public Object data; public Crumb(BufferedImage img, String text, Object data){ this.img = img; this.text = text; this.data = data; } } }