// Copyright 2003, FreeHEP.
package org.freehep.graphicsio.swf;
import java.io.IOException;
import java.util.Vector;
/**
* SWF Clip Action Record
*
* @author Mark Donszelmann
* @author Charles Loomis
* @version $Id: ClipActionRecord.java 8584 2006-08-10 23:06:37Z duns $
*/
public class ClipActionRecord {
private ClipEventFlags eventFlags;
private long actionRecordSize;
private int keyCode;
private Vector actions;
/**
* Read a ClipActionRecord from the stream.
*/
public ClipActionRecord(SWFInputStream swf) throws IOException {
eventFlags = new ClipEventFlags(swf);
if (eventFlags.isEndFlag())
return;
actionRecordSize = swf.readUnsignedInt();
// FIXME is actually a long (unsigned int)
swf.pushBuffer((int) (actionRecordSize - 4));
if (eventFlags.isKeyPress())
keyCode = swf.readUnsignedByte();
while (swf.getLength() > 0) {
actions.add(swf.readAction());
}
byte[] rest = swf.popBuffer();
if (rest != null) {
System.err.println("Corrupted ClipActionRecord, " + rest.length
+ " bytes leftoever.");
}
}
public void write(SWFOutputStream swf) throws IOException {
eventFlags.write(swf);
// FIXME, should do PushBuffer and calculate this size...
swf.writeUnsignedInt(actionRecordSize);
if (eventFlags.isKeyPress())
swf.writeUnsignedByte(keyCode);
for (int i = 0; i < actions.size(); i++) {
SWFAction a = (SWFAction) actions.get(i);
swf.writeAction(a);
}
}
public boolean isEndRecord() {
return eventFlags.isEndFlag();
}
public String toString() {
return "ClipActionRecord " + actions.size();
}
}