home *** CD-ROM | disk | FTP | other *** search
Wrap
//<script> //**************************************************************** // ⌐2000 Microsoft Corporation. All rights reserved. //**************************************************************** var kSetupString = "Type a name for your new\rplaylist above.\r\rForm your playlist\rby including the attributes\ryou would like in\ryour query.\r\rThen press the\rbuild playlist button." var DJQuery = null; var LB_genre = null; var LB_artist = null; var LB_album = null; var LB_playlists = null; var ED_playlist = null; var ED_value = null; var CB_allow_playlists = null; var CB_allow_urls = null; var CB_allow_blank = null; var CB_bias = null; var CB_playcount = null; var CB_playlength = null; var g_nFocusTab = 0; var search_name_array = new Array( "Name", "Genre", "Artist", "Author", "Album", "MediaType", "MediaAttribute", "FileType", "Bitrate", "DigitallySecure", "SourceURL", "Copyright", "CreationDate" ); var g_nSearchIndex = 0; var g_fSearchChanged = false; var g_nLastCount = 0; var g_fReturnResults = false; //**************************************************************** function initDJ() { DJQuery = new query( query_progress, onCompleteQuery ); SearchQuery = new query( search_progress, onCompleteSearch ); LB_genre = new listbox( genre_lb_sv, genre_lb_text, genre_lb_clip_text, genre_lb_clip_sv, genre_lb_focus_button, genre_lb_scrollup_button, genre_lb_scrolldown_button, genre_lb_scroll_button, genre_lb_scrollbacking_button, onGenreSelectionChange ); LB_artist = new listbox( artist_lb_sv, artist_lb_text, artist_lb_clip_text, artist_lb_clip_sv, artist_lb_focus_button, artist_lb_scrollup_button, artist_lb_scrolldown_button, artist_lb_scroll_button, artist_lb_scrollbacking_button, onArtistSelectionChange ); LB_album = new listbox( album_lb_sv, album_lb_text, album_lb_clip_text, album_lb_clip_sv, album_lb_focus_button, album_lb_scrollup_button, album_lb_scrolldown_button, album_lb_scroll_button, album_lb_scrollbacking_button, onAlbumSelectionChange ); LB_playlists = new listbox( playlists_lb_sv, playlists_lb_text, playlists_lb_clip_text, playlists_lb_clip_sv, playlists_lb_focus_button, playlists_lb_scrollup_button, playlists_lb_scrolldown_button, playlists_lb_scroll_button, playlists_lb_scrollbacking_button, onPlaylistSelectionChange ); ED_playlist = new editbox( playlist_edit_sv, playlist_edit_text, playlist_ibar_text, playlist_focus_button, onPlaylistTextChange, null ); ED_value = new editbox( value_edit_sv, value_edit_text, value_ibar_text, value_focus_button, onSearchValueTextChange, onSearchExecute ); CB_allow_playlists = new checkbox( playlist_check, playlist_check_text, resynchOptions, false ); CB_allow_urls = new checkbox( url_check, url_check_text, resynchOptions, false ); CB_allow_blank = new checkbox( blank_check, blank_check_text, resynchOptions, false ); CB_bias = new checkbox( bias_check, bias_check_text, resynchOptions, false ); CB_playcount = new checkbox( playcount_check, playcount_check_text, resynchOptions, false ); CB_playlength = new checkbox( playlength_check, playlength_check_text, resynchOptions, false ); loadDJ(); } //**************************************************************** function loadDJ() { var acc_rights = theme.loadPreference( 'ACC' ); var fLoad = (acc_rights != '--'); reset_button.enabled = fLoad; build_button.enabled = fLoad; playLength_slider.enabled = fLoad; playlist_focus_button.enabled = fLoad; seek_slider.enabled = fLoad; bgToggle.enabled = fLoad; bgTransport.enabled = fLoad; mute_button.enabled = fLoad; volume_slider.enabled = fLoad; bgFull.enabled = fLoad; genre_include_button.enabled = fLoad; genre_exclude_button.enabled = fLoad; artist_include_button.enabled = fLoad; artist_exclude_button.enabled = fLoad; album_include_button.enabled = fLoad; album_exclude_button.enabled = fLoad; search_include_button.enabled = fLoad; search_exclude_button.enabled = fLoad; playlists_include_button.enabled= fLoad; playlists_exclude_button.enabled= fLoad; if (!fLoad) { enableTab(0, false); enableTab(1, false); enableTab(2, false); attributes_focus_button.enabled = false; playlists_focus_button.enabled = false; advanced_focus_button.enabled = false; intro_sv.visible = true; intro_txt_sv.backgroundImage = "AutoDj_splashwcopy.jpg"; intro_txt_sv.visible = true; } else { full_access = (acc_rights == 'W'); search_name_array.count = 13; LB_genre.setupLB( DJQuery.getGenreListQ(), DJQuery.getGenreCountQ() ); LB_artist.setupLB( DJQuery.getArtistListQ(), DJQuery.getArtistCountQ() ); LB_album.setupLB( DJQuery.getAlbumListQ(), DJQuery.getAlbumCountQ() ); LB_playlists.setupLB( DJQuery.getPlaylistListQ(), DJQuery.getPlaylistCountQ() ); instructions_text.visible = true; instructions_text.value = kSetupString; results_length_text.moveTo( results_length_text.left, 114, 0 ); transitionAway( 1, 0 ); transitionAway( 2, 0 ); onWidthChange(); onHeightChange(); loadState(); reset_text.foregroundcolor = '#E7651A'; fixupIncludeExclude( 0, DJQuery.search_include_array_txt, DJQuery.search_exclude_array_txt, "blue", search_include_button, search_exclude_button ); intro_sv.moveTo( -intro_sv.width, -intro_sv.height, 1000 ); } } //**************************************************************** // Generic Operations //**************************************************************** function doInformation() { theme.savePreference( 'ACC', '--' ); theme.currentViewID = 'DigitalDJ'; } function setAccess( nAccess ) { switch (nAccess) { case 0: // We need to view flip over to the other skin theme.savePreference( 'ACC', '--' ); theme.currentViewID = 'DigitalDJMid'; return; case 1: theme.savePreference( 'ACC', 'R' ); break; case 2: theme.savePreference( 'ACC', 'W' ); break; } loadDJ(); } //**************************************************************** function onIntroEndMove() { intro_sv.visible = false; intro_txt_sv.visible = false; } //**************************************************************** function makeQueryDirty() { build_text.foregroundcolor = 'black'; reset_text.foregroundcolor = 'black'; query_text.value = DJQuery.getQueryDescriptionQ(); } //**************************************************************** function loadState() { var pref; pref = theme.loadPreference( 'PID' ); if (pref != '--') { switchToTab( (new Number(pref)).valueOf(), 0 ); } CB_allow_playlists.setCheckedCB( theme.loadPreference( 'AllowP' ) == '1' ); CB_allow_urls.setCheckedCB( theme.loadPreference( 'AllowU' ) == '1' ); CB_allow_blank.setCheckedCB( theme.loadPreference( 'AllowB' ) == '1' ); CB_bias.setCheckedCB( theme.loadPreference( 'Favor' ) == '1' ); CB_playcount.setCheckedCB( theme.loadPreference( 'PlayCnt' ) == '1' ); CB_playlength.setCheckedCB( theme.loadPreference( 'PlayLen' ) == '1' ); pref = theme.loadPreference( 'PCComp' ); if (pref != '--') { DJQuery.playcount_filter_comparison = (new Number(pref)).valueOf(); } pref = theme.loadPreference( 'PCCount' ); if (pref != '--') { DJQuery.playcount_filter_count = (new Number(pref)).valueOf(); } pref = theme.loadPreference( 'PFComp' ); if (pref != '--') { DJQuery.playcount_favoring_comparison = (new Number(pref)).valueOf(); } pref = theme.loadPreference( 'PLComp' ); if (pref != '--') { DJQuery.playlength_filter_comparison = (new Number(pref)).valueOf(); } pref = theme.loadPreference( 'PLLen' ); if (pref != '--') { DJQuery.playlength_filter_length = (new Number(pref)).valueOf(); } resynchOptions(); pref = theme.loadPreference( 'SName' ); if (pref != '--') { g_nSearchIndex = (new Number(pref)).valueOf(); } pref = theme.loadPreference( 'SComp' ); if (pref != '--') { SearchQuery.generic_search_comparison = (new Number(pref)).valueOf(); } pref = theme.loadPreference( 'SVal' ); if (pref != '--') { ED_value.setTextED( pref ); } resynchSearchOptions(); pref = theme.loadPreference( 'PTime' ); if (pref != '--') { playLength_slider.value = pref; } onPlayLengthChange(); // Now synch up the genre / artist / album readStringCollection( 'G', DJQuery.genre_collection, false ); readStringCollection( 'A', DJQuery.artist_collection, false ); readStringCollection( 'B', DJQuery.album_collection, false ); readStringCollection( 'P', DJQuery.playlist_collection, true ); onGenreSelectionChange(); onArtistSelectionChange(); onAlbumSelectionChange(); onPlaylistSelectionChange(); makeQueryDirty(); } //**************************************************************** function saveState() { theme.savePreference( 'PID', g_nFocusTab ); theme.savePreference( 'AllowP', CB_allow_playlists.fChecked ? '1' : '0' ); theme.savePreference( 'AllowU', CB_allow_urls.fChecked ? '1' : '0' ); theme.savePreference( 'AllowB', CB_allow_blank.fChecked ? '1' : '0' ); theme.savePreference( 'Favor', CB_bias.fChecked ? '1' : '0' ); theme.savePreference( 'PlayCnt', CB_playcount.fChecked ? '1' : '0' ); theme.savePreference( 'PlayLen', CB_playlength.fChecked ? '1' : '0' ); theme.savePreference( 'PCComp', DJQuery.playcount_filter_comparison ); theme.savePreference( 'PCCount', DJQuery.playcount_filter_count ); theme.savePreference( 'PFComp', DJQuery.playcount_favoring_comparison ); theme.savePreference( 'PLComp', DJQuery.playlength_filter_comparison ); theme.savePreference( 'PLLen', DJQuery.playlength_filter_length ); theme.savePreference( 'SName', g_nSearchIndex ); theme.savePreference( 'SComp', SearchQuery.generic_search_comparison ); theme.savePreference( 'SVal', value_edit_text.value ); theme.savePreference( 'PTime', Math.round(playLength_slider.value) ); writeStringCollection( 'G', DJQuery.genre_collection, DJQuery.genre_include_array, DJQuery.genre_exclude_array, false ); writeStringCollection( 'A', DJQuery.artist_collection, DJQuery.artist_include_array, DJQuery.artist_exclude_array, false ); writeStringCollection( 'B', DJQuery.album_collection, DJQuery.album_include_array, DJQuery.album_exclude_array, false ); writeStringCollection( 'P', DJQuery.playlist_collection, DJQuery.playlist_include_array, DJQuery.playlist_exclude_array, true ); // loaded inline to prevent a "jumping" effect theme.savePreference( 'WD', view.width ); theme.savePreference( 'HT', view.height ); } //**************************************************************** function getPositionInStringCollection( value, collection, playlist ) { for (var nIndex = 0; nIndex < collection.count; nIndex++) { if (value == (playlist ? collection.item(nIndex).name : collection.item( nIndex ))) { return nIndex; } } return -1; } //**************************************************************** function writeStringCollection( keyname, collection, include_array, exclude_array, playlist ) { var nIndex = 0; while (nIndex < include_array.length) { theme.savePreference( keyname + 'I' + nIndex, playlist ? collection.item( include_array[nIndex] ).name : collection.item( include_array[nIndex] ) ); nIndex++; } theme.savePreference( keyname + 'I' + nIndex, '--' ); nIndex = 0; while (nIndex < exclude_array.length) { theme.savePreference( keyname + 'E' + nIndex, playlist ? collection.item( exclude_array[nIndex] ).name : collection.item( exclude_array[nIndex] ) ); nIndex++; } theme.savePreference( keyname + 'E' + nIndex, '--' ); } //**************************************************************** function readStringCollection( keyname, collection, playlist ) { var nIndex = 0; while (1) { pref = theme.loadPreference( keyname + 'I' + nIndex ); if (pref == '--') { break; } var nPos = getPositionInStringCollection( pref, collection, playlist ); if (nPos >= 0) { if (keyname == 'G') { DJQuery.addGenreIncludeQ( nPos ); } else if (keyname == 'A') { DJQuery.addArtistIncludeQ( nPos ); } else if (keyname == 'B') { DJQuery.addAlbumIncludeQ( nPos ); } else { DJQuery.addPlaylistIncludeQ( nPos ); } } nIndex++; } nIndex = 0; while (1) { pref = theme.loadPreference( keyname + 'E' + nIndex ); if (pref == '--') { break; } var nPos = getPositionInStringCollection( pref, collection, playlist ); if (nPos >= 0) { if (keyname == 'G') { DJQuery.addGenreExcludeQ( nPos ); } else if (keyname == 'A') { DJQuery.addArtistExcludeQ( nPos ); } else if (keyname == 'B') { DJQuery.addAlbumExcludeQ( nPos ); } else { DJQuery.addPlaylistExcludeQ( nPos ); } } nIndex++; } } //**************************************************************** // Operations affecting the Query Pane //**************************************************************** function resetQuery() { DJQuery = new query( query_progress, onCompleteQuery ); CB_allow_playlists.setCheckedCB( false ); CB_allow_urls.setCheckedCB( false ); CB_allow_blank.setCheckedCB( false ); CB_bias.setCheckedCB( false ); CB_playcount.setCheckedCB( false ); CB_playlength.setCheckedCB( false ); LB_genre.setupLB( DJQuery.getGenreListQ(), DJQuery.getGenreCountQ() ); LB_artist.setupLB( DJQuery.getArtistListQ(), DJQuery.getArtistCountQ() ); LB_album.setupLB( DJQuery.getAlbumListQ(), DJQuery.getAlbumCountQ() ); LB_playlists.setupLB( DJQuery.getPlaylistListQ(), DJQuery.getPlaylistCountQ() ); playLength_slider.value = 5; onPlayLengthChange(); resynchOptions(); resynchSearchOptions(); results_label_text.value = 'Instructions:'; instructions_text.visible = true; instructions_text.value = kSetupString; query_progress.visible = false; pl.visible = false; results_length_text.moveTo( results_length_text.left, 114, 1000 ); onGenreSelectionChange(); onArtistSelectionChange(); onAlbumSelectionChange(); onPlaylistSelectionChange(); onSearchChanged(); onPlayLengthChange(); reset_text.foregroundcolor = '#E7651A'; } //**************************************************************** function onPlayLengthChange() { DJQuery.playlength_limit = true; var value = Math.round(playLength_slider.value); var string = ""; if (value == 0) { string = "20 min"; DJQuery.playlength_limit_length = 20 * 60; } else if (value == 1) { string = "40 min"; DJQuery.playlength_limit_length = 40 * 60; } else if (value < 14) { string = (value - 1) + " hr"; DJQuery.playlength_limit_length = (value - 1) * 60 * 60; } else { string = "No Limit" DJQuery.playlength_limit = false; } playLength_string.value = string; makeQueryDirty(); } //**************************************************************** function onPlaylistTextChange() { if (pl.visible) { // for library playlists, there is a penalty to pay for // changing the name, so we do this on a delayed event to // let the user type the name as they might want. If it // is a query playlist, then we just change it now. if (full_access) { playlist_focus_button.moveTo( playlist_focus_button.left, playlist_focus_button.top, 500 ); } else { // However, base playlists don't like having an empty // name, so we account for this. if (playlist_edit_text.value == '') { pl.playlist.name = 'Untitled'; } else { pl.playlist.name = playlist_edit_text.value; } } } } //**************************************************************** function onRefreshPlaylistName() { if (pl.visible) { // We can only reassign the name provided if it is not // already a playlist name... if it is, then the library // will barf on us. if (null == getLibraryPlaylist( playlist_edit_text.value )) { pl.playlist.name = playlist_edit_text.value; // Refresh the playlists listbox LB_playlists.setupLB( DJQuery.getPlaylistListQ(), DJQuery.getPlaylistCountQ() ); // We don't have to mark the query as dirty, but we do // have to update the query text and make sure the // include / exclude bars are pointing in the right // direction query_text.value = DJQuery.getQueryDescriptionQ(); onPlaylistSelectionChange(); } } } //**************************************************************** function fixPreviewColumns() { if (pl.visible) { var colCount = 0; var cols; if (pl.width < 275) { cols = "name;duration;"; colCount = 2; } else if (pl.width < 375) { cols = "name;artist;duration;"; colCount = 3; } else if (pl.width < 475) { cols = "name;artist;album;duration;"; colCount = 4; } else if (pl.width < 575) { cols = "name;artist;album;genre;duration;" colCount = 5; } else { cols = "name;artist;album;genre;bitrate;duration;" colCount = 6; } if (pl.columns != cols) { pl.columns = cols; pl.setColumnResizeMode( 0, "Stretches" ); for (var nIndex = 1; nIndex < colCount; nIndex++) { pl.setColumnResizeMode( nIndex, "AutoSizeData" ); } } } } //**************************************************************** function checkPlaylistCount() { if (pl.visible && g_nLastCount != pl.playlist.count) { g_fReturnResults = true; results_length_text.moveTo( results_length_text.left, 114, 300 ); } } //**************************************************************** function onResultsEndMove() { if (g_fReturnResults) { g_fReturnResults = false; results_length_text.value = '(' + pl.playlist.count + ' items - ' + formatSecondsString( getPlaylistLength( pl.playlist ) ) + ')'; results_length_text.moveTo( results_length_text.left, 96, 300 ); g_nLastCount = pl.playlist.count; } } //**************************************************************** function doQuery() { build_button.enabled = false; reset_button.enabled = false; build_text.foregroundcolor = '#E7651A'; instructions_text.visible = true; instructions_text.value = "Building Playlist" query_progress.visible = true; pl.visible = false; results_length_text.moveTo( results_length_text.left, 114, 1000 ); DJQuery.shuffle_playlist = (!event.shiftKey); DJQuery.performQueryQ( full_access ? playlist_edit_text.value : '' ); } //**************************************************************** function onCompleteQuery() { // Refresh the playlists listbox LB_playlists.setupLB( DJQuery.getPlaylistListQ(), DJQuery.getPlaylistCountQ() ); // And update the rest of theUI build_button.enabled = true; reset_button.enabled = true; query_progress.visible = false; results_label_text.value = 'Results:'; var plResult = full_access ? DJQuery.plLibraryResult : DJQuery.plQueryResult; if (!full_access || player.playState == 0 || player.playState == 1 || player.playState == 10) { // So, if the user isn't playing anything, or if they're only // getting query playlists, then we go ahead and put our playlist on core. player.settings.autoStart = true; player.currentPlaylist = plResult; } if (plResult.count == 0) { instructions_text.value = 'No matching tracks found'; } else { instructions_text.visible = false; pl.playlist = plResult; pl.visible = true; if (!full_access) { pl.playlist.name = playlist_edit_text.value; } g_nLastCount = pl.playlist.count; results_length_text.moveTo( results_length_text.left, 96, 1000 ); results_length_text.value = '(' + pl.playlist.count + ' items - ' + formatSecondsString(DJQuery.nCurrentLength) + ')'; } } //**************************************************************** // Utility //**************************************************************** function fixupIncludeExclude( item, include_array, exclude_array, basecolor, include_button, exclude_button ) { if (inArray( item, include_array )) { include_button.image = "AutoDj_maxmid_" + basecolor + "left_up.bmp"; include_button.downImage = "AutoDj_maxmid_" + basecolor + "left_down.bmp"; include_button.hoverImage = "AutoDj_maxmid_" + basecolor + "left_over.bmp"; exclude_button.image = "AutoDj_maxmid_" + basecolor + "right_up.bmp"; exclude_button.downImage = "AutoDj_maxmid_" + basecolor + "right_down.bmp"; exclude_button.hoverImage = "AutoDj_maxmid_" + basecolor + "right_over.bmp"; } else if (inArray( item, exclude_array )) { include_button.image = "AutoDj_maxmid_" + basecolor + "right_up.bmp"; include_button.downImage = "AutoDj_maxmid_" + basecolor + "right_down.bmp"; include_button.hoverImage = "AutoDj_maxmid_" + basecolor + "right_over.bmp"; exclude_button.image = "AutoDj_maxmid_" + basecolor + "left_up.bmp"; exclude_button.downImage = "AutoDj_maxmid_" + basecolor + "left_down.bmp"; exclude_button.hoverImage = "AutoDj_maxmid_" + basecolor + "left_over.bmp"; } else { include_button.image = "AutoDj_maxmid_" + basecolor + "right_up.bmp"; include_button.downImage = "AutoDj_maxmid_" + basecolor + "right_down.bmp"; include_button.hoverImage = "AutoDj_maxmid_" + basecolor + "right_over.bmp"; exclude_button.image = "AutoDj_maxmid_" + basecolor + "right_up.bmp"; exclude_button.downImage = "AutoDj_maxmid_" + basecolor + "right_down.bmp"; exclude_button.hoverImage = "AutoDj_maxmid_" + basecolor + "right_over.bmp"; } } //**************************************************************** // Operations affecting the Genre Pane //**************************************************************** function onGenreSelectionChange() { fixupIncludeExclude( LB_genre.nSelectedIndex, DJQuery.genre_include_array, DJQuery.genre_exclude_array, "green", genre_include_button, genre_exclude_button ); } //**************************************************************** function includeGenre() { DJQuery.addGenreIncludeQ( LB_genre.nSelectedIndex ); onGenreSelectionChange(); makeQueryDirty(); } //**************************************************************** function excludeGenre() { DJQuery.addGenreExcludeQ( LB_genre.nSelectedIndex ); onGenreSelectionChange(); makeQueryDirty(); } //**************************************************************** // Operations affecting the Artist Pane //**************************************************************** function onArtistSelectionChange() { fixupIncludeExclude( LB_artist.nSelectedIndex, DJQuery.artist_include_array, DJQuery.artist_exclude_array, "green", artist_include_button, artist_exclude_button ); } //**************************************************************** function includeArtist() { DJQuery.addArtistIncludeQ( LB_artist.nSelectedIndex ); onArtistSelectionChange(); makeQueryDirty(); } //**************************************************************** function excludeArtist() { DJQuery.addArtistExcludeQ( LB_artist.nSelectedIndex ); onArtistSelectionChange(); makeQueryDirty(); } //**************************************************************** // Operations affecting the Album Pane //**************************************************************** function onAlbumSelectionChange() { fixupIncludeExclude( LB_album.nSelectedIndex, DJQuery.album_include_array, DJQuery.album_exclude_array, "green", album_include_button, album_exclude_button ); } //**************************************************************** function includeAlbum() { DJQuery.addAlbumIncludeQ( LB_album.nSelectedIndex ); onAlbumSelectionChange(); makeQueryDirty(); } //**************************************************************** function excludeAlbum() { DJQuery.addAlbumExcludeQ( LB_album.nSelectedIndex ); onAlbumSelectionChange(); makeQueryDirty(); } //**************************************************************** // Operations affecting the Playlists Pane //**************************************************************** function onPlaylistSelectionChange() { fixupIncludeExclude( LB_playlists.nSelectedIndex, DJQuery.playlist_include_array, DJQuery.playlist_exclude_array, "red", playlists_include_button, playlists_exclude_button ); preview_playlist.playlist = DJQuery.playlist_collection.item( LB_playlists.nSelectedIndex ); } //**************************************************************** function includePlaylist() { DJQuery.addPlaylistIncludeQ( LB_playlists.nSelectedIndex ); onPlaylistSelectionChange(); makeQueryDirty(); } //**************************************************************** function excludePlaylist() { DJQuery.addPlaylistExcludeQ( LB_playlists.nSelectedIndex ); onPlaylistSelectionChange(); makeQueryDirty(); } //**************************************************************** // Operations affecting the Advanced Pane //**************************************************************** function resynchOptions() { DJQuery.allow_playlists = CB_allow_playlists.fChecked; DJQuery.allow_urls = CB_allow_urls.fChecked; DJQuery.allow_blank = CB_allow_blank.fChecked; DJQuery.playcount_favoring = CB_bias.fChecked; bias_comparison_text.value = DJQuery.getPlaycountFavoringComparisonStringQ(); DJQuery.playcount_filter = CB_playcount.fChecked; playcount_comparison_text.value = DJQuery.getPlaycountFilterComparisonStringQ(); playcount_count_text.value = DJQuery.playcount_filter_count; DJQuery.playlength_filter = CB_playlength.fChecked; playlength_comparison_text.value = DJQuery.getPlaylengthFilterComparisonStringQ(); playlength_count_text.value = formatSecondsString( DJQuery.playlength_filter_length ); makeQueryDirty(); } //**************************************************************** function changeBiasComparison() { DJQuery.playcount_favoring_comparison++; if (DJQuery.playcount_favoring_comparison > 1) { DJQuery.playcount_favoring_comparison = 0; } resynchOptions(); } //**************************************************************** function changePlaycountComparison() { DJQuery.playcount_filter_comparison++; if (DJQuery.playcount_filter_comparison > 2) { DJQuery.playcount_filter_comparison = 0; } resynchOptions(); } //**************************************************************** function changePlaycount( nDirection ) { var nMove = nDirection * (event.shiftKey ? 5 : 1); DJQuery.playcount_filter_count += nMove; if (DJQuery.playcount_filter_count < 0) { DJQuery.playcount_filter_count = 0; } resynchOptions(); } //**************************************************************** function changePlaylengthComparison() { DJQuery.playlength_filter_comparison++; if (DJQuery.playlength_filter_comparison > 1) { DJQuery.playlength_filter_comparison = 0; } resynchOptions(); } //**************************************************************** function changePlaylength( nDirection ) { var nMove = nDirection * (event.shiftKey ? 1 : 30); DJQuery.playlength_filter_length += nMove; if (DJQuery.playlength_filter_length < 0) { DJQuery.playlength_filter_length = 0; } resynchOptions(); } //**************************************************************** function resynchSearchOptions() { SearchQuery.generic_search_name = search_name_array[g_nSearchIndex]; search_name_text.value = search_name_array[g_nSearchIndex]; search_comparison_text.value = SearchQuery.getGenericSearchComparisonStringQ(); SearchQuery.generic_search_value = value_edit_text.value; } //**************************************************************** function onCompleteSearch() { if (SearchQuery.query_aborted) { onSearchExecute(); } else { search_progress.visible = false; var fFound = (SearchQuery.plQueryResult.count != 0); if (fFound) { search_playlist.playlist = SearchQuery.plQueryResult; search_instructions_text.visible = false; search_playlist.visible = true; } else { search_instructions_text.value = 'No Matches Found'; } enableSearchButtons( fFound ); } } //**************************************************************** function enableSearchButtons( fEnabled ) { search_include_button.enabled = fEnabled; search_include_button.cursor = fEnabled ? "hand" : "system"; search_include_text.cursor = search_include_button.cursor; search_exclude_button.enabled = fEnabled; search_exclude_button.cursor = fEnabled ? "hand" : "system"; search_exclude_text.cursor = search_exclude_button.cursor; } //**************************************************************** function onSearchValueTextChange() { g_fSearchChanged = true; resynchSearchOptions(); onSearchChanged(); } //**************************************************************** function onSearchChanged() { var str = search_name_text.value + ' ' + search_comparison_text.value + ' ' + value_edit_text.value; fixupIncludeExclude( str, DJQuery.search_include_array_txt, DJQuery.search_exclude_array_txt, "blue", search_include_button, search_exclude_button ); if (g_fSearchChanged) { search_instructions_text.moveTo( search_instructions_text.left, search_instructions_text.top, 800 ); } } //**************************************************************** function onSearchExecute() { if (!SearchQuery.performing_query) { search_playlist.visible = false; search_instructions_text.visible = true; search_instructions_text.value = 'Performing Search'; search_progress.visible = true; enableSearchButtons( false ); SearchQuery.generic_search = true; SearchQuery.performQueryQ( '' ); } else { SearchQuery.query_aborted = true; } } //**************************************************************** function changeSearchName() { var nMove = (event.shiftKey ? -1 : 1); g_nSearchIndex += nMove; if (g_nSearchIndex < 0) { g_nSearchIndex = search_name_array.count - 1; } else if (g_nSearchIndex >= search_name_array.count) { g_nSearchIndex = 0; } resynchSearchOptions(); onSearchChanged(); } //**************************************************************** function changeSearchComparison() { var nMove = (event.shiftKey ? -1 : 1); SearchQuery.generic_search_comparison++; if (SearchQuery.generic_search_comparison < 0) { SearchQuery.generic_search_comparison = 3; } else if (SearchQuery.generic_search_comparison > 3) { SearchQuery.generic_search_comparison = 0; } resynchSearchOptions(); onSearchChanged(); } //**************************************************************** function includeSearch() { var str = search_name_text.value + ' ' + search_comparison_text.value + ' ' + value_edit_text.value; DJQuery.addSearchPlaylistIncludeQ( str, search_playlist.playlist ); fixupIncludeExclude( str, DJQuery.search_include_array_txt, DJQuery.search_exclude_array_txt, "blue", search_include_button, search_exclude_button ); makeQueryDirty(); } //**************************************************************** function excludeSearch() { var str = search_name_text.value + ' ' + search_comparison_text.value + ' ' + value_edit_text.value; DJQuery.addSearchPlaylistExcludeQ( str, search_playlist.playlist ); fixupIncludeExclude( str, DJQuery.search_include_array_txt, DJQuery.search_exclude_array_txt, "blue", search_include_button, search_exclude_button ); makeQueryDirty(); } //**************************************************************** function fixSearchPlaylistColumns() { if (search_playlist.visible) { var colCount = 0; var cols; if ((pl.width < 325) || (g_nSearchIndex == 0)) { cols = "name"; colCount = 1; } else { cols = "name;" + search_name_array[g_nSearchIndex]; colCount = 2; } if (search_playlist.columns != cols) { search_playlist.columns = cols; search_playlist.setColumnResizeMode( 0, "Stretches" ); for (var nIndex = 1; nIndex < colCount; nIndex++) { search_playlist.setColumnResizeMode( nIndex, "AutoSizeData" ); } } } } //**************************************************************** // Tab Transitions //**************************************************************** function switchToTab( nIndex, nSpeed ) { if (nIndex != g_nFocusTab) { transitionAway( g_nFocusTab, nSpeed ); g_nFocusTab = nIndex; transitionTo( g_nFocusTab, nSpeed ); } else { enableTab( g_nFocusTab, true ); } } //**************************************************************** function transitionAway( nIndex, nTime ) { switch (nIndex) { case 0: genre_sv.moveTo( -genre_sv.width, view.height - genre_sv.height, nTime ); artist_sv.moveTo( -artist_sv.width, artist_sv.top, nTime ); album_sv.moveTo( -album_sv.width, 32, nTime ); break; case 1: playlists_sv.moveTo( playlists_sv.width, 32 - playlists_sv.height, nTime ); preview_playlist.visible = false; break; case 2: advanced_sv.moveTo( advanced_sv.width, view.height, nTime ); break; } enableTab( nIndex, false ); } //**************************************************************** function transitionTo( nIndex, nTime ) { switch (nIndex) { case 0: genre_sv.moveTo( 0, 32, nTime ); artist_sv.moveTo( 0, 32 + genre_sv.height, nTime ); album_sv.moveTo( 0, view.height - album_sv.height, nTime ); break; case 1: playlists_sv.moveTo( 0, 32, nTime ); break; case 2: search_playlist.enabled = true; advanced_sv.moveTo( 0, 32, nTime ); break; } enableTab( nIndex, true ); } //**************************************************************** function enableTab( nIndex, fEnabled ) { switch (nIndex) { case 0: genre_include_text.enabled = fEnabled; genre_exclude_text.enabled = fEnabled; artist_include_text.enabled = fEnabled; artist_exclude_text.enabled = fEnabled; album_include_text.enabled = fEnabled; album_exclude_text.enabled = fEnabled; attributes_tab_text.enabled = !fEnabled; attributes_focus_button.enabled = !fEnabled; attributes_focus_button.cursor = fEnabled ? "system" : "hand"; genre_lb_focus_button.enabled = fEnabled; artist_lb_focus_button.enabled = fEnabled; album_lb_focus_button.enabled = fEnabled; break; case 1: playlists_include_text.enabled = fEnabled; playlists_exclude_text.enabled = fEnabled; playlists_tab_text.enabled = !fEnabled; playlists_focus_button.enabled = !fEnabled; playlists_focus_button.cursor = fEnabled ? "system" : "hand"; playlists_lb_focus_button.enabled = fEnabled; break; case 2: playlist_check_text.enabled = fEnabled; url_check_text.enabled = fEnabled; blank_check_text.enabled = fEnabled; bias_check_text.enabled = fEnabled; bias_comparison_text.enabled = fEnabled; playcount_check_text.enabled = fEnabled; playcount_comparison_text.enabled = fEnabled; playcount_reduce_text.enabled = fEnabled; playcount_increase_text.enabled = fEnabled; playlength_check_text.enabled = fEnabled; playlength_comparison_text.enabled = fEnabled; playlength_reduce_text.enabled = fEnabled; playlength_increase_text.enabled = fEnabled; search_name_text.enabled = fEnabled; search_comparison_text.enabled = fEnabled; value_focus_button.enabled = fEnabled; search_include_text.tabstop = fEnabled; search_exclude_text.tabstop = fEnabled; advanced_tab_text.enabled = !fEnabled; advanced_focus_button.enabled = !fEnabled; advanced_focus_button.cursor = fEnabled ? "system" : "hand"; break; } } //**************************************************************** function onPlaylistsTabEndMove() { if (g_nFocusTab == 1) { preview_playlist.visible = true; preview_playlist.setColumnResizeMode( 0, "Stretches" ); preview_playlist.setColumnResizeMode( 1, "AutoSizeData" ); } } //**************************************************************** function onAdvancedTabEndMove() { if (g_nFocusTab != 2) { search_playlist.enabled = false; } } //**************************************************************** // Resizing //**************************************************************** function onHeightChange() { var vh = view.height; var nExtra = vh - 458; genre_sv.height = 140 + Math.floor(nExtra / 3); artist_sv.height = genre_sv.height; album_sv.height = 146 + Math.floor(nExtra / 3) + (nExtra % 3); switch (g_nFocusTab) { case 0: artist_sv.top = 32 + genre_sv.height; album_sv.top = vh - album_sv.height; playlists_sv.moveTo( playlists_sv.left, -playlists_sv.height, 0 ); advanced_sv.moveTo( advanced_sv.left, vh, 0 ); break; case 1: advanced_sv.moveTo( advanced_sv.left, vh, 0 ); break; case 2: playlists_sv.moveTo( playlists_sv.left, -playlists_sv.height, 0 ); break; } } //**************************************************************** function onWidthChange() { var vw = view.width; var nExtra = vw - 640; var nLeftWidth = 255 + Math.floor(nExtra / 3); genre_sv.width = nLeftWidth; artist_sv.width = nLeftWidth; album_sv.width = nLeftWidth; playlists_sv.width = nLeftWidth; advanced_sv.width = nLeftWidth; switch (g_nFocusTab) { case 0: playlists_sv.left = nLeftWidth; advanced_sv.left = nLeftWidth; break; case 1: advanced_sv.left = nLeftWidth; genre_sv.left = -genre_sv.width; artist_sv.left = -artist_sv.width; album_sv.left = -album_sv.width; break; case 2: playlists_sv.left = nLeftWidth; genre_sv.left = -genre_sv.width; artist_sv.left = -artist_sv.width; album_sv.left = -album_sv.width; break; } query_sv.left = nLeftWidth; query_sv.width = vw - nLeftWidth; transport_sv.left = nLeftWidth; transport_sv.width = vw - nLeftWidth; nLeftExtra = nLeftWidth - 255; var nLeftDiv3 = Math.floor( nLeftExtra / 3); attributes_tab_sv.width = 89 + nLeftDiv3; green_edging.left = attributes_tab_sv.width - 5; playlists_tab_sv.left = attributes_tab_sv.width; playlists_tab_sv.width = 84 + nLeftDiv3; red_edging.left = playlists_tab_sv.left + playlists_tab_sv.width - 5; advanced_tab_sv.left = playlists_tab_sv.left + playlists_tab_sv.width; advanced_tab_sv.width = 82 + nLeftDiv3 + (nLeftExtra % 3); // Transport re-sizing var oneThirdWidth = (transport_sv.width - bgFull.width - bgToggle.width - 32) / 3; bgTransport.left = bgToggle.left + bgToggle.width + oneThirdWidth - (bgTransport.width / 2); sVolume.left = bgToggle.left + bgToggle.width + (2.5 * oneThirdWidth) - (sVolume.width / 2); }