Ratinganzeige in WSH Panel Mod

Begonnen von mexx, 24. April 2009, 09:48:17

Vorheriges Thema - Nächstes Thema

mexx

Ich hab ein Rating von 1 bis 5. Das Tagfeld heißt auch Rating.

Das möchte ich gern in der Progressbar im WSH Panel Mod als Sterne (Arial Unicode) ganz rechts angezeigt bekommen.
Ich kenn mich leider mit der Scriptsprache nicht aus.

Mein derzeitiges Script (dank tedgo):
Zitat//--------
var weight_normal =400;
var weight_bold   =800;
var italic_no =0;
var italic    =1;
var uline_no  =0;
var uline     =1;
//--------
var align_top   =0;
var align_middle=1;
var align_bottom=2;

var align_left  =0;
var align_center=1;
var align_right =2;

var trim_no     =0;
var trim_chara  =1;
var trim_word   =2;
var trim_elips_chara =3;
var trim_elips_word  =4;
var trim_elips_path  =5;

var flag_rtl        =0x0001;
var flag_vert       =0x0002;
var flag_nofit      =0x0004;
var flag_dispctrl   =0x0020;
var flag_nofallback =0x0400;
var flag_trailspace =0x0800;
var flag_nowrap     =0x1000;
var flag_linelimit  =0x2000;
var flag_noclip     =0x4000;

function StrFmt(alignH,alignV,trim,flag){ return ((alignH<<28)|(alignV<<24)|(trim<<20)|flag); }
//--------
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)); }
//--------
function TimeFmt(t){
   var zpad = function(n){
      var str = n.toString();
      return (str.length<2) ? "0"+str : str;
   }
   var h = Math.floor(t/3600); t-=h*3600;
   var m = Math.floor(t/60); t-=m*60;
   var s = Math.floor(t);
   if(h>0) return h.toString()+":"+zpad(m)+":"+zpad(s);
   return m.toString()+":"+zpad(s);
}
//----------------------------------------------------------------------------

var g_font = gdi.Font("tahoma",11,1);
var g_fileinfo = null;

var g_drag = 0;
var g_drag_seek = 0;

