private static ArrayList<TimelineEntry> getSeqTimeline( ElementSequentialTimeContainer seq, double offset, double maxOffset) { ArrayList<TimelineEntry> timeline = new ArrayList<TimelineEntry>(); double orgOffset = offset; // Set my begin at first TimeList myBeginList = seq.getBegin(); /* * Begin list only contain 1 begin time which has been resolved. * @see com.irrenhaus.irresms.dom.smil.ElementSequentialTimeContainerImpl#getBegin() */ Time begin = myBeginList.item(0); double beginOffset = begin.getResolvedOffset() + offset; if (beginOffset > maxOffset) { // This element can't be started. return timeline; } TimelineEntry myBegin = new TimelineEntry(beginOffset, seq, TimelineEntry.ACTION_BEGIN); timeline.add(myBegin); TimeList myEndList = seq.getEnd(); /* * End list only contain 1 end time which has been resolved. * @see com.irrenhaus.irresms.dom.smil.ElementSequentialTimeContainerImpl#getEnd() */ Time end = myEndList.item(0); double endOffset = end.getResolvedOffset() + offset; if (endOffset > maxOffset) { endOffset = maxOffset; } TimelineEntry myEnd = new TimelineEntry(endOffset, seq, TimelineEntry.ACTION_END); maxOffset = endOffset; // Get children's timelines NodeList children = seq.getTimeChildren(); for (int i = 0; i < children.getLength(); ++i) { ElementTime child = (ElementTime) children.item(i); ArrayList<TimelineEntry> childTimeline = getTimeline(child, offset, maxOffset); timeline.addAll(childTimeline); // Since the child timeline has been sorted, the offset of the last one is the biggest. offset = childTimeline.get(childTimeline.size() - 1).getOffsetTime(); } // Add end-event to timeline for all active children NodeList activeChildrenAtEnd = seq.getActiveChildrenAt((float) (endOffset - orgOffset)); for (int i = 0; i < activeChildrenAtEnd.getLength(); ++i) { timeline.add( new TimelineEntry( endOffset, (ElementTime) activeChildrenAtEnd.item(i), TimelineEntry.ACTION_END)); } // Set my end at last timeline.add(myEnd); return timeline; }
public boolean beginElement() { return mSeqTimeContainer.beginElement(); }
public NodeList getTimeChildren() { return mSeqTimeContainer.getTimeChildren(); }
public NodeList getActiveChildrenAt(float instant) { return mSeqTimeContainer.getActiveChildrenAt(instant); }
public void setRestart(short restart) throws DOMException { mSeqTimeContainer.setRestart(restart); }
public short getRestart() { return mSeqTimeContainer.getRestart(); }
public float getRepeatCount() { return mSeqTimeContainer.getRepeatCount(); }
public TimeList getEnd() { return mSeqTimeContainer.getEnd(); }
public void setFill(short fill) throws DOMException { mSeqTimeContainer.setFill(fill); }
public void setEnd(TimeList end) throws DOMException { mSeqTimeContainer.setEnd(end); }
public void setDur(float dur) throws DOMException { mSeqTimeContainer.setDur(dur); }
public void setBegin(TimeList begin) throws DOMException { mSeqTimeContainer.setBegin(begin); }
public void seekElement(float seekTo) { mSeqTimeContainer.seekElement(seekTo); }
public void resumeElement() { mSeqTimeContainer.resumeElement(); }
public void pauseElement() { mSeqTimeContainer.pauseElement(); }
public boolean endElement() { return mSeqTimeContainer.endElement(); }
public TimeList getBegin() { return mSeqTimeContainer.getBegin(); }
public void setFillDefault(short fillDefault) throws DOMException { mSeqTimeContainer.setFillDefault(fillDefault); }
public short getFillDefault() { return mSeqTimeContainer.getFillDefault(); }
public void setRepeatCount(float repeatCount) throws DOMException { mSeqTimeContainer.setRepeatCount(repeatCount); }
public float getRepeatDur() { return mSeqTimeContainer.getRepeatDur(); }
public void setRepeatDur(float repeatDur) throws DOMException { mSeqTimeContainer.setRepeatDur(repeatDur); }