It is currently April 18th, 2024, 1:10 pm

Lua Script being interrupted, but only sometimes.

Get help with creating, editing & fixing problems with skins
XavierTheTitan
Posts: 5
Joined: December 6th, 2018, 3:44 pm

Lua Script being interrupted, but only sometimes.

Post by XavierTheTitan »

I have a somewhat complex skin/script combo that essentially replaces windows file explorer, but in a far more simplistic way.

I have a problem in my lua script that writes out to a .ini file for the skin where a either a loop or the write statement inside is being interrupted. I'm not sure exactly why the interruption is happening, as I have check mouse click timings, rainmeter skin updates, specific directories but all come back with the same result. I can also run the script from CMD and it works flawlessly everytime.

Rainmeter 4.2 and 4.3 beta
Windows 10
Ryzen 7 1800x
GTX 1080
Rainmeter running off of HDD

Code: Select all

function Initialize()
   Directory = tostring(SELF:GetOption('Directory'))
end

function CreateList()
   
   readFile = io.open('E:/Documents/Rainmeter/Skins/GUIPlate/@resources/GameList.txt')
   writeFile = io.open("E:/Documents/Rainmeter/Skins/GUIPlate/GameMenu/games.ini", "w+")
	
   DirectoryFolder = {}
   fullPath = {}
   numGame = 0
   XPos = 0
   YPos = 166
   
   for pathPoint in Directory:gmatch("(.-)%\\") do
      table.insert(fullPath, pathPoint)
      table.insert(DirectoryFolder, '[MeterScript'..numGame..']')
      table.insert(DirectoryFolder, 'Measure=Script')
      table.insert(DirectoryFolder, 'ScriptFile="#@#ReadGameFolder.lua"')
      table.insert(DirectoryFolder, 'Directory='..table.concat(fullPath, '\\')..'\\')
      
      table.insert(DirectoryFolder, '[MeterPath'..pathPoint..']')
      table.insert(DirectoryFolder, 'Meter=Image')
      table.insert(DirectoryFolder, 'ImageName=#@#TopPath.png')
      table.insert(DirectoryFolder, 'X='..XPos)
      table.insert(DirectoryFolder, 'Y=146')
      table.insert(DirectoryFolder, 'W='..pathPoint:len()*11)
      table.insert(DirectoryFolder, 'H=20')
      table.insert(DirectoryFolder, 'LeftmouseDownAction = [!CommandMeasure "MeterScript'..numGame..'" "CreateList()"]')
      table.insert(DirectoryFolder, 'LeftmouseUpAction = [!refresh]')
      
      table.insert(DirectoryFolder, '[TextPath'..numGame..']')
      table.insert(DirectoryFolder, 'Meter=String')
      table.insert(DirectoryFolder, 'X='..(XPos+1))
      table.insert(DirectoryFolder, 'Y=146')
      table.insert(DirectoryFolder, 'W=191')
      table.insert(DirectoryFolder, 'H=20')
      table.insert(DirectoryFolder, 'FontSize=12')
      table.insert(DirectoryFolder, 'FontColor=0,234,255,255')
      if pathPoint:len() > 11 then
         table.insert(DirectoryFolder, 'Text="'..pathPoint:sub(1, 11)..'"')
      else
         table.insert(DirectoryFolder, 'Text="'..pathPoint..'"')
      end
      
      numGame = numGame + 1
      XPos = XPos + pathPoint:len()*11
   end
   
   XPos = 0
   
   os.execute('E:\\Documents\\Rainmeter\\Skins\\GUIPlate\\@resources\\PrintGames.bat "'..Directory..'" d > E:\\Documents\\Rainmeter\\Skins\\GUIPlate\\@resources\\GameList.txt')
   
   for line in readFile:lines() do
      table.insert(DirectoryFolder, '[MeterScript'..numGame..']')
      table.insert(DirectoryFolder, 'Measure=Script')
      table.insert(DirectoryFolder, 'ScriptFile="#@#ReadGameFolder.lua"')
      table.insert(DirectoryFolder, 'Directory="'..table.concat(fullPath, '\\')..'\\'..line..'\\"')
      
      table.insert(DirectoryFolder, '[MeterPath'..line..']')
      table.insert(DirectoryFolder, 'Meter=Image')
      table.insert(DirectoryFolder, 'ImageName=#@#PathShortcuts.png')
      table.insert(DirectoryFolder, 'X='..XPos)
      table.insert(DirectoryFolder, 'Y='..YPos)
      table.insert(DirectoryFolder, 'LeftmouseDownAction = [!CommandMeasure "MeterScript'..numGame..'" "CreateList()"]')
      table.insert(DirectoryFolder, 'LeftmouseUpAction = [!refresh]')
      
      table.insert(DirectoryFolder, '[TextPath'..numGame..']')
      table.insert(DirectoryFolder, 'Meter=String')
      table.insert(DirectoryFolder, 'X='..(XPos+1))
      table.insert(DirectoryFolder, 'Y='..YPos)
      table.insert(DirectoryFolder, 'W=100')
      table.insert(DirectoryFolder, 'H=20')
      table.insert(DirectoryFolder, 'FontSize=12')
      table.insert(DirectoryFolder, 'FontColor=0,234,255,255')
      if line:len() > 22 then
         table.insert(DirectoryFolder, 'Text="'..line:sub(1, 22)..'"')
      else
         table.insert(DirectoryFolder, 'Text="'..line..'"')
      end
      
      numGame = numGame + 1
      
      YPos = YPos + 20
      if YPos > 1060 then
         XPos = XPos + 200
         YPos = 166
      end
   end
   
   os.execute('E:\\Documents\\Rainmeter\\Skins\\GUIPlate\\@resources\\PrintGames.bat "'..Directory..'" -d-h > E:\\Documents\\Rainmeter\\Skins\\GUIPlate\\@resources\\GameList.txt')
   
	for line in readFile:lines() do
      table.insert(DirectoryFolder, '[MeterGame'..numGame..']')
      table.insert(DirectoryFolder, 'Meter=Image')
      table.insert(DirectoryFolder, 'ImageName=#@#PathShortcuts.png')
      table.insert(DirectoryFolder, 'X='..XPos)
      table.insert(DirectoryFolder, 'Y='..YPos)
      table.insert(DirectoryFolder, 'LeftmouseUpAction=["'..Directory..'\\'..line..'"]')
      
      table.insert(DirectoryFolder, '[TextGame'..numGame..']')
      table.insert(DirectoryFolder, 'Meter=String')
      table.insert(DirectoryFolder, 'X='..(XPos+1))
      table.insert(DirectoryFolder, 'Y='..YPos)
      table.insert(DirectoryFolder, 'W=100')
      table.insert(DirectoryFolder, 'H=20')
      table.insert(DirectoryFolder, 'FontSize=11')
      table.insert(DirectoryFolder, 'FontColor=0,234,255,255')
      if line:sub(1,-5):len() > 25 then
         table.insert(DirectoryFolder, 'Text="'..line:sub(1,-5):sub(1, 25)..'"')
      else
         table.insert(DirectoryFolder, 'Text="'..line:sub(1,-5)..'"')
      end
      
      YPos = YPos + 20
      if YPos > 1060 then
         XPos = XPos + 200
         YPos = 166
      end
      
      numGame = numGame + 1
   end
   
   io.output(writeFile)
   
   --print(table.concat(DirectoryFolder, '\n')) --for debug
   
   io.write(table.concat(DirectoryFolder, '\n'))
