juh9870 / EXpandableFolder

EXpandable Folder Rainmeter Skin
11 stars 1 forks source link

Thumbnails, Drag&Drop and navigation capabilities but one small issue #2

Open JmMndz opened 1 year ago

JmMndz commented 1 year ago

Hi. Excellent work and idea here, thank youjuh9870. I just molded your code and now it has Drag&Drop capabilities and the ability to go back to previous folder with middle mouse action in directory icon or forward to show child folders. It means that you can go from c:\ to any child folder with left mouse action and return to its parents directories all the way back to c:\ or even to "My Computer" again. You can still use right mouse action to open folder in explorer window or left mouse action to execute a file or program. Now it also shows thumbnail pictures tiles for image files and not its program icon. there is no need now for the user to specifies a path in variables.inc A little problem though, there is a bug especially when changing disks when you go back to "My Computer" root directory and pick other disk, but once you go back to %USERPROFILE%, it then behaves normally. It started to happen when I integrated back and forward functionality and only few times when you go all the way back to "My Computer" or going to windows directory. It doesn't happen all the time, just once on a while. At one point or another it will either not show all items in the folder, show too many, or create incrementally more icons than needed. It might be the follow path approach or something from the Lua scripts, I'm not sure.

EXpandable.ini: `[Rainmeter] Update=1000 DynamicWindowSize=1 AccurateText=1 MouseOverAction=[!CommandMeasure MeasureSlide "Stop 2"][!CommandMeasure MeasureSlide "Execute 1"] MouseLeaveAction=[!CommandMeasure MeasureSlide "Stop 1"][!CommandMeasure MeasureSlide "Execute 2"]

[Metadata] Name= Author= Information= License= Version=

[Variables]

@include=#@#variables.inc

[ScriptFactoryTiles] Measure=Script ScriptFile=#@#scripts\Factory.lua IncFile=#@#include\tiles.inc Number= Delayed=1 UpdateDivider=1

[DragNDrop] Measure=Plugin Plugin=Drag&Drop Action=Move OnDropAction=[!Log $File$] FilePath=#Path#

[MeasureFolder] Measure=Plugin Plugin=FileView Path=#Path# ShowDotDot=0 ShowFolder=1 Count=63 HideExtensions=1 FinishAction=[!Log "Folder read"]

[MeasureFolderPath] Measure=Plugin Plugin=FileView Path=[MeasureFolder] Type=FolderPath RegExpSubstitute=1 Substitute="(?!:)\$":""

[MeasureFolderParent] Measure=String String=#Path# RegExpSubstitute=1 Substitute="^(.)\(.?)$":"\1","(?i)^[A-Z]:$":""

[MeasureFoldersCount] Measure=Plugin Plugin=FileView Path=[MeasureFolder] Type=FolderCount

[MeasureFileCount] Measure=Plugin Plugin=FileView Path=[MeasureFolder] Type=FileCount OnChangeAction=[!CommandMeasure "ScriptFactoryTiles" "Run((#Amount#-1))"][!Delay 0][!CommandMeasure "ScriptRefresher" "Run()"][!SetOption MeterHitbox Hidden 0]

[MeasureTimerCalc] Measure=Calc Formula=#TIMER# DynamicVariables=1

[MeasureTimerDelayCalc] Measure=Calc Formula=#Timer_Step_Delay#

[MeasureSlide] Measure=Plugin Plugin=ActionTimer ActionList1=Repeat Down,[MeasureTimerDelayCalc:],#Timer_Steps# Down=[!SetVariable TIMER "(Clamp(([MeasureTimerCalc:]+#Timer_Step#),0,1))"]#Update# ActionList2=Repeat Up,[MeasureTimerDelayCalc:],#Timer_Steps# Up=[!SetVariable TIMER "(Clamp(([MeasureTimerCalc:]-#Timer_Step#),0,1))"]#Update# DynamicVariables=1

[MeterHitbox] Meter=Shape Shape=Rectangle #Hitbox_X#,#Hitbox_Y#,#Hitbox_Width#,#Hitbox_Height#,10 | Fill Color #Background_Color# | Stroke Color #Background_Border# DynamicVariables=1 Hidden=1

@include=#@#include\tiles.inc

;@include=#@#include\display.inc

[MeterTileFolder] Meter=Shape Shape=Rectangle #TILE_F_X_O#,#TILE_F_Y_O#,(#PX#+#Tile_Width#),(#PY#+#Tile_Height#) | Fill Color 0,0,0,1 | Stroke Color 0,0,0,1

[MeterTileSelectionFolder] Meter=Shape Shape=Rectangle (#TILE_F_X_O#+(#Tile_Width#-#Tiles_Selection_Width#)/2),#TILE_F_Y_O#,(#Tiles_Selection_Width#),(#Tiles_Text_OY#+[MeterTileTextFolder:H]) | Fill Color #Hover_Selection_Color#,(#Hover_Selection_Opacity##TILE_F_SELECTION#) | Stroke Color #Hover_Selection_Color#, (#Hover_Selection_Border_Opacity##TILE_F_SELECTION#) DynamicVariables=1 MouseOverAction=[!SetVariable TILE_F_SELECTION 1][!UpdateMeter "MeterTileSelectionFolder"][!Redraw] MouseLeaveAction=[!SetVariable TILE_F_SELECTION 0][!UpdateMeter "MeterTileSelectionFolder"][!Redraw] LeftMouseUpAction=[!Refresh]#Update# MiddleMouseUpAction=[!WriteKeyValue "Variables" "Path" [MeasureFolderParent] "#@#Variables.inc"][!Refresh]#Update# RightMouseUpAction=["#Path#"]

[MeterTileIconFolder] Meter=Image ImageName=#@#folder.ico X=(#TILE_F_X_O#+#Tiles_Icon_OX#) Y=(#TILE_F_Y_O#+#Tiles_Icon_OY#) W=#Tiles_Icon_Size# H=#Tiles_Icon_Size#

[MeasurePathFolderName] Measure=String String=#Path# RegExpSubstitute=1 Substitute="^.\(.)$":"\1"

[MeterTileTextFolder] Meter=String MeasureName=MeasurePathFolderName Text=%1 X=(#TILE_F_X_O#+#Tiles_Text_OX#) Y=(#TILE_F_Y_O#+#Tiles_Text_OY#) ClipStringW=#Tiles_Text_Width# ClipStringH=#Tiles_Text_Height# FontColor=255,255,255,255 StringAlign=CenterTop ClipString=2 FontSize=9.5 AntiAlias=0 ; FontFace=Segoe UI StringEffect=Shadow FontEffectColor=0,0,0,255 ; UpdateDivider=-1

; Script Refresher - required for the factory script, refreshes the skin to apply [ScriptRefresher] Measure=Script ScriptFile=#@#scripts\Refresher.lua UpdateDivider=1 Refreshed=0`

