WSH Panel mod - Scriptbeispiele (Seekbar, Rating, Album-Rating, Coverart & mehr)

Begonnen von TomPro, 16. Juni 2009, 19:24:54

« vorheriges - nächstes »

Andre69

Zitat von: tedgo am 17. März 2010, 08:58:16
Wieso nutzt du nicht einfach die Panel Properties für die Eingabe der Optionen? Dann müsste man nicht immer im Script danach suchen und darin rumpfuschen. :)
Weil ich dieses Feature noch nie genutzt habe. Ok, dann ab jetzt :)

Eine kleine Abwandlung und man kann beliebige Personen "Beobachten":

In Properties eingeben:
key = api Key (Wie gehabt)
Usertimer = steht wieder auf 5Minuten
User = Usernamen mit Komma getrennt z.B.: Oceansway,GenBully,Deathkeeper
Je mehr User man eingibt umso langsamer wird es weil für jeden User eine Eigene abfrage an Last.fm geschickt wird.

var key = window.GetProperty("Key", "");
var user_temp = window.GetProperty("User", "");
var user = user_temp.split(",");
var g_interval = window.GetProperty("Usertimer", 300000);
var usertimer = window.CreateTimerInterval(g_interval);
var uartists = new Array();
var utitles = new Array();
var udate = new Array();
var font = gdi.Font("consolas", 13);
var DT_LEFT = 0x00000000;
var DT_WORD_ELLIPSIS = 0x00040000;
var DT_NOPREFIX = 0x00000800;
var ww = wh = 0;

if (window.InstanceType == 0) {
textcolor = window.GetColorCUI(0);
textcolor_hl = window.GetColorCUI(1);
backcolor = window.GetColorCUI(3);
} else if (window.InstanceType == 1) {
textcolor = window.GetColorDUI(0);
textcolor_hl = window.GetColorDUI(2);
backcolor = window.GetColorDUI(1);
selcolor = window.GetColorDUI(3);
}

function xpathconn(url) {
xml = new ActiveXObject("Msxml2.DOMDocument.6.0");
xml.async = false;
xml.validateOnParse = false;
xml.load(url);
xml.setProperty("SelectionLanguage", "XPath");
return xml;
}

function getuser() {
try {
for(i = 0; i < user.length; i++) {
var url = "http://ws.audioscrobbler.com/2.0/?method=user.getrecenttracks&user=" + user[i] + "&api_key=" + key + "&limit=1";
xmldoc = xpathconn(url);
uartists[user[i]] = xmldoc.selectSingleNode("/lfm/recenttracks/track/artist").text;
utitles[user[i]] = xmldoc.selectSingleNode("/lfm/recenttracks/track/name").text;
udate[user[i]] = xmldoc.selectSingleNode("/lfm/recenttracks/track/date").text;
}
}
catch(e) {
fb.trace("error: ",e);
}
}

function on_paint(gr) {
gr.FillSolidRect(0,0,ww,wh,backcolor);
var text = "";
for(i = 0; i < user.length; i++) {
text += user[i] + " (" + udate[user[i]] + ")\n";
text += uartists[user[i]] + " - " + utitles[user[i]] + "\n"
}
gr.GdiDrawText(text, font, textcolor, 3, 3, ww - 6, wh - 6, DT_LEFT | DT_WORD_ELLIPSIS | DT_NOPREFIX);
}

function on_size() {
ww = window.width;
wh = window.height;
}

function on_timer(id) {
if (usertimer && id == usertimer.ID) {
getuser();
}
}

getuser();


Andre69

Ich habe im script SimpleThemedButton aus dem wsh samples folgendes geändert:
$buttons = null;
for(n = 0; n < 6; n++) {
$buttons += {
n: new SimpleButton(0, 20*n, 80, 20, "Testbutton " + n, function () {
// Funktion
})
}
}

Es wird nichts angezeigt.
Wie kann ich "dynamische" Buttons erstellen ?

Andre69

Antwort:
$buttons = new Array();
for(n = 0; n < 6; n++) {
$buttons[n] = new SimpleButton(0, 20*n, 80, 20, "Testbutton " + n, function () {});
}

:top:

grimes

PDF

Öffnet, falls im Musikordner vorhanden, eine pdf-Datei im pdf-Reader.




//pdf by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.2+ required
//DUI/CUI ready


function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

//var g_font = gdi.Font("Segoe UI", 12, 0);
var g_font = dui == 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
//var color = RGB(200,0,0);
var color = dui == 1 ? window.GetColorDUI(2) : RGB(200,0,0);
//var color2 = RGB(0,0,0);
var color2 = dui == 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
var dui = window.InstanceType;

var program;
var path;
var arr = new Array();
var split = new Array();
var filename = new Array();
var pdf = false;
var pdfno = 1;

var pdfreader = window.GetProperty("pdfreader", "acrord32");