end

--CreateList() --debug for console running

Code: Select all

[Rainmeter]
UpdateDivider= -1

[MeterScript]
Measure=Script
ScriptFile="#@#ReadGameFolder.lua"
Directory=E:\Documents\Rainmeter\Skins\GUIPlate\@resources\games\

[MeterDocuments]
Meter             =  Image
ImageName         =  #@#MyComputerButton
LeftmouseDownAction = [!CommandMeasure "MeterScript" "CreateList()"]
LeftmouseUpAction = [!ToggleConfig "GUIPlate\GameMenu" "games.ini"]

Code: Select all

[Rainmeter]
Update= -1
UpdateDivider= -1

[MeterScript1]
Measure=Script
ScriptFile="#@#ReadGameFolder.lua"
Directory=E:\Videos\

[MeterScript2]
Measure=Script
ScriptFile="#@#ReadGameFolder.lua"
Directory="E:\Folder 1\workStuff\"

[MeterScript3]
Measure=Script
ScriptFile="#@#ReadGameFolder.lua"
Directory=E:\Pictures\

[MeterScript4]
Measure=Script
ScriptFile="#@#ReadGameFolder.lua"
Directory=E:\Documents\

[MeterScript5]
Measure=Script
ScriptFile="#@#ReadGameFolder.lua"
Directory=E:\Downloads\

