diff options
Diffstat (limited to 'Src/resources/skins/Big Bento/scripts/fileinfo.m')
-rw-r--r-- | Src/resources/skins/Big Bento/scripts/fileinfo.m | 1277 |
1 files changed, 1277 insertions, 0 deletions
diff --git a/Src/resources/skins/Big Bento/scripts/fileinfo.m b/Src/resources/skins/Big Bento/scripts/fileinfo.m new file mode 100644 index 00000000..b9faecb2 --- /dev/null +++ b/Src/resources/skins/Big Bento/scripts/fileinfo.m @@ -0,0 +1,1277 @@ +/*--------------------------------------------------- +----------------------------------------------------- +Filename: fileinfo.m +Version: 3.3 +Type: maki +Date: 10. Aug. 2007 - 20:42 +Author: Martin Poehlmann aka Deimos +E-Mail: martin@skinconsortium.com +Internet: www.skinconsortium.com + www.martin.deimos.de.vu +----------------------------------------------------- +---------------------------------------------------*/ + +#include <lib/std.mi> +#include attribs/init_windowpage.m + +#include <lib/com/songinfo.m> + +//#define DEBUG +#define FILE_NAME "fileinfo.m" +#include <lib/com/debug.m> + +#define WEBCOVER_SHOUTCAST "winamp.cover.shoutcast" + +Function loadFileInfo(); +Function loadPlaylistArtWork(); +Class GuiObject TextObject; +Class GuiObject CycleObject; +Function refreshRating(int rating); +Class Button RatingButton; +Function showBranding(); +Class Group Infoline; +Function getTextHeight(InfoLine gn); + +Global Group scriptGroup, g_cover; +Global AlbumArtLayer l_albumart; +Global AlbumArtLayer AlbumArt; +Global InfoLine g_rating, g_title, g_album, g_artist, g_year, g_genre, g_track, g_publisher, g_sname, g_surl, g_albumartist, g_composer, g_format, g_disc; +Global InfoLine g_target; +Global Text t_title, t_album, t_artist, t_year, t_genre, t_track, t_publisher, t_sname, t_surl, t_composer, t_albumartist, t_format, t_disc, t_rating; +Global Timer cycler; +// Global String stationLink = ""; + +Global List cycle; +Global Boolean cycler_paused, quick_change, HAVE_ML = TRUE; +Global List ratingStars; + +#define CENTER_VAR Branding +Global layer l_branding; +#include <lib/com/centerlayer.m> +#undef CENTER_VAR + +Global TextObject TextArtist, TextAlbum, TextTitle, TextGenre, TextPublisher, TextSURl, TextSname; +Global CycleObject cycleGenre, cyclePublisher, cycleTrack, cycleYear, cycleComposer, cycleAlbumartist, cycleFormat, cycleDisc; + +Global RatingButton rate1, rate2, rate3, rate4, rate5, rate0; +Global Layer star1, star2, star3, star4, star5; + +Global Int startwith = 0; +Global Int artRetries = 0; +Global Int maxlines; + +Global timer delayLoad; + +System.onScriptLoaded() +{ + initAttribs_windowpage(); + + HAVE_ML = stringToInteger(getToken(getParam(), ",", 0)); + maxlines = stringToInteger(getToken(getParam(), ",", 1)); + + scriptGroup = getScriptGroup(); + + cycler = new Timer; + cycler.setDelay(4000); + + delayLoad = new Timer; + delayLoad.setDelay(10); + + //debug(getWinampVersion() + "#" + integerToString(getBuildNumber())); + + g_rating = scriptGroup.findObject("infodisplay.line.rating"); + g_title = scriptGroup.findObject("infodisplay.line.title"); + g_album = scriptGroup.findObject("infodisplay.line.album"); + g_artist = scriptGroup.findObject("infodisplay.line.artist"); + g_year = scriptGroup.findObject("infodisplay.line.year"); + g_genre = scriptGroup.findObject("infodisplay.line.genre"); + g_track = scriptGroup.findObject("infodisplay.line.track"); + g_publisher = scriptGroup.findObject("infodisplay.line.publisher"); + g_sname = scriptGroup.findObject("infodisplay.line.sname"); + g_surl = scriptGroup.findObject("infodisplay.line.surl"); + g_composer = scriptGroup.findObject("infodisplay.line.composer"); + g_albumartist = scriptGroup.findObject("infodisplay.line.albumartist"); + g_format = scriptGroup.findObject("infodisplay.line.format"); + g_disc = scriptGroup.findObject("infodisplay.line.disc"); + + t_title = g_title.findObject("text"); + t_album = g_album.findObject("text"); + t_artist = g_artist.findObject("text"); + t_year = g_year.findObject("text"); + t_genre = g_genre.findObject("text"); + t_track = g_track.findObject("text"); + t_Publisher = g_publisher.findObject("text"); + t_sname = g_sname.findObject("text"); + t_surl = g_surl.findObject("text"); + t_albumartist = g_albumartist.findObject("text"); + t_composer = g_composer.findObject("text"); + t_format = g_format.findObject("text"); + t_disc = g_disc.findObject("text"); + + textArtist = g_artist.findObject("text"); + textAlbum = g_album.findObject("text"); + textTitle = g_title.findObject("text"); + textsUrl = g_surl.findObject("text"); + textSname = g_sname.findObject("text"); + cycleGenre = g_genre.findObject("link"); + cyclePublisher = g_publisher.findObject("link"); + cycleTrack = g_track.findObject("link"); + cycleYear = g_year.findObject("link"); + cycleAlbumartist = g_albumartist.findObject("text"); + cycleComposer = g_composer.findObject("text"); + cycleFormat = g_format.findObject("link"); + cycleDisc = g_disc.findObject("link"); + + cycle = new List; + ratingStars = new List; + + group parent = scriptGroup.getParent(); + l_branding = parent.findObject("branding"); + g_cover = parent.findObject("info.component.cover"); + _BrandingInit(l_branding, parent, 1, 0); + + l_albumart = g_cover.getObjecT("winamp.albumart"); + + rate1 = g_rating.findObject("rate.1"); + rate2 = g_rating.findObject("rate.2"); + rate3 = g_rating.findObject("rate.3"); + rate4 = g_rating.findObject("rate.4"); + rate5 = g_rating.findObject("rate.5"); + rate0 = g_rating.findObject("rate.0"); + ratingStars.addItem(rate1); + ratingStars.addItem(rate2); + ratingStars.addItem(rate3); + ratingStars.addItem(rate4); + ratingStars.addItem(rate5); + + star1 = g_rating.findObject("star.1"); + star2 = g_rating.findObject("star.2"); + star3 = g_rating.findObject("star.3"); + star4 = g_rating.findObject("star.4"); + star5 = g_rating.findObject("star.5"); + + t_rating = g_rating.findObject("label"); + t_rating.onTextChanged (""); + + refreshRating(System.getCurrentTrackRating()); + loadFileInfo(); + if (ic_fileinfo.getData() == "1") + { + if (getStatus() == STATUS_STOPPED && songinfo_location == "") showBranding(); // show branding if playback is stopped and the playlist is empty + if (removePath(getPlayItemString()) == "demo.mp3") // Show branding if playing DJ Mike + { + if (getPlayitemmetadatastring("artist") == "DJ Mike Llama" && getplayitemmetadatastring("title") == "Llama Whippin' Intro") + { + showBranding(); + } + } + } +} + +System.onScriptUnloading () +{ + cycler.stop(); + delete cycler; + + delayLoad.stop(); + delete delayLoad; +} + +// Reload fileInfo if track has changed + +delayLoad.onTimer() +{ + System.onTitleChange (getPlayItemString()); + + delayLoad.stop(); +} + +System.onTitleChange (String newtitle) +{ + // Get rid of "" calls + if (newtitle == "" && getplayitemmetadatastring("title") == "" && !delayLoad.isRunning()) + { + delayLoad.start(); + } + + // Get rid of buffering during stream connection & playback + if (StrLeft(newtitle, 1) == "[") { + if (StrLeft(newtitle, 7) == "[Buffer" || StrLeft(newtitle, 4) == "[ICY") return; + } + // Show branding for DJ Mike + if (removePath(getPlayItemString()) == "demo.mp3") + { + if (getPlayitemmetadatastring("artist") == "DJ Mike Llama" && getplayitemmetadatastring("title") == "Llama Whippin' Intro") + { + showBranding(); + return; + } + } + + debugString(DEBUG_PREFIX "System.onTitleChange() -> loadFileInfo();", D_WTF); + refreshRating(System.getCurrentTrackRating()); + loadFileInfo(); +} + +// Reload fileInfo if textline attribs have changed + +InfoLineAttribute.onDataChanged () +{ + if (l_branding.isVisible()) return; + loadFileInfo (); +} + +/*l_albumart.onAlbumArtLoaded(boolean success) +{ + if(songinfo_streamType == SONGINFO_STREAMTYPE_SHOUTCAST2) + { + if(!l_albumart.isInvalid()) + { + l_albumart.show(); + l_webcover.hide(); + } + } +}*/ + +//---------------------------------------------------------------------------------------------------------------- +// Our main machine. +//---------------------------------------------------------------------------------------------------------------- + +loadPlaylistArtWork() +{ + Group g_cover2; + Container player; + Frame dualwnd, pl_dualwnd, mainframe; + Layout mainframe; + + player = getContainer("main"); + if(player) + { + mainframe=player.getLayout("normal"); + if(mainframe) + { + dualwnd = mainframe.findObject("player.dualwnd"); + if(dualwnd) + { + pl_dualwnd = dualwnd.findObject("playlist.dualwnd"); + if(pl_dualwnd) + { + g_cover2 = pl_dualwnd.findObject("player.component.playlist.albumart"); + if(g_cover2) + { + AlbumArt = g_cover2.findObject("winamp.albumart"); + } + } + } + } + } +} + +loadFileInfo () +{ + songinfo_reload(); // refresh vars + debugString(DEBUG_PREFIX "loadFileInfo() {", D_WTF); + debugString(DEBUG_PREFIX " songinfo_location: " + songinfo_location, D_WTF); + debugString(DEBUG_PREFIX " songinfo_displayTitle: " + songinfo_displayTitle, D_WTF); + + // cancel g_target + if (g_target) g_target.cancelTarget(); + if (g_target) g_target.setAlpha(255); + g_target = NULL; + + // hide all lines and cycle buttons + g_rating.hide(); + g_title.hide(); + g_album.hide(); + g_artist.hide(); + g_year.hide(); + g_genre.hide(); + l_branding.hide(); + g_track.hide(); + g_publisher.hide(); + g_cover.setAlpha(255); + g_surl.hide(); + g_sname.hide(); + g_albumartist.hide(); + g_composer.hide(); + g_format.hide(); + g_disc.hide(); + cycleTrack.hide(); + cycleGenre.hide(); + cyclePublisher.hide(); + cycleFormat.hide(); + cycleYear.hide(); + cycleDisc.hide(); + cycler.stop(); + cycler_paused = 0; +// stationLink = ""; + + artRetries = 0; + l_albumart.setXMLParam("notfoundImage", "winamp.cover.notfound.xxl"); + + Boolean _cycle = (infocomp_cycle.getData() == "1"); + Boolean _rating = (infocomp_show_rating.getData() == "1"); + + // empty cycle list + cycle.removeAll(); + + int pos = 1; + + if (maxlines > 5) + { + pos += 2; + } + + int n = 0; + + debugString(DEBUG_PREFIX " songinfo_streamName: " + songinfo_streamName, D_WTF); + debugString(DEBUG_PREFIX " songinfo_streamType: " + integerToString(songinfo_streamType), D_WTF); + if (songinfo_isStream) + { + debugString(DEBUG_PREFIX " -> A stream is detected!", D_WTF); + + debugString(DEBUG_PREFIX " songinfo_artist: " + songinfo_artist, D_WTF); + debugString(DEBUG_PREFIX " songinfo_title: " + songinfo_title, D_WTF); + + if (songinfo_title != "") + { + // Title + if (n > 0) pos += getTextHeight(g_title); + t_title.setText(songinfo_title); + g_title.setXmlParam("y", integerToString(pos)); + g_title.show(); + n++; + cycle.addItem(g_title); + + // Artist + if (songinfo_artist != "") + { + if (n > 0) pos += getTextHeight(g_artist); + t_artist.setText(songinfo_artist); + g_artist.setXmlParam("y", integerToString(pos)); + g_artist.show(); + n++; + cycle.addItem(g_artist); + } + } + else + { + debugString(DEBUG_PREFIX " songinfo_streamtitle: " + songinfo_streamtitle, D_WTF); + if (songinfo_streamtitle != "") + { + int v = strsearch(songinfo_streamtitle, " - "); + if (v > 0) { + string s1 = strleft (songinfo_streamtitle, v); + string s2 = strright (songinfo_streamtitle, strlen(songinfo_streamtitle) - 3 - v); + + // Title + if (n > 0) pos += getTextHeight(g_title); + t_title.setText(s2); + g_title.setXmlParam("y", integerToString(pos)); + g_title.show(); + n++; + cycle.addItem(g_title); + + // Artist + if (n > 0) pos += getTextHeight(g_artist); + if (songinfo_artist == "") t_artist.setText(s1); + else t_artist.setText(songinfo_artist); + g_artist.setXmlParam("y", integerToString(pos)); + g_artist.show(); + n++; + cycle.addItem(g_artist); + } + else + { + // Title + if (n > 0) pos += getTextHeight(g_title); + t_title.setText(songinfo_streamtitle); + g_title.setXmlParam("y", integerToString(pos)); + g_title.show(); + n++; + cycle.addItem(g_title); + + // Artist + if (songinfo_artist != "") { + if (n > 0) pos += getTextHeight(g_artist); + t_artist.setText(songinfo_artist); + g_artist.setXmlParam("y", integerToString(pos)); + g_artist.show(); + n++; + cycle.addItem(g_artist); + } + } + } + } + + // Stream Album + debugString(DEBUG_PREFIX " songinfo_album: " + songinfo_album, D_WTF); + if (songinfo_album != "") + { + if (n > 0) pos += getTextHeight(g_album); + t_album.setText(songinfo_album); + g_album.setXmlParam("y", integerToString(pos)); + g_album.show(); + n++; + cycle.addItem(g_album); + } + + // Stream Genre + String s = getPlayItemMetaDataString("streamgenre"); + debugString(DEBUG_PREFIX " System.getPlayItemMetaDataString(streamgenre): " + s, D_WTF); + if (s != "") + { + t_genre.setText(s); + cycleGenre.setXmlParam("w", "0"); + cycle.addItem(g_genre); + if (n > 0) pos += getTextHeight(g_genre); + g_genre.setXmlParam("y", integerToString(pos)); + g_genre.show(); + n++; + } + + // Set Stream Name + if (songinfo_streamName != "") + { + if (n > 0) pos += getTextHeight(g_sname); + t_sname.setText(songinfo_streamName); + g_sname.setXmlParam("y", integerToString(pos)); + g_sname.show(); + n++; + cycle.addItem(g_sname); + } + + // Stream URL (only visible if we have less than 4 lines till now) + debugString(DEBUG_PREFIX " songinfo_streamURL: " + songinfo_streamURL, D_WTF); + if (songinfo_streamURL != "") + { + if (n > 0) pos += getTextHeight(g_surl); + t_surl.setText(songinfo_streamURL); + g_surl.setXmlParam("y", integerToString(pos)); + g_surl.show(); + n++; + cycle.addItem(g_surl); + } + + // setCover either from a supplied url or from in-stream artwork or default to a generic image + if (songinfo_streamAlbumArt != "") + { + debugString(DEBUG_PREFIX " songinfo_streamAlbumArt: " + songinfo_streamAlbumArt, D_WTF); + l_albumart.setXMLParam("image", songinfo_streamAlbumArt); + l_albumart.setXMLParam("notfoundImage", "winamp.cover.notfound.xxl"); + } + + if(songinfo_streamType == SONGINFO_STREAMTYPE_SHOUTCAST || songinfo_streamType == SONGINFO_STREAMTYPE_SHOUTCAST2) + { + if(songinfo_streamType == SONGINFO_STREAMTYPE_SHOUTCAST2) + { + if(l_albumart.isInvalid() && artRetries < 3) + { + if(!artRetries) + { + l_albumart.setXMLParam("notfoundImage", WEBCOVER_SHOUTCAST); + } + artRetries += 1; + l_albumart.refresh(); + if(!AlbumArt) loadPlaylistArtWork(); + if(AlbumArt) AlbumArt.refresh(); + } + } + else + { + l_albumart.setXMLParam("notfoundImage", WEBCOVER_SHOUTCAST); + } + } + } + + // ---------- Local Info ---------- + else + { + debugString(DEBUG_PREFIX " -> No stream is detected! we do the normal procedure", D_WTF); + string s = songinfo_title; + if (s == "") songinfo_displayTitle; + if (s != "") + { + t_title.setText(s); + g_title.setXmlParam("y", integerToString(pos)); + g_title.show(); + n++; + cycle.addItem(g_title); + } + + if (songinfo_artist != "") + { + if (n > 0) pos += getTextHeight(g_artist); + t_artist.setText(songinfo_artist); + g_artist.setXmlParam("y", integerToString(pos)); + g_artist.show(); + n++; + cycle.addItem(g_artist); + } + + if (songinfo_album != "") + { + if (n > 0) pos += getTextHeight(g_album); + t_album.setText(songinfo_album); + g_album.setXmlParam("y", integerToString(pos)); + g_album.show(); + n++; + cycle.addItem(g_album); + } + + if (infocomp_show_track.getData() == "1") + { + s = getPlayitemMetaDataString("track"); + if (s != "" && s != "-1") + { + // if tracknumber is like 1/9 we display 1 of 9 + if (strsearch(s, "/") != -1) + { + s = getToken(s, "/", 0) + translate(" of ") + getToken(s, "/", 1); + } + if (n > 0) pos += getTextHeight(g_track); + t_track.setText(s); + g_track.setXmlParam("y", integerToString(pos)); + g_track.show(); + n++; + cycle.addItem(g_track); + } + } + + if (infocomp_show_year.getData() == "1") + { + s = getPlayItemMetaDataString("year"); + if (s != "") + { + t_year.setText(s); + cycle.addItem(g_year); + if ((!_rating && n < maxlines) || (_rating && n < maxlines-1)) + { + if (n > 0) pos += getTextHeight(g_year); + g_year.setXmlParam("y", integerToString(pos)); + g_year.show(); + n++; + } + else + { + if (g_Track.getGuiY() == pos) cycleTrack.show(); + cycleYear.show(); + g_year.setXmlParam("y", integerToString(pos)); + if (_cycle) cycler.start(); + else if (getPrivateString (getSkinName(), "FileInfo_usersel", "") == "year") + { + if (g_Track.getGuiY() == pos) g_track.hide(); + startwith = cycle.getNumitems() - 1; + g_year.show(); + } + } + } + } + + if (infocomp_show_genre.getData() == "1") + { + s = getPlayItemMetaDataString("genre"); + if (s != "") + { + t_genre.setText(s); + cycle.addItem(g_genre); + if ((!_rating && n < maxlines) || (_rating && n < maxlines-1)) + { + if (n > 0) pos += getTextHeight(g_genre); + g_genre.setXmlParam("y", integerToString(pos)); + g_genre.show(); + n++; + } + else + { + if (g_Track.getGuiY() == pos) cycleTrack.show(); + if (g_year.getGuiY() == pos) cycleYear.show(); + cycleGenre.show(); + g_genre.setXmlParam("y", integerToString(pos)); + if (_cycle) cycler.start(); + else if (getPrivateString (getSkinName(), "FileInfo_usersel", "") == "genre") + { + if (g_Track.getGuiY() == pos) g_Track.hide(); + if (g_year.getGuiY() == pos) g_year.hide(); + startwith = cycle.getNumitems() - 1; + g_genre.show(); + } + } + } + } + + if (infocomp_show_disc.getData() == "1") + { + s = getPlayItemMetaDataString("disc"); + if (s != "") + { + t_disc.setText(s); + cycle.addItem(g_disc); + if ((!_rating && n < maxlines) || (_rating && n < maxlines-1)) + { + if (n > 0) pos += getTextHeight(g_disc); + g_disc.setXmlParam("y", integerToString(pos)); + g_disc.show(); + n++; + } + else + { + if (g_Track.getGuiY() == pos) cycleTrack.show(); + if (g_year.getGuiY() == pos) cycleYear.show(); + if (g_genre.getGuiY() == pos) cycleGenre.show(); + cycleDisc.show(); + g_disc.setXmlParam("y", integerToString(pos)); + if (_cycle) cycler.start(); + else if (getPrivateString (getSkinName(), "FileInfo_usersel", "") == "disc") + { + if (g_Track.getGuiY() == pos) g_Track.hide(); + if (g_year.getGuiY() == pos) g_year.hide(); + if (g_genre.getGuiY() == pos) g_genre.hide(); + startwith = cycle.getNumitems() - 1; + g_disc.show(); + } + } + } + } + + if (infocomp_show_albumartist.getData() == "1") + { + s = getPlayItemMetaDataString("albumartist"); + if (s != "") + { + t_albumartist.setText(s); + cycle.addItem(g_albumartist); + if ((!_rating && n < maxlines) || (_rating && n < maxlines-1)) + { + if (n > 0) pos += getTextHeight(g_albumartist); + g_albumartist.setXmlParam("y", integerToString(pos)); + g_albumartist.show(); + n++; + } + else + { + if (g_Track.getGuiY() == pos) cycleTrack.show(); + if (g_year.getGuiY() == pos) cycleYear.show(); + if (g_genre.getGuiY() == pos) cycleGenre.show(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + cycleAlbumartist.show(); + g_albumartist.setXmlParam("y", integerToString(pos)); + if (_cycle) cycler.start(); + else if (getPrivateString (getSkinName(), "FileInfo_usersel", "") == "albumartist") + { + if (g_Track.getGuiY() == pos) g_Track.hide(); + if (g_year.getGuiY() == pos) g_year.hide(); + if (g_genre.getGuiY() == pos) g_genre.hide(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + startwith = cycle.getNumitems() - 1; + g_albumartist.show(); + } + } + } + } + + if (infocomp_show_composer.getData() == "1") + { + s = getPlayItemMetaDataString("composer"); + if (s != "") + { + t_composer.setText(s); + cycle.addItem(g_composer); + if ((!_rating && n < maxlines) || (_rating && n < maxlines-1)) + { + if (n > 0) pos += getTextHeight(g_composer); + g_composer.setXmlParam("y", integerToString(pos)); + g_composer.show(); + n++; + } + else + { + if (g_Track.getGuiY() == pos) cycleTrack.show(); + if (g_year.getGuiY() == pos) cycleYear.show(); + if (g_genre.getGuiY() == pos) cycleGenre.show(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + if (g_albumartist.getGuiY() == pos) cycleAlbumartist.show(); + cycleComposer.show(); + g_composer.setXmlParam("y", integerToString(pos)); + if (_cycle) cycler.start(); + else if (getPrivateString (getSkinName(), "FileInfo_usersel", "") == "composer") + { + if (g_Track.getGuiY() == pos) g_Track.hide(); + if (g_year.getGuiY() == pos) g_year.hide(); + if (g_genre.getGuiY() == pos) g_genre.hide(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + if (g_albumartist.getGuiY() == pos) g_albumartist.hide(); + startwith = cycle.getNumitems() - 1; + g_composer.show(); + } + } + } + } + + if (infocomp_show_publisher.getData() == "1") + { + s = getPlayItemMetaDataString("publisher"); + if (s != "") + { + t_publisher.setText(s); + cycle.addItem(g_publisher); + if ((!_rating && n < maxlines) || (_rating && n < maxlines-1)) + { + if (n > 0) pos += getTextHeight(g_publisher); + g_publisher.setXmlParam("y", integerToString(pos)); + g_publisher.show(); + n++; + } + else + { + if (g_Track.getGuiY() == pos) cycleTrack.show(); + if (g_year.getGuiY() == pos) cycleYear.show(); + if (g_genre.getGuiY() == pos) cycleGenre.show(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + if (g_albumartist.getGuiY() == pos) cycleAlbumartist.show(); + if (g_composer.getGuiY() == pos) cycleComposer.show(); + cyclePublisher.show(); + g_publisher.setXmlParam("y", integerToString(pos)); + if (_cycle) cycler.start(); + else if (getPrivateString (getSkinName(), "FileInfo_usersel", "") == "publisher") + { + if (g_Track.getGuiY() == pos) g_Track.hide(); + if (g_year.getGuiY() == pos) g_year.hide(); + if (g_genre.getGuiY() == pos) g_genre.hide(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + if (g_albumartist.getGuiY() == pos) g_albumartist.hide(); + if (g_composer.getGuiY() == pos) g_composer.hide(); + startwith = cycle.getNumitems() - 1; + g_publisher.show(); + } + } + } + } + + if (infocomp_show_format.getData() == "1") + { + s = system.getDecoderName(system.getPlayItemString()); + if (s != "") + { + t_format.setText(s); + cycle.addItem(g_format); + if ((!_rating && n < maxlines) || (_rating && n < maxlines-1)) + { + if (n > 0) pos += getTextHeight(g_format); + g_format.setXmlParam("y", integerToString(pos)); + g_format.show(); + n++; + } + else + { + if (g_Track.getGuiY() == pos) cycleTrack.show(); + if (g_year.getGuiY() == pos) cycleYear.show(); + if (g_genre.getGuiY() == pos) cycleGenre.show(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + if (g_disc.getGuiY() == pos) cycleDisc.show(); + if (g_albumartist.getGuiY() == pos) cycleAlbumartist.show(); + if (g_composer.getGuiY() == pos) cycleComposer.show(); + if (g_publisher.getGuiY() == pos) cyclePublisher.show(); + cycleFormat.show(); + g_format.setXmlParam("y", integerToString(pos)); + if (_cycle) cycler.start(); + else if (getPrivateString (getSkinName(), "FileInfo_usersel", "") == "format") + { + if (g_Track.getGuiY() == pos) g_Track.hide(); + if (g_year.getGuiY() == pos) g_year.hide(); + if (g_genre.getGuiY() == pos) g_genre.hide(); + if (g_albumartist.getGuiY() == pos) g_albumartist.hide(); + if (g_composer.getGuiY() == pos) g_composer.hide(); + if (g_publisher.getGuiY() == pos) g_publisher.hide(); + startwith = cycle.getNumitems() - 1; + g_format.show(); + } + } + } + } + + // check the media library status as well as input plug-in support + // to help determine if we show the rating control or not for here + if (_rating) + { + if (!HAVE_ML) + { + s = getPlayitemMetaDataString("rateable"); + if (s != "" && s == "1") + { + if (n > 0) pos += getTextHeight(g_rating); + g_rating.setXmlParam("y", integerToString(pos)); + g_rating.show(); + } + } else { + if (n > 0) pos += getTextHeight(g_rating); + g_rating.setXmlParam("y", integerToString(pos)); + g_rating.show(); + } + } + } + + if (n==0) + { + showBranding(); + } + debugString(DEBUG_PREFIX "}", D_WTF); +} + +//---------------------------------------------------------------------------------------------------------------- +// Item Cycler: Only active if we have more items to display as lines +// if you click on a cycle line, this group is saved as g_target +//---------------------------------------------------------------------------------------------------------------- + +cycler.onTimer () +{ + // Important: stop the cycler if branding is visible + if (l_branding.isvisible()) cycler.stop(); + if (infocomp_cycle.getData() == "0" && !quick_change) { cycler.stop(); return; } + + // g_target is defined --> we save the currently shown line as g_target + if (!g_target) + { + // check if rating is visible... + if (infocomp_show_rating.getData() == "1") + { + // if auto-cycler is disabled, and not the default line is shown, the line number is stored in startwith. + if (startwith) + { + // resort the cycle list and set startwith to 0 + for ( int i = maxlines-2; i < startwith; i++ ) + { + g_target = cycle.enumItem(maxlines-2); + cycle.removeItem(maxlines-2); + cycle.addItem(g_target); + } + startwith = 0; + } + + // save g_target and remove from cycle + g_target = cycle.enumItem(maxlines-2); + cycle.removeItem(maxlines-2); + } + else + { + if (startwith) + { + for ( int i = maxlines-1; i < startwith; i++ ) + { + g_target = cycle.enumItem(maxlines-1); + cycle.removeItem(maxlines-1); + cycle.addItem(g_target); + } + startwith = 0; + } + g_target = cycle.enumItem(maxlines-1); + cycle.removeItem(maxlines-1); + } + // put g_target at the end of cycle + cycle.addItem(g_target); + } + + // otherwise g_target is the last item of cycle + else g_target = cycle.enumItem(cycle.getNumItems()-1); + + // TODO verify fix from pieter! + if (g_target == null) + return; + + + // fade out g_target + g_target.setTargetA(0); + g_target.setTargetY(g_target.getGuiY()); + if (!quick_change) g_target.setTargetSpeed(0.25); // fade or quick show/hide + else g_target.setTargetSpeed(0); + g_target.gotoTarget(); +} + +g_target.onTargetReached () +{ + if (g_target.getAlpha() == 0) + { + // setback g_target to default values + g_target.hide(); + g_target.setAlpha(255); + // detect if rating stars are visible and store the line tb shown in g_target + if (infocomp_show_rating.getData() == "1") + { + g_target = cycle.enumItem(maxlines-2); + cycle.removeItem(maxlines-2); + } + else + { + g_target = cycle.enumItem(maxlines-1); + cycle.removeItem(maxlines-1); + } + // better set g-target alpha to 0 and, show this line and fade in + g_target.setAlpha(0); + g_target.show(); + g_target.setTargetA(255); + g_target.setTargetY(getGuiY()); + if (!quick_change) g_target.setTargetSpeed(0.25); // fade or quick show/hide + else + { + g_target.setTargetSpeed(0); + string v = getToken(g_target.getID(), ".", 2); + setPrivateString (getSkinName(), "FileInfo_usersel", v); // save current line + } + g_target.gotoTarget(); + // add g_target to end of cycle + cycle.addItem(g_target); + if (infocomp_cycle.getData() == "1" && !cycler.isRunning()) cycler.start(); // check if we should start cycler + quick_change = 0; + } +} + +// Automatic cycling through items on/off +infocomp_cycle.onDataChanged () +{ + if (l_branding.isVisible()) return; + if (getData() == "1") + { + if (cycler_paused) cycler.start(); + else loadFileInfo(); + cycler_paused = 0; + } + else + { + if (cycler.isRunning()) cycler_paused = 1; + cycler.stop(); + if (g_track.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "track"); + else if (g_year.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "year"); + else if (g_genre.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "genre"); + else if (g_publisher.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "publisher"); + else if (g_albumartist.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "albumartist"); + else if (g_composer.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "composer"); + else if (g_format.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "format"); + else if (g_disc.isVisible()) setPrivateString (getSkinName(), "FileInfo_usersel", "disc"); + } +} + +// Visual Stuff +CycleObject.onEnterArea () +{ + CycleObject.getParent().findObject("label").setAlpha(255); +} + +CycleObject.onLeaveArea () +{ + CycleObject.getParent().findObject("label").setAlpha(180); +} + +CycleObject.onLeftButtonDown (int x, int y) +{ + CycleObject.getParent().findObject("label").setAlpha(220); +} + +CycleObject.onLeftButtonUp (int x, int y) +{ + if (getAlpha() < 255) return; + + setAlpha(255); + + if (quick_change) return; + quick_change = 1; + + cycler.onTimer (); +} + +//---------------------------------------------------------------------------------------------------------------- +// If user clicks on a link item (artist, album, title), let's start a web search +// Therefore we will send an action to the group "sui.content". This action is either "browser_navigate" or +// "browser_search". This action is then proccessed by suicore.maki (showing browser) and then (again) delivered +// to browser.maki (from suicore.maki) +//---------------------------------------------------------------------------------------------------------------- + +/* + +LinkObject.onEnterArea () +{ + LinkObject.getParent().findObject("label").setAlpha(255); +} + +LinkObject.onLeaveArea () +{ + LinkObject.getParent().findObject("label").setAlpha(180); +} + +LinkObject.onLeftButtonDown (int x, int y) +{ + LinkObject.getParent().findObject("label").setAlpha(220); +} + +LinkObject.onLeftButtonUp (int x, int y) +{ + if (getAlpha() < 255) return; + + setAlpha(255); + + // 5.56: special handling for url/streamname + if (LinkObject == linkSurl || LinkObject == linkSname) + { + String nav = t_surl.getText(); + group sui = scriptGroup.getParentLayout().findObject("sui.content"); + if (nav != "") + { + sui.sendAction ("browser_navigate", nav, 0, 0, 0, 0); + return; + } + } + + string s; + if (infocomp_browser.getData() == "1") + { + if (LinkObject == linkArtist) s = t_artist.getText(); + if (LinkObject == linkAlbum) s = t_artist.getText() + " " + t_album.getText(); + if (LinkObject == linkTitle) s = t_artist.getText() + " " + t_title.getText(); + + if (s == "") return; + + group sui = scriptGroup.getParentLayout().findObject("sui.content"); + sui.sendAction ("browser_search", s, 0, 0, 0, 0); + + return; + } + + if (stationLink != "" && ( LinkObject == linkSname || LinkObject == linkSurl)) + { + group sui = scriptGroup.getParentLayout().findObject("sui.content"); + sui.sendAction ("browser_navigate", stationLink, 0, 0, 0, 0); + + return; + } + + String icid = "fileinfotitle"; + if (LinkObject == linkArtist) icid = "fileinfoartist"; + if (LinkObject == linkAlbum) icid = "fileinfoalbum"; + + String artist = t_artist.getText(); + if (artist == "") return; + System.navigateUrlBrowser("http://client.winamp.com/nowplaying/artist/?artistName=" + artist); +} + +*/ + +//---------------------------------------------------------------------------------------------------------------- +// Rating System +//---------------------------------------------------------------------------------------------------------------- + +System.onCurrentTrackRated (int rating) +{ + refreshRating(rating); +} + +RatingButton.onLeftButtonDown (int x, int y) +{ + RatingButton.setAlpha(255); + RatingButton.getParent().findObject("label").setAlpha(220); +} + +RatingButton.onleftClick () +{ + int rating = stringToInteger(getToken(getId(), ".", 1)); + refreshRating(rating); + setCurrentTrackRating(rating); + for ( int i = 1; i <= rating; i++ ) + { + guiobject o = ratingStars.enumItem(i-1); + o.setAlpha(255); + } +} + +RatingButton.onEnterArea () +{ + RatingButton.getParent().findObject("label").setAlpha(255); + + int pos = stringToInteger(getToken(getId(), ".", 1)); + int rating = System.getCurrentTrackRating(); + + star1.hide(); + star2.hide(); + star3.hide(); + star4.hide(); + star5.hide(); + + if (pos >= 1) star1.show(); + if (pos >= 2) star2.show(); + if (pos >= 3) star3.show(); + if (pos >= 4) star4.show(); + if (pos >= 5) star5.show(); + + if (pos > rating) + { + for ( int i = 1; i <= 5; i++ ) + { + guiobject o = ratingStars.enumItem(i-1); + if ( i > pos || i <= rating) + { + o.setAlpha(255); + } + else + { + o.setAlpha(0); + } + } + } + else + { + rate1.setAlpha(255); + rate2.setAlpha(255); + rate3.setAlpha(255); + rate4.setAlpha(255); + rate5.setAlpha(255); + } +} + +RatingButton.onLeaveArea () +{ + RatingButton.getParent().findObject("label").setAlpha(180); + + star1.hide(); + star2.hide(); + star3.hide(); + star4.hide(); + star5.hide(); + rate1.setAlpha(255); + rate2.setAlpha(255); + rate3.setAlpha(255); + rate4.setAlpha(255); + rate5.setAlpha(255); +} + +refreshRating (int rating) +{ + rate1.setActivated(rating >= 1); + rate2.setActivated(rating >= 2); + rate3.setActivated(rating >= 3); + rate4.setActivated(rating >= 4); + rate5.setActivated(rating >= 5); +} + +RatingButton.onRightButtonUp (int x, int y) +{ + popupmenu rmenu = new popupmenu; + rmenu.addcommand("Remove Rating", 1, 0,0); + int result = rmenu.popAtMouse(); + if (result == 1) + { + setCurrentTrackRating(0); + refreshRating(0); + } + complete; +} + +t_rating.onTextChanged (String newtxt) +{ + int w = t_rating.getAutoWidth(); + + group g = g_rating.findObject("infodisplay.line.rating.stars"); + g.setXmlParam("x", integerToString(w)); + g.setXmlParam("w", integerToString(-w)); + rate0.setXmlParam("w", integerToString(w)); +} + +//---------------------------------------------------------------------------------------------------------------- +// Winamp Branding +//---------------------------------------------------------------------------------------------------------------- + +showBranding() +{ + // stop cycler and hide all infolines + cycler.stop(); + g_cover.setAlpha(0); + g_rating.hide(); + g_title.hide(); + g_album.hide(); + g_artist.hide(); + g_year.hide(); + g_genre.hide(); + g_track.hide(); + g_publisher.hide(); + g_composer.hide(); + g_format.hide(); + g_albumartist.hide(); + g_surl.hide(); + g_sname.hide(); + g_disc.hide(); + + if (ic_vis_fileinfo.getData() == "1") + { + _BrandingsetXSpace((g_cover.getGuiW() + 2) / 2); + _BrandingsetWSpace(-2); + } + else + { + _BrandingsetXSpace(2); + _BrandingsetWSpace(-2); + } + _BrandinghandleResize(); + l_branding.show(); +} + +_BrandingsizeError (boolean iserror) +{ + if (iserror) + { + l_branding.setAlpha(0); + } + else + { + l_branding.setAlpha(255); + } +} + +// Hide branding of we start playback +System.onPlay () +{ + if (ic_fileinfo.getData() == "1" && removePath(getPlayItemString()) == "demo.mp3") + { + if (getPlayitemmetadatastring("artist") == "DJ Mike Llama" && getplayitemmetadatastring("title") == "Llama Whippin' Intro") + { + showBranding(); + return; + } + } + refreshRating(System.getCurrentTrackRating()); + loadFileInfo(); +} + +ic_fileinfo.onDataChanged () +{ + if (getData() == "0") + { + cycler.stop(); + l_branding.hide(); + } + else if (l_branding.isVisible()) + { + showBranding(); + } + else + { + loadFileInfo(); + } +} + +ic_cover_fileinfo.onDataChanged () +{ + if (l_branding.isVisible()) + { + showBranding(); + } +} + +ic_vis_fileinfo.onDataChanged () +{ + if (l_branding.isVisible()) + { + showBranding(); + } +} + +getTextHeight (InfoLine gn) +{ + return stringToInteger(gn.getXmlParam("h")); +}
\ No newline at end of file |