File: Program.java

package info (click to toggle)
lg-issue29 1-1
  • links: PTS
  • area: main
  • in suites: slink
  • size: 1,992 kB
  • ctags: 387
  • sloc: java: 758; makefile: 31; sh: 3
file content (221 lines) | stat: -rw-r--r-- 10,828 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
package Jcd; // -- Listing-7 -- Program.java//   1
                                            //   2
import java.io.*;                           //   3
import java.util.*;                         //   4
import java.awt.*;                          //   5
import java.awt.event.*;                    //   6
                                            //   7
import Jcd.Drive;                           //   8
import Jcd.Monitor;                         //   9
                                            //  10
class Program                               //  11
  extends Form implements Observer {       
                                            //  12
  private abstract class DoAction           //  13
    implements ActionListener {         
    public void actionPerformed(            //  14
      ActionEvent event) {   
      this.invoke();                        //  15
    }                                       //  16
    abstract void invoke();                 //  17
  }                                         //  18
                                            //  19
  private static final int INITIAL_BUTTONS = 20;
  private static final int LISTING_SIZE =26;//  21
  private static final int GRID_SIZE =8;    //  22
                                            //  23
  private static final int ADD_MODE = 0;    //  24
  private static final int DEL_MODE = 1;    //  25
  private static final int PLAY_MODE  = 2;  //  26
  private static final String EDIT_LABELS[] = 
    { "Add ", "Del ", "Play" };             //  27 
                                            //  28
  private SmartDrive cdPlayer;              //  29
                                            //  30
  private TextField programListing =        //  31 
    new TextField(Program.LISTING_SIZE);
                                            //  32
  private Panel trackPanel  = new Panel();  //  33
  private Panel buttonPanel = new Panel();  //  34
                                            //  35
  private Button editButton;                //  36
                                            //  37
  private int mode = ADD_MODE;              //  38
                                            //  39
  public Program(SmartDrive drive)          //  40
  {                                         //  41
    super("Jcd Program");                   //  42
                                            //  43
    int n;                                  //  44
                                            //  45
    cdPlayer = drive;                       //  46
                                            //  47
    programListing.setEditable(false);      //  48
                                            //  49
    addCenter(programListing);              //  50
    addCenter(trackPanel);                  //  51
                                            //  52
    editButton = new Button("Add ");        //  53
    addButton(buttonPanel,                  //  54
              editButton,                   //  55
              new DoAction() {              //  56
                void invoke() {
                 setEditMode(); 
                } 
              });
    addButton(buttonPanel,                  //  57
              new Button("Shuffle"),        //  58
              new DoAction() { void invoke() 
                    {shuffleProgram();} });
    addButton(buttonPanel,                  //  60
              new Button("Reset"),          //  61
              new DoAction() {              //  62
              void invoke() {resetProgram();}});
    addButton(buttonPanel,                  //  63
              new Button("Clear"),          //  64
              new DoAction() { void invoke() 
                    { clearProgram(); } }); //  65
    addButton(buttonPanel,                  //  66
              new Button("Dismiss"),        //  67
              new DoAction() { void invoke()
                    { dismiss(); } });      //  68
                                            //  69
    addCenter(buttonPanel);                 //  70
                                            //  71
    addWindowListener(                      //  72
      // Use anonymous class - save defining 
      // another class
      new WindowAdapter() {                 //  73
        public void windowClosing(WindowEvent e) {
          dismiss();                        //  75
        }                                   //  76
      }                                     //  77
    );                                      //  78
                                            //  79
    n = cdPlayer.monitor.numberOfTracks;    //  80
    updateTrackPanel(n > 0 ? 
      n : Program.INITIAL_BUTTONS);         //  81
                                            //  82
    cdPlayer.monitor.addObserver(this);     //  83
                                            //  84
    pack();                                 //  85
    show();                                 //  86
  }                                         //  87
                                            //  88
  public void update(Observable o, Object arg)
  {                                         //  90
    if (cdPlayer.monitor.cdChanged) {       //  91
      updateTrackPanel(
       cdPlayer.monitor.numberOfTracks);    //  92
    }                                       //  93
  }                                         //  94
                                            //  95
  void addButton(Panel panel, Button button,//  96
                 DoAction action)        
  {                                         //  97
    panel.add(button);                      //  98
    button.addActionListener(action);       //  99
  }                                         // 100
                                            // 101
  void clearProgram() {                     // 102
    cdPlayer.tracksToPlay.clear();          // 103
    displayProgram();                       // 104
  }                                         // 105
                                            // 106
  void dismiss()                            // 107
  {                                         // 108
    setVisible(false);                      // 109
    dispose();                              // 110
  }                                         // 111
                                            // 112
  void displayProgram()                     // 113
  {                                         // 114
    String str =                            // 115
      cdPlayer.monitor.cdChanged ?
        "[]" : cdPlayer.tracksToPlay.toString();
    programListing.setText(str.substring(1, 
                           str.length() - 1));  
  }                                         // 118
                                            // 119
  void pickTrack(int tracknum) {            // 120
    switch (mode) {                         // 121
    case ADD_MODE:                          // 122
      cdPlayer.tracksToPlay.addTrack(tracknum);
      break;                                // 124
    case DEL_MODE:                          // 125
      cdPlayer.tracksToPlay.removeTrack(tracknum);
      break;                                // 127
    case PLAY_MODE:                         // 128
      cdPlayer.tracksToPlay.skipTo(tracknum);
      try {                                 // 130
        cdPlayer.play(tracknum);            // 131
      }                                     // 132
      catch (DriveException except) {       // 133
        System.out.println("Exception " + except);
      }                                     // 135
      break;                                // 136
    }                                       // 137
    displayProgram();                       // 138
  }                                         // 139
                                            // 140
  void resetProgram() {                     // 141
    cdPlayer.tracksToPlay.reset();          // 142
    displayProgram();                       // 143
  }                                         // 144
                                            // 145
  void setEditMode() {                      // 146
    mode++;                                 // 147
    if (mode > PLAY_MODE) mode = ADD_MODE;  // 148
    editButton.setLabel(EDIT_LABELS[mode]); // 149
  }                                         // 150
                                            // 151
  void shuffleProgram()                     // 152
  {                                         // 153
    int n = cdPlayer.monitor.numberOfTracks;// 154
    Vector choices = new Vector(n);         // 155
    Random random = new Random();           // 156
                                            // 157
    cdPlayer.tracksToPlay.clear();          // 158
    // Make a list of all choices.
    for (int i=1; i <= n; i++)              // 159
      choices.addElement(new Integer(i));   // 160
                                            // 161
    // Remove at random until none are left.
    for (int i=1; i <= n; i++) {            // 162
      int which = (int) (random.nextFloat() *
                         choices.size());   // 163
      int track = ((Integer)
        choices.elementAt(which)).intValue(); 
      cdPlayer.tracksToPlay.addTrack(track);// 165
      choices.removeElementAt(which);       // 166
    }                                       // 167
    displayProgram();                       // 168
  }                                         // 169
                                            // 170
  private void updateTrackPanel(int n)      // 171
  {                                         // 172
    int prev_n = trackPanel.getComponentCount();  
    if (n != prev_n) {                      // 174
      Component button[] = 
        trackPanel.getComponents();         // 175
      trackPanel.setLayout(                 // 177
        new GridLayout(n / Program.GRID_SIZE + 1, 
                       Program.GRID_SIZE)); 
      for (int i = n; i < prev_n; i++)      // 178
        trackPanel.remove(button[i]);       // 179
      for (int i = prev_n; i < n; i++) {    // 180
        class TrackAction extends DoAction {// 181
          int track;                        // 182
          public TrackAction(int i) {track=i;} 
          void invoke() {pickTrack(track);} // 184
        }                                   // 185
        addButton(                          // 186
          trackPanel,
          new Button(Integer.toString(i+1)),
          new TrackAction(i + 1));
      }                                     // 189
    }                                       // 190
    displayProgram();                       // 191
    pack();                                 // 192
  }                                         // 193
}                                           // 194