package cit.PureATN; import java.awt.Color; import java.awt.Graphics; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; public class PenUser { public static Hashtable<String, PenUser> penusers = new Hashtable<String, PenUser>(); public static PenUser find(String penid){ penid = penid.trim(); PenUser pu = penusers.get(penid); if (pu == null) { pu = new PenUser(penid, Note.theapp); penusers.put(penid, pu); } return pu; } public static void add(String penid, int x, int y){ PenUser pu = PenUser.find(penid); pu.add(x, y); } public static void press(String penid, int phase){ PenUser pu = PenUser.find(penid); pu.press(phase); } public static void drawAll(Graphics g){ for(PenUser pu: penusers.values()){ pu.draw(g); } } String penid; ArrayList<Stroke> strokes; Stroke lastStroke = null; transient Note parent; int num = 0; public PenUser(String pid, Note _parent){ parent = _parent; penid = pid; strokes = new ArrayList<Stroke>(); // num = penusers.size(); num = Integer.parseInt(pid.replace("pen", "")); // System.out.println("num = "+num+" "+pid); } public void add(int x, int y){ System.out.println(penid+" "+x+" "+y); if (lastStroke == null){ lastStroke = new Stroke(this); strokes.add(lastStroke); } lastStroke.add(x,y); Note.theapp.repaint(); } public void press(int ph){ if (ph == 0){ if (lastStroke != null){ lastStroke.finish(); bundlesend(lastStroke); lastStroke = null; } } else { } } public void draw(Graphics g){ g.setColor(Color.getHSBColor((float)(num/10.0f), 0.8f, 0.8f)); int count = strokes.size(); for(int i=0;i<count;i++/*Stroke st: strokes*/){ Stroke st = strokes.get(i); st.draw(g); } } public void send(int x, int y, int x2, int y2){ Map<String,Object> arg2; arg2 = new HashMap<String, Object>(); arg2.put("penid", penid); // arg2.put("phase", drawphase012); arg2.put("rgb", getColorStringRGB()); arg2.put("date", DPenReceiver.sdfdate.format(new Date())); arg2.put("time", DPenReceiver.sdftime.format(new Date())); arg2.put("epoch", System.currentTimeMillis()); arg2.put("x1", x); arg2.put("y1", y); arg2.put("x2", x2); arg2.put("y2", y2); // parent.ddp.call("/points/insert", new Object[]{arg2}); } public void bundlesend(Stroke st){ // Map<String,Object> arg2; // arg2 = new HashMap<String, Object>(); // arg2.put("penid", penid); // arg2.put("stroke", st); // arg2.put("rgb", getColorStringRGB()); // parent.ddp.call("/strokes/insert", new Object[]{arg2}); // arg2.remove("stroke"); // parent.ddp.call("pointsclear", new Object[]{arg2}); } public String getColorStringRGB(){ Color c = Color.getHSBColor((float)(num/11.0f), 0.8f, 0.8f); int r = c.getRed(); int g = c.getGreen(); int b = c.getBlue(); return "rgb("+r+","+g+","+b+")"; } }