View Javadoc

1   // Copyright 2001, FreeHEP.
2   package org.freehep.graphicsio.swf;
3   
4   import java.io.IOException;
5   import java.util.Vector;
6   
7   /**
8    * DefineButton2 TAG.
9    * 
10   * @author Mark Donszelmann
11   * @author Charles Loomis
12   * @version $Id: DefineButton2.java 8584 2006-08-10 23:06:37Z duns $
13   */
14  public class DefineButton2 extends DefinitionTag {
15  
16      private int character;
17  
18      private boolean trackAsMenu;
19  
20      private Vector buttons;
21  
22      private Vector conditions;
23  
24      public DefineButton2(int id, boolean trackAsMenu, Vector buttons,
25              Vector conditions) {
26          this();
27          character = id;
28          this.trackAsMenu = trackAsMenu;
29          this.buttons = buttons;
30          this.conditions = conditions;
31      }
32  
33      public DefineButton2() {
34          super(34, 3);
35      }
36  
37      public SWFTag read(int tagID, SWFInputStream swf, int len)
38              throws IOException {
39  
40          System.out.println(len);
41  
42          DefineButton2 tag = new DefineButton2();
43          tag.character = swf.readUnsignedShort();
44          swf.getDictionary().put(tag.character, tag);
45          /* int reserved = (int) */ swf.readUBits(7);
46          trackAsMenu = swf.readBitFlag();
47  
48          // ignored
49          int offset = swf.readUnsignedShort();
50  
51          tag.buttons = new Vector();
52          ButtonRecord record = new ButtonRecord(swf, true);
53          while (!record.isEndRecord()) {
54              tag.buttons.add(record);
55              record = new ButtonRecord(swf, true);
56          }
57  
58          tag.conditions = new Vector();
59          if (offset != 0) {
60              int actionOffset;
61              do {
62                  actionOffset = swf.readUnsignedShort();
63                  System.err.println("AO " + actionOffset);
64                  tag.conditions.add(new ButtonCondAction(swf));
65              } while (actionOffset != 0);
66          }
67          return tag;
68      }
69  
70      public void write(int tagID, SWFOutputStream swf) throws IOException {
71  
72          swf.writeUnsignedShort(character);
73          swf.writeUBits(0, 7);
74          swf.writeBitFlag(trackAsMenu);
75  
76          swf.pushBuffer();
77          for (int i = 0; i < buttons.size(); i++) {
78              ButtonRecord b = (ButtonRecord) buttons.get(i);
79              b.write(swf);
80          }
81          swf.writeUnsignedByte(0);
82          int offset = swf.popBuffer();
83          swf.writeUnsignedShort(offset);
84          swf.append();
85  
86          for (int i = 0; i < conditions.size(); i++) {
87              swf.pushBuffer();
88              ButtonCondAction c = (ButtonCondAction) conditions.get(i);
89              c.write(swf);
90              int actionOffset = swf.popBuffer();
91              swf.writeUnsignedShort((i == conditions.size() - 1) ? 0
92                      : actionOffset);
93              swf.append();
94          }
95      }
96  
97      public String toString() {
98          StringBuffer s = new StringBuffer();
99          s.append(super.toString() + "\n");
100         s.append("  character: " + character + "\n");
101         s.append("  menu:     " + trackAsMenu + "\n");
102         for (int i = 0; i < buttons.size(); i++) {
103             s.append("  " + buttons.get(i) + "\n");
104         }
105         for (int i = 0; i < conditions.size(); i++) {
106             s.append("  " + conditions.get(i) + "\n");
107         }
108         return s.toString();
109     }
110 
111 }