aboutsummaryrefslogtreecommitdiff
path: root/Src/resources/skins/Big Bento/scripts/fileinfo.m
diff options
context:
space:
mode:
Diffstat (limited to 'Src/resources/skins/Big Bento/scripts/fileinfo.m')
-rw-r--r--Src/resources/skins/Big Bento/scripts/fileinfo.m1277
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