001/*
002 * SVG Salamander
003 * Copyright (c) 2004, Mark McKay
004 * All rights reserved.
005 *
006 * Redistribution and use in source and binary forms, with or 
007 * without modification, are permitted provided that the following
008 * conditions are met:
009 *
010 *   - Redistributions of source code must retain the above 
011 *     copyright notice, this list of conditions and the following
012 *     disclaimer.
013 *   - Redistributions in binary form must reproduce the above
014 *     copyright notice, this list of conditions and the following
015 *     disclaimer in the documentation and/or other materials 
016 *     provided with the distribution.
017 *
018 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
019 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
020 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
021 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
022 * COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
023 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
024 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
025 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
026 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
027 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
028 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
029 * OF THE POSSIBILITY OF SUCH DAMAGE. 
030 * 
031 * Mark McKay can be contacted at mark@kitfox.com.  Salamander and other
032 * projects can be found at http://www.kitfox.com
033 *
034 * Created on August 15, 2004, 3:33 AM
035 */
036
037package com.kitfox.svg.animation;
038
039import java.util.Collections;
040import java.util.List;
041import java.util.regex.Pattern;
042
043
044/**
045 * This represents a summation of other time elements.  It is used for complex
046 * timing events with offsets.
047 *
048 * @author Mark McKay
049 * @author <a href="mailto:mark@kitfox.com">Mark McKay</a>
050 */
051public class TimeCompound extends TimeBase
052{
053    static final Pattern patPlus = Pattern.compile("\\+");
054    
055    /**
056     * This is a list of times.  This element's time is calculated as the greatest
057     * member that is less than the current time.
058    */
059    final List<TimeBase> componentTimes;
060
061    private AnimationElement parent;
062    
063    /** Creates a new instance of TimeDiscrete */
064    public TimeCompound(List<TimeBase> timeBases)
065    {
066        componentTimes = Collections.unmodifiableList(timeBases);
067    }
068    
069    @Override
070    public double evalTime()
071    {
072        double agg = 0.0;
073        
074        for (TimeBase timeEle : componentTimes) {
075            double time = timeEle.evalTime();
076            agg += time;
077        }
078        
079        return agg;
080    }
081    
082    @Override
083    public void setParentElement(AnimationElement ele)
084    {
085        this.parent = ele;
086        
087        for (TimeBase timeEle : componentTimes) {
088            timeEle.setParentElement(ele);
089        }
090    }
091}