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
|
import flash.events.MouseEvent;
import com.example.programmingas3.playlist.PlayList;
import com.example.programmingas3.playlist.Song;
import com.example.programmingas3.playlist.SortProperty;
// constants for the different "states" of the song form
private static const ADD_SONG:uint = 1;
private static const SONG_DETAIL:uint = 2;
private var playList:PlayList = new PlayList.<T>();
private function initApp():void
{
// set the initial state of the song form, for adding a new song
setFormState(ADD_SONG);
// prepopulate the list with a few songs
playList.addSong(new Song("Nessun Dorma", "Luciano Pavarotti", 1990, "nessundorma.mp3", ["90's", "Opera"]));
playList.addSong(new Song("Come Undone", "Duran Duran", 1993, "comeundone.mp3", ["90's", "Pop"]));
playList.addSong(new Song("Think of Me", "Sarah Brightman", 1987, "thinkofme.mp3", ["Showtunes"]));
playList.addSong(new Song("Unbelievable", "EMF", 1991, "unbelievable.mp3", ["90's", "Pop"]));
songList.dataProvider = playList.songList;
}
private function sortList(sortField:SortProperty.<T>):void
{
// Make all the sort type buttons enabled.
// The active one will be grayed-out below
sortByTitle.selected = false;
sortByArtist.selected = false;
sortByYear.selected = false;
switch (sortField)
{
case SortProperty.TITLE:
sortByTitle.selected = true;
break;
case SortProperty.ARTIST:
sortByArtist.selected = true;
break;
case SortProperty.YEAR:
sortByYear.selected = true;
break;
}
playList.sortList(sortField);
refreshList();
}
private function refreshList():void
{
// remember which song was selected
var selectedSong:Song = Song(songList.selectedItem);
// re-assign the song list as the dataprovider to get the newly sorted list
// and force the List control to refresh itself
songList.dataProvider = playList.songList;
// reset the song selection
if (selectedSong != null)
{
songList.selectedItem = selectedSong;
}
}
private function songSelectionChange():void
{
if (songList.selectedIndex != -1)
{
setFormState(SONG_DETAIL);
}
else
{
setFormState(ADD_SONG);
}
}
private function addNewSong():void
{
// gather the values from the form and add the new song
var title:String = newSongTitle.text;
var artist:String = newSongArtist.text;
var year:uint = newSongYear.value;
var filename:String = newSongFilename.text;
var genres:Array = newSongGenres.selectedItems;
playList.addSong(new Song(title, artist, year, filename, genres));
refreshList();
// clear out the "add song" form fields
setFormState(ADD_SONG);
}
private function songListLabel(item:Object):String
{
return item.toString();
}
private function setFormState(state:uint):void
{
// set the form title and control state
switch (state)
{
case ADD_SONG:
formTitle.text = "Add New Song";
// show the submit button
submitSongData.visible = true;
showAddControlsBtn.visible = false;
// clear the form fields
newSongTitle.text = "";
newSongArtist.text = "";
newSongYear.value = (new Date()).fullYear;
newSongFilename.text = "";
newSongGenres.selectedIndex = -1;
// deselect the currently selected song (if any)
songList.selectedIndex = -1;
break;
case SONG_DETAIL:
formTitle.text = "Song Details";
// populate the form with the selected item's data
var selectedSong:Song = Song(songList.selectedItem);
newSongTitle.text = selectedSong.title;
newSongArtist.text = selectedSong.artist;
newSongYear.value = selectedSong.year;
newSongFilename.text = selectedSong.filename;
newSongGenres.selectedItems = selectedSong.genres;
// hide the submit button
submitSongData.visible = false;
showAddControlsBtn.visible = true;
break;
}
}
|