mirror of
https://github.com/IgorTimofeev/MineOS.git
synced 2025-12-20 19:19:21 +01:00
Обновленный TreeView
This commit is contained in:
parent
b80e8ba9f1
commit
45e6722b59
@ -283,7 +283,7 @@
|
|||||||
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/GUI.lua",
|
url="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/lib/GUI.lua",
|
||||||
type="Library",
|
type="Library",
|
||||||
preloadFile=true,
|
preloadFile=true,
|
||||||
version=1.72,
|
version=1.73,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path="/lib/rayEngine.lua",
|
path="/lib/rayEngine.lua",
|
||||||
@ -462,7 +462,7 @@
|
|||||||
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/MineCodeIDE/Icon.pic",
|
icon="https://raw.githubusercontent.com/IgorTimofeev/OpenComputers/master/Applications/MineCodeIDE/Icon.pic",
|
||||||
createShortcut="dock",
|
createShortcut="dock",
|
||||||
forceDownload=true,
|
forceDownload=true,
|
||||||
version=1.75,
|
version=1.76,
|
||||||
resources={
|
resources={
|
||||||
{
|
{
|
||||||
path="/Localization/Russian.lang",
|
path="/Localization/Russian.lang",
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -972,12 +972,14 @@ GUI.**treeView**( x, y, width, height, backgroundColor, textColor, selectionBack
|
|||||||
| *int* | scrollBarPrimaryColor | Первичный цвет скроллбара TreeView |
|
| *int* | scrollBarPrimaryColor | Первичный цвет скроллбара TreeView |
|
||||||
| *int* | scrollBarSecondaryColor | Вторичный цвет скроллбара TreeView |
|
| *int* | scrollBarSecondaryColor | Вторичный цвет скроллбара TreeView |
|
||||||
| *string* | workPath | Стартовая директория TreeView |
|
| *string* | workPath | Стартовая директория TreeView |
|
||||||
|
| [*enum* | filesystemShowMode] | Опциональный режим отображения содержимого текущей директориии. Может принимать значения GUI.**filesystemModes**.**file**, GUI.**filesystemModes**.**directory** или GUI.**filesystemModes**.**both** |
|
||||||
|
| [*enum* | filesystemSelectionMode] | Опциональный режим выбора содепжимого текущей директориии. Значения принимает те же, что и у filesystemShowMode |
|
||||||
|
|
||||||
Создать объект типа "TreeView", предназначенный для навигации по файловой системе в виде иерархического древа. При клике на директорию будет показано ее содержимое, а во время прокрутки колесиком мыши содержимое будет "скроллиться" в указанном направлении.
|
Создать объект типа "TreeView", предназначенный для навигации по файловой системе в виде иерархического древа. При клике на директорию будет показано ее содержимое, а во время прокрутки колесиком мыши содержимое будет "скроллиться" в указанном направлении.
|
||||||
|
|
||||||
| Тип свойства | Свойство |Описание |
|
| Тип свойства | Свойство |Описание |
|
||||||
| ------ | ------ | ------ |
|
| ------ | ------ | ------ |
|
||||||
| *callback-function* | .**onFileSelected**( *int* currentFile )| Метод, вызываемый после выбора файла в TreeView |
|
| *callback-function* | .**onItemSelected**( *string* path )| Метод, вызываемый после выбора элемента в TreeView. В качестве аргумента передается абсолютный путь выбранного элемента |
|
||||||
|
|
||||||
Пример реализации TreeView:
|
Пример реализации TreeView:
|
||||||
|
|
||||||
@ -987,14 +989,21 @@ local GUI = require("GUI")
|
|||||||
|
|
||||||
------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
local mainContainer = GUI.fullScreenContainer()
|
local treeView1 = mainContainer:addChild(GUI.treeView(2, 2, 30, 41, 0xCCCCCC, 0x2D2D2D, 0x3C3C3C, 0xEEEEEE, 0x666666, 0xC3C3C3, 0x393939, "/", GUI.filesystemModes.both, GUI.filesystemModes.both))
|
||||||
mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x262626))
|
treeView1.onItemSelected = function(path)
|
||||||
|
GUI.error("Something was selected, the path is: \"" .. path .. "\"")
|
||||||
|
end
|
||||||
|
|
||||||
local treeView = mainContainer:addChild(GUI.treeView(2, 2, 30, 41, 0xCCCCCC, 0x2D2D2D, 0x3C3C3C, 0xEEEEEE, 0x666666, 0xEEEEEE, 0x3366CC, "/"))
|
local treeView2 = mainContainer:addChild(GUI.treeView(34, 2, 30, 41, 0xCCCCCC, 0x2D2D2D, 0x3C3C3C, 0xEEEEEE, 0x666666, 0xC3C3C3, 0x393939, "/", GUI.filesystemModes.file, GUI.filesystemModes.file))
|
||||||
treeView.onFileSelected = function(path)
|
treeView2.onItemSelected = function(path)
|
||||||
GUI.error("File was selected, the path is: \"" .. path .. "\"")
|
GUI.error("File was selected, the path is: \"" .. path .. "\"")
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local treeView3 = mainContainer:addChild(GUI.treeView(66, 2, 30, 41, 0xCCCCCC, 0x2D2D2D, 0x3C3C3C, 0xEEEEEE, 0x666666, 0xC3C3C3, 0x393939, "/", GUI.filesystemModes.directory, GUI.filesystemModes.directory))
|
||||||
|
treeView3.onItemSelected = function(path)
|
||||||
|
GUI.error("Directory was selected, the path is: \"" .. path .. "\"")
|
||||||
|
end
|
||||||
|
|
||||||
------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
mainContainer:draw()
|
mainContainer:draw()
|
||||||
@ -1004,7 +1013,7 @@ mainContainer:startEventHandling()
|
|||||||
|
|
||||||
Результат:
|
Результат:
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
GUI.**codeView**( x, y, width, height, lines, fromSymbol, fromLine, maximumLineLength, selections, highlights, highlightLuaSyntax, indentationWidth ): *table* codeView
|
GUI.**codeView**( x, y, width, height, lines, fromSymbol, fromLine, maximumLineLength, selections, highlights, highlightLuaSyntax, indentationWidth ): *table* codeView
|
||||||
------------------------------------------------------------------------
|
------------------------------------------------------------------------
|
||||||
|
|||||||
389
lib/GUI.lua
389
lib/GUI.lua
@ -43,6 +43,12 @@ GUI.dropDownMenuElementTypes = enum(
|
|||||||
"separator"
|
"separator"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
GUI.filesystemModes = enum(
|
||||||
|
"file",
|
||||||
|
"directory",
|
||||||
|
"both"
|
||||||
|
)
|
||||||
|
|
||||||
GUI.colors = {
|
GUI.colors = {
|
||||||
disabled = {
|
disabled = {
|
||||||
background = 0x888888,
|
background = 0x888888,
|
||||||
@ -490,6 +496,7 @@ local function buttonDraw(object)
|
|||||||
elseif object.buttonType == 2 then
|
elseif object.buttonType == 2 then
|
||||||
local x2, y2 = object.x + object.width - 1, object.y + object.height - 1
|
local x2, y2 = object.x + object.width - 1, object.y + object.height - 1
|
||||||
|
|
||||||
|
if object.height > 1 then
|
||||||
buffer.text(object.x + 1, object.y, buttonColor, string.rep("▄", object.width - 2))
|
buffer.text(object.x + 1, object.y, buttonColor, string.rep("▄", object.width - 2))
|
||||||
buffer.text(object.x, object.y, buttonColor, "⣠")
|
buffer.text(object.x, object.y, buttonColor, "⣠")
|
||||||
buffer.text(x2, object.y, buttonColor, "⣄")
|
buffer.text(x2, object.y, buttonColor, "⣄")
|
||||||
@ -499,6 +506,10 @@ local function buttonDraw(object)
|
|||||||
buffer.text(object.x + 1, y2, buttonColor, string.rep("▀", object.width - 2))
|
buffer.text(object.x + 1, y2, buttonColor, string.rep("▀", object.width - 2))
|
||||||
buffer.text(object.x, y2, buttonColor, "⠙")
|
buffer.text(object.x, y2, buttonColor, "⠙")
|
||||||
buffer.text(x2, y2, buttonColor, "⠋")
|
buffer.text(x2, y2, buttonColor, "⠋")
|
||||||
|
else
|
||||||
|
buffer.square(object.x, object.y, object.width, object.height, buttonColor, textColor, " ")
|
||||||
|
GUI.roundedCorners(object.x, object.y, object.width, object.height, buttonColor)
|
||||||
|
end
|
||||||
else
|
else
|
||||||
buffer.frame(object.x, object.y, object.width, object.height, buttonColor)
|
buffer.frame(object.x, object.y, object.width, object.height, buttonColor)
|
||||||
end
|
end
|
||||||
@ -830,6 +841,11 @@ function GUI.windowShadow(x, y, width, height, transparency, thin)
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function GUI.roundedCorners(x, y, width, height, color, transparency)
|
||||||
|
buffer.text(x - 1, y, color, "⠰", transparency)
|
||||||
|
buffer.text(x + width, y, color, "⠆", transparency)
|
||||||
|
end
|
||||||
|
|
||||||
------------------------------------------------- Error window -------------------------------------------------------------------
|
------------------------------------------------- Error window -------------------------------------------------------------------
|
||||||
|
|
||||||
function GUI.error(...)
|
function GUI.error(...)
|
||||||
@ -1132,170 +1148,6 @@ end
|
|||||||
|
|
||||||
----------------------------------------- Color Selector object -----------------------------------------
|
----------------------------------------- Color Selector object -----------------------------------------
|
||||||
|
|
||||||
local function updateFileList(directoriesToShowContent, xOffset, path)
|
|
||||||
local localFileList = {}
|
|
||||||
for file in fs.list(path) do
|
|
||||||
local element = {}
|
|
||||||
element.path = path .. file
|
|
||||||
element.xOffset = xOffset
|
|
||||||
element.isDirectory = fs.isDirectory(element.path)
|
|
||||||
table.insert(localFileList, element)
|
|
||||||
end
|
|
||||||
|
|
||||||
-- Sort file list alphabeitcally
|
|
||||||
table.sort(localFileList, function(a, b) return unicode.lower(a.path) < unicode.lower(b.path) end)
|
|
||||||
-- Move folders on top and recursively get their content if needed
|
|
||||||
local i, nextDirectoryIndex, nextLocalFileListIndex = 1, 1, 1
|
|
||||||
while i <= #localFileList do
|
|
||||||
if localFileList[i].isDirectory then
|
|
||||||
table.insert(localFileList, nextDirectoryIndex, localFileList[i])
|
|
||||||
table.remove(localFileList, i + 1)
|
|
||||||
|
|
||||||
if directoriesToShowContent[localFileList[nextDirectoryIndex].path] then
|
|
||||||
local nextLocalFileList = updateFileList(directoriesToShowContent, xOffset + 2, localFileList[nextDirectoryIndex].path)
|
|
||||||
|
|
||||||
nextLocalFileListIndex = nextDirectoryIndex + 1
|
|
||||||
for j = 1, #nextLocalFileList do
|
|
||||||
table.insert(localFileList, nextLocalFileListIndex, nextLocalFileList[j])
|
|
||||||
nextLocalFileListIndex = nextLocalFileListIndex + 1
|
|
||||||
end
|
|
||||||
i, nextDirectoryIndex = i + #nextLocalFileList, nextDirectoryIndex + #nextLocalFileList
|
|
||||||
end
|
|
||||||
|
|
||||||
nextDirectoryIndex = nextDirectoryIndex + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
i = i + 1
|
|
||||||
end
|
|
||||||
|
|
||||||
return localFileList
|
|
||||||
end
|
|
||||||
|
|
||||||
local function treeViewUpdateFileList(treeView)
|
|
||||||
treeView.fileList = updateFileList(treeView.directoriesToShowContent, 1, treeView.workPath)
|
|
||||||
return treeView
|
|
||||||
end
|
|
||||||
|
|
||||||
local function treeViewDraw(treeView)
|
|
||||||
local y = treeView.y
|
|
||||||
local showScrollBar = #treeView.fileList > treeView.height
|
|
||||||
local textLimit = treeView.width - (showScrollBar and 2 or 1)
|
|
||||||
|
|
||||||
if treeView.colors.default.background then
|
|
||||||
buffer.square(treeView.x, treeView.y, treeView.width, treeView.height, treeView.colors.default.background, treeView.colors.default.text, " ")
|
|
||||||
end
|
|
||||||
|
|
||||||
for fileIndex = treeView.fromFile, #treeView.fileList do
|
|
||||||
local textColor = treeView.colors.default.text
|
|
||||||
if treeView.fileList[fileIndex].path == treeView.currentFile then
|
|
||||||
textColor = treeView.colors.selected.text
|
|
||||||
buffer.square(treeView.x, y, treeView.width, 1, treeView.colors.selected.background, textColor, " ")
|
|
||||||
end
|
|
||||||
|
|
||||||
if treeView.fileList[fileIndex].isDirectory then
|
|
||||||
buffer.text(treeView.x + treeView.fileList[fileIndex].xOffset, y, treeView.colors.arrow, treeView.directoriesToShowContent[treeView.fileList[fileIndex].path] and "▽" or "▷")
|
|
||||||
buffer.text(treeView.x + treeView.fileList[fileIndex].xOffset + 2, y, textColor, unicode.sub("■ " .. fs.name(treeView.fileList[fileIndex].path), 1, textLimit - treeView.fileList[fileIndex].xOffset - 2))
|
|
||||||
else
|
|
||||||
buffer.text(treeView.x + treeView.fileList[fileIndex].xOffset, y, textColor, unicode.sub(" □ " .. fs.name(treeView.fileList[fileIndex].path), 1, textLimit - treeView.fileList[fileIndex].xOffset))
|
|
||||||
end
|
|
||||||
|
|
||||||
y = y + 1
|
|
||||||
if y > treeView.y + treeView.height - 1 then
|
|
||||||
break
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
if showScrollBar then
|
|
||||||
GUI.scrollBar(
|
|
||||||
treeView.x + treeView.width - 1,
|
|
||||||
treeView.y,
|
|
||||||
1,
|
|
||||||
treeView.height,
|
|
||||||
treeView.colors.scrollBar.background,
|
|
||||||
treeView.colors.scrollBar.foreground,
|
|
||||||
1,
|
|
||||||
#treeView.fileList,
|
|
||||||
treeView.fromFile,
|
|
||||||
treeView.height - 2,
|
|
||||||
1
|
|
||||||
):draw()
|
|
||||||
end
|
|
||||||
|
|
||||||
return treeView
|
|
||||||
end
|
|
||||||
|
|
||||||
local function treeViewEventHandler(mainContainer, object, eventData)
|
|
||||||
if eventData[1] == "touch" then
|
|
||||||
local fileIndex = eventData[4] - object.y + object.fromFile
|
|
||||||
if object.fileList[fileIndex] then
|
|
||||||
if object.fileList[fileIndex].isDirectory then
|
|
||||||
if object.directoriesToShowContent[object.fileList[fileIndex].path] then
|
|
||||||
object.directoriesToShowContent[object.fileList[fileIndex].path] = nil
|
|
||||||
else
|
|
||||||
object.directoriesToShowContent[object.fileList[fileIndex].path] = true
|
|
||||||
end
|
|
||||||
object:updateFileList()
|
|
||||||
mainContainer:draw()
|
|
||||||
buffer.draw()
|
|
||||||
else
|
|
||||||
object.currentFile = object.fileList[fileIndex].path
|
|
||||||
mainContainer:draw()
|
|
||||||
buffer.draw()
|
|
||||||
callMethod(object.onFileSelected, object.currentFile, eventData)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
elseif eventData[1] == "scroll" then
|
|
||||||
if eventData[5] == 1 then
|
|
||||||
if object.fromFile > 1 then
|
|
||||||
object.fromFile = object.fromFile - 1
|
|
||||||
mainContainer:draw()
|
|
||||||
buffer.draw()
|
|
||||||
end
|
|
||||||
else
|
|
||||||
if object.fromFile < #object.fileList then
|
|
||||||
object.fromFile = object.fromFile + 1
|
|
||||||
mainContainer:draw()
|
|
||||||
buffer.draw()
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function GUI.treeView(x, y, width, height, backgroundColor, textColor, selectionColor, selectionTextColor, arrowColor, scrollBarBackground, scrollBarForeground, workPath)
|
|
||||||
local treeView = GUI.container(x, y, width, height)
|
|
||||||
|
|
||||||
treeView.eventHandler = treeViewEventHandler
|
|
||||||
treeView.colors = {
|
|
||||||
default = {
|
|
||||||
background = backgroundColor,
|
|
||||||
text = textColor,
|
|
||||||
},
|
|
||||||
selected = {
|
|
||||||
background = selectionColor,
|
|
||||||
text = selectionTextColor,
|
|
||||||
},
|
|
||||||
scrollBar = {
|
|
||||||
background = scrollBarBackground,
|
|
||||||
foreground = scrollBarForeground
|
|
||||||
},
|
|
||||||
arrow = arrowColor
|
|
||||||
}
|
|
||||||
treeView.directoriesToShowContent = {}
|
|
||||||
treeView.fileList = {}
|
|
||||||
treeView.workPath = workPath
|
|
||||||
|
|
||||||
treeView.updateFileList = treeViewUpdateFileList
|
|
||||||
treeView.draw = treeViewDraw
|
|
||||||
treeView.currentFile = nil
|
|
||||||
treeView.fromFile = 1
|
|
||||||
|
|
||||||
treeView:updateFileList()
|
|
||||||
|
|
||||||
return treeView
|
|
||||||
end
|
|
||||||
|
|
||||||
----------------------------------------- Color Selector object -----------------------------------------
|
|
||||||
|
|
||||||
local function colorSelectorDraw(colorSelector)
|
local function colorSelectorDraw(colorSelector)
|
||||||
local overlayColor = colorSelector.color < 0x7FFFFF and 0xFFFFFF or 0x000000
|
local overlayColor = colorSelector.color < 0x7FFFFF and 0xFFFFFF or 0x000000
|
||||||
buffer.square(colorSelector.x, colorSelector.y, colorSelector.width, colorSelector.height, colorSelector.color, overlayColor, " ")
|
buffer.square(colorSelector.x, colorSelector.y, colorSelector.width, colorSelector.height, colorSelector.color, overlayColor, " ")
|
||||||
@ -2799,22 +2651,213 @@ function GUI.layout(x, y, width, height, columnCount, rowCount)
|
|||||||
return layout
|
return layout
|
||||||
end
|
end
|
||||||
|
|
||||||
|
----------------------------------------- Color Selector object -----------------------------------------
|
||||||
|
|
||||||
|
local function updateFileList(treeView, directoriesToShowContent, xOffset, path)
|
||||||
|
local localFileList = {}
|
||||||
|
for file in fs.list(path) do
|
||||||
|
local element = {}
|
||||||
|
element.path = path .. file
|
||||||
|
element.xOffset = xOffset
|
||||||
|
element.isDirectory = fs.isDirectory(element.path)
|
||||||
|
|
||||||
|
if
|
||||||
|
treeView.showMode == GUI.filesystemModes.both or
|
||||||
|
element.isDirectory and treeView.showMode == GUI.filesystemModes.directory or
|
||||||
|
not element.isDirectory and treeView.showMode == GUI.filesystemModes.file
|
||||||
|
then
|
||||||
|
table.insert(localFileList, element)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Sort file list alphabeitcally
|
||||||
|
table.sort(localFileList, function(a, b) return unicode.lower(a.path) < unicode.lower(b.path) end)
|
||||||
|
-- Move folders on top and recursively get their content if needed
|
||||||
|
local i, nextDirectoryIndex, nextLocalFileListIndex = 1, 1, 1
|
||||||
|
while i <= #localFileList do
|
||||||
|
if localFileList[i].isDirectory then
|
||||||
|
table.insert(localFileList, nextDirectoryIndex, localFileList[i])
|
||||||
|
table.remove(localFileList, i + 1)
|
||||||
|
|
||||||
|
if directoriesToShowContent[localFileList[nextDirectoryIndex].path] then
|
||||||
|
local nextLocalFileList = updateFileList(treeView, directoriesToShowContent, xOffset + 2, localFileList[nextDirectoryIndex].path)
|
||||||
|
|
||||||
|
nextLocalFileListIndex = nextDirectoryIndex + 1
|
||||||
|
for j = 1, #nextLocalFileList do
|
||||||
|
table.insert(localFileList, nextLocalFileListIndex, nextLocalFileList[j])
|
||||||
|
nextLocalFileListIndex = nextLocalFileListIndex + 1
|
||||||
|
end
|
||||||
|
i, nextDirectoryIndex = i + #nextLocalFileList, nextDirectoryIndex + #nextLocalFileList
|
||||||
|
end
|
||||||
|
|
||||||
|
nextDirectoryIndex = nextDirectoryIndex + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
i = i + 1
|
||||||
|
end
|
||||||
|
|
||||||
|
return localFileList
|
||||||
|
end
|
||||||
|
|
||||||
|
local function treeViewUpdateFileList(treeView)
|
||||||
|
treeView.fileList = updateFileList(treeView, treeView.directoriesToShowContent, 1, treeView.workPath)
|
||||||
|
return treeView
|
||||||
|
end
|
||||||
|
|
||||||
|
local function treeViewDraw(treeView)
|
||||||
|
local y = treeView.y
|
||||||
|
local showScrollBar = #treeView.fileList > treeView.height
|
||||||
|
local textLimit = treeView.width - (showScrollBar and 2 or 1)
|
||||||
|
|
||||||
|
if treeView.colors.default.background then
|
||||||
|
buffer.square(treeView.x, treeView.y, treeView.width, treeView.height, treeView.colors.default.background, treeView.colors.default.text, " ")
|
||||||
|
end
|
||||||
|
|
||||||
|
for fileIndex = treeView.fromFile, #treeView.fileList do
|
||||||
|
local textColor, arrowColor = treeView.colors.default.text, treeView.colors.default.arrow
|
||||||
|
if treeView.fileList[fileIndex].path == treeView.selectedItem then
|
||||||
|
textColor, arrowColor = treeView.colors.selected.text, treeView.colors.selected.arrow
|
||||||
|
buffer.square(treeView.x, y, treeView.width, 1, treeView.colors.selected.background, textColor, " ")
|
||||||
|
end
|
||||||
|
|
||||||
|
if treeView.fileList[fileIndex].isDirectory then
|
||||||
|
buffer.text(treeView.x + treeView.fileList[fileIndex].xOffset, y, arrowColor, treeView.directoriesToShowContent[treeView.fileList[fileIndex].path] and "▽" or "▷")
|
||||||
|
buffer.text(treeView.x + treeView.fileList[fileIndex].xOffset + 2, y, textColor, unicode.sub("■ " .. fs.name(treeView.fileList[fileIndex].path), 1, textLimit - treeView.fileList[fileIndex].xOffset - 2))
|
||||||
|
else
|
||||||
|
buffer.text(treeView.x + treeView.fileList[fileIndex].xOffset, y, textColor, unicode.sub(" □ " .. fs.name(treeView.fileList[fileIndex].path), 1, textLimit - treeView.fileList[fileIndex].xOffset))
|
||||||
|
end
|
||||||
|
|
||||||
|
y = y + 1
|
||||||
|
if y > treeView.y + treeView.height - 1 then
|
||||||
|
break
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
if showScrollBar then
|
||||||
|
GUI.scrollBar(
|
||||||
|
treeView.x + treeView.width - 1,
|
||||||
|
treeView.y,
|
||||||
|
1,
|
||||||
|
treeView.height,
|
||||||
|
treeView.colors.scrollBar.background,
|
||||||
|
treeView.colors.scrollBar.foreground,
|
||||||
|
1,
|
||||||
|
#treeView.fileList,
|
||||||
|
treeView.fromFile,
|
||||||
|
treeView.height - 2,
|
||||||
|
1
|
||||||
|
):draw()
|
||||||
|
end
|
||||||
|
|
||||||
|
return treeView
|
||||||
|
end
|
||||||
|
|
||||||
|
local function treeViewEventHandler(mainContainer, object, eventData)
|
||||||
|
if eventData[1] == "touch" then
|
||||||
|
local fileIndex = eventData[4] - object.y + object.fromFile
|
||||||
|
if object.fileList[fileIndex] then
|
||||||
|
if
|
||||||
|
object.fileList[fileIndex].isDirectory and
|
||||||
|
(
|
||||||
|
object.selectionMode == GUI.filesystemModes.file or
|
||||||
|
object.selectedItem == object.fileList[fileIndex].path or
|
||||||
|
eventData[3] == object.x + object.fileList[fileIndex].xOffset
|
||||||
|
)
|
||||||
|
then
|
||||||
|
if object.directoriesToShowContent[object.fileList[fileIndex].path] then
|
||||||
|
object.directoriesToShowContent[object.fileList[fileIndex].path] = nil
|
||||||
|
else
|
||||||
|
object.directoriesToShowContent[object.fileList[fileIndex].path] = true
|
||||||
|
end
|
||||||
|
|
||||||
|
object:updateFileList()
|
||||||
|
mainContainer:draw()
|
||||||
|
buffer.draw()
|
||||||
|
else
|
||||||
|
if
|
||||||
|
object.selectionMode == GUI.filesystemModes.both or
|
||||||
|
object.selectionMode == GUI.filesystemModes.file and not object.fileList[fileIndex].isDirectory or
|
||||||
|
object.selectionMode == GUI.filesystemModes.directory and object.fileList[fileIndex].isDirectory
|
||||||
|
then
|
||||||
|
object.selectedItem = object.fileList[fileIndex].path
|
||||||
|
|
||||||
|
mainContainer:draw()
|
||||||
|
buffer.draw()
|
||||||
|
callMethod(object.onItemSelected, object.selectedItem, eventData)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
elseif eventData[1] == "scroll" then
|
||||||
|
if eventData[5] == 1 then
|
||||||
|
if object.fromFile > 1 then
|
||||||
|
object.fromFile = object.fromFile - 1
|
||||||
|
mainContainer:draw()
|
||||||
|
buffer.draw()
|
||||||
|
end
|
||||||
|
else
|
||||||
|
if object.fromFile < #object.fileList then
|
||||||
|
object.fromFile = object.fromFile + 1
|
||||||
|
mainContainer:draw()
|
||||||
|
buffer.draw()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function GUI.treeView(x, y, width, height, backgroundColor, textColor, selectionColor, selectionTextColor, arrowColor, scrollBarBackground, scrollBarForeground, workPath, showMode, selectionMode)
|
||||||
|
local treeView = GUI.container(x, y, width, height)
|
||||||
|
|
||||||
|
treeView.eventHandler = treeViewEventHandler
|
||||||
|
treeView.colors = {
|
||||||
|
default = {
|
||||||
|
background = backgroundColor,
|
||||||
|
text = textColor,
|
||||||
|
arrow = arrowColor
|
||||||
|
},
|
||||||
|
selected = {
|
||||||
|
background = selectionColor,
|
||||||
|
text = selectionTextColor,
|
||||||
|
arrow = selectionTextColor
|
||||||
|
},
|
||||||
|
scrollBar = {
|
||||||
|
background = scrollBarBackground,
|
||||||
|
foreground = scrollBarForeground
|
||||||
|
},
|
||||||
|
}
|
||||||
|
treeView.directoriesToShowContent = {}
|
||||||
|
treeView.fileList = {}
|
||||||
|
treeView.workPath = workPath
|
||||||
|
|
||||||
|
treeView.updateFileList = treeViewUpdateFileList
|
||||||
|
treeView.draw = treeViewDraw
|
||||||
|
treeView.selectedItem = nil
|
||||||
|
treeView.fromFile = 1
|
||||||
|
treeView.showMode = showMode or GUI.filesystemModes.both
|
||||||
|
treeView.selectionMode = selectionMode or GUI.filesystemModes.file
|
||||||
|
|
||||||
|
treeView:updateFileList()
|
||||||
|
|
||||||
|
return treeView
|
||||||
|
end
|
||||||
|
|
||||||
--------------------------------------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
-- local mainContainer = GUI.fullScreenContainer()
|
-- local mainContainer = GUI.fullScreenContainer()
|
||||||
-- mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x262626))
|
-- mainContainer:addChild(GUI.panel(1, 1, mainContainer.width, mainContainer.height, 0x262626))
|
||||||
|
|
||||||
-- local layout = mainContainer:addChild(GUI.layout(1, 1, mainContainer.width, mainContainer.height, 5, 1))
|
-- local treeView1 = mainContainer:addChild(GUI.treeView(2, 2, 30, 41, 0xCCCCCC, 0x2D2D2D, 0x3C3C3C, 0xEEEEEE, 0x666666, 0xC3C3C3, 0x393939, "/", GUI.filesystemModes.both, GUI.filesystemModes.both))
|
||||||
-- for i = 1, 5 do
|
-- treeView1.onItemSelected = function(path)
|
||||||
-- layout:setCellPosition(3, 1, layout:addChild(GUI.button(1, 1, 30, 3, 0xFFFFFF, 0x0, 0xAAAAAA, 0x0, "Text " .. i)))
|
-- GUI.error("Somethig was selected, the path is: \"" .. path .. "\"")
|
||||||
-- end
|
-- end
|
||||||
-- layout.showGrid = true
|
|
||||||
-- layout:setCellFitting(3, 1, true, false)
|
|
||||||
|
|
||||||
-- local brailleCanvas = mainContainer:addChild(GUI.brailleCanvas(2, 2, 30, 15))
|
-- local treeView2 = mainContainer:addChild(GUI.treeView(34, 2, 30, 41, 0xCCCCCC, 0x2D2D2D, 0x3C3C3C, 0xEEEEEE, 0x666666, 0xC3C3C3, 0x393939, "/", GUI.filesystemModes.file, GUI.filesystemModes.file))
|
||||||
-- for i = 1, brailleCanvas.width do
|
-- treeView2.onItemSelected = function(path)
|
||||||
-- brailleCanvas:set(i, i, true, 0xFFFFFF)
|
-- GUI.error("File was selected, the path is: \"" .. path .. "\"")
|
||||||
-- brailleCanvas:set(brailleCanvas.width - i + 1, i, true, 0xFF0000)
|
-- end
|
||||||
|
|
||||||
|
-- local treeView3 = mainContainer:addChild(GUI.treeView(66, 2, 30, 41, 0xCCCCCC, 0x2D2D2D, 0x3C3C3C, 0xEEEEEE, 0x666666, 0xC3C3C3, 0x393939, "/", GUI.filesystemModes.directory, GUI.filesystemModes.directory))
|
||||||
|
-- treeView3.onItemSelected = function(path)
|
||||||
|
-- GUI.error("Directory was selected, the path is: \"" .. path .. "\"")
|
||||||
-- end
|
-- end
|
||||||
|
|
||||||
-- mainContainer:draw()
|
-- mainContainer:draw()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user