home *** CD-ROM | disk | FTP | other *** search
Java Source | 1998-01-24 | 10.6 KB | 222 lines |
- 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
-