function on_paint(gr){
gr.FillSolidRect(0, 0, window.Width, window.Height, dui ==1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
    if (pdf) {
    gr.DrawString("pdf file: " + pdfno + "/" + arr.length + " (mouse wheel, click to start pdf reader)", g_font, color2, 5, 10, window.Width, window.Height, 0x00080000);
    for (i = 0; i < filename.length; i++) {
            gr.DrawString(i+1 + ". " + filename[i], g_font, color2, 5, i*40 + 40, window.Width, window.Height, 0x00080000);
        }
    }
    else {
        gr.DrawString("no pdf", g_font, color2, 5, 10, window.Width, window.Height, 0x11005000);
    }
}

function on_mouse_lbtn_down(x, y){
    if (pdf) {
        program = new ActiveXObject("Shell.Application");
        program.ShellExecute(pdfreader,  '"' + arr[pdfno-1] + "", "", "open", 1);
    }
}

function on_playback_new_track() {
    path = fb.TitleFormat("$directory_path(%path%)").Eval();
    arr = utils.Glob(path + "\\*.pdf").toArray();
    if (arr.length === 0) {
        pdf = false;   
    }
    else {pdf = true;}
    filename.splice(0, filename.length);
    for (i = 0; i < arr.length; i++) {
        split = arr[i].split("\\");
        filename.push(split[split.length-1]);
    }
    window.Repaint();
}

function on_mouse_wheel(delta){
for (i = 0; i<delta; i++) {pdfno++;}
for (i = 0; i<-delta; i++) {pdfno--;}
if(pdfno < 1) pdfno = 1;
    if(pdfno > arr.length) pdfno = arr.length;
window.Repaint();
}

function on_colors_changed() {
    color = dui ==1 ? window.GetColorDUI(2) : RGB(200,0,0);
    color2 = dui ==1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
    window.Repaint();
}

function on_font_changed() {
    g_font = dui == 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
    window.Repaint();
}




grimes

Cover History


//cover history by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.2+ required
//DUI/CUI ready


function RGB(r,g,b){ return (0xff000000|(r<<16)|(g<<8)|(b)); }

var dui = window.InstanceType;
//var g_font = gdi.Font("Segoe UI", 12, 0);
var g_font = dui == 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
//var color = RGB(200,0,0);
var color = dui == 1 ? window.GetColorDUI(2) : RGB(200,0,0);
//var color2 = RGB(0,0,0);
var color2 = dui == 1 ? window.GetColorDUI(0) : window.GetColorCUI(0);

var id = 0;
var zz = 0;
var ww = 0, wh = 0;
var historyarray = new Array();
historyarray.reverse();
var g_img = null;
var path, dirpath;
var dirpatharray = new Array();

function on_paint(gr) {
    gr.FillSolidRect(0, 0, window.Width, window.Height, dui ==1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
    if (g_img) {
        var scale = 0;
        var x = 0,
            y = 0;
        var scale_w = ww / g_img.Width;
        var scale_h = wh / g_img.Height;

        if (scale_w <= scale_h) {
            scale = scale_w;
            y = (wh - g_img.Height * scale) / 2;
        } else {
            scale = scale_h;
            x = (ww - g_img.Width * scale) / 2;
        }
    gr.DrawImage(g_img, x, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
    gr.GdiDrawText(zz, g_font, color, 10, 5, window.Width - 10, window.Height, 0x00000000);
    }
    else {gr.DrawString("no history", g_font, color2, 0, 0, window.Width, window.Height, 0x11005000);}
}

function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function on_playback_new_track(metadb) {
    if (g_img) g_img.Dispose();
    path = fb.TitleFormat("%path%").Eval();
    dirpath = fb.Titleformat("$directory_path(%path%)").Eval();
    dirpatharray.unshift(dirpath);
    dirpatharray.splice(2,1);
    if (dirpatharray[0] !== dirpatharray[1]) historyarray.unshift(path);
    g_img = utils.GetAlbumArt(historyarray[zz], id);
    window.Repaint();
}

function on_playback_stop(reason) {
    window.Repaint();
}

function on_mouse_lbtn_down(){
    if (zz < historyarray.length-1) {
        zz++;
    }
    else {zz = 0;}
    if (g_img) g_img = utils.GetAlbumArt(historyarray[zz], id);
    window.Repaint();
}

function on_mouse_move() {
if (g_img) window.SetCursor(32649);
}

function on_mouse_rbtn_up(x, y) {
    var MF_SEPARATOR = 0x00000800;
    var MF_STRING = 0x00000000;
    var _menu = window.CreatePopupMenu();
    var idx;
    _menu.AppendMenuItem(MF_STRING, 1, "cover");
    _menu.AppendMenuItem(MF_STRING, 2, "back");
    _menu.AppendMenuItem(MF_STRING, 3, "disc");
    _menu.AppendMenuItem(MF_STRING, 4, "icon");
    _menu.AppendMenuItem(MF_STRING, 5, "artist");
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    //_menu.AppendMenuItem(MF_STRING, 5, "Properties");
    _menu.AppendMenuItem(MF_STRING, 6, "Configure...");
    _menu.CheckMenuRadioItem(1, 5, id + 1);
    idx = _menu.TrackPopupMenu(x, y);
    switch (idx) {
    case 1:
        id = 0;
        break;
    case 2:
        id = 1;
        break;
    case 3:
        id = 2;
        break;
    case 4:
        id = 3;
        break;
    case 5:
        id = 4;
        break;
    case 5:
        window.ShowProperties();
        break;
    case 6:
        window.ShowConfigure();
    }
   
    _menu.Dispose();
    if (g_img) {
        g_img.Dispose();
        g_img = utils.GetAlbumArt(historyarray[zz], id);
    }
    window.Repaint();
    return true;
}

function on_colors_changed() {
    color = dui ==1 ? window.GetColorDUI(2) : RGB(200,0,0);
    color2 = dui ==1 ? window.GetColorDUI(0) : window.GetColorCUI(0);
    window.Repaint();
}

function on_font_changed() {
    g_font = dui == 1 ? window.GetFontDUI(0) : window.GetFontCUI(0);
    window.Repaint();
}

grimes

Cover Browser

Features:


  • browsen durch cover/back/disc/icon/artist

  • autoplay

  • show playing track

  • random

  • help

  • arrayupdate instruction

  • sort by tag

  • 3D: Schatten (shadow)

  • 3D: Reflektion (reflection)

  • progressbar




Vorteil: flüssiges Navigieren durch die Cover durch Arrays
Nachteil: Arrayupdate nötig falls weitere Alben zur Media Library hinzugefügt werden



Arrays füllen bzw. Arrayupdate:


  • In foobar2000: Library | Search | %tracknumber% IS 01 | Create Playlist

  • Gesamte erzeugte Playlist markieren | rechtsklick | Utilities | Text Tools | Advanced | Track Pattern: "%path%", | Copy

  • Einen Editor (z.B. Notepad++) öffnen | Einfügen aus Zwischenablage | Ersetzen: \ durch \\ sowie Entfernen des letzten Kommas

  • Wiederholen von Schritt 2 mit Track Pattern: "%album%", und letztes Komma entfernen

  • Einfügen der erzeugten Listen in Zeile 45 bzw. 49 des WSH Panel mod Skripts | Apply







Code unter:
http://pastebin.de/5489

10-4-2010: neue Version
11-4-2010: Release Candidate
12-4-2010: Release Candidate 2
13-4-2010: Release Candidate 3
14-4-2010: Release Candidate 4
16-4-2010: Release Candidate 5
ADD: show playing albums missing in array
CHG: show playing album tag compare: %album% -> $directory_path(%path%)
17-4-2010: Release Candidate 6

19-4-2010: Release





phunkydizco

Suche ein Skript mit dem man das Album Cover mit ein paar Effekten wie z.B. Spiegelung oder Schatten anzeigen kann. Hat jemand sowas?

grimes

@phunkydizco:

Zum Testen: eben aus dem Cover Browser extrahiert.


//cover by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.0+ required
//DUI/CUI ready

function RGB(r, g, b) {
   return (0xff000000 | (r << 16) | (g << 8) | (b));
}

var z = 0;
var g_img = null;
var ww = 0, wh = 0;
var show = true;
var dui = window.InstanceType;
var coverpath = "";
var shadowright = 3;
var gray = 140;
var color5 = RGB(gray, gray, gray);
var scale = 0;
var size = 1.2;

function on_paint(gr) {
   gr.FillSolidRect(0, 0, window.Width, window.Height, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
   var g_img = get_album_art(fb.GetNowPlaying());
   var g_img_rot;
   if (g_img) {
       var scale = 0;
       var y = 0;
       var yflip = 0;
       var scale_w = ww / g_img.Width;
       var scale_h = wh / g_img.Height;
       if (scale_w <= scale_h) {
           scale = scale_w;
           y = (wh - g_img.Height * scale) / 2 - 40;
           yflip = (wh + g_img.Height * scale) / 2 - 40;
       } else {
           scale = scale_h;
           y = 0;
       }
       if (show){
           gr.FillSolidRect(ww * size / 2 - (g_img.Width * scale / 2) + shadowright, y + 4, g_img.Width * scale, g_img.Height * scale, color5);
           gr.DrawImage(g_img, ww * size / 2 - g_img.Width * scale / 2, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
           if (g_img_rot) {g_img_rot.Dispose();}
           if (wh > g_img.Height * scale) {
               g_img_rot = g_img.Clone(0, 0, g_img.Width, g_img.Height);
               g_img_rot.RotateFlip(6);
               gr.DrawImage(g_img_rot, ww * size / 2 - g_img.Width * scale / 2, yflip, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height * 5, 0, 80);
           }              
       }
   }
}

function on_size() {
   ww = window.Width / size;
   wh = window.Height;
}

function get_album_art(metadb) {
   if (metadb)
   return utils.GetAlbumArtV2(metadb, z);
}

function on_playback_new_track(metadb) {
   if (g_img) g_img.Dispose();
   g_img = get_album_art(metadb);
   show = true;
   window.Repaint();
}

function on_playback_stop(reason) {
   show = false;
   window.Repaint();
}

function on_mouse_lbtn_down(){
   if (z < 2) {
       z++;
   }
   else {z = 0;}
   window.Repaint();
}

function on_mouse_move() {
fb.IsPlaying && window.SetCursor(32649);
}

function on_colors_changed() {
   window.Repaint();
}

function on_font_changed() {
   window.Repaint();
}



und so siehts aus:





phunkydizco

Vielen Dank. Sei mir nicht böse, aber das gefällt mir gar nicht. Die Spiegelung ist ja gar keine richtige Spiegelung sondern nur ein umgedrehten gequetschtes Bild.

Hat vielleicht jemand etwas schickeres so im Stil von iTunes, mit einem weichen Schatten und abgerundeten Ecken?

grimes

So, so, der hohe Herr ist mit meiner Reflektion nicht zufrieden. :motzen:

Na ja, habe jetzt das gemacht:




//cover by grimes (modified)
//fb2k 1.0+, WSH Panel Mod 1.3.0+ required
//DUI/CUI ready

function RGB(r, g, b) {
   return (0xff000000 | (r << 16) | (g << 8) | (b));
}
function RGBA(r, g, b, a) {
   return ((a << 24) | (r << 16) | (g << 8) | (b));
}

var z = 0;
var g_img = null;
var ww = 0, wh = 0;
var show = true;
var dui = window.InstanceType;
var coverpath = "";
var shadowright = 3;
var gray = 120;
var color5 = RGB(gray, gray, gray);
var scale = 0;
var size = 1.3;

function on_paint(gr) {
   gr.FillSolidRect(0, 0, window.Width, window.Height, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
   var g_img = get_album_art(fb.GetNowPlaying());
   var g_img_rot;
   if (g_img) {
       var scale = 0;
       var y = 0;
       var yflip = 0;
       var scale_w = ww / g_img.Width;
       var scale_h = wh / g_img.Height;
       if (scale_w <= scale_h) {
           scale = scale_w;
           y = (wh - g_img.Height * scale) / 2 - 40;
           yflip = (wh + g_img.Height * scale) / 2 - 40;
       } else {
           scale = scale_h;
           y = 0;
       }
       if (show){
           gr.FillSolidRect(ww * size / 2 - (g_img.Width * scale / 2) + shadowright, y + 4, g_img.Width * scale, g_img.Height * scale - 4, color5);
           gr.FillGradRect(ww * size / 2 - (g_img.Width * scale / 2) + shadowright, yflip, g_img.Width * scale, g_img.Height * scale / 5, 90, RGBA(gray + 20, gray + 20, gray + 20, 120), dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
           gr.DrawImage(g_img, ww * size / 2 - g_img.Width * scale / 2, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
           if (g_img_rot) {g_img_rot.Dispose();}
           if (wh > g_img.Height * scale) {
               g_img_rot = g_img.Clone(0, 0, g_img.Width, g_img.Height);
               g_img_rot.RotateFlip(6);
               gr.DrawImage(g_img_rot, ww * size / 2 - g_img.Width * scale / 2, yflip, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, 255);
               gr.FillGradRect(ww * size / 2 - (g_img.Width * scale / 2), yflip, g_img.Width * scale, g_img.Height * scale / 5, 90, RGBA(255, 255, 255, 120), dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
               gr.FillSolidRect(ww * size / 2 - (g_img.Width * scale / 2), yflip + g_img.Height * scale / 5, g_img.Width * scale, g_img.Height * scale, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
           }              
       }
   }
}

function on_size() {
   ww = window.Width / size;
   wh = window.Height;
}

function get_album_art(metadb) {
   if (metadb)
   return utils.GetAlbumArtV2(metadb, z);
}

function on_playback_new_track(metadb) {
   if (g_img) g_img.Dispose();
   g_img = get_album_art(metadb);
   show = true;
   window.Repaint();
}

function on_playback_stop(reason) {
   show = false;
   window.Repaint();
}

function on_mouse_lbtn_down(){
   if (z < 2) {
       z++;
   }
   else {z = 0;}
   window.Repaint();
}

function on_mouse_move() {
fb.IsPlaying && window.SetCursor(32649);
}

function on_colors_changed() {
   window.Repaint();
}

function on_font_changed() {
   window.Repaint();
}



phunkydizco


grimes

Coveranimation

Cover mit Mausklick durchs Fenster (Panel) laufen lassen (front -> back -> disc -> front)


//coveranimation1 by grimes
//fb2k 1.0+, WSH Panel Mod 1.3.0+ required
//DUI/CUI ready


var z = 0;
var g_img = get_album_art(fb.GetNowPlaying());
var ww = 0, wh = 0;
var show = true;
var dui = window.InstanceType;
var bool = false;
var g_timer1;
var move = 0;
var right = window.GetProperty("Right", false);
var down = window.GetProperty("Down", false);
var left = window.GetProperty("Left", false);
var up = window.GetProperty("Up", false);
var diagrd = window.GetProperty("Diagonale Right Down", false);
var diagld = window.GetProperty("Diagonale Left Down", false);
var diagru = window.GetProperty("Diagonale Right Up", false);
var diaglu = window.GetProperty("Diagonale Left Up", false);
var effect1 = window.GetProperty("Effect1", false);
var effect2 = window.GetProperty("Effect2", false);
var effect3 = window.GetProperty("Effect3", false);
var effect4 = window.GetProperty("Effect4", false);
var effect5 = window.GetProperty("Effect5", false);
var effect6 = window.GetProperty("Effect6", true);
var effect7 = window.GetProperty("Effect7", false);
var noeffect = window.GetProperty("No Effect", false);
var effectstartstop = window.GetProperty("Effekt on Play/Stop", true);
var start = false;
var stop = false;

function on_paint(gr) {
    gr.FillSolidRect(0, 0, ww, wh, dui === 1 ? window.GetColorDUI(1) : window.GetColorCUI(3));
    if (g_img) {
        var scale = 0;
        var x = 0,
            y = 0;
        var scale_w = ww / g_img.Width;
        var scale_h = wh / g_img.Height;

        if (scale_w <= scale_h) {
            scale = scale_w;
            y = (wh - g_img.Height * scale) / 2;
        } else {
            scale = scale_h;
            x = (ww - g_img.Width * scale) / 2;
        }
        if (show){
            if (right) {
                gr.DrawImage(g_img, x + move, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (down) {
                gr.DrawImage(g_img, x, y + move, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (left) {
                gr.DrawImage(g_img, x - move, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (up) {
                gr.DrawImage(g_img, x, y - move, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (diagrd) {
                gr.DrawImage(g_img, x + move, y + move, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (diaglu) {
                gr.DrawImage(g_img, x - move, y - move, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (diagru) {
                gr.DrawImage(g_img, x + move, y - move, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (diagld) {
                gr.DrawImage(g_img, x - move, y + move, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (effect1) {
                gr.DrawImage(g_img, x + move, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, move / 4);
            }
            if (effect2) {
                gr.DrawImage(g_img, x + move, y, g_img.Width * scale - Math.abs(move), g_img.Height * scale - Math.abs(move), 0, 0, g_img.Width, g_img.Height);
            }
            if (effect3) {
                gr.DrawImage(g_img, x, y - move, g_img.Width * scale + move, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);
            }
            if (effect4) {
                gr.DrawImage(g_img, x, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height, 0, 255 - Math.abs(move * 255 / ww));
            }
            if (effect5) {
                gr.DrawImage(g_img, x + move, y + move, g_img.Width * scale - move, g_img.Height * scale - move, 0, 0, g_img.Width, g_img.Height, move / 4);
            }
            if (effect6) {
                gr.DrawImage(g_img, ww / 2 - (g_img.Width * scale  - Math.abs(move)) / 2, wh / 2 - (g_img.Height * scale  - Math.abs(move)) / 2, ((g_img.Width * scale) - Math.abs(move)), ((g_img.Height * scale) - Math.abs(move)), 0, 0, g_img.Width, g_img.Height);
            }
            if (effect7) {
                gr.DrawImage(g_img, ww / 2 - (g_img.Width * scale  - Math.abs(move)) / 2, wh / 2 - (g_img.Height * scale  - Math.abs(move)) / 2, ((g_img.Width * scale) - Math.abs(move)), ((g_img.Height * scale) - Math.abs(move)), 0, 0, g_img.Width, g_img.Height, move / 3);
            }
            if (noeffect) {
                gr.DrawImage(g_img, x, y, g_img.Width * scale, g_img.Height * scale, 0, 0, g_img.Width, g_img.Height);           
            }
        }
    }
}

function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function get_album_art(metadb) {
    if (metadb)
    return utils.GetAlbumArtV2(metadb, z);
}

function on_playback_new_track(metadb) {
    if (g_img) g_img.Dispose();
    g_img = get_album_art(metadb);
    show = true;
    if (effectstartstop) {
        move = -ww;
        start = true;
        stop = false;
        g_timer1 = window.CreateTimerInterval(40);
    }
    window.Repaint();
}

function on_playback_stop(reason) {
    stop = true;
    start = false;
    if (reason !== 2 && effectstartstop) {
        move = 0;
        g_timer1 = window.CreateTimerInterval(40);
    }
    if (!effectstartstop) {
        show = false;
    }
    window.Repaint();
}

function on_mouse_lbtn_down(){
    show = true;
    execute = false;
    start = false;
    stop = false;
    if (noeffect) {
        if (z < 2) {
            z++;
        }
        else {
            z = 0;
        }
        g_img = get_album_art(fb.GetNowPlaying());
        window.Repaint();
    }
    else {
        bool = false;
        g_timer1 = window.CreateTimerInterval(40);
    }
}

function on_timer(id) {
    if (g_timer1 && id === g_timer1.ID) {
        move += 40;
        if (start) {
            if (move >= 0) {
                move = 0;
                window.KillTimer(g_timer1);
                g_timer1.Dispose();
            }
        }
        if (stop) {
            if (move >= ww) {
                move = ww;
                show = false;
                window.KillTimer(g_timer1);
                g_timer1.Dispose();
            }
        }
        else {
            if (move >= ww) {
                if (z < 2) {
                    z++;
                }
                else {
                    z = 0;
                }
                bool = true;
                move = -ww;
                g_img = get_album_art(fb.GetNowPlaying());
            }
            if (move >= 0 && bool) {
                window.KillTimer(g_timer1);
                g_timer1.Dispose();
                move = 0;
            }
        }
        window.Repaint();
    }
}

function on_mouse_rbtn_up(x, y) {
    var MF_SEPARATOR = 0x00000800;
    var MF_STRING = 0x00000000;
    var _menu = window.CreatePopupMenu();
    var idx;
    _menu.AppendMenuItem(MF_STRING, 1, "Right");
    _menu.AppendMenuItem(MF_STRING, 2, "Left");
    _menu.AppendMenuItem(MF_STRING, 3, "Down");
    _menu.AppendMenuItem(MF_STRING, 4, "Up");
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 5, "Diagonale Right Down");
    _menu.AppendMenuItem(MF_STRING, 6, "Diagonale Right Up");
    _menu.AppendMenuItem(MF_STRING, 7, "Diagonale Left Down");
    _menu.AppendMenuItem(MF_STRING, 8, "Diagonale Left Up");
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 9, "Effect1");
    _menu.AppendMenuItem(MF_STRING, 10, "Effect2");
    _menu.AppendMenuItem(MF_STRING, 11, "Effect3");
    _menu.AppendMenuItem(MF_STRING, 12, "Effect4");
    _menu.AppendMenuItem(MF_STRING, 13, "Effect5");
    _menu.AppendMenuItem(MF_STRING, 14, "Effect6");
    _menu.AppendMenuItem(MF_STRING, 15, "Effect7");
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 16, "No Effect");
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 17, "Effect on Play/Stop");
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_STRING, 20, "Properties");
    _menu.AppendMenuItem(MF_STRING, 21, "Configure...");
    if (right) {
        _menu.CheckMenuRadioItem(1, 16, 1);
    }
    else if (left) {
        _menu.CheckMenuRadioItem(1, 16, 2);
    }
    else if (down) {
        _menu.CheckMenuRadioItem(1, 16, 3);
    }
    else if (up) {
        _menu.CheckMenuRadioItem(1, 16, 4);
    }
    else if (diagrd) {
        _menu.CheckMenuRadioItem(1, 16, 5);
    }
    else if (diagru) {
        _menu.CheckMenuRadioItem(1, 16, 6);
    }
    else if (diagld) {
        _menu.CheckMenuRadioItem(1, 16, 7);
    }
    else if (diaglu) {
        _menu.CheckMenuRadioItem(1, 16, 8);
    }
    else if (effect1) {
        _menu.CheckMenuRadioItem(1, 16, 9);
    }
    else if (effect2) {
        _menu.CheckMenuRadioItem(1, 16, 10);
    }
    else if (effect3) {
        _menu.CheckMenuRadioItem(1, 16, 11);
    }
    else if (effect4) {
        _menu.CheckMenuRadioItem(1, 16, 12);
    }
    else if (effect5) {
        _menu.CheckMenuRadioItem(1, 16, 13);
    }
    else if (effect6) {
        _menu.CheckMenuRadioItem(1, 16, 14);
    }
    else if (effect7) {
        _menu.CheckMenuRadioItem(1, 16, 15);
    }
    else if (noeffect) {
        _menu.CheckMenuRadioItem(1, 16, 16);
    }
    if (effectstartstop) {
        _menu.CheckMenuItem(17, true);
    }
    else {
            _menu.CheckMenuItem(17, false);
    }
   
    idx = _menu.TrackPopupMenu(x, y);
    switch (idx) {
    case 1:
        if (!right) {
            right = true;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 2:
        if (!left) {
            right = false;
            left = true;
            down = false
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 3:
        if (!down) {
            right = false;
            left = false;
            down = true;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 4:
        if (!up) {
            right = false;
            left = false;
            down = false;
            up = true;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 5:
        if (!diagrd) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = true;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 6:
        if (!diagru) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = true;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 7:
        if (!diagld) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = true;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 8:
        if (!diaglu) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = true;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 9:
        if (!effect1) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = true;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 10:
        if (!effect2) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = true;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 11:
        if (!effect3) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = true;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 12:
        if (!effect4) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = true;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 13:
        if (!effect5) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = true;
            effect6 = false;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 14:
        if (!effect6) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = true;
            effect7 = false;
            noeffect = false;
        }
        break;
    case 15:
        if (!effect7) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = true;
            noeffect = false;
        }
        break;
    case 16:
        if (!noeffect) {
            right = false;
            left = false;
            down = false;
            up = false;
            diagrd = false;
            diagru = false;
            diagld = false;
            diaglu = false;
            effect1 = false;
            effect2 = false;
            effect3 = false;
            effect4 = false;
            effect5 = false;
            effect6 = false;
            effect7 = false;
            noeffect = true;
        }
        break;
    case 17:
        if (!effectstartstop) {
            effectstartstop = true;
        }
        else {
            effectstartstop = false;
        }
        window.Repaint();
        break;
    case 20:
        window.ShowProperties();
        break;
    case 21:
        window.ShowConfigure();
    }
    _menu.Dispose();
    window.Repaint();
    return true;
}

function on_mouse_move() {
fb.IsPlaying && window.SetCursor(32649);
}

function on_colors_changed() {
    window.Repaint();
}

function on_font_changed() {
    window.Repaint();
}


21-4-2010 mehrere Effekte
22-4-2010 Effect on Play/Stop Track


Foo Foo

Habe mal die config Monolite Plus getested http://junior-spirit.deviantart.com/art/MonoLite-Plus-0-4-3-151086022
Dort ist ein Skript eigebaut mit dem man die Toolbar als Pop Up Menue benutzen kann.
Hier ist der JSkript code..

// ==PREPROCESSOR==
// @import "%fb2k_path%skin\mono_lite_2\scripts\common.js"
// @import "%fb2k_path%skin\mono_lite_2\scripts\tooltip_buttons.js"
// ==/PREPROCESSOR==

window.GetProperty("mode",1);
window.GetProperty("quality",5);
window.GetProperty("genre",1);
window.GetProperty("mood",0);

//Refresh on track change
on_item_focus_change();

function on_paint(gr){
var FP = fb.ComponentPath.replace("components","skin");
var icon = gdi.Image(FP+ "mono_lite_2/menu.png");
gr.FillSolidRect(0,0,ww,wh,RGB(220,220,220));
gr.DrawImage(icon,0,0,20,18,0,0,20,18);
}

//Preferences
function on_mouse_rbtn_down(x, y) {
var basemenu = window.CreatePopupMenu();
    var child1 = window.CreatePopupMenu();
    var ret;

    basemenu.AppendMenuItem(MF_STRING, 6, "Show toolbars");
    basemenu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    basemenu.AppendMenuItem(MF_STRING, 2, "Compact menu");
    basemenu.AppendMenuItem(MF_STRING, 1, "Full menu");
    basemenu.CheckMenuRadioItem(1, 2, window.GetProperty("mode"));
    basemenu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child1.ID, "Shoutcast");
   
    child1.AppendMenuItem(MF_STRING, 3, "Search by Genre");
    child1.AppendMenuItem(MF_STRING, 4, "Search by Mood");
    child1.CheckMenuItem(3, window.GetProperty("genre"));
    child1.CheckMenuItem(4, window.GetProperty("mood"));
    child1.AppendMenuItem(MF_SEPARATOR, 0, 0);
    child1.AppendMenuItem(MF_STRING, 5, "Any quality");
    child1.AppendMenuItem(MF_STRING, 999, "Broadband");
    child1.AppendMenuItem(MF_STRING, 128, "128 kpbs");
    child1.AppendMenuItem(MF_STRING, 56, "56 kpbs");
    child1.AppendMenuItem(MF_STRING, 28, "28 kpbs");
    child1.CheckMenuRadioItem(5, 128, window.GetProperty("quality"));
   
    var ret = basemenu.TrackPopupMenu(x, y);
if (ret == 0) return;
switch (ret) {
case 1:
        window.SetProperty("mode",1);
break;
case 2:
window.SetProperty("mode",2);
break;
    case 3:
        window.GetProperty("genre") == 0 ? window.SetProperty("genre", 1) : window.SetProperty("genre", 0);
break;
    case 4:
        window.GetProperty("mood") == 0 ? window.SetProperty("mood", 1) : window.SetProperty("mood", 0);
break;
case 5:
window.SetProperty("quality",5);
break;
    case 6:
        fb.RunMainMenuCommand("View/Show toolbars");
        break;
    case 999:
window.SetProperty("quality",999);
break;
    case 128:
window.SetProperty("quality",128);
break;
    case 56:
window.SetProperty("quality",56);
break;
    case 28:
window.SetProperty("quality",28);
break;
    }       
}

function on_mouse_mbtn_down(x, y) {
    window.ShowConfigure();
}

//Fixed coords for menu
function on_mouse_lbtn_down(x, y) {
    draw_menu(0,19)
}

function draw_menu(x, y) {
    if(window.GetProperty("mode") == 1) {
        var basemenu = window.CreatePopupMenu();
       
        var child1 = window.CreatePopupMenu(); //File
        var child2 = window.CreatePopupMenu(); //Edit
        var child3 = window.CreatePopupMenu(); //View
        var child4 = window.CreatePopupMenu(); //Playback
        var child5 = window.CreatePopupMenu(); //Library
        var child6 = window.CreatePopupMenu(); //Help

        var menuman1 = fb.CreateMainMenuManager();
        var menuman2 = fb.CreateMainMenuManager();
        var menuman3 = fb.CreateMainMenuManager();
        var menuman4 = fb.CreateMainMenuManager();
        var menuman5 = fb.CreateMainMenuManager();
        var menuman6 = fb.CreateMainMenuManager();

        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child1.ID, "File");
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child2.ID, "Edit");
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child3.ID, "View");
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child4.ID, "Playback");
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child5.ID, "Library");
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child6.ID, "Help");

        menuman1.Init("file");
        menuman2.Init("edit");
        menuman3.Init("View");
        menuman4.Init("playback");
        menuman5.Init("library");
        menuman6.Init("help");

        menuman1.BuildMenu(child1, 1, 1000);
        menuman2.BuildMenu(child2, 1001, 1000);
        menuman3.BuildMenu(child3, 2001, 1000);
        menuman4.BuildMenu(child4, 3001, 1000);
        menuman5.BuildMenu(child5, 4001, 1000);
        menuman6.BuildMenu(child6, 5001, 1000);

        ret = 0;
        ret = basemenu.TrackPopupMenu(x, y);

        //fb.trace(ret);
        switch (true){
            case (ret >= 1 && ret <= 1000):
                menuman1.ExecuteByID(ret - 1);
                break;
            case (ret >= 1001 && ret <= 2000):
                menuman2.ExecuteByID(ret - 1001);
                break;
            case (ret >= 2001 && ret <= 3000):
                menuman3.ExecuteByID(ret - 2001);
                break;
            case (ret >= 3001 && ret <= 4000):
                menuman4.ExecuteByID(ret - 3001);
                break;
            case (ret >= 4001 && ret <= 5000):
                menuman5.ExecuteByID(ret - 4001);
                break;
            case (ret >= 5001 && ret <= 6000):
                menuman6.ExecuteByID(ret - 5001);
                break;
        }
        basemenu.Dispose();
        menuman1.Dispose();
        menuman2.Dispose();
        menuman3.Dispose();
        menuman4.Dispose();
        menuman5.Dispose();
        menuman6.Dispose();
    }

    else{
        //Compact menu
        var basemenu = window.CreatePopupMenu();
        var child1 = window.CreatePopupMenu();
        var child2 = window.CreatePopupMenu();
        var child3 = window.CreatePopupMenu();
        var child4 = window.CreatePopupMenu();
        var child5 = window.CreatePopupMenu();
        var child6 = window.CreatePopupMenu();
        var ret;
        var mood_array;
        var genre_array;
       
        //Split multiline tags into an array
        function split_tag(t) {
            var splitstrings = [", ",",","; "," - ","/"," "];
            var tag=fb.TitleFormat("$caps(%"+t+"%)").EvalWithMetadb(g_metadb);
            var foo = -1;
            do {
                foo++;
                var splitcheck = tag.indexOf(splitstrings[foo]);
            } while (splitcheck == -1 && foo <tag.length)
            return tag.split(splitstrings[foo]);
        }
       
        //Shoutcast stations to display when metadata unavailable
        function default_items(g,m){
            if (g || m) return;
            else {
            child4.AppendMenuItem(MF_STRING, 52, "Search for Pop stations");
            child4.AppendMenuItem(MF_STRING, 53, "Search for Hip-Hop stations");
            child4.AppendMenuItem(MF_STRING, 54, "Search for Indie stations");
            child4.AppendMenuItem(MF_STRING, 55, "Search for Rock stations");
            child4.AppendMenuItem(MF_SEPARATOR, 0, 0);
            }
        }
       
        //Builds a shoutcast menu entry for each value in a tag
        function scast_menu(tag,menuid) {
            if (g_metadb) {
                if (fb.TitleFormat("$caps(%"+tag+"%)").EvalWithMetadb(g_metadb) != "?") {
                    var s_tag = split_tag(tag);
                    var foo = -1;
                    do {
                        foo++;
                        child4.AppendMenuItem(MF_STRING,menuid++,"Search for "+s_tag[foo]+" stations");
                    } while (foo < s_tag.length-1)
                    child4.AppendMenuItem(MF_SEPARATOR, 0, 0);
                    return s_tag
                }
            }
        }
       
        //this is messy, but it works
        function scast_menu_run(t_array,id) {
            if(ret >= id && ret <= id+999){
                var shout;
                var url = "http://www.shoutcast.com/";
                var bitrate = "&searchCrit=advanced&maxbitrate="+window.GetProperty("quality")+"&mode=bitrate";
                if (t_array == genre_array) {
                    if(window.GetProperty("quality") == 5) {
                        shout = url+"radio/"+encodeURIComponent(t_array[ret-id]);
                    }
                    else {
                        shout = url+"directory/search_results.jsp?s=&sgenre="+encodeURIComponent(t_array[ret-id])+bitrate;
                    }
                }
                else {
                    if(window.GetProperty("quality") == 5) {
                        shout = url+"Internet-Radio/"+encodeURIComponent(t_array[ret-id]);
                    }
                    else {
                        shout = url+"directory/search_results.jsp?s="+encodeURIComponent(t_array[ret-id])+bitrate;
                    }
                }
                WshShell.Run(shout);
        }
    }

        basemenu.AppendMenuItem(MF_STRING, 1, "Play File...");
        if (utils.CheckComponent("foo_cdda", true)) {
            basemenu.AppendMenuItem(MF_STRING, 2, "Play Audio CD...");}
        basemenu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child1.ID, "Library");
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child2.ID, "Playlists");
        basemenu.AppendMenuItem(MF_SEPARATOR, 0, 0);
        if (utils.CheckComponent("foo_lastfm_radio", true)) {
            basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child3.ID, "Last.fm");}
        basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child4.ID, "Shoutcast");
        if (utils.CheckComponent("foo_dop", true)){
            basemenu.AppendMenuItem(MF_SEPARATOR, 0, 0);
            basemenu.AppendMenuItem(MF_STRING | MF_POPUP, child5.ID, "iPod");}

        child1.AppendMenuItem(MF_STRING, 10, "Add files...");
        child1.AppendMenuItem(MF_STRING, 11, "Add folder...");
        child1.AppendMenuItem(MF_STRING, 12, "Add location...");
        child1.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child1.AppendMenuItem(MF_STRING, 13, "Music folders...");
       
        child2.AppendMenuItem(MF_STRING, 25, "Undo");
        child2.AppendMenuItem(MF_STRING, 26, "Redo");
        child2.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child2.AppendMenuItem(MF_STRING, 20, "New playlist");
        child2.AppendMenuItem(MF_STRING, 21, "Load playlist...");
        child2.AppendMenuItem(MF_STRING, 22, "Save playlist...");
        child2.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child2.AppendMenuItem(MF_STRING, 23, "Load XSPF playlist...");
        child2.AppendMenuItem(MF_STRING, 24, "Save XSPF playlist...");

        child3.AppendMenuItem(MF_STRING, 30, "Open a custom station...");
        child3.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child3.AppendMenuItem(MF_STRING, 31, "Personal Last.fm radio");
        child3.AppendMenuItem(MF_STRING, 32, "Recommended Last.fm radio");
        child3.AppendMenuItem(MF_STRING, 33, "Neighbours' Last.fm radio");
        child3.AppendMenuItem(MF_STRING, 34, "Playlist Last.fm radio");
        child3.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child3.AppendMenuItem(MF_STRING, 35, "Friends of Foobar2000 group radio");

        child5.AppendMenuItem(MF_STRING, 47, "Load library");
        child5.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child5.AppendMenuItem(MF_STRING, 40, "Synchronize...");
        child5.AppendMenuItem(MF_STRING, 41, "Send playlists...");
        child5.AppendMenuItem(MF_STRING, 42, "Manage contents...");
        child5.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child5.AppendMenuItem(MF_STRING, 43, "Properties...");
        child5.AppendMenuItem(MF_SEPARATOR, 0, 0);
        child5.AppendMenuItem(MF_STRING, 44, "Eject");

        child4.AppendMenuItem(MF_STRING, 50, "Open a custom station...");
        child4.AppendMenuItem(MF_SEPARATOR, 0, 0);
         if(window.GetProperty("genre") == 1) {
            g_id = 1001;
            genre_array = scast_menu("genre",g_id);
        }
        if(window.GetProperty("mood") == 1) {
            m_id = 2001;
            mood_array = scast_menu("mood",m_id);
        }
        default_items(genre_array,mood_array);
        child4.AppendMenuItem(MF_STRING, 51, "Most popular stations");

        var ret = basemenu.TrackPopupMenu(x, y);
        if (ret == 0) return;
        switch (ret) {
        case 1:
            fb.RunMainMenuCommand("File/Open...");
            break;
        case 2:
            fb.RunMainMenuCommand("File/Open Audio CD...");
            break;
        case 3:
            fb.RunMainMenuCommand("Library/Album List");
            break;       
        case 10:
            fb.RunMainMenuCommand("File/Add Files...");
            break;
        case 11:
            fb.RunMainMenuCommand("File/Add Folder...");
            break;
        case 12:
            fb.RunMainMenuCommand("File/Add Location...");
            break;
        case 13:
            fb.RunMainMenuCommand("Library/Configure");
            break;       
        case 20:
            fb.RunMainMenuCommand("File/New Playlist");
            break;
        case 21:
            fb.RunMainMenuCommand("File/Load Playlist...");
            break;
        case 22:
            fb.RunMainMenuCommand("File/Save Playlist...");
            break;
        case 23:
            fb.RunMainMenuCommand("Library/Load XSPF Playlist...");
            break;
        case 24:
            fb.RunMainMenuCommand("Library/Save to XSPF Playlist...");
            break;   
        case 25:
            fb.RunMainMenuCommand("Edit/Undo");
            break;
        case 26:
            fb.RunMainMenuCommand("Edit/Redo");
            break;   
        case 30:
            fb.RunMainMenuCommand("File/Open Last.fm Radio Station/A custom Last.fm station.");
            break;         
        case 31:
            fb.RunMainMenuCommand("File/Open Last.fm Radio Station/Open Your personal Last.fm radio.");
            break; 
        case 32:
            fb.RunMainMenuCommand("File/Open Last.fm Radio Station/Open Your recommended Last.fm radio.");
            break; 
        case 33:
            fb.RunMainMenuCommand("File/Open Last.fm Radio Station/Open Your neighbours' Last.fm radio.");
            break; 
        case 34:
            fb.RunMainMenuCommand("File/Open Last.fm Radio Station/Open Your playlist Last.fm radio.");
            break; 
        case 35:
            fb.RunMainMenuCommand("File/Open Last.fm Radio Station/Open Friends of foobar2000 Last.fm group.");
            break; 
        case 40:
            fb.RunMainMenuCommand("File/iPod/Synchronise...");
            break;
        case 41:
            fb.RunMainMenuCommand("File/iPod/Send playlists...");
            break;
        case 42:
            fb.RunMainMenuCommand("File/iPod/Manage contents");
            break;
        case 43:
            fb.RunMainMenuCommand("File/iPod/Properties");
            break;
        case 44:
            fb.RunMainMenuCommand("File/iPod/Eject");
            break;
        case 47:
            fb.RunMainMenuCommand("File/iPod/Load library");
            break;
        case 50:
            text_input_box2("Shoutcast Radio","Search for a Shoutcast station...")
            break; 
        case 51:   
            var shout = "http://www.shoutcast.com/most-popular-radio-stations";
            WshShell.Run(shout);
            break;
        case 52:
            var shout = "http://www.shoutcast.com/radio/pop";
            WshShell.Run(shout);
            break;
        case 53:
            var shout = "http://www.shoutcast.com/radio/hip-hop";
            WshShell.Run(shout);
            break;
        case 54:
            var shout = "http://www.shoutcast.com/radio/indie";
            WshShell.Run(shout);
            break;
        case 55:
            var shout = "http://www.shoutcast.com/radio/rock";
            WshShell.Run(shout);
            break;
        default:
            if(window.GetProperty("genre") == 1) {scast_menu_run(genre_array,g_id);}
            if(window.GetProperty("mood") == 1) {scast_menu_run(mood_array,m_id);}
            break;
        }
        basemenu.Dispose();
        child1.Dispose();
        child2.Dispose();
        child3.Dispose();
        child4.Dispose();
        child5.Dispose();
        child6.Dispose();
    }
}

function on_size() {
    ww = window.Width;
    wh = window.Height;
}

function on_playback_new_track() {
on_item_focus_change();
}


Preferences WHS Pannel Mod (save mode disabeld)
Habe die Pfadangabe für mein Skin angepasst aber bekomme es nicht zum laufen...
( common.js / tooltip_buttons.js und menu.png )

Bin nicht so fit unterwegs mit Jskript kann mir jemand helfen?








grimes

//Refresh on track change
on_item_focus_change();


on_item_focus_change ist ein callback

Zum Refresh:

function on_item_focus_change() {
   window.Repaint();
}


(function on_paint() wird bei fokus-Wechsel abgearbeitet)

Fehlerhaft auch:
function on_playback_new_track() {
on_item_focus_change();
}





Andre69

@grimes
Ja, das sind zwar sogenannte Callbacks aber auch einfache Funktionen und diese kann man Argumentationslos aufrufen.
Dieser Callback wurde in commons.js definiert.

@Foo Foo
Hast du die Pfade auch in der commons.js (#179-184) angepasst ?
Was steht denn in der Console als letztes ?

Es funktioniert bei mir einwandfrei.