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;
}
}
|