Archive for February, 2007

How to make a Progress Bar
February 21st, 2007

The standard seek bar is all well and good but it doesn’t integrate well with Track Display and SCPL. A new approach is to use PanelsUI, the $drawrect function and a few of foobar’s standard functions. $drawrect was introduced in the original track info mod panel by Terrestrial and it uses a format like so:

$drawrect(X,Y,W,H,brushColor-R-G-B penColor-R-G-B OPTIONS)
$drawrect(10,10,50,5,brushcolor-200-200-200 pencolor-null)

X and Y determine the position of the bar, W and H determine the width and height, the brush colour is the fill colour of the box, pen colour is the border. Options can include alpha, border width and blurriness. From this basis a rectangle can be built that has a size dependent on a changing value, for instance a track’s progress.

When a track is playing, its progress can be called up using the string %playback_time_seconds%, similarly its total length is given by %length_seconds%. To convert this value into one that is usable the percentage of the track played must be converted into a relative width. For instance if our progress bar is to be 50 pixels across, at 50% played the rectangle drawn must be 25 pixels. This can be done using the following:


$muldiv first multiplies %playback_time_seconds% by 50 (width of rectangle) then divides that value by %length_seconds%. So, to check, if the track is 60 seconds long and is 30 seconds (half way) through: 30×50 = 1500, 1500/60 = 25 pixels. Using $puts we can quietly store this value in a variable, let’s call it “progress“:


If this code is placed in a //PerSecond section of PanelsUI then it will change its value as often as we need it to. To draw this rectangle we use the $get function to include the variable:

$drawrect(10,10,$get(progress),7,brushcolor-200-200-200 pencolor-null)

Thus the complete code is as follows, the first rectangle is a border and an $ifgreater clause has been added so that no rectangle is drawn if no time has passed:

$drawrect(9,9,52,7,brushcolor-null pencolor-101-101-101)
$drawrect(10,10,$get(progress),5,brushcolor-200-200-200 pencolor-null)

PanelsUI Tabs
February 20th, 2007

PanelsUI has a number of fascinating uses. To get the ball rolling, the first Fooblog2000 tip shall explain how to make tabs in this component. An understanding of the trackinfo mod (now renamed Track Display) syntax and functions is helpful. This tip makes use of Three functions; $select which runs different code based on the stored value of a particular PVAR (or persisting variable); $panel which is new to PanelsUI and shows a panel, toolbar, visualisation or playlist in the desired configuration; and thirdly, $button2 which creates a button using text.

run this code when display.mode = 0
run this code when display.mode = 1
run this code when display.mode = 2

display.mode is the persisting variable, a value of 1 is added to its value to give correct $select operation. To change this PVAR a button such as the one below can be used:

$button2(0,160,0,0,140,14,'$font(Calibri,9,,155-155-155)Mode 1','$font(Calibri,9,underline,155-155-155)Mode 1,'PVAR:SET:display.mode:1',)'

This code creates a text button of size 140×14 pixels, 160 pixels down the page. The text is size 9, Calibri font and colour 155-155-155. When moused over the text becomes underlined. Clicking this button changes the value of display.mode from 0 to 1. Thus selecting and running a different set of code. If this code changes the panel that is shown then a tab system has been created – for example, showing a track display panel:

$panel(Option1,Track Display,0,20,%_width%,140,)

With name “Option1″ and panel determined by the second term “Track Display”, this code will show a panel the width of the screen of height 140, starting 20 pixels down the screen. Changing the second term to “Album list” for example will instead show the traditional album list panel.

A complete code would look a little like this:

$panel(Option1,Track Display,0,20,%_width%,140,)
$panel(Option2,Album list,0,20,%_width%,140,)

Download Panel Tabs.pui Example

FofR Configuration Pack v0.2
February 20th, 2007

Many have asked for this, rather than rush out the first release I spent a while refining the code and commenting the various sections. Hopefully everything will be relatively understandable. All image sources are defined in variables at the top of the code, as are font sizes, colours and alignment variables. Please look at the readme.txt file which contains links and information about the required components, fonts and images. The code is in the new standard .pui format which should be placed in your ” C:\Documents and Settings\USER\Application Data\foobar2000\PanelsUI” folder and loaded through Foobar2000′s PanelsUI preferences dialogue.

The code has been released under the Creative Commons Attribution-NonCommercial-ShareAlike 2.5 license which allows derivative works. Please do not remove the link back to this website or the copyright information.

Download Version 0.2

I am now openly accepting feature requests and answering questions. NOTE: For Single Column Playlist, Row Height: 17, Group Rows: 5. My Windows Visual Style is Inverso Reborn Balanced and a discussion and link can be found here. A good resource for downloading artist images is

Components Required

Latest Version of PanelsUI
Quick Search
Custom info
CWB Hooks
Foo Run
Album List Panel
Windows Explorer Panel (direct link)


Calibri – Comes with Windows Vista and cannot be redistributed (but you may find a site that has it)

Read the rest of this entry »

Welcome to Fooblog2000
February 20th, 2007

A new resource for keeping everyone up to date about the goings on of foobar2000 and 3rd party component development, without having to continually traipse forums looking for the important tidbits of data or links.

News is only one of our features, we shall also be sharing coding tips, component guides, configuration downloads, button and image packages and lots more things as we think of them.

This is an open website – anyone can submit a story to be published, all you need is a registered account. All posts are checked before being published.

It is hoped that with time this site will grow and evolve into a valuable and dedicated foobar2000 resource with a flavour different to those resources that already exist.