Revision Difference
DFileBrowser#551324
<panel>
<parent>DPanel</parent>
<description>
A tree and list-based file browser.
It allows filtering by folder (directory) name and file extension, and can display models as <page>SpawnIcon</page>s.
</description>
</panel>
<example>
<description>Creates a DFileBrowser and displays the data/persist folder. Any file clicked is printed to the console.</description>
<code>
local frame = vgui.Create( "DFrame" )
frame:SetSize( 500, 250 )
frame:SetSizable( true )
frame:Center()
frame:MakePopup()
frame:SetTitle( "DFileBrowser Example" )
local browser = vgui.Create( "DFileBrowser", frame )
browser:Dock( FILL )
browser:SetPath( "GAME" ) -- The access path i.e. GAME, LUA, DATA etc.
browser:SetBaseFolder( "data" ) -- The root folder
browser:SetOpen( true ) -- Open the tree to show sub-folders
browser:SetCurrentFolder( "persist" ) -- Show files from persist
function browser:OnSelect( path, pnl ) -- Called when a file is clicked
print( path )
end
</code>
<output><image src="DFileBrowser_example.png"/></output>
</example>
<example>
<description>
Creates a DFileBrowser that can spawn models from `props_` folders.
<note>Uses the same <page>DFrame</page> as above</note>
</description>
<code>
local frame = vgui.Create( "DFrame" )
frame:SetSize( 500, 250 )
frame:SetSizable( true )
frame:Center()
frame:MakePopup()
frame:SetTitle( "DFileBrowser Example" )
local browser = vgui.Create( "DFileBrowser", frame )
browser:Dock( FILL )
browser:SetPath( "GAME" ) -- The access path i.e. GAME, LUA, DATA etc.
browser:SetBaseFolder( "models" ) -- The root folder
browser:SetName( "Props_ Models" ) -- Name to display in tree
browser:SetSearch( "props_" ) -- Search folders starting with "props_"
browser:SetFileTypes( "*.mdl" ) -- File type filter
browser:SetOpen( true ) -- Opens the tree (same as double clicking)
browser:SetCurrentFolder( "props_badlands" ) -- Set the folder to use
function browser:OnSelect( path, pnl ) -- Called when a file is clicked
RunConsoleCommand( "gm_spawn", path ) -- Spawn the model we clicked
frame:Close()
end
</code>
<output>`See Preview`.</output>
</example>
<example>
<description>Same as above, but enables model viewing. The following line is added to the above code.</description>
<code>browser:SetModels( true ) -- Use SpawnIcons instead of a list</code>
<output><image src="DFileBrowser_models.png"/></output>
</example>
⤶
<example>⤶
<description>Same as above, but enables model viewing. The following line is added to the above code.</description>⤶
<code>browser:SetModels( true ) -- Use SpawnIcons instead of a list</code>⤶
<output><image src="DFileBrowser_models.png"/></output>⤶
⤶
</example>⤶
⤶
<example>⤶
<description>⤶
Creates a DFileBrowser for browsing and selecting sounds.⤶
</description>⤶
<code>⤶
-- Create a new frame (window)⤶
local frame = vgui.Create("DFrame")⤶
frame:SetSize( 500, 250 ) -- Set the size of the frame⤶
frame:SetSizable( true ) -- Allow the frame to be resizable⤶
frame:Center() -- Center the frame on the screen⤶
frame:MakePopup() -- Make the frame appear in front of other windows and accept user input⤶
frame:SetTitle( "Select a sound:" ) -- Set the title of the frame⤶
⤶
-- Create a file browser inside the frame⤶
local browser = vgui.Create( "DFileBrowser", frame )⤶
browser:Dock( FILL ) -- Make the browser fill the entire frame⤶
-- Set the path that the browser should start in. "GAME" is a special path that refers to the game's root directory.⤶
browser:SetPath("GAME")⤶
-- Set the base folder to start searching to 'sound' (contains every sound from every addon/game)⤶
browser:SetBaseFolder( "sound" ) ⤶
browser:SetOpen( true ) -- Show the folder as already open when the browser is created⤶
browser:SetFileTypes(".wav .mp3 .ogg") -- Filter the file types that the browser should only display⤶
⤶
local s = nil -- Initialize a local var to hold the preview sound⤶
⤶
-- Define what should happen when a file is double-clicked in the browser⤶
browser.OnDoubleClick = function(panel, path)⤶
if(s ~= nil) then s:Stop() end -- If a sound is currently playing, stop it⤶
-- Select the sound and set it as the value of our ConVar, remove the "sound/" part from the path⤶
GetConVar("mysoundconvar"):SetString(string.Replace(path, "sound/",""))⤶
frame:Close() -- Close the frame⤶
end⤶
⤶
-- Define what should happen when a file is clicked in the browser⤶
browser.OnSelect = function(panel, path)⤶
if(s ~= nil) then s:Stop() end -- If a sound is currently playing, stop it⤶
s = CreateSound(LocalPlayer(), string.Replace(path, "sound/","")) -- Create and play a new sound from the selected file⤶
s:Play()⤶
end⤶
</code>⤶
</example>⤶