VisualMR Skins
Create your own skins
Note that the skinning format described here relates to the SkinFormat V2.3 used in
VisualMR V1.6 and newer.
Index
-
Skin Components
-
General Comments
-
About XML
-
Color definitions
-
Skin.xml
-
Nodes-Structure
-
Attributes of the 'Skin' node
-
Attributes of 'Font' nodes
-
Attributes of 'Brush' nodes
-
Attributes of the 'General' node
-
Attributes of the 'BrowseClients' node
-
Attributes of 'Layout' nodes (Window Sizes)
-
Attributes of 'SubLayout' nodes (VisualMR layouts)
-
Layout-XML
-
About the 'Form' node
-
General remarks about control nodes
-
'Label' Nodes
-
'StateLabel' Nodes
-
'Image' Nodes
-
'StateImage' Nodes
-
'Progress' Nodes
-
'Button' Nodes
-
'StateButton' Nodes
-
'DrawShape' Nodes
-
'Control' Nodes (Song Queue)
-
Values asignable to controls
-
Actions to be invoked
Skin Components
Creating your own skin is quite easy and no programming knowledge is needed. It
is mainly about creating graphics and know a little about XML-files (which are
quite similar to HTML in some respect). Additionally it is important to
carefully look for correct spelling because computers are very strict on errors
(even upper/lowcase is often important).
A good start for your own skin is by copying an existing skin and
modify it to your needs (move the buttons around by changing their position in
the XML file or replace the bitmaps). Therefore all of my skins are free to be
used as the basis for new VisualMR-skins as long as the original copyright
notice is included. Additionally it is a good practice to change the skin name
if modified to avoid confusions.
As noted in the installing/downloading section
a skin basically is a subdirectory in VisualMR's skins folder, the folder name
being the skin name.
A Skin folder contains these elements:
-
Skin.xml
The place where fonts and colors are definied.
-
Portrait.xml, Landscape.XML, Square.xml und PC.xml
VisualMR supports 4 different main layouts (window sizes) and for each there is an xml-file
defining its user interface elements. Optionally there might be sublayouts
defined for a given window size. For example a file "Portrait_cover.xml"
is a layout 'cover' defined for 'Portrait' size.
-
96 (directory)
The directory holds the 96dpi-images (gif or jpg) that make up the buttons and
the background. 96dpi-images are used for PCs and standard (non-VGA) PocketPCs.
-
192 (directory)
Here you'll find the smae images as in the '96' directory but with 192dpi
making them twice as wide/high. These graphics are used on VGA-PocketPCs only.
Typically I create 192-dpi graphics first and then sccale them down to 96dpi.
General Comments
About XML
XML is in short a structured text filewith many similarities to HTML. XML files
consist of tags that define die nodes. A node consists
of one opening tag (like '<Fonts>') and one matching closing
tag (like'</Fonts>'). Inbetween these two tags other sub-nodes
can be placed (like '<Font>' as a sub-node to '<Fonts>').
You can assign attributes to nodes which are placed within the opening
tag (like '<Font Size="10">' contains one attribut 'Size'
with a value of '10'). If there are no sub-nodes one can use an
abbreviated notation omitting the closing tag by adding a '/' in
front of the opening tag's '>' (example: '<Font Size="10" />'
without a closing tag '</Font>'.
Additionally you can place comments within an XML file which should be
ignored by the application reading it. A comment always starts with '<!--'
and ends with '-->'.
Remarks:
-
Any XML file for VisuelMR must start with a first line
containing '<?xml version="1.0"?>
-
Everything is case sensitive.
-
Make sure that attribute values are always enclosed in single quotes.
-
Make sure that every opening tag has a matching closing tag (or the abbreviated
notation is used).
-
A good test is opening the xml file in Internet Explorer where it is parsed and
checked for errors
Color definitions
Colors are defined in VisualMR skins similar to the way they are defined in
HTML by giving their 'R(ed), G(reen), B(lue)' values in a format
like this: '#xrrggbb', where rr, gg, bb are each a two digit hexadecimal
number).Example: "#FF0000' is light red since red has a maximal value
of 255 (hexl: FF) while green and blue aren't present (0).
Skin.xml
This is the starting point for each skin definition where mainly fonts and
colors are defined. Additionally there is a section defining the look of the
'Browse' forms. Note that my Skin.xml files contain comments explaining the
structure and giving allowed values.
Nodes-Structure
-
Skin Outer frame of the skin definition
-
Fonts has no attributes and contains <Font> tags
defining all fonts used within VisualMR
-
Font 1 Every font is identified by its uniqueu Id
-attribute
-
...
-
Font x
-
Brushes has no attributes and contains <Brush> tags
defining filling colors
-
Brush 1 Every brush (color) is defined by its unique Id
-attribute
-
...
-
Brush y
-
Browse Tag without attributes containing sub-nodes defining
the look of the 'Browse' forms
-
General
A tag whose attributes define the default look for all 'Browse' forms
-
BrowseClients A tag whose attributes override the default
attributes for the 'Connect SoundBridge' form
-
Layouts Tag without attributes containing sub-nodes
defining which layouts (window sizes) are available.
Note that the 'File'/'Layout' menu is defined by the 'SubLayouts' node, not the 'Layouts' node.
-
Layout 1 Defining one layout (window size) uniquely identified by the
Name-attribute
-
...
-
Layout n
-
SubLayouts Tag without attributes containing sub-nodes
defining which sub-layouts are available. The order of the tags define the order in
the 'Layout' menu (the 'Layouts' node defines the 'Window Size' selection!).
-
SubLayout 1 Defining one sub-layout uniquely identified by the
Name-attribute
-
...
-
SubLayout n
Attributes of the 'Skin' node
The following attributes must be present:
-
Name: Name of this Skin
-
SkinFormat: Version number (two numbers seperated by dots) of
the VisualMR skinning format for which this skin has been defined for. This
must be set to 2.2
in order to comply with the features described here.
-
SkinVers: Version number for this skin definition (three
numbers sepperated by dots). The version number can be assigned freely with
newer releases having larger version numbers.
Attributes of 'Font' nodes
The following attributes must be present:
-
Id: Custom, unique idetifier for this font which is used
to reference this font for example in layout.xml-files
-
Face
: Windows-Name of the font (as shown in WordPad or similar)
-
Size
: Size of font ('.' for seperating decimals)
-
Style: String defyning the font style. It can be any
combination (seperated by comma without any spaces) of
the following values: Regular, Bold, Italic, Underline
Attributes of 'Brush' nodes
The following attributes must be present:
-
Id: Custom, unique idetifier for this brush which is
used to reference a color for example in layout.xml-files
-
Color: RGB color to use
Attributes of the 'General' node (sub node to 'Browse' node)
The following attributes must be present:
-
ListFont: Unique Id of the Font
to be used for list items.
-
ListDetailFont: Unique Id of the Font
to be used for the small additional details within an expanded item (like album
title for a song)
-
ButtonFont: Unique Id of the
Font
to be used for the browse buttons
-
HeadlineFont: Unique Id of the
Font
to be used for the headline
-
ForeColor: RGB color
to be used for list items
-
BackColor: list's background RGB color
-
BackColor2: RGB color
for the background of every second list item.
-
FormBackColor: RGB color
for the background of the browse form (outside of the list).
-
TopLineColor: RGB color
of the thin line drawn at the top of the browse form seperating it from the PocketPCs title bar
-
SelectForeColor: RGB color
of the selected item's text
-
SelectBackColor: RGB color
of the selected items background
-
HeadlineColor: RGB color of the
headline
-
ButtonForeColor: RGB color
of the button's label
-
ButtonBackColor: RGB color
of the button's background
Attributes of the 'BrowseClients' node (sub-node to
'Browse' node)
The following attributes must be present:
-
ListFont: Unique Id of the Font
to be used for list items in the 'Connect SoundBridge' form
-
FormBackColor: RGB color
for the background of the browse form (outside of the list).
-
TopLineColor: RGB color
of the thin line drawn at the top of the browse form seperating it from the PocketPCs title bar
Attributes of 'Layout' nodes (Window Sizes)
Note that a 'Layout' corresponds to a window size in VisualMR and not to the 'Layout' 8which is defined by the 'SubLayout').
The following attributes must be present:
-
Name: Custom, unique idetifier for this layout. Currently there must be exactly for Layout-nodes,
one for each predefined window size PC, Portrait, Landscape and Square.
-
InlinePlayQueueBrowsingIf set to True for this layout, VisualMR assumes
that the PlayQueue is displayed within window and not as a seperate "Browse Song Queue" form
(resulting in supressing the corresponding item in the 'View' menu).
On PocketPCs False is always assumed since the inline PlayQueue control isn't supported there.
Attributes of 'SubLayout' nodes (VisualMR layouts)
Note that a 'subLayout' is named 'Layout' in the VisualMR user interface!
The following attributes must be present:
-
Name: Custom, unique idetifier for this sublayout. This name
is appended to the window size (layout) to form the layout-xml filename. There must be
one SubLayout tag with an empty name: This is the default sub-layout used in case a
sub-layout is not defined for a window size.
-
Label: text displayed for this item in the
'File'/'Layout' menu
-
ValidFor (optional): allows to specify layout modes for which the sub layout should be available.
This attribute must contain a comma seperated list of the valid layouts (PC,Portrait,Landscape,Square)
or if empty (default) this sublayout is valid for all layouts.
Layout-XML
VisualMR currently supports 4 different window sizes and for each
window size there must be one xml file:
-
pc.xml: For the Windows PCs layout you are free to
choose any window size. Just specify it within the xml-file
-
portrait.xml: Layout for PocketPCs in portrait mode. The
size must therefore always be exactly as defined below
-
landscape.xml: Layout for PocketPCs in landscape mode. The
size must therefore always be exactly as defined below
-
square.xml: Layout for PocketPCs with square screens. The size
must therefore always be exactly as defined below
Comments:
-
Every one of these fore layout xml files have the same structure.
-
Fonts and colors are definied by refercing corresponding nodes by their
ids in Skin.xml
-
Images are defined by their filename. The file will be loaded from the 96 (dpi)
or the 192 (dpi) folder as requiered by the screen resolution.
-
If sublayouts are defined (see 'SubLayout' nodes in
Skin.xml) then the filename is constructed as
"<windowsize>_<SubLayout.Name>.xml".
There must always be a layout.xml-file without a sublayout-name extension. this
is the default layout.
About the 'Form' node
Every layout XML file consists of an outer tag 'Form' with the
following attributs:
-
Name:
Name of this layout (currently not used)
-
Width: Available Width at 96 dpi: For PC-layout you can choose
any reasonable value. For PocketPC layouts you must use exactly the following
value(s):
portrait: 240, square: 240, landscape:320
-
Height: Available height at 96dpi). For PC-layout you can
choose any reasonable value. For PocketPC layouts you must use exactly the
following value(s):
portrait: 268, square: 188, landscape:188
-
BackgroundImg:
Name of the background image. It must have the size specified for the layout
-
BackgroundBrush: If 'BackgroundImg' is empty you can assign a
Brushe fromSkin.xml
to define a background color.
-
SkinFormat: Version number (two numbers seperated by dots) of
the VisualMR skinning format for which this skin has been defined for. This
must be set to 2.2.
-
SkinVers: Version number for this skin definition (three
numbers sepperated by dots). The version number can be assigned freely with
newer releases having larger version numbers.
The 'Form' node contains a series of tags, each of them
specifying one visual element (a control).
General remarks about control nodes (sub-nodes to 'Form')
The following tags can occur as sub-nodes of 'Form':
-
Label:
A control displaying some text (horizontally scrolling if the text doesn't fit
into the label)
-
StateLabel:
Similar to a Label but the text displayed depends on a second value
-
Image: Displays an image (might be a constant image name or
retrieved from a value for displaying cover art) StateImage:
Similar to an Image but the picture displayed depends on a second value
-
Progress:
A control graphically showing the percentage of completion (it is a
ratio of one numeric value)
-
Button:
A control that the user can 'press' (tap on)
-
StateButton:
Similar to a Button but the button can change its visual occorence depending on
an external value
-
DrawShape: Used to draw rectangles, circles,...
Every control node contains a Bounds sub-node
specifying where the control should be located. Note that coordinates are given
relative to the upper left corner beining (0,0) and assuming 96dpi.
For 192dpi (VGA PocketPCs only) VisualMR will scale the coordinates
automatically. Bounds nodes always have the following
attributes:
-
X:
Position of the left border of the control (0=left border of VisualMR's client
area)
-
Y:
Position of the upper border of the control (0=top border of VisualMR's
client area)
-
Width:
Width of the control
-
Height: Height of the control
'Label' Nodes
A label always contains exatly one sub-node of type Bounds
(as described above). Additionally the label is defined by its attributes:
-
Contents: The name of a value
(see below) whose contents the label will display
-
Action (optional): Name of the action
(see below) to be invoked when the label is clicked
-
CMAction (optional): Name of the action
(see below) to be invoked as context menu (PC: right click; PPC: tap+hold)
-
Font: Id of font defined in Skin.xml
to be used for displaying the label's contents
-
Brush: Id of a brush defined in Skin.xml
for specifying the color of the label's text
-
Type (optional): Valid values are "Single" (non
scrolling single line) or "HScroll"
(single line, horizontally scrolling if needed). If Type is not specified
"HScroll" is assumed.
-
Empty (optional): Text to be used if the Contents is empty
'StateLabel' Nodes
A state label is an extension to a normal label. It contains all of the label's
attributes and sub-nodes (only that instead of a Contents attribute
it has a DefaultContents attribute). Additionally it contains
one sub-node of type States that contains a series of State
nodes. The contents is definied by the State whose value
matches the value specified in States. If no state matches
then the DefaultContents attribute of the StateLabel is
used (the same way as in a normal label).
A States node has always the following attribute:
-
Contents: The name of a value
(see below) that controls the state of this label
A State node has always the following attributes:
-
Value: If this value matches the contents of the value
specified as Contents (in States) this
State is the active one defining the text of the label
-
Contents: The name of a value
(see below) that return the text to be displayed
'Image' Nodes
An image always contains exatly one sub-node of type Bounds
(as described above). Additionally the image is defined by its attributes:
-
Contents: The name of a value
(see below) whose contents is either an image name or an image object (cover
art)
-
Action (optional): Name of the action
(see below) to be invoked when the image is clicked
-
CMAction (optional): Name of the action
(see below) to be invoked as context menu (PC: right click; PPC: tap+hold)
-
Scaling (optional): Either "Fit" (image is scaled to
fit the bounds) or "Prop" (image is scaled to fit the bounds
but respecting the ratio of the original image bounds). If nothing is specified
"Fit" is asssumed.
-
TransparentColor: (can be empty): Pixels in the bitmap of
exactly this RGB color will be transparent .
'StateImage' Nodes
A state image is an extension to a normal image. It contains all of the image's
attributes and sub-nodes (only that instead of a Contents attribute
it has a DefaultContents attribute). Additionally it contains
one sub-node of type States that contains a series of State
nodes. The contents is definied by the State whose value
matches the value specified in States. If no state matches
then the DefaultContents attribute of the StateLabel is
used (the same way as in a normal label).
A States node has always the following attribute:
-
Contents: The name of a value
(see below) that controls the state of this image
A State node has always the following attributes:
-
Value: If this value matches the contents of the value
specified as Contents (in States) this
State is the active one defining the picture for the image
-
Contents: The name of a value
(see below) that returns the image (either a picture or the name of an image)
'Progress' Nodes
A progress always contains exatly two sub-nodes:
-
One of type Bounds
(as described above) and
-
one of type Bitmap with the following attributes
-
TransparentColor: (can be empty): Pixels in the bitmap of
exactly this RGB color
will be transparent
-
Empty: Name of an image that show the empty progress bar
-
Filled: Name of an image showing the progress bar in the
state 'completed'. This image is drawn partially on top of the Empty-image (if
10% of the state are completed only the left-most 10% of this image are drawn)
-
Disabled: Name of image to be used if the progress bar is
disabled
Additionally the 'Progress' node always contains the following attributes:
-
Contents: The name of a numeric value
(see below) that gives the state value
-
Max: The name of a numeric value
(see below) that defines the value that is to be interpreted as 100% complete
'Button' Nodes
A button always contains exatly two sub-nodes:
-
One of type Bounds
(as described above) and
-
one of type Bitmap with the following attributes
-
TransparentColor: (can be empty): Pixels in the bitmap of
exactly this RGB color
will be transparent
-
Default: Name of an image showing the button activated /
not pressed
-
Pressed: Name of an image showing the button
activated and pressed
-
Disabled: Name of image showing the button if disabled
Additionally the 'Button' node always contains the following attributes:
-
Action: Name of the action
(see below) to be invoked when the button is pressed (see below)
-
CMAction (optional): Name of the action
(see below) to be invoked as context menu (PC: right click; PPC: tap+hold)
-
Shape: This controls which part of the button responds to
clicks. Allowed values are
-
Rectangle: All of the button responds to clicks
-
Ellipse: Only clicks within an ellipse fitting into the buttons outer
bounds are regarded as touching the button (for example for round buttons
clicking the upper left corner will be ignored)
'StateButton' Nodes
A state button is an extension to a normal button. It contains all of the
button's attributes and sub-nodes. Additionally it contains one sub-node of
type States that contains a series of State nodes.
The look of the button is definied by the State whose value
matches the value specified in States. If no state matches
then the Bitmap node is used (the same way as in a normal
button).
A States node has always the following attribute:
-
Contents: The name of a value
(see below) that controls the state of this button
A State node has always the following attributes:
-
Value: If this value matches the contents of the value
specified as Contents (in States) this
State is the active one defining the look of the button
-
TransparentColor:
Same as in button's bitmap node
-
Default:
Same as in button's bitmap node
-
Pressed:
Same as in button's bitmap node
-
Disabled: Same as in button's bitmap node
'Control' Nodes (Song Queue)
This node is intended to add special controls to the layout.
What kind of control is used is specified by its Type attribute.
Currently there is only Type="BrowsePlayQueueCtrl" allowed.
This will add a control showing the current song queue to the layout.
Note that this is currently only supported on PCs, not on PocketPCs.
The "Control" node has now other attributes and only the Bounds sub-node.
'DrawShape' Nodes
This node gives a simple way to draw rectangles, circles,.. with a given color.
A DrawShape node always contains exatly one sub-node of type
Bounds (as described above) into which the shape is
drawn. Additionally the DrawShape is defined by its attributes:
-
Shape: This parameter defines what kind of shape is drawn.
Allowed values are Rectangle or Ellipse
-
FillBrush: Id of a brush defined in Skin.xml
for specifying the shape's filling color
-
Action (optional): Name of the action
(see below) to be invoked when the shape is clicked
-
CMAction (optional): Name of the action
(see below) to be invoked as context menu (PC: right click; PPC: tap+hold)
Values asignable to controls
Values can either be static, dynamic or a function.
Static values are defined within the
layout.xml file and remain the same all the time. A typical example are labels
like 'Album' that stay the same while the album name itself is a dynamic value
(formerly refered to as a variable). Static values always begin with a single
quote('). For example a
Label control with Contents="'Title" will always display the
text "Title"
Dynamic values begin with a #: a Label with Contents="#CurrentSong.Title" will
display the name of the currently playing song - which of course
changes over time.
Functions begin with a ? followed by the functions name and in parenthesis, seperated by | the parameters
which again can be either static or dynamic (nested funcxtions are currently not supported).
For example a Label with Contents="?CONCAT(':|'Title|#CurrentSong.Title)" will
display "Title: xxx" with xxx being the the currently playing song.
If you asigne a vlaue to a control you must be sure that the type is compatible.
For example the Max attribute of a Progress conrol expects an integer-value
while an Image either expects a picture of the name of an image-file.
The following dynamic values are defined:
-
#CurrentSong.Title: String containing the current song's
title
-
#CurrentSong.Album: String containing the current song's album name
-
#CurrentSong.Artist: String containing the current song's artist
-
#CurrentSong.Genre: String containing the current song's genre
-
#CurrentSong.Composer: String containing the current song's composer
-
#CurrentSong.Artist: String containing the current song's artist
-
#CurrentSong.Year: Integer containing the current song's year
-
#CurrentSong.TrackNumber: Integer containing the current song's original track number
-
#CurrentSong.TrackCount: Integer containing the number of tracks on the current song's album
-
#CurrentSong.TrackNumerAndCount: String combining TrackNumber and TrackCount
Exmaple value: "8 of 11"
-
#CurrentSong.TrackNumberInfo: String similar to #CurrentSong.TrackNumerAndCount but with leading text "Track".
Exmaple value: "Track 8 of 11"
-
#CurrentSong.DiscNumber: Integer containing the current song's original disc number
-
#CurrentSong.DiscCount: Integer containing the number of discs in the current song's album
-
#CurrentSong.DiscNumerAndCount: String combining DiscNumber and DiscCount
Exmaple value: "1 of 2"
-
#CurrentSong.DiscNumberInfo: String similar to #CurrentSong.DiscNumerAndCount but with leading text "Disc".
Exmaple value: "Disc 1 of 2"
-
#CurrentSong.CoverArt: Image containing the current song's cover art
-
#CurrentSong.HasCoverArt: Bool (True or False; remember: case sensitive!))
-
#CurrentSong.ASIN: String containing the current song's Amazon Identification Number
-
#CurrentSong.Format: String containing the current song's file format (like 'MP3')
-
#CurrentSong.Bitrate: String containing the current song's bitrate
-
#CurrentSong.FormatAndBitrate: String combining Format and Bitrate
-
#CurrentSong.TrackLengthText: String representing the user-displayable total
duration of the current song
-
#CurrentSong.TrackLengthSec: Integer containing the total duration of
the current song in seconds
-
#CurrentSong.TrackLengthMSec: Integer containing the total duration of
the current song in milliseconds
-
#CurrentSong.Rating: Integer between 0 and 100 representing the user-rating of this song (typically: 0=0 stars, 20=1 star,... 100=5 stars)
-
#CurrentSong.Comment: String containing the comment field of the current song
-
#ElapsedTimeText: String representing the user-displayable
elapsed time for the current song
-
#ElapsedTimeSec: Integer containing the elapsed time for
the current song in seconds
-
#Message: String containing a message for the user (typically something like no songs or no server selected)
-
#HasMessage: Bool (True or False; remember: case sensitive!)).
True if a message (see above) should be displayed to the user.
-
#TransportState: String containing the current transport state
('Play', 'Stop',) according to the RCP documentation of the GetTransportState command.
-
#TransportStateText: String containing the transport state as a user-displayable text (subject to localisation,...)
-
#IsPlaying: Bool (True or False; remember: case sensitive!))
-
#IsStopped: Bool (True or False; remember: case sensitive!))
-
#Volume: Integer ranging from 0 (silent) to 100(max volume)
-
#Repeat: String with one of the following values (case
sensitive!): 'off', 'one', 'all'
-
#Shuffle: Bool (True or False; remember: case sensitive!))
-
#ClientName: String containing the user-displayed name of the currently controled SoundBridge.
-
#ClientIpAdr: String containing the IP address of the currently controled SoundBridge
-
#ClientFirmwareVers: String containing the firmware version as reported by the currently controled SoundBridge
-
#Text.xxx: A couple of strings are accessible as dynamic values, too.
The difference to a static quoted text is that they are localized.
Only the following values are valid:
#Text.Artist, #Text.Album, #Text.Composer, #Text.ComposerShort, #Text.Genre, #Text.Year,
#Text.Rating, #Text.Track, #Text.Disc, #Text.Format, #Text.Bitrate, #Text.Comment, #Text.ElapsedTime,
#Text.AlbumsByArtist, #Text.AlbumsByGenre, #Text.ArtistsByGenre,
#Text.SongsByArtist, #Text.SongsByAlbum, #Text.SongsByGenre, #Text.SearchTitle, #Text.SearchComposer
The following functions are defined:
-
?CONCAT: A function to return a String that consists of multiple string parts.
The first parameter is the seperator that is included in between every pair of part strings that follow.
Note that empty parameters are ommitted. In this case no seperator is added!.
Example: "?Concat(', |#CurrentSong.TrackNumberInfo|#CurrentSong.Year|#CurrentSong.Genre|#CurrentSong.FormatAndBitrate)"
returns a comma seperated list of various attributes ommitting undefined values.
Actions to be invoked
Actions are associated with butten presses or clicking an image. Each Action is
identified by a unique name (bold in the following listing). Only one of the
following values are allowed for a control's 'Action' attribute (note
that some actions are parameterized by a value in brackes):
-
Controling Playback
-
'Prev': play previous song
-
'Next': play next song
-
'PlayPause': toggle between pause and play state
-
'StartStop': halt playback or if not playing start
playback (typically you won't want to use StartStop but PlayPause
-
'PlayPreset(x)': Start playing the given preset. The value for
x ranges from A1 to A6, B1 to B6 and C1 to C6. Example: 'PlayPreset(A1)'
will play the music defined by the first Preset.
-
Opening the different forms (accessible by the 'View' menu)
-
'BrowseClients': corresponds to 'View/Select SoundBridge'
(disconnect from current SoundBridge)
-
'BrowseServers': corresponds to 'View/Change Library'
-
'BrowsePlayQueue':
corresponds to 'View/Browse Song Queue'
-
'BrowseJukebox': not available on PocketPCs
-
'BrowsePlaylists'
-
'BrowseArtists'
-
'BrowseAlbums'
-
'BrowseComposers'
-
'BrowseGenres'
-
'BrowseContainers': corresponds to 'View/Browse Folders'
-
'BrowsePresets'
-
'Search'
-
Opening different forms with a limited data set
-
'BrowseArtistSongs': browse songs of the current song's artist
-
'BrowseAlbumSongs': browse songs of the current song's album
-
'BrowseGenreSongs': browse songs of the current song's genre
-
'BrowseArtistAlbums': browse all albums of the current song's artist
-
'BrowseGenreAlbums': browse all albums of the current song's genre
-
'BrowseGenreArtists': browse artists associated with the current song's genre
-
'SearchTitle': search the library for songs named as the currently playing song
-
'SearchComposer': search the library for composers named as/containing the currently playing song's composer
-
'SetSkin(x)': Switch the current skin similar to
'File'/'Skin' with x being the name of the skin (that is its folder name)
-
'SetLayout(x)': Switch the current layout similar to
'File'/'Layout'. Note that x is the unique identifyer of a layout (as defined
in skin.xml and used as the name extension for the layout-xml file), not its
user-displayed name as shown in the menu. Example: 'SetLayout(cover)'
will switch to the cover art layout. 'SetLayout()'
will switch to the default layout (for BlueGlass: the Buttons-layout).
-
'SetVol(x)': Volume Control. The value in the brackets can be
one of the following:
-
A value starting with '=' means setting the volume to the
given percentage (0=off, 100=max. volume). Example: 'SetVol(=100)'
sets the volume to its maximum.
-
A vlaue starting with '+' means increasing the volume by the given value (up to
a maximum of 100). Example: 'SetVol(+5)'
will increase the volume by 5 units.
-
A value starting with '-' means decreasing the volume by the given value (down
to a minimum of 0). Example: 'SetVol(-5)' will lower the
volume by 5 units.
-
Controling Shuffle and Repeat
-
'ToggleShuffle': Turn shuffle on and off
-
'CycleRepeat': switch repeat mode from 'off' to 'one'
to 'all' and te´hen back to 'off'
-
'ToggleRepeatOne': if not in 'repeat one' mode activate it
(otherwise switch repeat off)
-
'ToggleRepeatAll': if not in 'repeat all' mode activate it
(otherwise switch repeat off)
-
Other
-
'PowerOff': Put SoundBridge into stand-by
-
'GoAmazon': Open Amazon website for the current album
according to the server selected for cover art download.
-
'VolPopup': Open a popup menu to select the volume from
-
'PlayQueuePopupMenu': Open the context menu of the PlayQueueCtrl
(of course only supported if <Control Type="BrowsePlayQueueCtrl"> is present in the current layout)
-
'IrCommand(x)': Send an infrared remote command to the SoundBridge.
x is a command name as specified in the RCP documentation for IrDispatchCommand.
For example 'IrCommand(CK_ALARM)' will simulate the press of a remote control's 'Alarm' key.
-
'None': No action (a button will be draw as disabled if this
action is asigned to it)
Additionally there is the special action 'Popup':
this actions allows to build a popup menu with a list of actions as described above.
The syntax is as follows:
Popup(Action1=Label1|Action2=Label2|....ActionX=LabelX)
where every action can be one of the actions defined above while label can be any static or dynamic string value.
Additionally "---" can be used to insert a seperateor line.
Example: "Popup(Prev='Previous Song|Next='Next Song|---|PowerOff='Standby)
will create a popup menu with the following lines: "Previous Song", "Next Song", a seperator, "Standy".
Contact me