[MeterScript6]
Measure=Script
ScriptFile="#@#ReadGameFolder.lua"
Directory="E:\Folder 1\"

[MeterFolder]
Meter             =  Image
ImageName         =  #@#FLDFLD
LeftmouseDownAction = [!CommandMeasure "MeterScript6" "CreateList()"]
LeftmouseUpAction = [!RainmeterActivateConfig "GUIPlate\GameMenu" "games.ini"][!Refresh "GUIPlate\GameMenu"]
x                 =  0
y                 =  0

[MeterDownloads]
Meter             =  Image
ImageName         =  #@#DNLFLD
LeftmouseDownAction = [!CommandMeasure "MeterScript5" "CreateList()"]
LeftmouseUpAction = [!RainmeterActivateConfig "GUIPlate\GameMenu" "games.ini"][!Refresh "GUIPlate\GameMenu"]
x                 =  30
y                 =  0

[MeterDocuments]
Meter             =  Image
ImageName         =  #@#DOCFLD
LeftmouseDownAction = [!CommandMeasure "MeterScript4" "CreateList()"]
LeftmouseUpAction = [!RainmeterActivateConfig "GUIPlate\GameMenu" "games.ini"][!Refresh "GUIPlate\GameMenu"]
x                 =  60
y                 =  0

[MeterPictures]
Meter             =  Image
ImageName         =  #@#PICFLD
LeftmouseDownAction = [!CommandMeasure "MeterScript3" "CreateList()"]
LeftmouseUpAction = [!RainmeterActivateConfig "GUIPlate\GameMenu" "games.ini"][!Refresh "GUIPlate\GameMenu"]
x                 =  90
y                 =  0

[MeterWork]
Meter             =  Image
ImageName         =  #@#WRKFLD
LeftmouseDownAction = [!CommandMeasure "MeterScript2" "CreateList()"]
LeftmouseUpAction = [!RainmeterActivateConfig "GUIPlate\GameMenu" "games.ini"][!Refresh "GUIPlate\GameMenu"]
x                 =  120
y                 =  0

[MeterVideos]
Meter             =  Image
ImageName         =  #@#VIDFLD
LeftmouseDownAction = [!CommandMeasure "MeterScript1" "CreateList()"]
LeftmouseUpAction = [!RainmeterActivateConfig "GUIPlate\GameMenu" "games.ini"][!Refresh "GUIPlate\GameMenu"]
x                 =  150
y                 =  0
brief rundown of my code, It will take in a directory, use a batch script to output the contents of said directory to a file, read in that file to write the directories and files contained within the passed in directory. I have put the batch script command through quite a bit of testing, and there is no problem there. And as stated before, running this code through CMD gives flawless results everytime, so I am 90% sure Rainmeter is the issue here. Also, while the script is being interrupted most of the time, sometimes, it will perform exactly as intended.

Also, if anyone has any Ideas about removing the batch script call, Please PM me, as I have looked into everything I know.
User avatar
ikarus1969
Posts: 571
Joined: February 28th, 2011, 3:20 pm
Location: Vienna, Austria

Re: Lua Script being interrupted, but only sometimes.

Post by ikarus1969 »

just a little remark: there's nothing like UpdateDivider in the Rainmeter-section, just DefaultUpdateDivider (docu).
Without knowing if this can have any effect on the occasional interrupts you may want to correct this.
User avatar
balala
Rainmeter Sage
Posts: 16143
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Lua Script being interrupted, but only sometimes.

Post by balala »

ikarus1969 wrote: December 11th, 2018, 9:40 am Without knowing if this can have any effect on the occasional interrupts you may want to correct this.
For sure this has to be fixed, however I don't think something like this could have any effect. The UpdateDivider option is simply ignored.

Now XavierTheTitan, it's extremely hard for us (for me definitely) to check how the skin does work in such cases when there are more .ini file, a .lua file and so on. Best would be to pack the content of the whole config and upload it, please.
User avatar
kyriakos876
Posts: 919
Joined: January 30th, 2017, 2:01 am
Location: Greece

Re: Lua Script being interrupted, but only sometimes.

Post by kyriakos876 »

XavierTheTitan wrote: December 11th, 2018, 9:08 am Rainmeter running off of HDD
Are you saying that Rainmeter is not installed in the C:, or is the C:, an HDD? because I've found that installing it in another hard drive can cause some random issues. I don't know if this has been fixed over the years or not, but it might be worth noting.

