001: /*
002: * $Id: InsertMovieFileCommand.java,v 1.3 2002/07/22 23:16:04 skavish Exp $
003: *
004: * ===========================================================================
005: *
006: * The JGenerator Software License, Version 1.0
007: *
008: * Copyright (c) 2000 Dmitry Skavish (skavish@usa.net). All rights reserved.
009: *
010: * Redistribution and use in source and binary forms, with or without
011: * modification, are permitted provided that the following conditions are met:
012: *
013: * 1. Redistributions of source code must retain the above copyright
014: * notice, this list of conditions and the following disclaimer.
015: *
016: * 2. Redistributions in binary form must reproduce the above copyright
017: * notice, this list of conditions and the following disclaimer in
018: * the documentation and/or other materials provided with the
019: * distribution.
020: *
021: * 3. The end-user documentation included with the redistribution, if
022: * any, must include the following acknowlegement:
023: * "This product includes software developed by Dmitry Skavish
024: * (skavish@usa.net, http://www.flashgap.com/)."
025: * Alternately, this acknowlegement may appear in the software itself,
026: * if and wherever such third-party acknowlegements normally appear.
027: *
028: * 4. The name "The JGenerator" must not be used to endorse or promote
029: * products derived from this software without prior written permission.
030: * For written permission, please contact skavish@usa.net.
031: *
032: * 5. Products derived from this software may not be called "The JGenerator"
033: * nor may "The JGenerator" appear in their names without prior written
034: * permission of Dmitry Skavish.
035: *
036: * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
037: * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
038: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
039: * DISCLAIMED. IN NO EVENT SHALL DMITRY SKAVISH OR THE OTHER
040: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
041: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
042: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
043: * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
044: * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
045: * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
046: * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
047: * SUCH DAMAGE.
048: *
049: */
050:
051: package org.openlaszlo.iv.flash.commands;
052:
053: import java.io.*;
054: import java.awt.geom.*;
055:
056: import org.openlaszlo.iv.flash.parser.*;
057: import org.openlaszlo.iv.flash.api.*;
058: import org.openlaszlo.iv.flash.util.*;
059: import org.openlaszlo.iv.flash.url.*;
060: import org.openlaszlo.iv.flash.context.Context;
061:
062: public class InsertMovieFileCommand extends GenericCommand {
063:
064: public InsertMovieFileCommand() {
065: }
066:
067: public void doCommand(FlashFile file, Context context,
068: Script parent, int frameNum) throws IVException {
069: String filename = getParameter(context, "filename", "");
070: boolean scale = getBoolParameter(context, "scale", false);
071: boolean expand = getBoolParameter(context, "expand", true);
072: boolean cache = getBoolParameter(context, "cache", false);
073: String instancename = getParameter(context, "instancename");
074:
075: Instance inst = getInstance();
076:
077: FlashFile flashFile = null;
078: try {
079: flashFile = (FlashFile) file.addExternalMedia(filename,
080: cache);
081: } catch (IOException e) {
082: throw new IVException(Resource.ERRCMDFILEREAD,
083: new Object[] { filename, getCommandName() }, e);
084: }
085:
086: Script script;
087: synchronized (flashFile) {
088: script = flashFile.getMainScript();
089: script.resetMain();
090: if (flashFile.isTemplate()) {
091: script.removeFileDepGlobalCommands();
092: script = script.copyScript();
093: }
094: }
095: if (flashFile.isTemplate())
096: file.processScript(script, context);
097:
098: inst.setScript(script);
099:
100: Rectangle2D r = flashFile.getFrameSize(); // script.getBounds();
101: double width = r.getWidth();
102: double height = r.getHeight();
103:
104: double scaleX, scaleY, translateX, translateY;
105: if (scale) {
106: scaleX = 2048.0 / width;
107: scaleY = 2048.0 / height;
108: } else {
109: scaleX = 1.0;
110: scaleY = 1.0;
111: }
112: translateX = -(scaleX * width) / 2;
113: translateY = -(scaleY * height) / 2;
114:
115: // M = S * T, where S: scale matrix, T: translation matrix (-w/2, -h/2)
116: inst.matrix.concatenate(new AffineTransform(scaleX, 0, 0,
117: scaleY, translateX, translateY));
118:
119: if (instancename != null) {
120: inst.name = instancename;
121: }
122:
123: // expand frames
124: if (expand) {
125: // create new frames if needed
126: int myTotal = script.getFrameCount();
127: parent.getFrameAt(frameNum + myTotal - 1);
128: }
129: }
130:
131: }
|