Ok, here is one way to approach it:
Code: Select all
[Rainmeter]
Simplesentence
Author=Ben Docherty
Update=1000
[Metadata]
Name=Planet Express | RAM Bar
Config=
Description=RAM Bar for planet express skin
Instructions=
Version=1.0.0
Tags=
License=
Variant=
Preview=
; Measures]========================================================================
[MeasurePhysMemTotal]
Measure=PhysicalMemory
Total=1
[MeasurePhysMemUsed]
Measure=PhysicalMemory
[MeasurePercentUsed]
Measure=Calc
Formula=(Round((MeasurePhysMemUsed / MeasurePhysMemTotal) * 100))
Substitute=".00000":""
[MeasureGetImageNumber]
Measure=Calc
Formula=MeasurePercentUsed <= 20 ? 1 : (((MeasurePercentUsed > 20) && (MeasurePercentUsed < 40)) ? 2 : (((MeasurePercentUsed >= 40) && (MeasurePercentUsed < 60)) ? 3 : (((MeasurePercentUsed >= 60) && (MeasurePercentUsed < 80)) ? 4 : 5)))
[MeasureShow1]
Measure=Calc
Formula=MeasureGetImageNumber
IfAboveValue=0
IfAboveAction=!Execute [!RainmeterShowMeter MeterImage1]
IfBelowValue=2
IfBelowAction=!Execute [!RainmeterHideMeter MeterImage2][!RainmeterHideMeter MeterImage3][!RainmeterHideMeter MeterImage4][!RainmeterHideMeter MeterImage5]
[MeasureShow2]
Measure=Calc
Formula=MeasureGetImageNumber
IfAboveValue=1
IfAboveAction=!Execute [!RainmeterShowMeter MeterImage1][!RainmeterShowMeter MeterImage2]
IfBelowValue=3
IfBelowAction=!Execute [!RainmeterHideMeter MeterImage3][!RainmeterHideMeter MeterImage4][!RainmeterHideMeter MeterImage5]
[MeasureShow3]
Measure=Calc
Formula=MeasureGetImageNumber
IfAboveValue=2
IfAboveAction=!Execute [!RainmeterShowMeter MeterImage1][!RainmeterShowMeter MeterImage2][!RainmeterShowMeter MeterImage3]
IfBelowValue=4
IfBelowAction=!Execute [!RainmeterHideMeter MeterImage4][!RainmeterHideMeter MeterImage5]
[MeasureShow4]
Measure=Calc
Formula=MeasureGetImageNumber
IfAboveValue=3
IfAboveAction=!Execute [!RainmeterShowMeter MeterImage1][!RainmeterShowMeter MeterImage2][!RainmeterShowMeter MeterImage3][!RainmeterShowMeter MeterImage4]
IfBelowValue=5
IfBelowAction=!Execute [!RainmeterHideMeter MeterImage5]
[MeasureShow5]
Measure=Calc
Formula=MeasureGetImageNumber
IfAboveValue=4
IfAboveAction=!Execute [!RainmeterShowMeter MeterImage1][!RainmeterShowMeter MeterImage2][!RainmeterShowMeter MeterImage3][!RainmeterShowMeter MeterImage4][!RainmeterShowMeter MeterImage5]
; Meters]==========================================================================
[MeterImage1]
Meter=Image
X=0
Y=0
ImageName=RAMRevBar1.png
Hidden=1
DynamicVariables=1
[MeterImage2]
Meter=Image
X=0
Y=0
ImageName=RAMRevBar2.png
Hidden=1
DynamicVariables=1
[MeterImage3]
Meter=Image
X=0
Y=0
ImageName=RAMRevBar3.png
Hidden=1
DynamicVariables=1
[MeterImage4]
Meter=Image
X=0
Y=0
ImageName=RAMRevBar4.png
Hidden=1
DynamicVariables=1
[MeterImage5]
Meter=Image
X=0
Y=0
ImageName=RAMRevBar5.png
Hidden=1
DynamicVariables=1
The [MeasurePercentUsed] measure is turning those raw numbers from PhysicalMemory into a percentage you can use later.
I added that [MeasureGetImageNumber] calc measure mostly just to have the values turned into the same as the number on the files (1,2,3,4,5) just to make it easier to follow. This is a "conditional" formula that in effect is saying "if the number is less than 20, return 1, else if the number is less than 40 return 2, else if the number is less than 60 return 3, else if the number is less than 80 return 4, otherwise it must be higher than 80, so return 5"
You can use the value in [MeasurePercentUsed] directly instead if you want. Just change the IfAbove IfBelow values appropriately as well as changing the Formula= statements in all those Above/Below measures to use the right source measure.
Take a look at what this is doing. I hope it is reasonably clear. It is really just a forward / reverse pyramid of hide and show meters based on the above and below values. Feel free to ask if you don't see what it is doing somewhere.
=================================
P.S. This is one way to do this, although to be honest I'm not sure I would take the approach you are. I would be tempted to create the 5 images like this, where the "*" chars represent the triangles / colored blocks you are displaying.
RAMRevBar1.png
*
RAMRevBar2.png
**
RAMRevBar3.png
***
RAMRevBar4.png
****
RAMRevBar5.png
*****
Then you just get the percentage of memory used, do a formula like I did to translate it to 1, 2, 3, 4 or 5, and just display that image with something like:
[MeasureGetImageNumber]
Measure=Calc
Formula=MeasurePercentUsed <= 20 ? 1 : (((MeasurePercentUsed > 20) && (MeasurePercentUsed < 40)) ? 2 : (((MeasurePercentUsed >= 40) && (MeasurePercentUsed < 60)) ? 3 : (((MeasurePercentUsed >= 60) && (MeasurePercentUsed < 80)) ? 4 : 5)))
[MeterImage]
Meter=Image
X=0
Y=0
ImageName=RAMRevBar[MeasureGetImageNumber].png
DynamicVariables=1
Then you don't really need ANY IfAbove/IfBelow stuff, don't need all that hiding & unhiding, and only need one display meter.