package haven; import java.util.*; import static haven.Config.AUTOCHOOSE; import static haven.Config.saveFile; import static haven.Window.cbtni; public class FlowerList extends Scrollport { private final IBox box; public FlowerList(Coord c, Widget parent) { super(c, new Coord(200, 250), parent); box = new IBox("gfx/hud", "tl", "tr", "bl", "br", "extvl", "extvr", "extht", "exthb"); int i = 0; for (Map.Entry<String, Boolean> entry : AUTOCHOOSE.entrySet()) { new Item(new Coord(0, 25 * i++), entry.getKey(), cont); } update(); } @SuppressWarnings("SynchronizeOnNonFinalField") @Override public void wdgmsg(Widget sender, String msg, Object... args) { if (msg.equals("changed")) { String name = (String) args[0]; boolean val = (Boolean) args[1]; synchronized (AUTOCHOOSE) { AUTOCHOOSE.put(name, val); } Config.saveAutochoose(); } else if (msg.equals("delete")) { String name = (String) args[0]; synchronized (AUTOCHOOSE) { AUTOCHOOSE.remove(name); } Config.saveAutochoose(); ui.destroy(sender); update(); } else { super.wdgmsg(sender, msg, args); } } @SuppressWarnings("SynchronizeOnNonFinalField") public void add(String name) { if(name != null && !name.isEmpty() && !AUTOCHOOSE.containsKey(name)) { synchronized (AUTOCHOOSE) { AUTOCHOOSE.put(name, true); } Config.saveAutochoose(); new Item(new Coord(0, 0), name, cont); update(); } } private void update() { LinkedList<String> order = new LinkedList<String>(AUTOCHOOSE.keySet()); Collections.sort(order); for(Widget wdg = cont.lchild; wdg != null; wdg = wdg.prev) { int i = order.indexOf(((Item)wdg).name); wdg.c.y = 25 * i; } cont.update(); } @Override public void draw(GOut g) { super.draw(g); box.draw(g, Coord.z, sz); } private static class Item extends Widget { public final String name; private final CheckBox cb; private boolean highlight = false; private boolean a = false; public Item(Coord c, String name, Widget parent) { super(c, new Coord(200, 25), parent); this.name = name; cb = new CheckBox(new Coord(3, 3), this, name); cb.a = AUTOCHOOSE.get(name); cb.canactivate = true; new IButton(new Coord(178, 5), this, cbtni[0], cbtni[1], cbtni[2]); } @Override public void draw(GOut g) { if (highlight) { g.chcolor(255, 255, 0, 128); g.poly2(Coord.z, Listbox.selr, new Coord(0, sz.y), Listbox.selr, sz, Listbox.overr, new Coord(sz.x, 0), Listbox.overr); g.chcolor(); } super.draw(g); } @Override public void mousemove(Coord c) { highlight = c.isect(Coord.z, sz); super.mousemove(c); } @Override public boolean mousedown(Coord c, int button) { if(super.mousedown(c, button)){ return true; } if(button != 1) return(false); a = true; ui.grabmouse(this); return(true); } @Override public boolean mouseup(Coord c, int button) { if(a && button == 1) { a = false; ui.grabmouse(null); if(c.isect(new Coord(0, 0), sz)) click(); return(true); } return(false); } private void click() { cb.a = !cb.a; wdgmsg("changed", name, cb.a); } @Override public void wdgmsg(Widget sender, String msg, Object... args) { if (msg.equals("ch")) { wdgmsg("changed", name, args[0]); } else if (msg.equals("activate")) { wdgmsg("delete", name); } else { super.wdgmsg(sender, msg, args); } } } }