/* * ActionBlockContext.java * @Author Oleg Gorobets * Created: 31.08.2007 * CVS-ID: $Id: *************************************************************************/ /** * */ package org.swfparser; import com.jswiff.swfrecords.ButtonCondAction; import com.jswiff.swfrecords.tags.DefineButton2; import com.jswiff.swfrecords.tags.DefineSprite; import com.jswiff.swfrecords.tags.DefinitionTag; import com.jswiff.swfrecords.tags.TagConstants; import com.uxebu.swfparser.dump.actions.ButtonCondActionFlagMapper; import com.uxebu.swfparser.dump.actions.ButtonCondActionFlag; import com.uxebu.swfparser.dump.output.Writer; public class ActionBlockContext extends TagContext { public static final int NO_ACTION_BLOCK_NUM = -1; /** * Parent context for composite tags (e.g. DEFINE_SPRITE) */ private ActionBlockContext parentContext; /** * Action block number inside tag (for DEFINE_BUTTON_2, PLACE_OBJECT_2, PLACE_OBJECT_3) */ private int actionBlockNum = NO_ACTION_BLOCK_NUM; private Writer writer; public ActionBlockContext(Writer writer1) { this.writer = writer1; } public ActionBlockContext getParentContext() { return parentContext; } public void setParentContext(ActionBlockContext parentContext) { this.parentContext = parentContext; } public int getActionBlockNum() { return actionBlockNum; } public void setActionBlockNum(int actionBlockNum) { this.actionBlockNum = actionBlockNum; } public String getDumpString() { return getDumpString(this); } private String getDumpString(ActionBlockContext ctx) { StringBuffer buf = new StringBuffer(); buf.append("var tag = '") .append(TagConstants.getTagName(ctx.getTag().getCode())) .append("';\n"); if (ctx.getTag() instanceof DefinitionTag) { buf.append("var characterId = ") .append(((DefinitionTag) ctx.getTag()).getCharacterId()) .append(";\n"); } if (ctx.getTag() instanceof DefineButton2 && actionBlockNum >= 0) { DefineButton2 defineButton2 = (DefineButton2) ctx.getTag(); ButtonCondAction buttonCondAction = defineButton2.getActions()[actionBlockNum]; printActivatedFlag(buttonCondAction, buf); } if (ctx.getParentContext() != null) { if (ctx.getParentContext().getTag() instanceof DefineSprite) { int characterId = ((DefineSprite) ctx.getParentContext().getTag()).getCharacterId(); buf.append("var characterId = ") .append(characterId) .append(";\n"); buf.append("var frameNumber = ") .append(ctx.getFrameNum()) .append(";\n"); } } return buf.toString(); } private void printActivatedFlag(ButtonCondAction buttonAction, StringBuffer buf) { ButtonCondActionFlagMapper mapper = new ButtonCondActionFlagMapper(buttonAction); for (ButtonCondActionFlag buttonCondActionFlag : mapper.map()) { buf.append(" var action = '").append(buttonCondActionFlag).append("';\n"); } } }