Mark McGranaghan 8d31ec147c move to vendor
2012-11-17 08:21:42 -08:00

144 lines
4.0 KiB
ActionScript

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