Author Topic: Theater Modes / What Are They? / How Do They Work?  (Read 5759 times)

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
The Theater Mode plugin - a gem designed and maintained by MusicBee's one and only developer, Steven.

This post is long overdue - been thinking about doing this for the past year or so.
I'd like to thank karbock, and hiccup I believe, for their recent write-ups in the Tips and Tricks board that have motivated me into finally getting this done.


So, Theater Modes (TM's)...what are they?

These are custom views or layouts that are meant to extend the visual aspect of the MusicBee listening experience.
Simply put, they allow users to redesign MusicBee's graphical user interface to their liking.
As I've said in the past, listening to soundtracks has never been this beautiful.


Embedded vs Full-screen

These are the types of TM's that we have and the main difference between them lies in the screen area that MusicBee allocates for each.


Embedded Theater Modes
  • MusicBee reserves only the main panel for use. i.e everywhere but the title & tabs bar and the player controls.
  • They are accessible from the Now Playing tab, Compact Player, as well as the Now Playing Bar which can be docked in either the Main or Bottom Panel.
  • They are located in .../MusicBee/Plugins/TheaterMode.Embedded



Full-screen Theater Modes
  • As the name suggests, they occupy every inch of the screen.
  • They can be activated by means of a hotkey or the drop-down menu in View > Theater Mode.
  • They are located in .../MusicBee/Plugins/TheaterMode.List



Normal Theater Modes
  • They are more or less the same as full-screens.
  • These are set to occupy all of MusicBee's main window with the exception of the Title Bar.



Built-In vs Custom

Every MusicBee install comes bundled with a couple of built-in and user-created TM's.


Built-In Theater Modes
  • These are hardcoded into MusicBee and cannot be edited by any means other than the options provided in the panel configuration settings.
  • At the time of writing, we only have three built-in TM's - Artist Picture, Album Color Mix, and Large Album.

Custom Theater Modes
  • These are user-created and will show up in the list of TM's once placed in the appropriate folders mentioned hereinabove.
  • The files need to be saved with an .xml extension in order to be recognized by MusicBee.
  • Most of your code will comprise of items called <elements> and <attributes>, which are basically series of keywords used to command MusicBee into taking various actions.
  • Attributes are used to define the structure of the elements.
  • There is a specific syntax that is required during the definition of these elements and attributes - refer to the posts below.
Last Edit: August 13, 2023, 05:27:31 PM by Mayibongwe
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
How Do They Work? - The Syntax

Every line of code should be inserted within the following root parameters:


<?xml version="1.0" encoding="utf-8"?>
<root>


         <!-- example of a TM comment -->
         <settings   bdr="200,200,200,0"   enableScaling="true"   />
         <settings   backgroundImage="MusicBee.png"   ></settings>

         <element   style="Block"   bg="TrackAndArtistPanel(bg)"   widthDock="X:Panel.10"   height="100"   />
         <element   style="Text"   fg="25,175,25"   x="20"   y="20"   >   'Heal The World' is the best song of all time   </element>

</root>


GLOBAL SETTINGS

These are optional and effective across the whole theater mode when defined.
Below is a list of all the various TM settings that you can use.
The descriptions are replicas of the ReadMe.txt file located in ...\MusicBee\Plugins\TheaterMode.List


Category
Attribute
Description
Example
settings
scaling
enableScalingIt is disabled by default. When enabled: fonts, pictures, and the layout are scaled to the display size. Not applicable to embedded TM's

enableScaling="true" is used to switch it on
dpiScaleUsed to scale the TM against the specified windows scaling

dpiScale="150" tells the plugin that the TM is built for a 150% dpi scaling
settings
layout
backgroundImageOptional override for the background image.
By default, a picture with the same filename as this settings file will be loaded. But when this element is set, the image will be loaded from the SharedArtwork sub-folder.

backgroundImage="abc.jpg" will load ...\Plugins\TheaterMode.List\SharedArtwork\abc.jpg
backgroundAspectRatioSet the aspect ratio handling for the background picture

backgroundAspectRatio="ABCD" where ABCD = keep, stretch, zoomKeep, zoomStretch
backgroundFillColorSet the fill color for when the background picture does not fill the panel

backgroundFillColor="0,0,25" means the gaps will be shaded blue if the aspect ratio crops the image
bdrWhen set, a rectangular border will be displayed around the screen. The supported colour format is aRGB (alpha, red, green, blue). Alpha values are optional.

bdr="0,255,0" will display a green border
settings
screensaver
idlePeriodIdle timer measured in seconds. After the lapsing of which, MusicBee will enter the screensaver mode.

idlePeriod="0" means disabled. Any figure between 1 and n means trigger after n seconds of idle time where MusicBee is playing a track
monitorUsed to select the monitor in which the screensaver will display in. Logic begs to reason that there will be at least a single monitor plugged in. Therefore, the setting is set to "1" by default.

monitor="2" means the screensaver will show up in monitor 2
otherMonitorsOnly applies when a specific monitor is set and the screensaver is manually activated. If activated by the idle timer, the other monitors always black out.

otherMonitors="active" will have other monitors stay active and usable
otherMonitors="blackout" makes the other monitors display black
settings
imageRotation
rotationFolderOptional override for the rotation sub-folder. By default, images in the folder <TM Filename>.Rotation will be loaded for rotation. But when this setting is defined, the images will be loaded from the SharedArtwork sub-folder.

rotationFolder="ABC" will load rotation images from ...\Plugins\TheaterMode.List\SharedArtwork\ABC"
rotationPeriodUsed to determine the duration after which to randomly rotate each image. Only applicable when there are images in the rotation sub-folder.

rotationPeriod="EndOfTrack" rotates at the end of each track
rotationPeriod="n" rotates after n seconds
Last Edit: August 14, 2023, 06:09:27 AM by Mayibongwe
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
Elements

It is important to note at this stage that the elements are executed in the order in which they are defined in the .xml files.
Most of the times, the order does not matter. But in cases where:
  • you need to reference an element, you will have to make sure that it is defined ahead of the dependent element.
  • two elements occupy the same position. One of them might need to be defined ahead of the other in order for both to show up.

Category
Attribute
Description
Example
element
structure
typeDictates how elements of this nature will be handled by MusicBee

◦ Prints out the specified text
Draws a solid rectangular shape
◦ Draws a shape similar to the block style
Displays the specified image from your local storage
◦ Displays simplified and interactive player controls
Displays the progress bar
◦ Displays a button on the progress bar
Displays the time portion that has been played
◦ Displays the duration of the track
Displays a combination of the two styles above
◦ Displays the soundgraph / wavebar
Displays the visualiser
◦ Displays your system clock
Displays a list of album tracks
◦ Displays a list of upcoming tracks
Retrieves images from MusicBee and/or the web
◦ Retrieves the value of a specified tag
Retrieves the album artwork
◦ Retrieves the artist's thumbnail
Retrieves the artist's biography
◦ Retrieves the lyrics
type="Text"
type="Block"
type="Line"
type="Icon"
type="PlayerBar"
type="ProgressBar"
type="ProgressButton"
type="Position"
type="PlayDuration"
type="ProgressPosition"
type="Soundgraph"
type="SpectrumVisualiser"
type="Time"
type="AlbumTracks"
type="NowPlayingList"
type="Gallery"
type="Field"
type="Album Cover"
type="ArtistPicture"
type="ArtistInfo"
type="Lyrics"

nameAssigns a label for reference purposes
e.g ... name="#Shade" type="Block" height="50"
type="Album Cover" heightDock="#Shade.height" means
the artwork's height will also be 50px

allowPinningIt is a panel save-state of sorts
Only applicable to autoHide and floating panels
allowPinning="true"
makes the TM remember the last opened panel

disableHotPointDisables a(n) floating/autoHide panel from showing up when hovering the mouse over a certain location
<autoHidePanel name="#MainTab"  disableHotPoint="true"

autoOpenLyricsAutomatically opens an auto-hide panel if it contains lyrics and closes if none are available
autoOpenLyrics="true"
enables the setting

element
position
xAnchorUsed to horizontally position an element relative to another
type="Lyrics" xAnchor="Panel.Center"
will position the lyrics at the center of the screen

xUsed as a horizontal offset
The default value is zero
type="Text" xAnchor="Panel.50" x="-100"
will place the text 100px to the left of the screen center

yAnchorUsed to vertically position an element relative to another
e.g ... name="#ABC" height="40"
type="Field" yAnchor="#ABC.10" will position this at 10% of ABC's height. That means the field will be placed 4px below the top-most part of ABC

yUsed as a vertical offset
The default value is zero
type="Gallery" y="0"
will display the picture from the top-left position of the monitor

widthDockUsed to dynamically set the width
type="ProgressBar" x="0" widthDock="X:Panel.Right"
means the progress bar will stretch from the utmost left to the utmost right

widthUsed to offset the length
widthDock="Panel.Width" width="200"
will display across the entire screen while cutting off 200px from the right edge

heightDockUsed to dynamically set the height
e.g ... type="Lyrics" y="0" height="40"
type="ArtistInfo" y="10" heightDock="Y:Lyrics.Bottom" means
the biography will be 30px in height

heightUsed to offset the height
heightDock="Panel.Height" height="10"
means 10px of the element will be displayed out of bounds (below the screen)

alignTo align elements within their width
type="Field" id="Title" widthDock="Panel.Width" align="Center"
will position the tag in the middle of the screen

childElement
format
reserveWidthEnsures that an amount of space is reserved for following child elements
type="Field" id="Title" x="0" width="200" reserveWidth="75"
means the title will be allocated 125px before getting cut-off
as the remaining 75px will be reserved for the child element(s)

rightMarginPads the right side of an element to ensure some space between the next child element. It's only supported on the Rating elements.
id="RatingLove" rightMargin="5"
will add an extra 5px to the right side of the 'love' button

topMarginMoves the element down from where is would be by default
It's only supported on the Rating elements
id="Rating" topMargin="2"
means the rating stars will be moved 2px below the y-coordinate of the parent element

formatUsed in conjuction with the '#' id
id="#" format="#\."
to display numbers with a dot. e.g 13.

Tracks[#]Used to access tag info from an upcoming track
Where # represents the track position in the upcoming tracks list
type="Field" id="Tracks[5]" font="Segoe UI"><child id="Title"/></element>
will display the <title> of the 5th upcoming track

Element
text
fontChanges the font type
type="Text" font="Segoe UI"

styleText - changes the font style
ProgressBar - changes the button. The default is a round button.
font="Webdings" style="Semi-bold"
type="ProgressBar" style="Diamond"

sizeChanges the font size
font="Calibri" style="Regular" size="14"

minSizeDynamically sets the font size based on the length of the text
type="Field" id="Album" fg="185,185,185" size="26" minSize="7" means the
font will automatically adjust to use the largest size possible in the range 26pt down to 7pt

rowPaddingAdjusts the row spacing on type AlbumTracks and NowPlayingList. Has a default value of 2.
type="NowPlayingList" rowPadding="4"
will insert 4 vertical pixels between the individual tracks

multiLineReserves additional height for multi-line
type="Field" id="Comment"  multiLine="true"
will wrap additional text over to the reserved height in the next line

Element
colours
bgChanges the background colour
type="Block"  bg="75,0,0"
will display a red solid rectangle

fgChanges the foreground colour
type="Text" font="SegoeUI"  fg="0,0,150"
means the text will be blue

fg2Changes the secondary foreground colour, if the type supports it.
type="Soundgraph" bg="20,20,20" fg="50,5,5" fg2="10,10,100" bdr="255,50,150"

bdrChanges the border colour
type="AlbumCover"  bdr="100,TrackAndArtistPanel.Highlight(50)" means the artwork   border will have a colour sourced from the MusicBee skin

Element
pictures
minUsed in conjuction with type AlbumCover
It will set the minimum size of each side
type="AlbumCover" x="10" widthDock="X:Panel.Center" min="100" means that even though the width is dynamically generated, it will be capped at a minimum of 100px

maxSame as above, but used to set the maximum
same as above but with reference to the maximum size

aspectRatioApplies to picture elements
It is used to crop or stretch the image when necessary
type="Gallery" aspectRatio="keep/stretch/zoomKeep/zoomStretch"

keep means keep aspect ratio (default)

stretch means the picture is stretched to fill the entire area

zoomKeep will keep the aspect ratio, but allow the sides of the image to be cut off (no vertical gaps)

zoomStretch is similar to zoomKeep, but stretches rather than keep the apect ratio

fillColorSets the background color for when an image   does not fill the panel
type="Gallery" aspectRatio="zoomKeep" fillColor="75,75,75"
will give the gaps a grey shade should the aspect ratio crop the image

resizePicturesApplicable to floating and autoHide panels where this can be used to resize images
<autoHidePanel name="#MainTab" allowPinning="false" resizePictures="true" />

fadeFor use on the artist thumbnail.
The effect can be between 0 and 1
type="ArtistPicture" fade="n"  where n=0 means no dimming and n="1" is a full dim

artistTypeApplies to retrievable thumbnails
type="ArtistPicture" artistType="Artist"  will retrieve the main artist's thumbnail

pictureSizeLinked to the above attribute
type="ArtistPicture" pictureSize="Square"  will search for square thumbnails only

brightnessUsed to dim and brighten elements
type="AlbumCover" brightness="n"  where n=0 is completely black
and n="1" is normal brightness

alphaUsed for opacity control
type="BackgroundAlbumCover"  alpha="n" where n is between 0 and 1

gammaCorrectedAdjusts the lightness of the colours on blocks, autoHide blocks, and icons. It is true by default and only affects images with alpha values < 255
type="Icon" Image="MusicBee.png"  gammaCorrected="false"
means the image will have a heavier/darker overlay

refreshIntervalFor use in the backgroundAlbumCover
type="BackgroundAlbumCover"  refreshInterval="n" where n is the interval in seconds

intervalApplies to the gallery element. It specifies the rotation interval
Has a hardcoded 30s minimum interval in order to reduce strain on the artwork hosting sites
type="Gallery"  interval="n" where n
is the timer in seconds after which the next image will be loaded

tagsApplies to the gallery element.
It specifies the search query.
type="Gallery"  tags="artist:local" for the retrieval of local artist images
type="Gallery"  tags="landscape,blue,animals" means that
MusicBee will retrieve web images where any of the tags match

Element
mouseActions
mouseOverFgUsed to highlight text in a different colour
type="Text" fg="100,0,0" mouseOverFg="0,100,0"
means the text will show up in green when highlighted, and red otherwise

mouseOverImageDisplays an image when hovering over another image
Both images will share the same position
type="Icon" image="Buttons/Primary.jpg" mouseOverImage="Buttons\Secondary.png"
will display the secondary image whenever the primary image is hovered upon

onClickPerforms an action when clicked on
type="Field" id="Title"  onClick="Pause"
will pause the playing track when the title is clicked on

onDoubleClickPerforms an action when double-clicked on
type="Text"  onDoubleClick="OpenAutoHidePanel(#Explorer)"
will open a panel called Explorer when double-clicked on

showMouseHandDisables the mouse hand pointer during onClick events
onClick="PlayNext"   showMouseHand="false"
will not show the hand pointer when hovering over the element

Element
controls
visibleEnables Rating fields to follow the visibility status on MusicBee's main player panel
id="Rating" visible="MusicBeeSetting" allows the plugin
to display or hide the field depending on the user's option in the player controls

visibleTriggerApplicable to toggle buttons (e.g mute vs speaker)
This allows users to set up different icons for the two events
type="Icon" image="Speaker.jpg" onClick="VolumeToggleMute"  visibleTrigger="VolumeNotMute"
type="Icon" image="Mute.jpg" onClick="VolumeToggleMute"  visibleTrigger="VolumeMute"

extrasFor adding controls to the player_bar, which by default, excludes the progress bar & position
type="PlayerBar"  extras="ProgressBar"

autoSwitchAutomatically invokes commands in sequence
type="Text"  autoSwitch="command_1;command_2"  visibleTrigger="AutoSwitchOff"
will invoke command one, then two, then one again, and two again, and so on

autoSwitchIntervalThe milliseconds gap in which the commands are invoked
autoSwitch="OpenAutoHidePanel(#one);command_2"  autoSwitchInterval="5000"
means the commands will be invoked every five seconds

Last Edit: November 28, 2023, 12:12:55 PM by Mayibongwe
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
ADDITIONAL INFORMATION

onClick Events and their Visible Triggers
  • An element or a child element can contain an onClick or onDoubleClick attribute.
  • The only double-click functions supported are to open the Now Playing assistant, as well as autoHide panels.
  • onClick events do not work when the multiLine attribute is enabled.

Event
Description
Trigger
playStopStops playbackN/A
playPreviousPlays the previous trackN/A
playNextPlays the next trackN/A
playPreviousAlbumPlays the previous albumN/A
playNextAlbumPlays the next albumN/A
playNowPlays the selected trackN/A
playPausePauses the playing trackplaying vs notPlaying
repeatToggleToggles between the repeatOn and repeatOff statesrepeatOn vs repeatOff
shuffleToggleToggles between the shuffleOn and shuffleOff statesshuffleOn vs shuffleOff
volumeToggleMuteAlternates between a 'mute'and 'speaker' statevolumeMute vs volumeNotMute
volumeUpIncrease the volume by 2 percentN/A
volumeDownReduces the volume by 2 percentN/A
closeWindowUsed to exit the theater modeN/A
StopAutoSwitchStops commands from being automatically invokedAutoSwitchOn vs AutoSwitchOff
openNowPlayingAssistantOpens the Now Playing Assistant located in Main Menu > ViewN/A
openAutoHidePanel(#id)Opens only one panel at a time per individual scopeN/A
openFloatingPanel:#idFloats the panel above others without closing other auto-hide panelsN/A
N/AN/AEqualiserOn vs EqualiserOff
ScrobbleOn  vs ScrobbleOff


A list of all Retrievable Tags
  • Most are self-explanatory.
  • I have added comments to a few

Field ID
Description
artist
title
trackArtistAndTitleshows <artist> - <title>  ,  but only when <artist> is different from <displayArtist>
album
albumAndYearshows <album> [year]
albumArtist
bpm
composer
commentyou might want to use the multiLine="true" attribute here
conductor
"custom1" ... "custom20"
discNo
discCount
discAndTrackNoshows <discNo> - <trackNo>
duration
genre
genreCategory
grouping
kind
mood
occasion
playCount
publisher
quality
rating
ratingAlbum
ratingLove
speaker
skipCount
tempo
trackNo
trackCount
language
work
showMovement
movement
movementNo
originalArtist
originalTitle / originalAlbum
originalYear
instrumentsPerformers
"virtual1" ... "virtual50"
year
"year(yyyy)" / "year (yyyy)"Although year(yyyy) is still valid, it is just an ancient id only kept active for backwards compatibility
#


Scaling
  • The album cover size is scaled using 1152 as the reference width and constrained by the min and max attribute values
    eg. A panel is docked in MusicBee and MB is 800px wide, then the album cover picture is scaled by 300x800/1152
  • Fonts are scaled in proportion to the scaling applied to the album cover, but won't go below 7.5pt

Child Elements
  • Fields and text can be combined into one line using <child> elements
  • Child elements can optionally have font and colour attributes.
    If not provided, the colour and font default to the main element's respective attributes.

SoundGraph / Wavebar
  • Retrieving SoundGraph data is very CPU intensive.
    So, it is only done once at the start of a track and uses the SoundGraph width from the default ScreenSaver.Settings file.
  • If you have rotation enabled and change the width of the soundgraph, then the existing sound data will be scaled to that size

Rating Elements
  • Rating and RatingAlbum are displayed as stars whose size can be changed by setting the size attribute eg. size="16" means the star will be 16pixels high
  • Rating and RatingLove can take a fg2 colour attribute to set "Love" colour or background rating stars. When fg2 is set for Rating, the rating can be clicked to set a new value

Colours
  • They can have 3 (R,G,B) or 4(Alpha,R,G,B) values.
  • Alpha determines how much the colour is blended into the background picture with 0 = fully transparent and 255 = opaque (i.e no blending)
  • Colours can also be retrieved from the current MusicBee skin:
                bg="TrackAndArtistPanel(bg)"
                 bg="TrackAndArtistPanel(20)"
                 fg="TrackAndArtistPanel(fg)"
                 fg="TrackAndArtistPanel(90)"
                 bdr="TrackAndArtistPanel(bdr)"
   
                 Where a number between 0 and 100 means a percentage mix of bg and fg, where a lower number is more bg and higher number more fg
  • There is also alpha/transparency support for skin background colours, where alpha is between 0 and 255 (unlike the weight parameter described above)
    e.g bg="190,TrackAndArtistPanel(20)"

Additional Alignment Attributes

zzz.Left
zzz.Center
zzz.Right

where zzz is:

Top
Middle
Bottom
Last Edit: April 21, 2024, 07:27:18 AM by Mayibongwe
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
TIPS AND TRICKS

-   There is no need to define a positional attribute when its value is zero (MB already knows that to be the default).
    e.g   x="0"   or   height="0" etc.

-   There is no need to name an element when only one of its type is defined.
    names were introduced to prevent conflicts between elements of the same type. So when we only have one element, referencing its literal name is sufficient. i.e AlbumCover.Left
Last Edit: November 20, 2023, 05:27:47 AM by Mayibongwe
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
Alright, that's it for now!
There goes my weekend, lmao.

At least I finally have this project out of the way.
Gonna make a few more edits to the above posts at a later date.
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

hiccup

  • Sr. Member
  • ****
  • Posts: 7900
Thanks for this great contribution to the forum Mayibongwe!

It's always great to see somebody stepping up and putting in the effort to create something that did not exist before and will benefit other users.

Personally I had given up on creating TMs that were worth sharing a long time ago since I frequently ran into problems that could not or would not be solved.
(which was a bit disappointing for me since I was the one—in the stone age using a previous alias—suggesting this feature to be added in the first place)

But with the assistance of your excellent overview as a reference I may get the courage to give it a fresh try someday.

Steven

  • Administrator
  • Sr. Member
  • *****
  • Posts: 34364
I didnt think there was much interest in developing theatre mode views but am prepared to spend some time enhancing if there is interest

karbock

  • Sr. Member
  • ****
  • Posts: 344
Warm thanks for your presentation, and kudos: both content and layout are very clear.
There must have been a mass of work off-stage (fiddling around, and writing).

The only TM I wrote for myself was a mere adaptation from an existing one.
Now I know where to look for detailed information about the possible features.

Bookmarked...

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
Thanks guys. It took a bit of time gathering the info as its scattered around in a number of threads here.
There's still probably some stuff that I missed, but I will be amending the above as time goes on.

As for the presentation, I think we already had a handful of posts with table-style layouts (hiccup might even have been the only one using them at the time),
but I think it wasn't up until your arrival that I (and probably others) really started appreciating the beauty of. So, thanks for that - both of y'all.
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

hiccup

  • Sr. Member
  • ****
  • Posts: 7900
As for the presentation, I think we already had a handful of posts with table-style layouts (hiccup might even have been the only one using them at the time)
Yep, I am pretty sure this was the very first one on our forum. (2021)

It allowed me to do things that before that were only done on the wiki. (html)

hiccup

  • Sr. Member
  • ****
  • Posts: 7900
I have been spending some time in looking into TM's again, and this tutorial/repository of yours is an invaluable help with that.
So thanks again Mayibongwe!

Some observations that I ran into during the process:

I believe these three elements/functions are currently missing from your repository:

1.
the element(s) for upcoming tracks:

id="Tracks[1]"
id="Tracks[2]"

etc.

2.
the element to disable a panel showing up when hovering your mouse over a certain location:

disableHotPoint="true"
https://getmusicbee.com/forum/index.php?topic=7470.msg73112#msg73112

3.
an element that will display an image when hovering over another image (not sure how to works exactly though):

mouseOverImage=
https://getmusicbee.com/forum/index.php?topic=8102.msg46941#msg46941



There is a minor (but fatal ;-) spelling error with:

mouseoverFg
which should be:
mouseOverFg



And a question about something I am not sure of:

In post #2 you have this:

<settings bdr="200,200,200,0" enableScaling="true" />
<settings backgroundImage="MusicBee.png" ></settings>


I am wondering about closing with: ></settings>
Is that the mandatory way to close these settings elements?

When checking a couple of TM's I didn't see that, and they usually close with just: />

So wouldn't this be just as good (or even better)?:

<settings bdr="200,200,200,0" enableScaling="true" />
<settings backgroundImage="MusicBee.png" />



Hm, I now also notice that the first line contains two separate functions.
Would that mean that this should also work?

<settings
 bdr="200,200,200,0"
 enableScaling="true"
 backgroundImage="MusicBee.png"
 />


or to be safe maybe:

 <settings
 bdr="200,200,200,0"
 enableScaling="true"
 backgroundImage="MusicBee.png"
 > </settings>




edit:

I'm also wondering if <theaterMode> has an actual function and perhaps should be added/explained?


Taken from the 'Artist Picture' Theater Mode.

But when I remove both surrounding <theaterMode> and </theaterMode> it functions just the same.
Maybe it's obsolete?
 
Last Edit: November 15, 2023, 04:46:54 PM by hiccup

Mayibongwe

  • Sr. Member
  • ****
  • Posts: 1069
  • Heal The World
#1   The element(s) for upcoming tracks: id="Tracks[1]"
#2   The element to disable a panel showing up when hovering your mouse over a certain location: disableHotPoint="true"
#3   An element that will display an image when hovering over another image: mouseOverImage="Play_Highlight.png"
#4   There is a minor (but fatal ;-) spelling error with: mouseoverFg which should be: mouseOverFg
Thank you for your keen eye, hiccup!
#1   Added to the last row under childElements, reply 2 in this thread.
#2   I will come back to this one - wanna test it some more.
#3   Added to the second row under mouseActions.
#4   Corrected.

I am wondering about closing with: ></settings>
Is that the mandatory way to close these settings elements?
When checking a couple of TM's I didn't see that, and they usually close with just: />
Both work. The only difference is that the first can be used under any circumstance, whereas:
The second /> cannot be used when ype="Text"t or childElements are involved.

Hm, I now also notice that the first line contains two separate functions.
Would that mean that this should also work?

<settings                                                                                                                          <settings
bdr="200,200,200,0"                                                                                                    bdr="200,200,200,0"
enableScaling="true"                                                                                                  enableScaling="true"
backgroundImage="MusicBee.png"                    or to be safe maybe:                   backgroundImage="MusicBee.png"
/>                                                                                                                                          > </settings>
Quite right. Both will work, and it's way easier on the eyes.

I'm also wondering if <theaterMode> has an actual function and perhaps should be added/explained?
Maybe it's obsolete?
Must be. When I checked it out at the time I wrote this guide, I didn't find it to do anything either.
I will dig up its history on old forum posts a bit later.
Last Edit: November 15, 2023, 06:23:18 PM by Mayibongwe
I already spend hours on end on social media. Might as well spare a few of those to a greater purpose here.

hiccup

  • Sr. Member
  • ****
  • Posts: 7900
Both work. The only difference is that the first can be used under any circumstance, whereas:
The second /> cannot be used when ype="Text"t or childElements are involved.
So there could be a situation where you have type="text" and childElements encompassed within a settings group?
This TM stuff can really give you headaches ;-)

hiccup

  • Sr. Member
  • ****
  • Posts: 7900
There's also: "year(yyyy)" / "year (yyyy)" in post #3, what is probably unintended?
Or is there maybe some difference between the one with and the one without a space?