Source code: com/arranger/jarl/filter/BaseSegmentFilter.java
1 package com.arranger.jarl.filter;
2
3 import com.arranger.jarl.base.IContext;
4 import com.arranger.jarl.base.Time;
5 import com.arranger.jarl.util.IWidgetConfigSegmentFactory;
6 import com.arranger.jarl.util.InterpolateUtil;
7 import com.arranger.jarl.util.WidgetConfigSegment;
8 import com.arranger.jarl.util.WidgetUtil;
9
10 import java.util.Collection;
11
12
13 /**
14 * BaseSegmentFilter created on Mar 21, 2003
15 */
16 public abstract class BaseSegmentFilter extends BaseFilter implements IWidgetConfigSegmentFactory {
17
18 protected java.util.List m_configSegments;
19
20 /**
21 * @return a collection of {@link WidgetConfigSegment}
22 */
23 public Collection getConfigSegments() {
24 return m_configSegments;
25 }
26
27 /**
28 * Always remember some attrs might not be there
29 * @param context
30 */
31 protected void initAttributes(IContext context) {
32 super.initAttributes(context);
33
34 //look for segments
35 java.util.List seg = WidgetUtil.initWidgetConfigSegments(m_configElement, this);
36 if (seg != null) {
37 m_configSegments = seg;
38 }
39 }
40
41 /**
42 * Get the 'active' widget config segment
43 * @param context
44 * @return the 'active' widget config segment
45 */
46 protected WidgetConfigSegment getCurrentSegment(IContext context) {
47 //get how far along we are into this widget
48 double currentTimePct = InterpolateUtil.interpolate(this, context.getTime());
49
50 //get the current motion segment
51 return WidgetUtil.getWidgetConfigSegment(m_configSegments, currentTimePct);
52 }
53
54 /**
55 * Get the pct of time relative to this segment
56 * @param widgetConfigSegment
57 * @return relative time into this segment
58 *
59 * @see #getCurrentSegment
60 */
61 protected double getCurrentSegmentTimePct(IContext context, WidgetConfigSegment widgetConfigSegment) {
62
63 //get relative time
64 Time relTime = WidgetUtil.getRelativeTime(this, context.getTime());
65
66 //get current time pct relative to this segment
67 //relTime - segStart
68 //-------------------
69 // segLength
70 double segStart = widgetConfigSegment.getStartTimePct() * getTotalTime().getFrame();
71 double segEnd = widgetConfigSegment.getEndTimePct() * getTotalTime().getFrame();
72 double segLength = segEnd - segStart;
73
74 return (relTime.getFrame() - segStart) / segLength;
75 }
76 }