It is currently March 29th, 2024, 6:43 am

New project pre-advice

Get help with creating, editing & fixing problems with skins
User avatar
Sam12345
Posts: 80
Joined: February 27th, 2021, 9:41 pm
Location: London

New project pre-advice

Post by Sam12345 »

A bit of pre problem (relevant) history...
When using a computer, often I get strain in my eyes. Thus, I have begun using the 20 20 20 rule.
Naturally, ( :sly: ) I looked for a program to have a countdown, and show a (large and interputful(?)) notification when to do the looking a way from the screen bit. The one good one that I have found, has mysteriously stopped working properly.

So, after looking around for another good one, and coming up blank, I had a brainwave: why not code it myself :rofl: . Unfortunately, I gave up HTML after a bit (I hope to come back to it. At some point.) and I'm not proficient enough in C++ (yet, hopefully. I don't want to give up that as well :oops: ). Than, I got struck by another brainwave ( :bow: ). Why not use Rainmeter? Although I know Rainmeter isn't used for making apps (before the antivirus quips start flooding in...), it is simply a matter of a rainmaker skin hiding for 20 minutes and appearing for 20 seconds on top of the currant window using topmost etc.

However, as I decided to use Rainmeter, obviously I need another skin showing a countdown to the next break.
I have a few ideas how to implement this:
(I assume two parts the skin. The meter; shows a countdown to the next break, and the 'interrupter'; shows a large topmost notification by a break)
  • All in one skin, using hide to show the 'interrupter' at the right moments.
  • 2 separate skins. ideal (more skins can be added easily), but more complex? it has to get info (how long left) from the interrupter skin to show in the countdown skin.
  • That's all the sensible ideas I can come up with
So, basically, this shows I need a skin that can show a countdown happing in another skin. Is this the right approach? I'm not sure if I'm going about this right, its the first time I'm starting a skin from scratch.
If I am, could I have some advice on how to show a countdown happening in another skin?

And, secondly, how do I do a countdown :oops: ? I had a look at other skins using timers, but it looked pretty complex and I didn't get it. The search function on rainmaker manual seems to be broken - I get this. Bing search (which can usually search Rainmeter manual) also doesn't bring up anything worthwhile.
Insert inspirational quote here
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5384
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: New project pre-advice

Post by eclectic-tech »

Sam12345 wrote: April 8th, 2021, 10:35 pm A bit of pre problem (relevant) history...
When using a computer, often I get strain in my eyes. Thus, I have begun using the 20 20 20 rule.
Naturally, ( :sly: ) I looked for a program to have a countdown, and show a (large and interputful(?)) notification when to do the looking a way from the screen bit. The one good one that I have found, has mysteriously stopped working properly.

So, after looking around for another good one, and coming up blank, I had a brainwave: why not code it myself :rofl: . Unfortunately, I gave up HTML after a bit (I hope to come back to it. At some point.) and I'm not proficient enough in C++ (yet, hopefully. I don't want to give up that as well :oops: ). Than, I got struck by another brainwave ( :bow: ). Why not use Rainmeter? Although I know Rainmeter isn't used for making apps (before the antivirus quips start flooding in...), it is simply a matter of a rainmaker skin hiding for 20 minutes and appearing for 20 seconds on top of the currant window using topmost etc.

However, as I decided to use Rainmeter, obviously I need another skin showing a countdown to the next break.
I have a few ideas how to implement this:
(I assume two parts the skin. The meter; shows a countdown to the next break, and the 'interrupter'; shows a large topmost notification by a break)
  • All in one skin, using hide to show the 'interrupter' at the right moments.
  • 2 separate skins. ideal (more skins can be added easily), but more complex? it has to get info (how long left) from the interrupter skin to show in the countdown skin.
  • That's all the sensible ideas I can come up with
So, basically, this shows I need a skin that can show a countdown happing in another skin. Is this the right approach? I'm not sure if I'm going about this right, its the first time I'm starting a skin from scratch.
If I am, could I have some advice on how to show a countdown happening in another skin?