function on_paint(gr){
   var ww = window.Width;
   var wh = window.Height;
   var pos = 0;
   var length = fb.PlaybackLength;
   var txt;

   if(length > 0){
      if(g_drag){
         pos = window.Width * g_drag_seek;
         txt = "Seek " + TimeFmt(g_drag_seek * length) + " / " + TimeFmt(length);
      }
      else{
         pos = window.Width * (fb.PlaybackTime / length);   
         var g_titlefmt = fb.TitleFormat("$div($mul(100,%playback_time_seconds%),%length_seconds%) '%' ");
         txt = g_titlefmt.Eval();
      }
   }

   gr.FillGradRect(  0, 0,    pos, wh/2, 270, RGB(0,200,200), RGB(0,0,0));
   gr.FillGradRect(  0,wh/2,    pos, wh/2, 90, RGB(0,200,200), RGB(0,0,0));
   gr.FillGradRect(pos, 0, ww-pos, wh/2, 270, RGB(90,90,90), RGB(0,0,0));
   gr.FillGradRect(pos, wh/2, ww-pos, wh/2, 90, RGB(90,90,90), RGB(0,0,0));

   gr.FillGradRect(2,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(3,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect((ww-4)/10-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect((ww-4)/10,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect((ww-4)/10+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect((ww-4)/5-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect((ww-4)/5,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect((ww-4)/5+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(3*(ww-4)/10-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(3*(ww-4)/10,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(3*(ww-4)/10+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(2*(ww-4)/5-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(2*(ww-4)/5,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(2*(ww-4)/5+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(ww/2-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(ww/2,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(ww/2+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(3*(ww-4)/5-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(3*(ww-4)/5,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(3*(ww-4)/5+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(7*(ww-4)/10-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(7*(ww-4)/10,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(7*(ww-4)/10+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(4*(ww-4)/5-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(4*(ww-4)/5,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(4*(ww-4)/5+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(9*(ww-4)/10-1,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(9*(ww-4)/10,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));
   gr.FillGradRect(9*(ww-4)/10+1,0, 1, wh-1, 90, RGB(60,59,59), RGB(0,0,0));

   gr.FillGradRect(ww-4,0, 1, wh-1, 90, RGB(133,133,133), RGB(0,0,0));
   gr.FillGradRect(ww-3,0, 1, wh-1, 90, RGB(163,163,163), RGB(163,163,163));

   gr.DrawRect(0,0, ww, wh, 4.0, RGB(0,0,0));

        gr.SetTextRenderingHint(3);
   gr.DrawString(txt, g_font, RGB(255,255,255), 0, 0, ww, wh,
      StrFmt(align_center, align_middle, trim_no, flag_nowrap | flag_noclip));
}
function on_size(){
}
function on_focus(focused){
   //fb.trace("focus " + focused);
}
function on_key_down(key){
   //fb.trace("key " + key);
}
function on_mouse_lbtn_down(x,y){
   g_drag = 1;
}
function on_mouse_lbtn_up(x,y){
   if(g_drag){
      g_drag = 0;
      g_drag_seek = x / window.Width;
      g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
      fb.PlaybackTime = fb.PlaybackLength * g_drag_seek;
   }
}
function on_mouse_move(x,y){
   if(g_drag){
      g_drag_seek = x / window.Width;
      g_drag_seek = (g_drag_seek<0) ? 0 : (g_drag_seek<1) ? g_drag_seek : 1;
      window.Repaint();
   }
}
function on_mouse_wheel(delta){
   //fb.trace("wheel " + delta);
}
//--------
function on_playback_starting(cmd, paused){
}
function on_playback_new_track(info){
   window.Repaint();
}
function on_playback_stop(){
   window.Repaint();
}
function on_playback_seek(time){
   window.Repaint();
}
function on_playback_pause(state){
}
function on_playback_edited(){
}
function on_playback_dynamic_info(){
}
function on_playback_dynamic_info_track(){
}
function on_playback_time(time){
   window.Repaint();
}
function on_volume_change(val){
}

//EOF

THX im Voraus
mexx

tedgo

#1
Das geht auf verschiedene Wege. WSH Panel mod erlaubt den direkten Zugriff auf die Metadaten (oder Fileinfo) ohne Titleformating. Da du aber auch die Abspielzeit mit TF nutzt, gebe ich dir das Beispiel hierfür ;)

Du musst dann folgende Zeilen in on_paint hinzufügen:


var g_font_rating = gdi.Font("Arial Unicode MS",15,0);
var tfo_rating = fb.Titleformat("$repeat($char(9733),%rating%)$repeat($char(9734),$sub(5,%rating%))");
var txt_rating = tfo_rating.Eval();
gr.DrawString(txt_rating, g_font_rating, RGB(255, 255, 255), 0, 0, ww-10, wh, StrFmt(align_right, align_middle, trim_no, flag_nowrap | flag_noclip));



Ich häng dir das modifizierte Skript mal an.
Ich hoffe mal, das passt so ;)

(Ich habe auch DrawString dringelassen, weil ich mich erinnere, dass dir das von der Optik her besser gefällt als GdiDrawText. Obwohl GdiDrawText schneller wäre...)

EDIT:
Hatte in der obigen Codebox die Variable für den Rating-Font vergessen  ::)
Im Skript ist sie aber drin...

mexx

jou,

das funzt erstmal schon..... :top:

Aber

- wenn kein Rating vorgenommen wurde, sollten keine Sterne erscheinen,
- die Sterne möchte ich gern in der Farbe variieren können und
- die Trennstriche sollten weiterhin in der Farbe wie im alten Script erscheinen (jetzt sind sie wohl in 0/200/200)

Oh man, auch noch Ansprüche stellen..... ;)

tedgo

Also wirklich, du bist ja mit nix zufrieden... ;)
Na gut, dann schau ich mir das Skript noch mal an.

mexx

Zitat von: tedgo in 24. April 2009, 10:41:00
Also wirklich, du bist ja mit nix zufrieden... ;) ...

Jou, und vor allem dann, wenn ma keine Ahnung hat! :D

Dafür bin ich in meinem Fachgebiet Experte.  :) Aber das hilft hier nicht weiter. :)

tedgo

#5
 :crazy:

Also, habs mal angehängt.
Ist zwar nicht sonderlich elegant, funktioniert aber.
(Habe jetzt einfach zwei DrawStrings aneinandergehängt wegen der unterschiedlichen Farben. War jetzt auf die Schnelle die einfachste Lösung ;))

EDIT:
Schöner wären ja Bildchen, statt Text-Sterne :)

mexx

hehe,

so hab ich mir das gedacht.  :top: :top: :top: :top: :top: :top:

Obs elegant ist oder nicht, ist mir eigentlich egal. Hauptsache es funzt. Und das tut es.  :)

Denn....viele Wege führen nach Rom. ;)

THX :top:
mexx

tedgo

Hab das Skript noch ein bisschen eingedampft (allerdings jetzt mit GdiDrawText).
Das Rating ist geblieben wie bisher (hatte jetzt keine Lust das eleganter zu machen, weil ich würde anstatt die Sterne mit Text zu zeichnen lieber Bilder dafür benutzen ;)).
Aber anstatt die Separatoren in on_paint alle einzeln zu zeichnen, habe ich eine "Separator Class" eingebaut und erstelle die Separatoren in on_size.

mexx

Zitat von: tedgo in 24. April 2009, 12:33:48
Hab das Skript noch ein bisschen eingedampft (allerdings jetzt mit GdiDrawText).
Das Rating ist geblieben wie bisher (hatte jetzt keine Lust das eleganter zu machen, weil ich würde anstatt die Sterne mit Text zu zeichnen lieber Bilder dafür benutzen ;)).
Aber anstatt die Separatoren in on_paint alle einzeln zu zeichnen, habe ich eine "Separator Class" eingebaut und erstelle die Separatoren in on_size.

Danke tedgo,

mir reicht das wirklich, was das neue Sript hergibt. Ist für mich Top. :top:


mexx