Newer
Older
PureATN_M / src / main / java / cit / PureATN / MultiNote / MultiNote.java
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.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);
    }

    public 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();
        }

    }

    boolean expandMode = false; //初期状態は「たたんでいる」

    public void vlayout() {
        setExpandMode(!expandMode);
    }
    public void setExpandMode(boolean b){
        expandMode = b;
        vlayout(expandMode);
    }
    public void vlayout(boolean doexpand) {
        PTransformActivity ta = null;
        if (doexpand) {
            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);
        } else {
            // たたむ
            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);

        }
    }
}