About removing the batch, check this out: https://github.com/premake/premake-4.x/wiki/os.copyfile
If I understand what you're doing with it, this could have the same functionality.
XavierTheTitan
Posts: 5
Joined: December 6th, 2018, 3:44 pm

Re: Lua Script being interrupted, but only sometimes.

Post by XavierTheTitan »

No progress yet at finishing this bug myself, still functioning in the same way unfortunately.

Here is my rmskin, though it is not very user friendly yet, as i'm obviously still trying to work out kinks before I add universality.

Hope this helps
kyriakos876 wrote: December 11th, 2018, 11:36 am Are you saying that Rainmeter is not installed in the C:, or is the C:, an HDD? because I've found that installing it in another hard drive can cause some random issues.


as for Rainmeter, it is on C:, but the skin is loading from another Drive, I'l move it back to C: and see if that helps.
You do not have the required permissions to view the files attached to this post.
User avatar
balala
Rainmeter Sage
Posts: 16143
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Lua Script being interrupted, but only sometimes.

Post by balala »

XavierTheTitan wrote: December 12th, 2018, 3:49 am as for Rainmeter, it is on C:, but the skin is loading from another Drive, I'l move it back to C: and see if that helps.
No, it won't help. If you have set correctly the skin's path, it works even if that isn't on C:.

I'd need a few details, plus I have a few comments about the code.
First the comments. These don't prevent the skin to work properly, but you should fix them:
  • The !Rainmeter... bang prefix was deprecated long time ago and you should remove them.
  • UpdateDivider can't be used into [Rainmeter] section, it belongs to measures and meters. It doesn't do anything in the [Rainmeter] section, being ignored.
  • The Author option doesn't belong to the [Rainmeter] section, but to [Metadata]. Once it belonged there, but in the meantime it was moved to [Metadata].
And the questions:
  • What skin are we talking about? Because the posted package has a lot and although I have a tip, I'm not sure. Would be nice to specify the skin you need help with, whenever are posting such questions (it's not obvious at all).
  • If my tip is correct and the incriminated skin is DIRButton\DIRButton.ini, if I load the skin and click it, a list is populated with some elements. What should have to happen (not sure again)?
XavierTheTitan
Posts: 5
Joined: December 6th, 2018, 3:44 pm

Re: Lua Script being interrupted, but only sometimes.

Post by XavierTheTitan »

balala wrote: December 12th, 2018, 1:27 pm And the questions:
  • What skin are we talking about? Because the posted package has a lot and although I have a tip, I'm not sure. Would be nice to specify the skin you need help with, whenever are posting such questions (it's not obvious at all).
The lua script should modify GUIPlate/GameMenu/games.ini

The two different batch calls are for directories, then files.

The three loops are for building the different meters for all the different files there.

balala wrote: December 12th, 2018, 1:27 pm [*]If my tip is correct and the incriminated skin is DIRButton\DIRButton.ini, if I load the skin and click it, a list is populated with some elements. What should have to happen (not sure again)?[/list]
DIRButton/DIRButton.ini is the one of the ones that will change the skin.

The main skin that is modified from the GameList.txt is games.ini. After executing the read of the directory and writing the output to GameList.txt, the lua script will then read in, line by line from GameList.txt, and populate the different meters there in.

The issue is happening either during the loop or the write call at the end. It is cutting off at an arbitrary point, some times in the middle of writing out to a meter. I have also tried writing out to the file inside of the loop, but that comes out with more errors.
User avatar
balala
Rainmeter Sage
Posts: 16143
Joined: October 11th, 2010, 6:27 pm
Location: Gheorgheni, Romania

Re: Lua Script being interrupted, but only sometimes.

Post by balala »

I tested the DIRButton.ini skin over day, but it seems to run smoothly for me. I can't discover interruptions, at least not up to now. :confused:
XavierTheTitan
Posts: 5
Joined: December 6th, 2018, 3:44 pm

Re: Lua Script being interrupted, but only sometimes.

Post by XavierTheTitan »

balala wrote: December 12th, 2018, 6:56 pm I tested the DIRButton.ini skin over day, but it seems to run smoothly for me. I can't discover interruptions, at least not up to now. :confused:
Here is a gif of what is happening. So when I click any of the icons to open the folder, it will print out only part of it, not the entire contents of the folder. and the file is cut off at a weird point, like halfway through writing a line. in the middle of a measure.

