package cit.PureATN.MultiNote; import java.awt.Color; import java.awt.BasicStroke; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; import java.util.List; import java.util.Map; import javax.swing.WindowConstants; import org.josql.Query; import org.josql.QueryExecutionException; import org.josql.QueryParseException; import org.josql.QueryResults; import org.piccolo2d.PCanvas; import org.piccolo2d.PLayer; import org.piccolo2d.PNode; import org.piccolo2d.activities.PTransformActivity; import org.piccolo2d.nodes.PPath; import org.piccolo2d.util.PBounds; import cit.PureATN.Note; import cit.PureATN.PenUser; import cit.PureATN.ShortStroke; public class MultiNote extends Note { public MultiNote() { this(null); setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); theapp = this; // どこからでもNote.theapp で参照できるように } public MultiNote(final PCanvas aCanvas) { super(aCanvas); int width = 1000; int height = (int) (width * 1.414); setSize(width, height); setLocation(100, 200); // dPenReceiver = new DPenReceiver(this); } PPath[] shitajikiNodes = new PPath[11]; public void initialize() { super.initialize(); // 追加機能:キーイベント getCanvas().addKeyListener(new KeyEvent_on_MultiNote(getCanvas())); // 追加機能:右クリックでメニューをだす getCanvas().getCamera().addInputEventListener(new MouseEvent_onMN(this)); currentTitle = "MultiNote (Esc key to zoom whole strokes)"; // setTitle(currentTitle); setMousePenID(1); // 基準となる紙の輪郭線 for (int i = 1; i < 11; i++) { PPath stjk = shitajikiNodes[i] = PPath.createRectangle(0, 0, 700, 990); // stjk.setPaint(Color.getHSBColor((float) (i / 11.0f), 0.1f, 1.0f)); stjk.setPaint(null); stjk.setStrokePaint(Color.getHSBColor((float) (i / 11.0f), 0.2f, 1.0f)); stjk.setStroke(new BasicStroke(10)); // if (target.getAttribute("moveTarget")!=null){ // moveTarget = (PNode) target.getAttribute("moveTarget"); // } stjk.addAttribute("moveTarget", stjk); getCanvas().getLayer().addChild(stjk); } // getCanvas().getLayer().addChild(PPath.createRectangle(100, 100, 700, 990)); } public static void main(final String[] args) { new MultiNote(); } // 色付け public void iroduke() { Enumeration<String> ite = PenUser.penusers.keys(); while (ite.hasMoreElements()) { String penidStr = ite.nextElement(); String penid0x = penidStr.substring(3); int penid = Integer.parseInt(penid0x); // System.out.println(penid+" "+penid*penid); //pen06 Color c = Color.getHSBColor((float) (penid / 10.0f), 0.8f, 0.8f); ArrayList<ShortStroke> sss = PenUser.find(penidStr).strokes; for (ShortStroke s : sss) { s.setStrokePaint(c); System.out.println("ss.time " + s.time); if (s.getParent() instanceof PLayer) { shitajikiNodes[penid].addChild(s); // 親レイヤーから、下敷きに移動 } } } repaint(); } /** * 筆記数の確認サンプル:PenIDごとに、筆記数を表示する */ public void showStat() { // 検索対象をあつめる ArrayList<ShortStroke> ass = new ArrayList<ShortStroke>(); var ite = getCanvas().getLayer().getAllNodes().iterator(); while (ite.hasNext()) { var n = ite.next(); if (n instanceof ShortStroke) { ShortStroke ss = (ShortStroke) n; ass.add(ss); } } // (n -> Query q5 = new Query(); try { q5.parse("select * from cit.PureATN.ShortStroke group by penid"); } catch (QueryParseException e) { e.printStackTrace(); } QueryResults qr5 = null; try { qr5 = q5.execute(ass); Map grpBys = qr5.getGroupByResults(); Iterator iter = grpBys.keySet().iterator(); while (iter.hasNext()) { List key = (List) iter.next(); List res = (List) grpBys.get(key); System.out.println(key.toString() + " " + res.size()); } // for (ShortStroke ss : (List<ShortStroke>) qr5.getResults()) { // System.out.println(ss.penid); // } } catch (QueryExecutionException e) { e.printStackTrace(); } } public void vlayout() { PTransformActivity ta = null; for (int i = 1; i < 6; i++) { shitajikiNodes[i].animateToPositionScaleRotation((i - 1) * 700, 0, 1, 0, 1000); } for (int i = 6; i < 11; i++) { ta = shitajikiNodes[i].animateToPositionScaleRotation((i - 6) * 700, 1000, 1, 0, 1000); } PTransformActivity ta2 = getCanvas().getCamera().animateViewToCenterBounds( // getCanvas().getLayer().getFullBounds(), new PBounds(0, 0, 700*5, 990*2), true, 1000); ta2.startAfter(ta); } public void vfold() { PTransformActivity ta = null; for (int i = 1; i < 11; i++) { ta = shitajikiNodes[i].animateToPositionScaleRotation(0, 0, 1, 0, 1000); } PTransformActivity ta2 = getCanvas().getCamera().animateViewToCenterBounds( //getCanvas().getLayer().getFullBounds(), new PBounds(0, 0, 700, 990), true, 1000); ta2.startAfter(ta); } }