And, secondly, how do I do a countdown :oops: ? I had a look at other skins using timers, but it looked pretty complex and I didn't get it. The search function on rainmaker manual seems to be broken - I get this. Bing search (which can usually search Rainmeter manual) also doesn't bring up anything worthwhile.
Searching the forum rather than the manual will give you better results when looking for specific types of actions; using the advanced search lets you specify looking at only "Share your creations" topics related to countdown+timer as keywords.
The results show several countdown timer skins.

I would recommend looking at TimerNixie by JSMorley for ideas; it uses a lua script to simplify calculating the time, so you don't need to "re-create the wheel" to get code that you can modify to perform the desired actions at set intervals.

Another skin you might look at is "Timer, Countdown and Stopwatch" by balala. It uses the timer measure and calc measures to create a countdown timer with preset options to end sessions, and can modified to perform your desired actions.

Take a look at those and see if they help get you started, then come back with any problems you have...
User avatar
Sam12345
Posts: 80
Joined: February 27th, 2021, 9:41 pm
Location: London

Re: New project pre-advice

Post by Sam12345 »

eclectic-tech wrote: April 9th, 2021, 2:02 am it uses a lua script
I'm gonna stay out of lua otherwise it is gonna get too complex as I don't know it (yet, hopefully. Its also on the to-do list :rolmfao:).
eclectic-tech wrote: April 9th, 2021, 2:02 am Another skin you might look at is "Timer, Countdown and Stopwatch" by balala.
This is the first one I looked at.
My first thought that it was to complex, but after some tinkering, I decided to put it into the skin and try it. I had a few problems, and each time a came here to post it, but after writing out the problem it helped me see the root of the issue and get passed it, so its sorta functioning now.
I made (pasted :oops: ) the "skeleton" of the skin now, and will add the formatting later.
I still have an issue though. This is the code:

Code: Select all

[Rainmeter]
Update=1000
AccurateText=1

[Metadata]
Name=20 20 20 Timer 
Author=Sam P (With code from Balala)
Information=Timer skin that shows a warning every 20 minutes for 20 seconds
Version=1.0
License=Creative Commons Attribution - Non - Commercial - Share Alike 3.0

; Variables ====================================

[Variables]
DefaultInitialValue=60

; MEASURES ====================================

[MeasureCounterTimerTime]
Measure=Time

[MeasureCounterTimer]
Measure=Calc
Formula=(( MeasureCounterTimer = 0 ) ? ( MeasureCounterTimerTime - MeasureTimer / 10 ) : MeasureCounterTimer )
Disabled=1

[MeasureTimer]
Measure=Calc
Formula=(( MeasureCounterTimer = 0 ) ? MeasureTimer : ( MeasureCounterTimerTime - MeasureCounterTimer ) * 10 )

[MeasureSp]
Measure=Calc
Formula=(( MeasureSp + 1 ) % 2 )
Disabled=1
IfAboveValue=0
IfAboveAction=[!DisableMeasure MeasureSp]

[MeasureSm]
Measure=Calc
Formula=(( MeasureSm + 1 ) % 2 )
Disabled=1
IfAboveValue=0
IfAboveAction=[!DisableMeasure MeasureSm]

[MeasureMp]
Measure=Calc
Formula=(( MeasureMp + 1 ) % 2 )
Disabled=1
IfAboveValue=0
IfAboveAction=[!DisableMeasure MeasureMp]

[MeasureMm]
Measure=Calc
Formula=(( MeasureMm + 1 ) % 2 )
Disabled=1
IfAboveValue=0
IfAboveAction= [!DisableMeasure MeasureMm]

[MeasureHp]
Measure=Calc
Formula=(( MeasureHp + 1 ) % 2 )
Disabled=1
IfAboveValue=0
IfAboveAction=[!DisableMeasure MeasureHp]

[MeasureHm]
Measure=Calc
Formula=(( MeasureHm + 1 ) % 2 )
Disabled=1
IfAboveValue=0
IfAboveAction=[!DisableMeasure MeasureHm]