Again any help is appreciated, I have tried a complete re-install of rainmeter, it is on the C: drive, but the skins are on a different drive, and I'm not sure how to move them to the same drive. They default to my documents folder which is on my D: drive.
You do not have the required permissions to view the files attached to this post.
User avatar
eclectic-tech
Rainmeter Sage
Posts: 5391
Joined: April 12th, 2012, 9:40 pm
Location: Cedar Point, Ohio, USA

Re: Lua Script being interrupted, but only sometimes.

Post by eclectic-tech »

Not to sidetrack this thread, but I think using the Fileview plugin is the best solution when trying to read and display folders and files. You can make it as "barebones" as the text list your scripts generate, but also have access to the navigation and manipulation abilities the plugin offers...

Here is a simple example that will display your documents folder. It can easily be converted to display any folder of any size in any manner you want. This one displays 8 items at a time, the list can be scrolled or paged up / paged down, launch execute-able files, move to other folders, etc. 8-)

explorer.ini

Code: Select all

[Rainmeter]
Update=1000
MouseScrollUpAction=[!CommandMeasure mPath "IndexUp"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]
MouseScrollDownAction=[!CommandMeasure mPath "IndexDown"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Variables]
IconSize=Small
Path="C:\Users\%UserName%\Desktop"

;----------------------------------------------------
; Styles
;----------------------------------------------------

[TextStyle]
FontColor=255,255,255,255
AntiAlias=1

[TextHighlight]
FontColor=150,150,255,255

[IconStyle]
X=5
Y=r
AntiAlias=1