tiles.inc.template: `[Variables] // ; INDEX_%%={((%%+1)+Clamp(((%%+1)-#Root_Position#),0,1))-1+#IndexOffset#} TILE%%_X_O={(#PX#+#Tiles_Step_X#( (((%%+1)+Clamp(((%%+1)-#Root_Position#),0,1))-1+#Index_Offset#) % #TilesLen#))} TILE%%_Y_O={(#PY#+#Tiles_Step_Y#Floor( (((%%+1)+Clamp(((%%+1)-#Root_Position#),0,1))-1+#Index_Offset#) / #TilesLen#))} TILE%%_X=({#TILE_FX#}+(#TILE%%_X_O#-{#TILE_FX#})*[MeasureTimerCalc:]) TILE%%_Y=({#TILE_FY#}+(#TILE%%_Y_O#-{#TILE_FY#})*[MeasureTimerCalc:]) TILE%%_SELECTION=0// TILE_F_SELECTION=0 Update_Tiles=//[!UpdateMeter "MeterTile%%"][!UpdateMeter "MeterTileIcon%%"][!UpdateMeter "MeterTileText%%"][!UpdateMeter "MeterTileSelection%%"][!UpdateMeter "MeterTileHitbox%%"]// Update=[!UpdateMeasure "MeasureSlide"][!UpdateMeasure "MeasureTimerCalc"][!UpdateMeter "MeterHitbox"]#Update_Tiles#[!Redraw] FullyOppened=//[!UpdateMeter "MeterTileHitbox%%"]//[!Redraw] ClosingStart=//[!UpdateMeter "MeterTileHitbox%%"]//[!Redraw] // TILE_F_X_O={#TILE_F_X#} TILE_F_Y_O={#TILE_F_Y#}

[MeasureFilePath%%] Measure=Plugin Plugin=FileView Path=[MeasureFolder] Index={%%+1} Type=FilePath

[MeasureFileType%%] Measure=Plugin Plugin=FileView Path=[MeasureFolder] Index={%%+1} Type=FileType IfMatch=(?i)^(?:png|jpg|jpeg|bmp|gif|tif|webP|ico)$ ; --- Rainmeter --- ; IfMatchAction=[!SetOption MeterTileIcon%% MeasureName "MeasureFilePath%%"] ; IfNotMatchAction=[!SetOption MeterTileIcon%% MeasureName "MeasureFileIcon%%"] ; --- Magick Meter --- ; IfMatchAction=[!SetOption MeasureFileMagM%% Image "File [MeasureFilePath%%] | Resize 48,48"][!SetOption MeterTileIcon%% MeasureName "MeasureFileMagM%%"] ; IfNotMatchAction=[!SetOption MeasureFileMagM%% Image ""][!SetOption MeterTileIcon%% MeasureName "MeasureFileIcon%%"] --- Magick Run --- IfMatchAction=[!CommandMeasure MeasureFileMagR%% "Run"]

[MeasureFileIcon%%] Measure=Plugin Plugin=FileView Path=[MeasureFolder] Index={%%+1} Type=Icon IconSize=Large ; --- Rainmeter --- ; (nothing) ; --- Magick Meter --- ; (nothing) --- Magick Run --- OnChangeAction=[!SetOption MeterTileIcon%% MeasureName "MeasureFileIcon%%"]

; --- Rainmeter --- ; (nothing) ; --- Magick Meter --- ; [MeasureFileMagM%%] ; Measure=Plugin ; Plugin=MagickMeter.dll --- Magick Run --- [MeasureFileMagR%%] Measure=Plugin Plugin=RunCommand Program=C:\Program Files\ImageMagick-7.1.0-Q16-HDRI\magick.exe Parameter="[MeasureFilePath%%]" -resize 48x48 #CURRENTPATH#icon{%%+1}.ico State=Hide DynamicVariables=1

[MeasureFileName%%] Measure=Plugin Plugin=FileView Path=[MeasureFolder] Index={%%+1} Type=FileName OnChangeAction=[!SetOption MeterTileText%% Text [MeasureFileName%%]]

[MeterTile%%] Meter=Shape Shape=Rectangle #TILE_%%X#,#TILE%%_Y#,{#Tile_Width#},{#Tile_Height#} | Fill Color 0,0,0,(255[MeasureTimerCalc:]) | Stroke Color 0, 0, 0, (255[MeasureTimerCalc:]) DynamicVariables=1

[MeterTileHitbox%%] Meter=Shape Shape=Rectangle #TILE_%%_XO#,#TILE%%_Y_O#,{#Tile_Width#},{#Tile_Height#} | Fill Color 0,0,0,1 | Stroke Color 0, 0, 0, 1 Hidden=(Clamp(Floor(1-[MeasureTimerCalc:]*2),0,1)) DynamicVariables=1

[MeterTileSelection%%] Meter=Shape Shape=Rectangle (#TILE_%%_X#+(#Tile_Width#-#Tiles_SelectionWidth#)/2),#TILE%%_Y#,(#Tiles_Selection_Width#),(#Tiles_Text_OY#+[MeterTileText%%:H]) | Fill Color #Hover_Selection_Color#,(#Hover_SelectionOpacity#*#TILE%%_SELECTION#[MeasureTimerCalc:]) | Stroke Color #Hover_Selection_Color#, (#Hover_Selection_Border_Opacity##TILE_%%SELECTION#*[MeasureTimerCalc:]) DynamicVariables=1 Hidden=(Floor(1-[MeasureTimerCalc:])) Group=SelectionGroup MouseOverAction=[!SetVariable TILE%%SELECTION 1][!UpdateMeter "MeterTileSelection%%"][!Redraw] MouseLeaveAction=[!SetVariable TILE%%_SELECTION 0][!UpdateMeter "MeterTileSelection%%"][!Redraw] LeftMouseUpAction=[!CommandMeasure "MeasureFilePath%%" "FollowPath"][!WriteKeyValue "Variables" "Path" "[MeasureFolderPath]" "#@#Variables.inc"][!Refresh]#Update# MiddleMouseUpAction=[!WriteKeyValue "Variables" "Path" "[MeasureFolderParent]" "#@#Variables.inc"][!Refresh]#Update# RightMouseUpAction=["[MeasureFilePath%%]"]

[MeterTileIcon%%] Meter=Image MeasureName=MeasureFileIcon%% X=(#TILE_%%_X#+#Tiles_IconOX#) Y=(#TILE%%_Y#+#Tiles_Icon_OY#) W=#Tiles_Icon_Size# H=#Tiles_Icon_Size# Container=MeterTile%% DynamicVariables=1 PreserveAspectRatio=1

[MeterTileText%%] Meter=String Text=[MeasureFileName%%] X=(#TILE_%%_X#+#Tiles_TextOX#) Y=(#TILE%%_Y#+#Tiles_Text_OY#) ClipStringW=#Tiles_Text_Width# ClipStringH=#Tiles_Text_Height# FontColor=255,255,255,255 StringAlign=CenterTop ClipString=2 FontSize=9.5 AntiAlias=0 ; FontFace=Segoe UI StringEffect=Shadow FontEffectColor=0,0,0,255 Container=MeterTile%% DynamicVariables=1 //`

juh9870 commented 1 year ago

Hello, can you please create a pull request with your changes?

JmMndz commented 1 year ago

Sorry, I am not a developer, but I think I was able to create a pull request. It is the first time I'm doing this