1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package tsukuba_bunko.peko.scenario.stage;
20
21 import org.xml.sax.Attributes;
22 import org.xml.sax.SAXException;
23
24 import tsukuba_bunko.peko.scenario.HandlerRegistry;
25 import tsukuba_bunko.peko.scenario.PSMLUtil;
26
27
28 /***
29 * <samp>at-once</samp> 要素を処理する ElementHandler です。
30 * @author $Author: ppoi $
31 * @version $Revision: 1.2 $
32 */
33 public class AtOnceHandler extends StageElementHandler {
34
35 /***
36 * 現在使用中の StageElementHandler
37 */
38 private StageElementHandler _child = null;
39
40 /***
41 * level
42 */
43 private int _level = 0;
44
45 /***
46 * 更新に使用するエフェクト
47 */
48 private String _effect = null;
49
50 /***
51 * スライド操作を含むかどうか
52 */
53 private boolean _containsSlideOperation = false;
54
55
56 /***
57 * <code>AtOnceHandler</code> のインスタンスを作成します。
58 */
59 public AtOnceHandler()
60 {
61 super();
62 }
63
64
65
66
67
68 public void startDocument()
69 {
70 _child = null;
71 _level = 0;
72 _containsSlideOperation = false;
73 super.startDocument();
74 }
75
76 public void endDocument()
77 {
78 StageCoordinator coordinator = getStageCoordinator();
79 if( _effect == null ) {
80 coordinator.updateStage();
81 }
82 else {
83 if( !coordinator.isSlideVisible() || _containsSlideOperation ) {
84 coordinator.updateStage( _effect );
85 }
86 }
87 super.endDocument();
88 }
89
90 public void startElement( String namespaceURI, String localName, String qName, Attributes attrs )
91 throws SAXException
92 {
93 if( _child != null ) {
94 _level++;
95 _child.startElement( namespaceURI, localName, qName, attrs );
96 }
97 else if( localName.equals("at-once") ) {
98 _effect = PSMLUtil.getAttributeValue( attrs, "effect" );
99 }
100 else {
101 HandlerRegistry registry = getSceneContext().getSceneProcessor().getHandlerRegistry();
102 _child = (StageElementHandler)registry.getElementHandler( namespaceURI, localName );
103 if( _child instanceof SlideHandler ) {
104 _containsSlideOperation = true;
105 }
106 if( _child != null ) {
107 _child.setParentHandler( this );
108 _child.setSceneContext( getSceneContext() );
109 _child.startDocument();
110 _level++;
111 _child.startElement( namespaceURI, localName, qName, attrs );
112 }
113 }
114 }
115
116 public void endElement( String namespaceURI, String localName, String qName )
117 throws SAXException
118 {
119 if( _child != null ) {
120 _level--;
121 _child.endElement( namespaceURI, localName, qName );
122 if( _level == 0 ) {
123 _child.endDocument();
124 _child.setParentHandler( null );
125 _child.setSceneContext( null );
126 _child = null;
127 }
128 }
129 }
130 }