[HighlightStyle]
SolidColor=0,0,0,1
X=5
Y=5R
W=380
H=([Index1Icon:H] > [Index1Info:H] ? [Index1Icon:H] : [Index1Info:H])
DynamicVariables=1
MouseOverAction=[!SetOption #CURRENTSECTION# SolidColor "50,50,255,150"][!UpdateMeter #CURRENTSECTION#][!Redraw]
MouseLeaveAction=[!SetOption #CURRENTSECTION# SolidColor ""][!UpdateMeter #CURRENTSECTION#][!Redraw]

[InfoStyle]
X=5R
Y=r
Text="%1"
AutoScale=1
AntiAlias=1

;----------------------------------------------------
; Measures
;----------------------------------------------------

[mPath]
Measure=Plugin
Plugin=FileView
Path="#Path#"
Count=8

[mFolderCount]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FolderCount
Group=Children

[mFileCount]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileCount
Group=Children

[mFolderSize]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FolderSize
Group=Children

;----------------------------------------------------
; Index 1

[mIndex1Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=1
Group=Children

[mIndex1Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=1
Group=Children

;----------------------------------------------------
; Index 2

[mIndex2Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=2
Group=Children

[mIndex2Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=2
Group=Children

;----------------------------------------------------
; Index 3

[mIndex3Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=3
Group=Children

[mIndex3Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=3
Group=Children

;----------------------------------------------------
; Index 4

[mIndex4Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=4
Group=Children

[mIndex4Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=4
Group=Children

;----------------------------------------------------
; Index 5

[mIndex5Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=5
Group=Children

[mIndex5Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=5
Group=Children

;----------------------------------------------------
; Index 6

[mIndex6Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=6
Group=Children

[mIndex6Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=6
Group=Children

;----------------------------------------------------
; Index 7

[mIndex7Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=7
Group=Children

[mIndex7Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=7
Group=Children

;----------------------------------------------------
; Index 8

[mIndex8Name]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=FileName
Index=8
Group=Children

[mIndex8Icon]
Measure=Plugin
Plugin=FileView
Path=[mPath]
Type=Icon
IconSize=#IconSize#
Index=8
Group=Children

;----------------------------------------------------
; Meters
;----------------------------------------------------

[Background]
Meter=Image
SolidColor=0,0,0,200
W=400
H=240

[PathTitle]
Meter=String
MeterStyle=TextStyle
Text=Path:

[Path]
Meter=String
MeasureName=mPath
MeterStyle=TextStyle | TextHighlight
Text="%1 "
X=R

[FolderCountTitle]
Meter=String
MeterStyle=TextStyle
X=0
Y=R
Text=Folders:

[FolderCount]
Meter=String
MeasureName=mFolderCount
MeterStyle=TextStyle | TextHighlight
X=R
Y=r

[FileCountTitle]
Meter=String
MeterStyle=TextStyle
X=10R
Y=r
Text=Files:

[FileCount]
Meter=String
MeasureName=mFileCount
MeterStyle=TextStyle | TextHighlight
X=R
Y=r

[FolderSizeTitle]
Meter=String
MeterStyle=TextStyle
X=10R
Y=r
Text=Size:

[FolderSize]
Meter=String
MeasureName=mFolderSize
MeterStyle=TextStyle | TextHighlight
X=R
Y=r
AutoScale=1

[Index1]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex1Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index1Icon]
Meter=Image
MeasureName=mIndex1Icon
MeterStyle=IconStyle

[Index1Info]
Meter=String
MeasureName=mIndex1Name
MeterStyle=TextStyle | InfoStyle

[Index2]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex2Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index2Icon]
Meter=Image
MeasureName=mIndex2Icon
MeterStyle=IconStyle

[Index2Info]
Meter=String
MeasureName=mIndex2Name
MeterStyle=TextStyle | InfoStyle

[Index3]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex3Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index3Icon]
Meter=Image
MeasureName=mIndex3Icon
MeterStyle=IconStyle

[Index3Info]
Meter=String
MeasureName=mIndex3Name
MeterStyle=TextStyle | InfoStyle

[Index4]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex4Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index4Icon]
Meter=Image
MeasureName=mIndex4Icon
MeterStyle=IconStyle

[Index4Info]
Meter=String
MeasureName=mIndex4Name
MeterStyle=TextStyle | InfoStyle

[Index5]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex5Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index5Icon]
Meter=Image
MeasureName=mIndex5Icon
MeterStyle=IconStyle

[Index5Info]
Meter=String
MeasureName=mIndex5Name
MeterStyle=TextStyle | InfoStyle

[Index6]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex6Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index6Icon]
Meter=Image
MeasureName=mIndex6Icon
MeterStyle=IconStyle

[Index6Info]
Meter=String
MeasureName=mIndex6Name
MeterStyle=TextStyle | InfoStyle

[Index7]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex7Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index7Icon]
Meter=Image
MeasureName=mIndex7Icon
MeterStyle=IconStyle

[Index7Info]
Meter=String
MeasureName=mIndex7Name
MeterStyle=TextStyle | InfoStyle

[Index8]
Meter=Image
MeterStyle=HighlightStyle
LeftMouseDoubleClickAction=[!CommandMeasure mIndex8Name "FollowPath"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]

[Index8Icon]
Meter=Image
MeasureName=mIndex8Icon
MeterStyle=IconStyle

[Index8Info]
Meter=String
MeasureName=mIndex8Name
MeterStyle=TextStyle | InfoStyle

[PageUp]
Meter=String
MeterStyle=TextStyle
FontSize=12
X=5
Y=10R
Text=Page Up
LeftMouseDoubleClickAction=[!CommandMeasure mPath "PageUp"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]
MouseOverAction=[!SetOption #CURRENTSECTION# SolidColor "50,50,255,150"][!UpdateMeter #CURRENTSECTION#][!Redraw]
MouseLeaveAction=[!SetOption #CURRENTSECTION# SolidColor ""][!UpdateMeter #CURRENTSECTION#][!Redraw]

[PageDown]
Meter=String
MeterStyle=TextStyle
FontSize=12
X=10R
Y=r
Text=Page Down
LeftMouseDoubleClickAction=[!CommandMeasure mPath "PageDown"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]
MouseOverAction=[!SetOption #CURRENTSECTION# SolidColor "50,50,255,150"][!UpdateMeter #CURRENTSECTION#][!Redraw]
MouseLeaveAction=[!SetOption #CURRENTSECTION# SolidColor ""][!UpdateMeter #CURRENTSECTION#][!Redraw]

[PreviousFolder]
Meter=String
MeterStyle=TextStyle
FontSize=12
X=10R
Y=r
Text=Previous Folder
LeftMouseDoubleClickAction=[!CommandMeasure mPath "PreviousFolder"][!UpdateMeasure mPath][!UpdateMeasureGroup Children][!UpdateMeter *][!Redraw]
MouseOverAction=[!SetOption #CURRENTSECTION# SolidColor "50,50,255,150"][!UpdateMeter #CURRENTSECTION#][!Redraw]
MouseLeaveAction=[!SetOption #CURRENTSECTION# SolidColor ""][!UpdateMeter #CURRENTSECTION#][!Redraw]