[MeasureTimerSet]
Measure=Calc
Formula=((( MeasureTimerSet + 10 * MeasureSp - 10 * MeasureSm + 600 * MeasureMp - 600 * MeasureMm + 36000 * MeasureHp - 36000 * MeasureHm + #DefaultInitialValue# ) < 0 ) ? ( #DefaultInitialValue# * ( -1 )) : ( MeasureTimerSet + 10 * MeasureSp - 10 * MeasureSm + 600 * MeasureMp - 600 * MeasureMm + 36000 * MeasureHp - 36000 * MeasureHm ))

[MeasureTimer2]
Measure=Calc
Format=%S
Formula=( #DefaultInitialValue# - MeasureTimer + MeasureTimerSet )
IfBelowValue=1
IfBelowAction=[!DisableMeasure MeasureCounterTimer]

[MeasureTimer3]
Measure=Calc
Formula=(( MeasureCounterTimer = 0 ) ? 1 : ( MeasureTimer2 - 1 ))
IfBelowValue=0
IfBelowAction= [!DisableMeasure MeasureCounterTimer]["#CURRENTPATH#nircmd.exe" #Act#]
DynamicVariables=1

[MeasureTimer4]
Measure=Calc
Formula=(( MeasureCounterTimer = 0 ) ? 1 : ( MeasureTimer2 - 1 ))
IfBelowValue=0
IfBelowAction=

[MeasureTimerDigit2]
Measure=Calc
Formula=(( FLOOR ( MeasureTimer2 / 10 )) % 60 )

[MeasureTimerDigit3]
Measure=Calc
Formula=(( FLOOR ( MeasureTimer2 / 600 )) % 60 )

[MeasureTimerDigit4]
Measure=Calc
Formula=(( FLOOR ( MeasureTimer2 / 36000 )) % 100 )

; METERS ======================================

[MeterTimerDigit]
Meter=String
MeasureName=MeasureTimerDigit2
MeasureName2=MeasureTimerDigit3
MeasureName3=MeasureTimerDigit4
FontSize=14
Y=22
H=24
Text=%2m %1s
LeftMouseDownAction=[!EnableMeasure MeasureCounterTimer]

[MeterBreak]
Meter=String
MeasureName=MeasureTimerDigit4
IfAboveValue=0
IfAboveAction=[!HideMeter MeterBreak]
text=Break
So everything goes to plan until it comes to the !HideMeter part. It doesnt hide it. I assume that all the measures are working correctly, and the issue is somewhere here:

Code: Select all

Meter=String
MeasureName=MeasureTimerDigit4
IfAboveValue=0
IfAboveAction=[!HideMeter MeterBreak]
Its probably IfAboveValue, but I can see what's wrong

I also tried

Code: Select all

[MeterTimerDigit]
Meter=String
MeasureName=MeasureTimerDigit2
MeasureName2=MeasureTimerDigit3
MeasureName3=MeasureTimerDigit4
FontSize=14
Y=22
H=24
Text=%2m %1s
IfEqualValue=0
IfEqualAction= [!HideMeter MeterBreak]
LeftMouseDownAction=[!EnableMeasure MeasureCounterTimer]


[MeterBreak]
Meter=String
MeasureName=MeasureTimerDigit4
text=Break
as well as

Code: Select all

[MeterTimerDigit]
Meter=String
MeasureName=MeasureTimerDigit2
MeasureName2=MeasureTimerDigit3
MeasureName3=MeasureTimerDigit4
FontSize=14
Y=22
H=24
Text=%2m %1s
LeftMouseDownAction=[!EnableMeasure MeasureCounterTimer]

[MeterBreak]
Meter=String
MeasureName=MeasureTimerDigit4
text=Break
IfCondition= MeasureTimerDigit4=0 && MeasureTimerDigit3=0
IfTrueAction=[!HideMeter MeterBreak]
But to no avial...
Insert inspirational quote here
User avatar
balala
Rainmeter Sage
Posts: 16110
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: New project pre-advice

Post by balala »

Sam12345 wrote: April 9th, 2021, 11:36 am This is the first one I looked at.
The skin in question is pretty old and it might have some errors. At the moment it was published I was new on skining and payed not too much attention to details, so as said, it probably has errors (didn't test it now however).
Sam12345 wrote: April 9th, 2021, 11:36 am So everything goes to plan until it comes to the !HideMeter part. It doesnt hide it. I assume that all the measures are working correctly, and the issue is somewhere here:

Code: Select all

Meter=String
MeasureName=MeasureTimerDigit4
IfAboveValue=0
IfAboveAction=[!HideMeter MeterBreak]
Its probably IfAboveValue, but I can see what's wrong
As said previously, IfActions (IfAboveValue / IfAboveAction) can't be used on meters. Same way nor the IfConditions can. Both options are belonging to measures and accordingly can be used ONLY on measures. On meters they are simply not working. Move them to a measure.
Related to IfAboveValue, note that this option compares the value of the measure in which is it used to the value used on the option (in this case 0). A meter doesn1t have a value, which could be compared to the value used on the option.
User avatar
Sam12345
Posts: 80
Joined: February 27th, 2021, 9:41 pm
Location: London

Re: New project pre-advice

Post by Sam12345 »

balala wrote: April 9th, 2021, 4:03 pm The skin in question is pretty old and it might have some errors
Seems to work properly for me, but it still uses !Execute.
balala wrote: April 9th, 2021, 4:03 pm As said previously, IfActions can't be used on meters.
omg there seems to be some block in my brain in remembering this. :? :-(
So I moved it to a measure ( :oops: ) and it still doesn't work:

Code: Select all

[MeasureTimerDigit4]
Measure=Calc
Formula=(( FLOOR ( MeasureTimer2 / 36000 )) % 100 )
IfCondition= MeasureTimerDigit4=0
IfTrueAction=[!HideMeter MeterBreak]
This time, it just hides the meter.
Insert inspirational quote here
User avatar
balala
Rainmeter Sage
Posts: 16110
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: New project pre-advice

Post by balala »

Sam12345 wrote: April 9th, 2021, 4:18 pm Seems to work properly for me, but it still uses !Execute.
Yes, because as said this is a pretty old skin. Back in 2012, when it has been written the !Execute bang has been just eliminated, probably I was still using it.
But due to the backward compatibility, the bang can be used even now. It's another question that it is not recommended, but can be used, this definitely won't cause a working error.
Sam12345 wrote: April 9th, 2021, 4:18 pm So I moved it to a measure ( :oops: ) and it still doesn't work:

Code: Select all

[MeasureTimerDigit4]
Measure=Calc
Formula=(( FLOOR ( MeasureTimer2 / 36000 )) % 100 )
IfCondition= MeasureTimerDigit4=0
IfTrueAction=[!HideMeter MeterBreak]
This time, it just hides the meter.
If it hides the meter, means it does work, isn't it?
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5384
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: New project pre-advice

Post by eclectic-tech »

Sam12345 wrote: April 8th, 2021, 10:35 pm And, secondly, how do I do a countdown :oops: ? I had a look at other skins using timers, but it looked pretty complex and I didn't get it.
Since you do not want to use a skin that uses Lua, here is a simple example countdown skin (without Lua) and with easy to follow comments explaining what each measure is doing.
countdown.png

Code: Select all

[Rainmeter]
Update=1000
DynamicWindowSize=1
BackgroundMode=2
SolidColor=0,0,0,127
LeftMouseDoubleClickAction=[PlayStop]

[Metadata]
Name=CountdownTimer
Author=Eclectic Tech (eclectic-tech@deviantart.com)
Information=Item name can be entered, timer restarted, or erased
License=Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International
Version=1.04.10.2021

; Click title to set timer name
; Click middle time to enter hours, minutes, and seconds... press "Enter" to set each 
; Chime will sound until skin is double-clicked, or until "Re-Start" or "Erase" are selected, or counter is renamed

[Variables]
FontName=Arial
FontHeight=10
Item1=Countdown Timer
Time1Hrs=0
Time1Min=0
Time1Sec=0
Time1=0

;===========================================================
; Measures
;===========================================================

;===========================================================
; Current time in Seconds
[mTime]
Measure=Time

;===========================================================
; Get user inputs for timer
[mItems]
Measure=Plugin
Plugin=InputText
SolidColor=0,0,0,255
FontColor=255,255,255,255
FontFace=#FontName#
FontSize=(#FontHeight#-1)
X=5
Y=5
H=(#FontHeight#*1.5)
W=115
Command1=[!SetVariable Item1 "$UserInput$"] DefaultValue="#Item1#"
Command2=[!SetVariable Time1Hrs "$UserInput$"] W=16 X=7 Y=20 DefaultValue=[mInputHrs1]
Command3=[!SetVariable Time1Min "$UserInput$"] W=16 X=27 Y=20 DefaultValue=[mInputMin1]
Command4=[!SetVariable Time1Sec "$UserInput$"] W=16 X=45 Y=20 DefaultValue=[mInputSec1]

;===========================================================
; Correct display to always show 2 digits for Hours, Minutes, and Seconds
[mInputHrs1]
Measure=String
String=#Time1Hrs#
RegExpSubstitute=1
Substitute="^(\d$)":"0\1"
DynamicVariables=1

[mInputMin1]
Measure=String
String=#Time1Min#
RegExpSubstitute=1
Substitute="^(\d$)":"0\1"
DynamicVariables=1

[mInputSec1]
Measure=String
String=#Time1Sec#
RegExpSubstitute=1
Substitute="^(\d$)":"0\1"
DynamicVariables=1

;===========================================================
; Calculate the number of seconds for the timer
[mTime1Sec]
Measure=Calc
Formula=(#Time1Hrs#*3600+#Time1Min#*60+#Time1Sec#)
DynamicVariables=1

;===========================================================
; Test if the current time is greater than or equal to the timer
[mItem1RunTime]
Measure=Calc
Formula=#Time1#
IfCondition=([mTime:]>=#Time1#)
IfTrueAction=[PlayLoop "#@#Sounds\chime1.wav"][!DisableMeasureGroup Item1Runtime]
DynamicVariables=1
Disabled=1
Group=Item1RunTime

;===========================================================
; Calculate and correct the display for the remaining time
[mRemainingHrs1]
Measure=Calc
Formula=Floor((#Time1#-mTime)/3600)
DynamicVariables=1
Disabled=1
Group=Item1RunTime
RegExpSubstitute=1
Substitute="^(\d$)":"0\1"

[mRemainingMin1]
Measure=Calc
Formula=Floor((#Time1#-mTime)/60)%60
ValueRemainder=1
DynamicVariables=1
Disabled=1
Group=Item1RunTime
RegExpSubstitute=1
Substitute="^(\d$)":"0\1"

[mRemainingSec1]
Measure=Calc
Formula=Floor(#Time1#-mTime)%60
ValueRemainder=1
DynamicVariables=1
Disabled=1
Group=Item1RunTime
RegExpSubstitute=1
Substitute="^(\d$)":"0\1"

;===========================================================
; Meters
;===========================================================
[Item1]
Meter=String
X=5
Y=5
W=120
FontFace=#FontName#
FontSize=#FontHeight#
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
DynamicVariables=1
Text=#Item1#
LeftMouseUpAction=[PlayStop][!DisableMeasureGroup Item1RunTime][!CommandMeasure "mItems" "ExecuteBatch 1"]
ToolTipText="Set Timer Name"

[Item1TimeHrs]
Meter=String
MeasureName=mInputHrs1
X=r
Y=15r
W=20
FontFace=#FontName#
FontSize=#FontHeight#
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
DynamicVariables=1
Text=%1:
LeftMouseUpAction=[PlayStop][!DisableMeasureGroup Item1RunTime][!CommandMeasure "mItems"  "ExecuteBatch 2"][!SetOption StartItem1 ToolTipText "Start"]
ToolTipText="Set Hrs"

[Item1TimeMns]
Meter=String
MeasureName=mInputMin1
X=-1R
Y=r
W=20
FontFace=#FontName#
FontSize=#FontHeight#
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
DynamicVariables=1
Text=%1:
LeftMouseUpAction=[PlayStop][!DisableMeasureGroup Item1RunTime][!CommandMeasure "mItems"  "ExecuteBatch 3"][!SetOption StartItem1 ToolTipText "Start"]
ToolTipText="Set Mins"

[Item1TimeSecs]
Meter=String
MeasureName=mInputSec1
X=-1R
Y=r
W=20
FontFace=#FontName#
FontSize=#FontHeight#
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
DynamicVariables=1
LeftMouseUpAction=[PlayStop][!DisableMeasureGroup Item1RunTime][!CommandMeasure "mItems"  "ExecuteBatch 4"][!SetOption StartItem1 ToolTipText "Start"]
ToolTipText="Set Secs"

[StartItem1]
Meter=String
X=120
Y=r
StringAlign=Right
FontFace=#FontName#
FontSize=#FontHeight#
FontColor=255,255,255,255
SolidColor=0,0,0,1
AntiAlias=1
Text="Start"
LeftMouseUpAction=[PlayStop][!SetVariable Time1 ([mTime:]+[mTime1Sec])][!EnableMeasureGroup Item1RunTime][!SetOption #CurrentSection# Text "Re-Start"]
DynamicVariables=1

[Timer1Remaining]
Meter=String
MeasureName=mRemainingHrs1
MeasureName2=mRemainingMin1
MeasureName3=mRemainingSec1
X=5
Y=16r
FontFace=#FontName#
FontSize=#FontHeight#
FontColor=255,255,255,255
AntiAlias=1
DynamicVariables=1
Text="%1:%2:%3"
TooltipText="Time Remaining#CRLF#* Double-Left-Click #CRLF#to Silence the Alarm"
[Timer1Reset]
Meter=String
X=120
Y=r
StringAlign=Right
FontFace=#FontName#
FontSize=#FontHeight#
FontColor=255,255,255,255
AntiAlias=1
Text="Erase"
LeftMouseUpAction=[PlayStop][!DisableMeasureGroup Item1RunTime][!SetVariable "Time1Hrs" "00"][!SetVariable "Time1Min" "00"][!SetVariable "Time1Sec" "00"][!SetOption StartItem1 Text "Start"][!Update]
Hopefully, this will help you get started...
EDIT: The attached "chime1.wav" should be saved in the "@Resources\Sounds" folder of your skin to work.
You do not have the required permissions to view the files attached to this post.
User avatar
Sam12345
Posts: 80
Joined: February 27th, 2021, 9:41 pm
Location: London

Re: New project pre-advice

Post by Sam12345 »

balala wrote: April 9th, 2021, 5:29 pm If it hides the meter, means it does work, isn't it?
Sorry, I should have been clearer. I meant that it hides all the time, as opposed to when the timer reaches 0.
Also, I updated Rainmeter, than I ran the skin and I noticed that it was no longer draggable. I cant see why. I'm not sure if it is connected to the skin, or some problem with the update (my other skins are all right).
eclectic-tech wrote: April 10th, 2021, 1:10 pm Hopefully, this will help you get started...
I already began implementing Balala's code (above), but I will have a proper deep look to try understand it tomorrow, it does look easier to understand, and I will see which one I will use.
Insert inspirational quote here
User avatar
balala
Rainmeter Sage
Posts: 16110
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: New project pre-advice

Post by balala »

Sam12345 wrote: April 10th, 2021, 10:47 pm Sorry, I should have been clearer. I meant that it hides all the time, as opposed to when the timer reaches 0.
Also, I updated Rainmeter, than I ran the skin and I noticed that it was no longer draggable. I cant see why. I'm not sure if it is connected to the skin, or some problem with the update (my other skins are all right).
Yes, the [MeasureTimerDigit4] measure is always zero, so it hides the meter, however I can't follow what's the purpose of all those measures in your code. Sorry...
Sam12345 wrote: April 10th, 2021, 10:47 pm I already began implementing Balala's code (above), but I will have a proper deep look to try understand it tomorrow, it does look easier to understand, and I will see which one I will use.
Feel free to come back with questions if there is any.
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5384
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: New project pre-advice

Post by eclectic-tech »

balala wrote: April 11th, 2021, 6:15 pm Yes, the [MeasureTimerDigit4] measure is always zero, so it hides the meter, however I can't follow what's the purpose of all those measures in your code. Sorry...
I had the same trouble following that old code, which is why I offered the example...

I feel the best way is to use JSMorley's skin which handles all of the time requirements without the need for time measures and let's you concentrate on the actions and style of the skin.

As always it is the skin author's choice; there are usually several ways to achieve the same end results when coding skins :great: