ReiLuaGui File explorer.
This commit is contained in:
9
API.md
9
API.md
@@ -2083,6 +2083,15 @@ Change working directory, return true on success
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> isFile = RL_IsPathFile( string path )
|
||||||
|
|
||||||
|
Check if a given path is a file or a directory
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return bool
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
> fileDropped = RL_IsFileDropped()
|
> fileDropped = RL_IsFileDropped()
|
||||||
|
|
||||||
Check if a file has been dropped into window
|
Check if a file has been dropped into window
|
||||||
|
|||||||
@@ -7,7 +7,9 @@ KEY CHANGES:
|
|||||||
- ADDED: Easings extra module.
|
- ADDED: Easings extra module.
|
||||||
- ADDED: exit function.
|
- ADDED: exit function.
|
||||||
- FIXED: uluaGetNPatchInfo fix for RL_DrawTextureNPatch. Guess this was never tested and did not work at all >:E.
|
- FIXED: uluaGetNPatchInfo fix for RL_DrawTextureNPatch. Guess this was never tested and did not work at all >:E.
|
||||||
|
- ADDED: Flag option (-s) for doc_parser.lua for exporting module APIs to separate files.
|
||||||
- ADDED: ReiLuaGui.
|
- ADDED: ReiLuaGui.
|
||||||
|
- ADDED: ReiLuaGui Examples.
|
||||||
|
|
||||||
Detailed changes:
|
Detailed changes:
|
||||||
ADDED: Help argument.
|
ADDED: Help argument.
|
||||||
@@ -15,7 +17,7 @@ CHANGED: Changed fuction name RL_rlSetLineWidth to RL_rlglSetLineWidth.
|
|||||||
CHANGED: Changed fuction name RL_rlGetLineWidth to RL_rlglGetLineWidth.
|
CHANGED: Changed fuction name RL_rlGetLineWidth to RL_rlglGetLineWidth.
|
||||||
FIXED: DrawRectangleGradient V and H expecting wrong arguments.
|
FIXED: DrawRectangleGradient V and H expecting wrong arguments.
|
||||||
ADDED: RL_LoadDirectoryFilesEx.
|
ADDED: RL_LoadDirectoryFilesEx.
|
||||||
ADDED: Flag option (-s) for doc_parser.lua for exporting module APIs to separate files.
|
|
||||||
FIXED: RL_DrawLineBezierQuad was called RL_DrawLineBezier in API.
|
FIXED: RL_DrawLineBezierQuad was called RL_DrawLineBezier in API.
|
||||||
ADDED: Color lib.
|
ADDED: Color lib.
|
||||||
FIXED: RL_DrawEllipse and RL_DrawEllipseLines expecting wrong arguments.
|
FIXED: RL_DrawEllipse and RL_DrawEllipseLines expecting wrong arguments.
|
||||||
|
ADDED: RL_IsPathFile.
|
||||||
|
|||||||
6
devnotes
6
devnotes
@@ -1,10 +1,4 @@
|
|||||||
Current {
|
Current {
|
||||||
* ReiLuaGui
|
|
||||||
* Examples:
|
|
||||||
* Movable window.
|
|
||||||
* Calculator.
|
|
||||||
* Grid icon window.
|
|
||||||
* File explorer.
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Backlog {
|
Backlog {
|
||||||
|
|||||||
@@ -1,28 +1,3 @@
|
|||||||
package.path = package.path..";"..RL_GetBasePath().."../resources/lib/?.lua"
|
|
||||||
|
|
||||||
util = require( "utillib" )
|
|
||||||
Vec2 = require( "vector2" )
|
|
||||||
Rect = require( "rectangle" )
|
|
||||||
Color = require( "color" )
|
|
||||||
Gui = require( "gui" )
|
|
||||||
|
|
||||||
-- Textures.
|
|
||||||
|
|
||||||
local cancelTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/cancel.png" )
|
|
||||||
local borderTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/ui_border.png" )
|
|
||||||
local bgrTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/ui_bgr.png" )
|
|
||||||
|
|
||||||
RL_GenTextureMipmaps( cancelTexture )
|
|
||||||
RL_GenTextureMipmaps( bgrTexture )
|
|
||||||
|
|
||||||
RL_SetTextureFilter( cancelTexture, TEXTURE_FILTER_TRILINEAR )
|
|
||||||
RL_SetTextureFilter( bgrTexture, TEXTURE_FILTER_TRILINEAR )
|
|
||||||
|
|
||||||
RL_SetTextureWrap( borderTexture, TEXTURE_WRAP_REPEAT )
|
|
||||||
RL_SetTextureWrap( bgrTexture, TEXTURE_WRAP_REPEAT )
|
|
||||||
|
|
||||||
-- Calculator definition.
|
|
||||||
|
|
||||||
Calculator = {}
|
Calculator = {}
|
||||||
Calculator.__index = Calculator
|
Calculator.__index = Calculator
|
||||||
|
|
||||||
@@ -38,7 +13,7 @@ function Calculator:new( pos )
|
|||||||
object.windowRect = Rect:new( pos.x, pos.y, 196, 244 )
|
object.windowRect = Rect:new( pos.x, pos.y, 196, 244 )
|
||||||
object.dragPos = Vec2:new( 0, 0 )
|
object.dragPos = Vec2:new( 0, 0 )
|
||||||
|
|
||||||
-- Handle
|
-- Handle.
|
||||||
|
|
||||||
object.handle = Gui.element:new( {
|
object.handle = Gui.element:new( {
|
||||||
bounds = Rect:new( 0, 0, object.windowRect.width, object.HANDLE_HIGHT ),
|
bounds = Rect:new( 0, 0, object.windowRect.width, object.HANDLE_HIGHT ),
|
||||||
@@ -133,8 +108,8 @@ function Calculator:new( pos )
|
|||||||
table.insert( object.buttons, Gui.element:new( {
|
table.insert( object.buttons, Gui.element:new( {
|
||||||
bounds = Rect:new( 0, 0, 40, 32 ),
|
bounds = Rect:new( 0, 0, 40, 32 ),
|
||||||
drawBounds = true,
|
drawBounds = true,
|
||||||
onMouseOver = function( self ) self.color = Color:new( LIGHTGRAY ) end,
|
onMouseOver = function( self ) self.color = Color:new( WHITE ) end,
|
||||||
notMouseOver = function( self ) self.color = Color:new( GRAY ) end,
|
notMouseOver = function( self ) self.color = Color:new( LIGHTGRAY ) end,
|
||||||
} ) )
|
} ) )
|
||||||
|
|
||||||
object.buttons[ #object.buttons ].pos = Vec2:new( 8 + x * 46, object.HANDLE_HIGHT + object.DISPLAY_HIGHT + 16 + y * 38 )
|
object.buttons[ #object.buttons ].pos = Vec2:new( 8 + x * 46, object.HANDLE_HIGHT + object.DISPLAY_HIGHT + 16 + y * 38 )
|
||||||
@@ -304,51 +279,4 @@ function Calculator:equals()
|
|||||||
self:updateDisplay()
|
self:updateDisplay()
|
||||||
end
|
end
|
||||||
|
|
||||||
-- End of calculator definition.
|
return Calculator
|
||||||
|
|
||||||
local calculator = nil
|
|
||||||
local calculator2 = nil
|
|
||||||
local showButton = nil
|
|
||||||
|
|
||||||
function initGui()
|
|
||||||
showButton = Gui.element:new( {
|
|
||||||
bounds = Rect:new( 0, 0, 96, 32 ),
|
|
||||||
drawBounds = true,
|
|
||||||
onClicked = function()
|
|
||||||
calculator:setVisible( true )
|
|
||||||
calculator2:setVisible( true )
|
|
||||||
end,
|
|
||||||
onMouseOver = function( self ) self.color = Color:new( LIGHTGRAY ) end,
|
|
||||||
notMouseOver = function( self ) self.color = Color:new( GRAY ) end,
|
|
||||||
} )
|
|
||||||
|
|
||||||
showButton:add( Gui.text:new( { text = "Show", VAling = Gui.ALING.CENTER, HAling = Gui.ALING.CENTER } ) )
|
|
||||||
|
|
||||||
calculator = Calculator:new( Vec2:new( 128, 96 ) )
|
|
||||||
calculator2 = Calculator:new( Vec2:new( 340, 96 ) )
|
|
||||||
end
|
|
||||||
|
|
||||||
function init()
|
|
||||||
local monitor = 0
|
|
||||||
local mPos = RL_GetMonitorPosition( monitor )
|
|
||||||
local mSize = RL_GetMonitorSize( monitor )
|
|
||||||
winSize = RL_GetWindowSize()
|
|
||||||
|
|
||||||
RL_SetWindowTitle( "Calculator" )
|
|
||||||
RL_SetWindowState( FLAG_WINDOW_RESIZABLE )
|
|
||||||
RL_SetWindowState( FLAG_VSYNC_HINT )
|
|
||||||
RL_SetWindowSize( winSize )
|
|
||||||
RL_SetWindowPosition( { mPos[1] + mSize[1] / 2 - winSize[1] / 2, mPos[2] + mSize[2] / 2 - winSize[2] / 2 } )
|
|
||||||
|
|
||||||
initGui()
|
|
||||||
end
|
|
||||||
|
|
||||||
function process( delta )
|
|
||||||
Gui.process( Vec2:new( RL_GetMousePosition() ) )
|
|
||||||
end
|
|
||||||
|
|
||||||
function draw()
|
|
||||||
RL_ClearBackground( RAYWHITE )
|
|
||||||
|
|
||||||
Gui.draw()
|
|
||||||
end
|
|
||||||
319
examples/ReiLuaGui_examples/file_explorer.lua
Normal file
319
examples/ReiLuaGui_examples/file_explorer.lua
Normal file
@@ -0,0 +1,319 @@
|
|||||||
|
FileExplorer = {}
|
||||||
|
FileExplorer.__index = FileExplorer
|
||||||
|
|
||||||
|
function FileExplorer:new( pos )
|
||||||
|
pos = pos or Vec2:new( 0, 0 )
|
||||||
|
|
||||||
|
local object = setmetatable( {}, self )
|
||||||
|
|
||||||
|
object.HANDLE_HIGHT = 32
|
||||||
|
object.DISPLAY_HIGHT = 40
|
||||||
|
object.OPERATIONS = { ADD = 0, SUB = 1, MUL = 2, DIV = 3 }
|
||||||
|
|
||||||
|
object.windowRect = Rect:new( pos.x, pos.y, 500, 330 )
|
||||||
|
object.dragPos = Vec2:new( 0, 0 )
|
||||||
|
|
||||||
|
-- Handle.
|
||||||
|
|
||||||
|
object.handle = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, object.windowRect.width, object.HANDLE_HIGHT ),
|
||||||
|
padding = 10,
|
||||||
|
onClicked = function()
|
||||||
|
object:set2Top()
|
||||||
|
object.dragPos = Vec2:new( RL_GetMousePosition() ) - Vec2:new( object.handle.bounds.x, object.handle.bounds.y )
|
||||||
|
Gui.heldCallback = function() object:drag() end
|
||||||
|
end,
|
||||||
|
} )
|
||||||
|
|
||||||
|
object.handle:add( Gui.texture:new( {
|
||||||
|
bounds = object.handle.bounds:clone(),
|
||||||
|
texture = bgrTexture,
|
||||||
|
HAling = Gui.ALING.CENTER,
|
||||||
|
VAling = Gui.ALING.CENTER,
|
||||||
|
color = Color:new( LIGHTGRAY ),
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
object.handle:add( Gui.texture:new( {
|
||||||
|
bounds = object.handle.bounds:clone(),
|
||||||
|
texture = borderTexture,
|
||||||
|
HAling = Gui.ALING.CENTER,
|
||||||
|
VAling = Gui.ALING.CENTER,
|
||||||
|
color = Color:new( LIGHTGRAY ),
|
||||||
|
nPatchInfo = { source = { 0, 0, 24, 24 }, left = 8, top = 8, right = 8, bottom = 8, layout = NPATCH_NINE_PATCH },
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
object.handle:add( Gui.text:new( { text = "File Explorer", fontSize = 20, VAling = Gui.ALING.CENTER } ) )
|
||||||
|
|
||||||
|
-- Close button.
|
||||||
|
|
||||||
|
object.closeButton = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, object.HANDLE_HIGHT, object.HANDLE_HIGHT ),
|
||||||
|
onClicked = function()
|
||||||
|
object:setVisible( false )
|
||||||
|
end,
|
||||||
|
onMouseOver = function( self ) self.items[1].color = Color:new( WHITE ) end,
|
||||||
|
notMouseOver = function( self ) self.items[1].color = Color:new( BLACK ) end,
|
||||||
|
} )
|
||||||
|
|
||||||
|
object.closeButton:add( Gui.texture:new( {
|
||||||
|
bounds = object.closeButton.bounds:clone(),
|
||||||
|
texture = cancelTexture,
|
||||||
|
HAling = Gui.ALING.CENTER,
|
||||||
|
VAling = Gui.ALING.CENTER,
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
-- Panel.
|
||||||
|
|
||||||
|
object.panel = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, object.windowRect.width, object.windowRect.height - object.HANDLE_HIGHT ),
|
||||||
|
} )
|
||||||
|
|
||||||
|
object.panel:add( Gui.texture:new( {
|
||||||
|
bounds = object.panel.bounds:clone(),
|
||||||
|
texture = bgrTexture,
|
||||||
|
HAling = Gui.ALING.CENTER,
|
||||||
|
VAling = Gui.ALING.CENTER,
|
||||||
|
color = Color:new( GRAY ),
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
object.panel:add( Gui.texture:new( {
|
||||||
|
bounds = object.panel.bounds:clone(),
|
||||||
|
texture = borderTexture,
|
||||||
|
HAling = Gui.ALING.CENTER,
|
||||||
|
VAling = Gui.ALING.CENTER,
|
||||||
|
color = Color:new( LIGHTGRAY ),
|
||||||
|
nPatchInfo = { source = { 0, 0, 24, 24 }, left = 8, top = 8, right = 8, bottom = 8, layout = NPATCH_NINE_PATCH },
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
-- Path.
|
||||||
|
|
||||||
|
object.pathBox = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, object.windowRect.width - 16 - 64, object.HANDLE_HIGHT ),
|
||||||
|
drawBounds = true,
|
||||||
|
color = Color:new( WHITE ),
|
||||||
|
-- onClicked = function() Gui.setInputFocus( object.pathBox ) end,
|
||||||
|
-- inputFocus = function() object.pathBox.color = Color:new( BLUE ) end,
|
||||||
|
-- inputUnfocus = function() object.pathBox.color = Color:new( WHITE ) end,
|
||||||
|
} )
|
||||||
|
|
||||||
|
object.pathBox:add( Gui.text:new( { text = "", maxTextLen = 30, allowLineBreak = false, VAling = Gui.ALING.CENTER } ) )
|
||||||
|
|
||||||
|
-- Back button.
|
||||||
|
|
||||||
|
object.backButton = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, 56, object.HANDLE_HIGHT ),
|
||||||
|
drawBounds = true,
|
||||||
|
onMouseOver = function( self ) self.color = Color:new( WHITE ) end,
|
||||||
|
notMouseOver = function( self ) self.color = Color:new( LIGHTGRAY ) end,
|
||||||
|
onClicked = function() object:backDir() end,
|
||||||
|
} )
|
||||||
|
|
||||||
|
object.backButton:add( Gui.texture:new( {
|
||||||
|
bounds = Rect:new( 0, 0, object.HANDLE_HIGHT, object.HANDLE_HIGHT ),
|
||||||
|
texture = backTexture,
|
||||||
|
HAling = Gui.ALING.CENTER,
|
||||||
|
color = Color:new( BLACK )
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
-- Files.
|
||||||
|
|
||||||
|
object.files = Gui.container:new( {
|
||||||
|
bounds = Rect:new( 0, 0, object.windowRect.width - 24, 200 ),
|
||||||
|
drawBounds = true,
|
||||||
|
scrollable = true,
|
||||||
|
showScrollbar = true,
|
||||||
|
-- drawScrollRect = true,
|
||||||
|
} )
|
||||||
|
|
||||||
|
-- File name.
|
||||||
|
|
||||||
|
object.fileName = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, object.windowRect.width - 16 - 70, object.HANDLE_HIGHT ),
|
||||||
|
drawBounds = true,
|
||||||
|
color = Color:new( WHITE ),
|
||||||
|
} )
|
||||||
|
|
||||||
|
object.fileName:add( Gui.text:new( { text = "", maxTextLen = 32, allowLineBreak = false, VAling = Gui.ALING.CENTER } ) )
|
||||||
|
|
||||||
|
-- Open button.
|
||||||
|
|
||||||
|
object.openButton = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, 64, object.HANDLE_HIGHT ),
|
||||||
|
drawBounds = true,
|
||||||
|
color = Color:new( WHITE ),
|
||||||
|
onClicked = function() object:openFile() end,
|
||||||
|
onMouseOver = function( self ) self.color = Color:new( WHITE ) end,
|
||||||
|
notMouseOver = function( self ) self.color = Color:new( LIGHTGRAY ) end,
|
||||||
|
} )
|
||||||
|
|
||||||
|
object.openButton:add( Gui.text:new( { text = "Open", VAling = Gui.ALING.CENTER, HAling = Gui.ALING.CENTER } ) )
|
||||||
|
|
||||||
|
-- Variables.
|
||||||
|
|
||||||
|
object.path = RL_GetBasePath()
|
||||||
|
|
||||||
|
-- Take last '/' away.
|
||||||
|
if util.utf8Sub( object.path, utf8.len( object.path ), utf8.len( object.path ) ) == "/" then
|
||||||
|
object.path = util.utf8Sub( object.path, 1, utf8.len( object.path ) - 1 )
|
||||||
|
end
|
||||||
|
object.file = ""
|
||||||
|
|
||||||
|
-- Update.
|
||||||
|
|
||||||
|
object:setPosition( Vec2:new( object.windowRect.x, object.windowRect.y ) )
|
||||||
|
object:updatePath()
|
||||||
|
|
||||||
|
return object
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:updatePath()
|
||||||
|
local maxLen = self.pathBox.items[1].maxTextLen
|
||||||
|
local pathLen = utf8.len( self.path )
|
||||||
|
local text = ""
|
||||||
|
|
||||||
|
if maxLen < pathLen then
|
||||||
|
text = self.path:sub( pathLen - maxLen + 1, pathLen )
|
||||||
|
else
|
||||||
|
text = self.path
|
||||||
|
end
|
||||||
|
|
||||||
|
self.pathBox.items[1]:set( text )
|
||||||
|
|
||||||
|
self:updateFiles()
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:changeDir( path )
|
||||||
|
self.path = path
|
||||||
|
|
||||||
|
self:updatePath()
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:backDir()
|
||||||
|
self.path = RL_GetPrevDirectoryPath( self.path )
|
||||||
|
|
||||||
|
self:updatePath()
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:fileSelect( file )
|
||||||
|
self.file = file
|
||||||
|
|
||||||
|
self.fileName.items[1]:set( RL_GetFileName( file ) )
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:openFile()
|
||||||
|
print( self.file )
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:updateFiles()
|
||||||
|
self.files:scroll( Vec2:new( 0, 0 ) )
|
||||||
|
|
||||||
|
for _, cell in ipairs( self.files.cells ) do
|
||||||
|
cell:delete()
|
||||||
|
end
|
||||||
|
|
||||||
|
self.files.cells = {}
|
||||||
|
|
||||||
|
local files = {}
|
||||||
|
local folders = {}
|
||||||
|
|
||||||
|
for _, file in ipairs( RL_LoadDirectoryFiles( self.path ) ) do
|
||||||
|
if RL_IsPathFile( file ) then
|
||||||
|
table.insert( files, file )
|
||||||
|
else
|
||||||
|
table.insert( folders, file )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
table.sort( files, function( a, b ) return a < b end )
|
||||||
|
table.sort( folders, function( a, b ) return a < b end )
|
||||||
|
|
||||||
|
for _, folder in ipairs( folders ) do
|
||||||
|
self:addFileToList( folder, folderTexture, { 150, 120, 80 }, function() self:changeDir( folder ) end )
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, file in ipairs( files ) do
|
||||||
|
self:addFileToList( file, filesTexture, WHITE, function() self:fileSelect( file ) end )
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:addFileToList( file, texture, color, func )
|
||||||
|
self.files:add( Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, self.windowRect.width - 16 - 20, 20 ),
|
||||||
|
padding = 4,
|
||||||
|
onClicked = func,
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
local element = self.files.cells[ #self.files.cells ]
|
||||||
|
|
||||||
|
element:add( Gui.text:new( {
|
||||||
|
bounds = Rect:new( 28, 0, 20, 20 ),
|
||||||
|
text = RL_GetFileName( file ),
|
||||||
|
fontSize = 20,
|
||||||
|
HAling = Gui.ALING.NONE,
|
||||||
|
VAling = Gui.ALING.CENTER,
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
element:add( Gui.texture:new( {
|
||||||
|
bounds = Rect:new( 0, 0, 20, 20 ),
|
||||||
|
texture = texture,
|
||||||
|
VAling = Gui.ALING.CENTER,
|
||||||
|
color = Color:new( color ),
|
||||||
|
} ) )
|
||||||
|
|
||||||
|
element.bounds.width = element.items[1].bounds.width + element.padding + element.items[2].bounds.width
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:drag()
|
||||||
|
local mousePos = Vec2:new( RL_GetMousePosition() )
|
||||||
|
local winPos = Vec2:new( self.handle.bounds.x, self.handle.bounds.y )
|
||||||
|
|
||||||
|
self:setPosition( mousePos - self.dragPos )
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:setPosition( pos )
|
||||||
|
self.windowRect.x = pos.x
|
||||||
|
self.windowRect.y = pos.y
|
||||||
|
|
||||||
|
self.handle:setPosition( pos )
|
||||||
|
self.closeButton:setPosition( Vec2:new( pos.x + self.windowRect.width - self.HANDLE_HIGHT, pos.y ) )
|
||||||
|
self.panel:setPosition( Vec2:new( pos.x, pos.y + self.HANDLE_HIGHT ) )
|
||||||
|
self.pathBox:setPosition( Vec2:new( pos.x + 8, pos.y + self.HANDLE_HIGHT + 8 ) )
|
||||||
|
self.backButton:setPosition( Vec2:new( pos.x + self.pathBox.bounds.width + 16, pos.y + self.HANDLE_HIGHT + 8 ) )
|
||||||
|
self.files:setPosition( Vec2:new( pos.x + 8, pos.y + self.HANDLE_HIGHT * 2 + 16 ) )
|
||||||
|
self.fileName:setPosition( Vec2:new( pos.x + 8, pos.y + self.HANDLE_HIGHT * 2 + 16 + 208 ) )
|
||||||
|
self.openButton:setPosition( Vec2:new( pos.x + 8 + 420, pos.y + self.HANDLE_HIGHT * 2 + 16 + 208 ) )
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:setVisible( visible )
|
||||||
|
self.handle.visible = visible
|
||||||
|
self.handle.disabled = not visible
|
||||||
|
self.panel.visible = visible
|
||||||
|
self.panel.disabled = not visible
|
||||||
|
self.closeButton.visible = visible
|
||||||
|
self.closeButton.disabled = not visible
|
||||||
|
self.pathBox.visible = visible
|
||||||
|
self.pathBox.disabled = not visible
|
||||||
|
self.backButton.visible = visible
|
||||||
|
self.backButton.disabled = not visible
|
||||||
|
self.files.visible = visible
|
||||||
|
self.files.disabled = not visible
|
||||||
|
self.fileName.visible = visible
|
||||||
|
self.fileName.disabled = not visible
|
||||||
|
self.openButton.visible = visible
|
||||||
|
self.openButton.disabled = not visible
|
||||||
|
|
||||||
|
self.files:update()
|
||||||
|
end
|
||||||
|
|
||||||
|
function FileExplorer:set2Top()
|
||||||
|
self.panel:set2Top()
|
||||||
|
self.handle:set2Top()
|
||||||
|
self.closeButton:set2Top()
|
||||||
|
self.pathBox:set2Top()
|
||||||
|
self.backButton:set2Top()
|
||||||
|
self.files:set2Top()
|
||||||
|
self.fileName:set2Top()
|
||||||
|
self.openButton:set2Top()
|
||||||
|
end
|
||||||
|
|
||||||
|
return FileExplorer
|
||||||
87
examples/ReiLuaGui_examples/main.lua
Normal file
87
examples/ReiLuaGui_examples/main.lua
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
package.path = package.path..";"..RL_GetBasePath().."?.lua"
|
||||||
|
package.path = package.path..";"..RL_GetBasePath().."../resources/lib/?.lua"
|
||||||
|
|
||||||
|
util = require( "utillib" )
|
||||||
|
Vec2 = require( "vector2" )
|
||||||
|
Rect = require( "rectangle" )
|
||||||
|
Color = require( "color" )
|
||||||
|
Gui = require( "gui" )
|
||||||
|
|
||||||
|
Calculator = require( "calculator" )
|
||||||
|
FileExplorer = require( "file_explorer" )
|
||||||
|
|
||||||
|
-- Textures.
|
||||||
|
|
||||||
|
-- Note that textures are global.
|
||||||
|
cancelTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/cancel.png" )
|
||||||
|
backTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/previous-button.png" )
|
||||||
|
folderTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/open-folder.png" )
|
||||||
|
filesTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/files.png" )
|
||||||
|
borderTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/ui_border.png" )
|
||||||
|
bgrTexture = RL_LoadTexture( RL_GetBasePath().."../resources/images/ui_bgr.png" )
|
||||||
|
|
||||||
|
RL_GenTextureMipmaps( cancelTexture )
|
||||||
|
RL_GenTextureMipmaps( backTexture )
|
||||||
|
RL_GenTextureMipmaps( folderTexture )
|
||||||
|
RL_GenTextureMipmaps( filesTexture )
|
||||||
|
RL_GenTextureMipmaps( borderTexture )
|
||||||
|
RL_GenTextureMipmaps( bgrTexture )
|
||||||
|
|
||||||
|
RL_SetTextureFilter( cancelTexture, TEXTURE_FILTER_TRILINEAR )
|
||||||
|
RL_SetTextureFilter( backTexture, TEXTURE_FILTER_TRILINEAR )
|
||||||
|
RL_SetTextureFilter( folderTexture, TEXTURE_FILTER_TRILINEAR )
|
||||||
|
RL_SetTextureFilter( filesTexture, TEXTURE_FILTER_TRILINEAR )
|
||||||
|
RL_SetTextureFilter( borderTexture, TEXTURE_FILTER_TRILINEAR )
|
||||||
|
RL_SetTextureFilter( bgrTexture, TEXTURE_FILTER_TRILINEAR )
|
||||||
|
|
||||||
|
RL_SetTextureWrap( borderTexture, TEXTURE_WRAP_REPEAT )
|
||||||
|
RL_SetTextureWrap( bgrTexture, TEXTURE_WRAP_REPEAT )
|
||||||
|
|
||||||
|
-- End of calculator definition.
|
||||||
|
|
||||||
|
local calculator = nil
|
||||||
|
local fileExplorer = nil
|
||||||
|
local showButton = nil
|
||||||
|
|
||||||
|
function initGui()
|
||||||
|
showButton = Gui.element:new( {
|
||||||
|
bounds = Rect:new( 0, 0, 96, 32 ),
|
||||||
|
drawBounds = true,
|
||||||
|
onClicked = function()
|
||||||
|
calculator:setVisible( true )
|
||||||
|
fileExplorer:setVisible( true )
|
||||||
|
end,
|
||||||
|
onMouseOver = function( self ) self.color = Color:new( LIGHTGRAY ) end,
|
||||||
|
notMouseOver = function( self ) self.color = Color:new( GRAY ) end,
|
||||||
|
} )
|
||||||
|
|
||||||
|
showButton:add( Gui.text:new( { text = "Show", VAling = Gui.ALING.CENTER, HAling = Gui.ALING.CENTER } ) )
|
||||||
|
|
||||||
|
calculator = Calculator:new( Vec2:new( 32, 96 ) )
|
||||||
|
fileExplorer = FileExplorer:new( Vec2:new( 280, 96 ) )
|
||||||
|
end
|
||||||
|
|
||||||
|
function init()
|
||||||
|
local monitor = 0
|
||||||
|
local mPos = RL_GetMonitorPosition( monitor )
|
||||||
|
local mSize = RL_GetMonitorSize( monitor )
|
||||||
|
winSize = RL_GetWindowSize()
|
||||||
|
|
||||||
|
RL_SetWindowTitle( "ReiLuaGui examples" )
|
||||||
|
RL_SetWindowState( FLAG_WINDOW_RESIZABLE )
|
||||||
|
RL_SetWindowState( FLAG_VSYNC_HINT )
|
||||||
|
RL_SetWindowSize( winSize )
|
||||||
|
RL_SetWindowPosition( { mPos[1] + mSize[1] / 2 - winSize[1] / 2, mPos[2] + mSize[2] / 2 - winSize[2] / 2 } )
|
||||||
|
|
||||||
|
initGui()
|
||||||
|
end
|
||||||
|
|
||||||
|
function process( delta )
|
||||||
|
Gui.process( Vec2:new( RL_GetMousePosition() ) )
|
||||||
|
end
|
||||||
|
|
||||||
|
function draw()
|
||||||
|
RL_ClearBackground( RAYWHITE )
|
||||||
|
|
||||||
|
Gui.draw()
|
||||||
|
end
|
||||||
@@ -140,7 +140,7 @@ function init()
|
|||||||
local mSize = RL_GetMonitorSize( monitor )
|
local mSize = RL_GetMonitorSize( monitor )
|
||||||
winSize = RL_GetWindowSize()
|
winSize = RL_GetWindowSize()
|
||||||
|
|
||||||
RL_SetWindowTitle( "ReiLua Gui" )
|
RL_SetWindowTitle( "ReiLuaGui Test" )
|
||||||
RL_SetWindowState( FLAG_WINDOW_RESIZABLE )
|
RL_SetWindowState( FLAG_WINDOW_RESIZABLE )
|
||||||
RL_SetWindowState( FLAG_VSYNC_HINT )
|
RL_SetWindowState( FLAG_VSYNC_HINT )
|
||||||
RL_SetWindowSize( winSize )
|
RL_SetWindowSize( winSize )
|
||||||
@@ -9,4 +9,7 @@ ui_bgr.png Jussi Viitala CC0
|
|||||||
check-mark.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
check-mark.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
||||||
circle.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
circle.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
||||||
plain-circle.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
plain-circle.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
||||||
cancel.png Sbed Creative Commons 3.0 https://game-icons.net Resized
|
previous-button.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
||||||
|
open-folder.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
||||||
|
files.png Delapouite Creative Commons 3.0 https://game-icons.net Resized
|
||||||
|
cancel.png Sbed Creative Commons 3.0 https://game-icons.net Resized
|
||||||
|
|||||||
BIN
examples/resources/images/files.png
Normal file
BIN
examples/resources/images/files.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 7.3 KiB |
BIN
examples/resources/images/open-folder.png
Normal file
BIN
examples/resources/images/open-folder.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.1 KiB |
BIN
examples/resources/images/previous-button.png
Normal file
BIN
examples/resources/images/previous-button.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
@@ -226,7 +226,7 @@ Text.__index = Text
|
|||||||
function Text:new( set )
|
function Text:new( set )
|
||||||
local object = setmetatable( {}, Text )
|
local object = setmetatable( {}, Text )
|
||||||
|
|
||||||
object.bounds = Rect:new( 0, 0, 0, 0 )
|
object.bounds = setProperty( set, "bounds", Rect:new( 0, 0, 0, 0 ) )
|
||||||
object.HAling = setProperty( set, "HAling", Gui.ALING.LEFT )
|
object.HAling = setProperty( set, "HAling", Gui.ALING.LEFT )
|
||||||
object.VAling = setProperty( set, "VAling", Gui.ALING.BOTTOM )
|
object.VAling = setProperty( set, "VAling", Gui.ALING.BOTTOM )
|
||||||
|
|
||||||
@@ -557,6 +557,8 @@ function Container:new( set )
|
|||||||
object.showScrollbar = setProperty( set, "showScrollbar", false )
|
object.showScrollbar = setProperty( set, "showScrollbar", false )
|
||||||
object.scrollbarWidth = setProperty( set, "scrollbarWidth", Gui.scrollbarWidth )
|
object.scrollbarWidth = setProperty( set, "scrollbarWidth", Gui.scrollbarWidth )
|
||||||
object.scrollAmount = setProperty( set, "scrollAmount", Gui.scrollAmount ) -- When using mouse scroll.
|
object.scrollAmount = setProperty( set, "scrollAmount", Gui.scrollAmount ) -- When using mouse scroll.
|
||||||
|
object.color = setProperty( set, "color", Color:new( WHITE ) )
|
||||||
|
object.drawBounds = setProperty( set, "drawBounds", false )
|
||||||
object.drawScrollRect = setProperty( set, "drawScrollRect", false )
|
object.drawScrollRect = setProperty( set, "drawScrollRect", false )
|
||||||
-- For grid container. Do not set both.
|
-- For grid container. Do not set both.
|
||||||
object.columns = setProperty( set, "columns", nil )
|
object.columns = setProperty( set, "columns", nil )
|
||||||
@@ -661,6 +663,12 @@ function Container:updateScrollbar()
|
|||||||
self._VScrollbar.items[1].bounds.width = self.scrollbarWidth
|
self._VScrollbar.items[1].bounds.width = self.scrollbarWidth
|
||||||
self._VScrollbar.items[1].bounds.height = self.bounds.height / self._scrollRect.height * self.bounds.height
|
self._VScrollbar.items[1].bounds.height = self.bounds.height / self._scrollRect.height * self.bounds.height
|
||||||
self._VScrollbar.items[1].bounds.y = self._scrollRect.y / self._scrollRect.height * self.bounds.height
|
self._VScrollbar.items[1].bounds.y = self._scrollRect.y / self._scrollRect.height * self.bounds.height
|
||||||
|
|
||||||
|
self._VScrollbar.visible = self.visible
|
||||||
|
self._VScrollbar.disabled = self.disabled
|
||||||
|
else
|
||||||
|
self._VScrollbar.visible = false
|
||||||
|
self._VScrollbar.disabled = true
|
||||||
end
|
end
|
||||||
|
|
||||||
if self.bounds.width < self._scrollRect.width then
|
if self.bounds.width < self._scrollRect.width then
|
||||||
@@ -672,6 +680,12 @@ function Container:updateScrollbar()
|
|||||||
self._HScrollbar.items[1].bounds.width = self.bounds.width / self._scrollRect.width * self.bounds.width
|
self._HScrollbar.items[1].bounds.width = self.bounds.width / self._scrollRect.width * self.bounds.width
|
||||||
self._HScrollbar.items[1].bounds.height = self.scrollbarWidth
|
self._HScrollbar.items[1].bounds.height = self.scrollbarWidth
|
||||||
self._HScrollbar.items[1].bounds.x = self._scrollRect.x / self._scrollRect.width * self.bounds.width
|
self._HScrollbar.items[1].bounds.x = self._scrollRect.x / self._scrollRect.width * self.bounds.width
|
||||||
|
|
||||||
|
self._HScrollbar.visible = self.visible
|
||||||
|
self._HScrollbar.disabled = self.disabled
|
||||||
|
else
|
||||||
|
self._HScrollbar.visible = false
|
||||||
|
self._HScrollbar.disabled = true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
@@ -727,6 +741,9 @@ function Container:update()
|
|||||||
cell._visibilityBounds = self._visibilityBounds
|
cell._visibilityBounds = self._visibilityBounds
|
||||||
end
|
end
|
||||||
|
|
||||||
|
cell.visible = self.visible
|
||||||
|
cell.disabled = self.disabled
|
||||||
|
|
||||||
if self.type == Gui.CONTAINER.VERTICAL then
|
if self.type == Gui.CONTAINER.VERTICAL then
|
||||||
if self.HAling == Gui.ALING.CENTER then
|
if self.HAling == Gui.ALING.CENTER then
|
||||||
pos.x = self.bounds.x + self.bounds.width / 2 - cell.bounds.width / 2
|
pos.x = self.bounds.x + self.bounds.width / 2 - cell.bounds.width / 2
|
||||||
@@ -838,6 +855,10 @@ function Container:set2Back()
|
|||||||
end
|
end
|
||||||
|
|
||||||
function Container:draw()
|
function Container:draw()
|
||||||
|
if self.drawBounds then
|
||||||
|
RL_DrawRectangle( self.bounds, self.color )
|
||||||
|
end
|
||||||
|
|
||||||
if self.drawScrollRect then
|
if self.drawScrollRect then
|
||||||
RL_DrawRectangleLines( {
|
RL_DrawRectangleLines( {
|
||||||
self.bounds.x - self._scrollRect.x,
|
self.bounds.x - self._scrollRect.x,
|
||||||
|
|||||||
@@ -152,6 +152,10 @@ function utillib.toBoolean( v )
|
|||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function utillib.boo2Number( bool )
|
||||||
|
return bool and 1 or 0
|
||||||
|
end
|
||||||
|
|
||||||
-- Print table content.
|
-- Print table content.
|
||||||
function utillib.printt( t )
|
function utillib.printt( t )
|
||||||
print( tostring(t).." = {" )
|
print( tostring(t).." = {" )
|
||||||
|
|||||||
@@ -87,6 +87,7 @@ int lcoreGetWorkingDirectory( lua_State *L );
|
|||||||
int lcoreLoadDirectoryFiles( lua_State *L );
|
int lcoreLoadDirectoryFiles( lua_State *L );
|
||||||
int lcoreLoadDirectoryFilesEx( lua_State *L );
|
int lcoreLoadDirectoryFilesEx( lua_State *L );
|
||||||
int lcoreChangeDirectory( lua_State *L );
|
int lcoreChangeDirectory( lua_State *L );
|
||||||
|
int lcoreIsPathFile( lua_State *L );
|
||||||
int lcoreIsFileDropped( lua_State *L );
|
int lcoreIsFileDropped( lua_State *L );
|
||||||
int lcoreLoadDroppedFiles( lua_State *L );
|
int lcoreLoadDroppedFiles( lua_State *L );
|
||||||
int lcoreGetFileModTime( lua_State *L );
|
int lcoreGetFileModTime( lua_State *L );
|
||||||
|
|||||||
18
src/core.c
18
src/core.c
@@ -2243,6 +2243,24 @@ int lcoreChangeDirectory( lua_State *L ) {
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
> isFile = RL_IsPathFile( string path )
|
||||||
|
|
||||||
|
Check if a given path is a file or a directory
|
||||||
|
|
||||||
|
- Failure return nil
|
||||||
|
- Success return bool
|
||||||
|
*/
|
||||||
|
int lcoreIsPathFile( lua_State *L ) {
|
||||||
|
if ( !lua_isstring( L, -1 ) ) {
|
||||||
|
TraceLog( LOG_WARNING, "%s", "Bad call of function. RL_IsPathFile( string path )" );
|
||||||
|
lua_pushnil( L );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
lua_pushboolean( L, IsPathFile( lua_tostring( L, -1 ) ) );
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
> fileDropped = RL_IsFileDropped()
|
> fileDropped = RL_IsFileDropped()
|
||||||
|
|
||||||
|
|||||||
@@ -750,6 +750,7 @@ void luaRegister() {
|
|||||||
lua_register( L, "RL_LoadDirectoryFiles", lcoreLoadDirectoryFiles );
|
lua_register( L, "RL_LoadDirectoryFiles", lcoreLoadDirectoryFiles );
|
||||||
lua_register( L, "RL_LoadDirectoryFilesEx", lcoreLoadDirectoryFilesEx );
|
lua_register( L, "RL_LoadDirectoryFilesEx", lcoreLoadDirectoryFilesEx );
|
||||||
lua_register( L, "RL_ChangeDirectory", lcoreChangeDirectory );
|
lua_register( L, "RL_ChangeDirectory", lcoreChangeDirectory );
|
||||||
|
lua_register( L, "RL_IsPathFile", lcoreIsPathFile );
|
||||||
lua_register( L, "RL_IsFileDropped", lcoreIsFileDropped );
|
lua_register( L, "RL_IsFileDropped", lcoreIsFileDropped );
|
||||||
lua_register( L, "RL_LoadDroppedFiles", lcoreLoadDroppedFiles );
|
lua_register( L, "RL_LoadDroppedFiles", lcoreLoadDroppedFiles );
|
||||||
lua_register( L, "RL_GetFileModTime", lcoreGetFileModTime );
|
lua_register( L, "RL_GetFileModTime", lcoreGetFileModTime );
|
||||||
|
|||||||
Reference in New Issue
Block a user