diff --git a/src/main/java/cit/PureATN/KeyEvent_on_Note.java b/src/main/java/cit/PureATN/KeyEvent_on_Note.java index 00bd02b..0c94b37 100644 --- a/src/main/java/cit/PureATN/KeyEvent_on_Note.java +++ b/src/main/java/cit/PureATN/KeyEvent_on_Note.java @@ -4,8 +4,6 @@ import org.piccolo2d.PCanvas; import org.piccolo2d.activities.PTransformActivity; -import org.piccolo2d.util.PBounds; - import java.awt.event.KeyEvent; public class KeyEvent_on_Note implements KeyListener { @@ -24,87 +22,32 @@ } public void keyPressed(KeyEvent e) { - // System.out.println("keyCode=" + e.getKeyCode() + " keyChar [" + e.getKeyChar() + "]"); + // System.out.println("keyCode=" + e.getKeyCode() + " keyChar [" + + // e.getKeyChar() + "]"); if (e.getKeyCode() == 27) {// ESC PTransformActivity ta = canvas.getCamera().animateViewToCenterBounds(canvas.getLayer().getFullBounds(), true, 1000); - // ta.setStartTime(0); } - if (KeyEvent.VK_1 <= e.getKeyCode() && e.getKeyCode() <= KeyEvent.VK_9 ) { //TODO: 本当は10番まであるが,1..9でがまん - System.out.println("VK_"+(e.getKeyCode()- KeyEvent.VK_0)); - Note.theapp.setMousePenID(e.getKeyCode()- KeyEvent.VK_0); + if (KeyEvent.VK_1 <= e.getKeyCode() && e.getKeyCode() <= KeyEvent.VK_9) { // TODO: 本当は10番まであるが,1..9でがまん + System.out.println("VK_" + (e.getKeyCode() - KeyEvent.VK_0)); + Note.theapp.setMousePenID(e.getKeyCode() - KeyEvent.VK_0); } - if (e.getKeyCode() == KeyEvent.VK_ENTER || e.getKeyCode() == KeyEvent.VK_F || e.getKeyCode() == KeyEvent.VK_R - || e.getKeyCode() == KeyEvent.VK_M) { - // if (zrh.selection != null){ - // if (zrh.pressN != null && zrh.pressN instanceof Sheet){ - // Sheet s = (Sheet)zrh.pressN; - // s.collect(zrh.selection, e.getKeyCode()); - // } - // if (zrh.pressN != null && zrh.pressN instanceof SSGroup){ //SSGRoup - // だったら,シートに変換 - // SSGroup ssg = (SSGroup)zrh.pressN; - // ssg.sheet.collect(zrh.selection, e.getKeyCode()); - // } - // } - // zrh.dismissRegionLater(); + if (e.getKeyCode() == KeyEvent.VK_ENTER) { } - if (e.getKeyCode() == KeyEvent.VK_Z) { - // System.out.println("SimpleATN zoomLevel = "+getZoomLevel()); + if (e.getKeyCode() == KeyEvent.VK_L) { + byte[] ba = PenUser.loadFromFile(null); + PenUser.byteSerializeImport(ba); } - if (e.getKeyCode() == KeyEvent.VK_A || e.getKeyCode() == KeyEvent.VK_0) { - // // addNote(); - // for(int i=0;i<7;i++){ - // sheetVisibleMode[i]=2; - // } - // sheetVisibleToolbuttons.updateStatus(); - // setSheetVisible(-1, 2); + if (e.getKeyCode() == KeyEvent.VK_S) { + byte[] ba = PenUser.byteSerializeExport(); + PenUser.saveToFile(null, ba); + } + if (e.getKeyCode() == KeyEvent.VK_Q) { + System.exit(0); } if (e.getKeyCode() == KeyEvent.VK_F11) { // menutoolbar.getButton("Full Screen").doClick(); } - - // 範囲選択中なら... - // if (zrh.isDragging() && zrh.selection != null){ - // if (KeyEvent.VK_1 <= e.getKeyCode() && e.getKeyCode() <= KeyEvent.VK_5){ - // //領域フィルタに追加 - // if (zrh.pressN != null && zrh.pressN instanceof Sheet){ - // Sheet s = (Sheet)zrh.pressN; - // ConfigWindow.configWin.filter.addRegionFilter(s, zrh.selection, - // e.getKeyCode()); - // } - // if (zrh.pressN != null && zrh.pressN instanceof SSGroup){ //SSGRoup - // だったら,シートに変換 - // SSGroup ssg = (SSGroup)zrh.pressN; - // // ssg.sheet.collect(zrh.selection, e.getKeyCode()); - // ConfigWindow.configWin.filter.addRegionFilter(ssg.sheet, zrh.selection, - // e.getKeyCode()); - // } - // zrh.dismissRegionLater(); - // } - // } else { - // if (KeyEvent.VK_1 <= e.getKeyCode() && e.getKeyCode() <= KeyEvent.VK_6){ - // } - // } - // PBounds pb = getCanvas().getCamera().getViewBounds(); - // int keyCode = e.getKeyCode(); - // if (keyCode == 38) {// 上 - // pb.moveBy(0, -pb.getHeight()); - // zoomToBounds(pb,1000,"KeyPan"); - // } - // if (keyCode == 37) {// 左 - // pb.moveBy(-pb.getWidth(),0); - // zoomToBounds(pb,1000,"KeyPan"); - // } - // if (keyCode == 39) {// 右 - // pb.moveBy(pb.getWidth(),0); - // zoomToBounds(pb,1000,"KeyPan"); - // } - // if (keyCode == 40) {// 下 - // pb.moveBy(0,pb.getHeight()); - // zoomToBounds(pb,1000,"KeyPan"); - // } - // } } } diff --git a/src/main/java/cit/PureATN/MultiNote/KeyEvent_on_MultiNote.java b/src/main/java/cit/PureATN/MultiNote/KeyEvent_on_MultiNote.java index 77c5869..bcddde5 100644 --- a/src/main/java/cit/PureATN/MultiNote/KeyEvent_on_MultiNote.java +++ b/src/main/java/cit/PureATN/MultiNote/KeyEvent_on_MultiNote.java @@ -39,6 +39,11 @@ // } // zrh.dismissRegionLater(); } + if (e.getKeyCode() == KeyEvent.VK_C) { //色付け + MultiNote mn = (MultiNote)Note.theapp; + mn.iroduke(); + } + if (e.getKeyCode() == KeyEvent.VK_Z) { // System.out.println("SimpleATN zoomLevel = "+getZoomLevel()); } diff --git a/src/main/java/cit/PureATN/PenUser.java b/src/main/java/cit/PureATN/PenUser.java index 4e740e6..bcc64de 100644 --- a/src/main/java/cit/PureATN/PenUser.java +++ b/src/main/java/cit/PureATN/PenUser.java @@ -2,15 +2,30 @@ import java.awt.Color; import java.awt.Graphics; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.EOFException; +import java.io.IOException; +import java.io.InputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.OutputStream; +import java.io.Serializable; +import java.net.SocketPermission; import java.util.ArrayList; +import java.util.Collection; import java.util.Date; import java.util.HashMap; import java.util.Hashtable; import java.util.Map; +import java.util.zip.GZIPInputStream; +import java.util.zip.GZIPOutputStream; import org.piccolo2d.PNode; +import org.piccolo2d.util.PObjectOutputStream; -public class PenUser { +public class PenUser implements Serializable { + private static final long serialVersionUID = 9212314123123L; public static Hashtable penusers = new Hashtable(); public enum GraphicsMode { @@ -59,9 +74,88 @@ } } + public static void saveToFile(String fn, byte[] ba) { + if (fn == null) + fn = "output.patn"; + FileReadWriter.writeBytesToFile(fn, ba); + } + + public static byte[] loadFromFile(String fn) { + if (fn == null) + fn = "output.patn"; + byte[] ba = FileReadWriter.readBytesFromFile(fn); + // byteSerializeImport(ba); + return ba; + } + + public static byte[] byteSerializeExport() { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + OutputStream gzipos = null; + PObjectOutputStream pobjos = null; // PNodeを保存するときはPObjectOutputStream + + try { + gzipos = new GZIPOutputStream(baos); + pobjos = new PObjectOutputStream(gzipos); + // pobjos.writeObjectTree(penusers); + + pobjos.writeInt(penusers.size()); + Collection ite = PenUser.penusers.values(); + for (PenUser pu : ite) { + pobjos.writeObjectTree(pu); + } + // pobjos.writeObject(penusers); + pobjos.close(); + gzipos.close(); + } catch (IOException iex) { + iex.printStackTrace(System.out); + } + System.out.println("save size: " + baos.size() + " bytes."); + return baos.toByteArray(); + } + + public static void byteSerializeImport(byte[] ba) { + ByteArrayInputStream bais = new ByteArrayInputStream(ba); + InputStream gzipis = null; + ObjectInputStream ois = null; + PNode pn = null; + try { + gzipis = new GZIPInputStream(bais); + ois = new ObjectInputStream(gzipis); + + int numofpenuser = ois.readInt(); + for (int i = 0; i < numofpenuser; i++) { + PenUser tmp = (PenUser) ois.readObject(); + tmp.restore(); + } + ois.close(); + gzipis.close(); + bais.close(); + } catch (EOFException eofex) { + eofex.printStackTrace(); + } catch (IOException excep) { + excep.printStackTrace(System.err); + } catch (ClassNotFoundException excnf) { + System.err.println("ClassNotFound Error"); + } finally { + } + } + + private void restore() { + System.out.println("restore penid " + penid); + System.out.println("count " + strokes.size()); + penusers.put(penid, this); + PNode layer = Note.theapp.getCanvas().getLayer(); + for (ShortStroke squiggle : strokes) { + squiggle.rebuildStroke(); + layer.addChild(squiggle); + } + Note.theapp.repaint(); + + } + // オブジェクトごとのフィールド String penid; - transient ArrayList stockstrks; // Java AWT/Swing Graphics用 + ArrayList stockstrks; // Java AWT/Swing Graphics用 public ArrayList strokes; // Piccolo2D用 Stroke lastStroke = null; ShortStroke squiggle = null; // for Note View @@ -116,6 +210,7 @@ lastStroke = null; } } else { + squiggle.applyTempPtsToAry(); squiggle = null; } }