wizard and tab rework
This commit is contained in:
@@ -6,7 +6,7 @@ local ccemux = _G.ccemux
|
||||
local sides = { 'bottom', 'top', 'back', 'front', 'right', 'left' }
|
||||
|
||||
local tab = UI.Tab {
|
||||
tabTitle = 'CCEmuX',
|
||||
title = 'CCEmuX',
|
||||
description = 'CCEmuX peripherals',
|
||||
form = UI.Form {
|
||||
x = 2, ex = -2, y = 2, ey = 5,
|
||||
|
||||
@@ -5,7 +5,6 @@ local Socket = require('opus.socket')
|
||||
local UI = require('opus.ui')
|
||||
local Util = require('opus.util')
|
||||
|
||||
local colors = _G.colors
|
||||
local fs = _G.fs
|
||||
local multishell = _ENV.multishell
|
||||
local network = _G.network
|
||||
@@ -31,7 +30,7 @@ local socket, turtle, page
|
||||
|
||||
page = UI.Page {
|
||||
coords = UI.Window {
|
||||
backgroundColor = colors.black,
|
||||
backgroundColor = 'black',
|
||||
height = 3,
|
||||
marginTop = 1, marginLeft = 1,
|
||||
draw = function(self)
|
||||
@@ -50,9 +49,10 @@ page = UI.Page {
|
||||
},
|
||||
tabs = UI.Tabs {
|
||||
x = 1, y = 4, ey = -2,
|
||||
UI.Tab {
|
||||
title = 'Run',
|
||||
scripts = UI.ScrollingGrid {
|
||||
tabTitle = 'Run',
|
||||
backgroundColor = colors.cyan,
|
||||
backgroundColor = 'primary',
|
||||
columns = {
|
||||
{ heading = '', key = 'label' },
|
||||
},
|
||||
@@ -77,9 +77,11 @@ page = UI.Page {
|
||||
return true
|
||||
end,
|
||||
},
|
||||
},
|
||||
UI.Tab {
|
||||
title = 'Select',
|
||||
turtles = UI.ScrollingGrid {
|
||||
tabTitle = 'Select',
|
||||
backgroundColor = colors.cyan,
|
||||
backgroundColor = 'primary',
|
||||
columns = {
|
||||
{ heading = 'label', key = 'label' },
|
||||
{ heading = 'Dist', key = 'distance' },
|
||||
@@ -125,9 +127,11 @@ page = UI.Page {
|
||||
return true
|
||||
end,
|
||||
},
|
||||
},
|
||||
UI.Tab {
|
||||
title = 'Inv',
|
||||
inventory = UI.ScrollingGrid {
|
||||
backgroundColor = colors.cyan,
|
||||
tabTitle = 'Inv',
|
||||
backgroundColor = 'primary',
|
||||
columns = {
|
||||
{ heading = '', key = 'index', width = 2 },
|
||||
{ heading = '', key = 'count', width = 2 },
|
||||
@@ -137,7 +141,7 @@ page = UI.Page {
|
||||
sortColumn = 'index',
|
||||
getRowTextColor = function(self, row, selected)
|
||||
if turtle and row.selected then
|
||||
return colors.yellow
|
||||
return 'yellow'
|
||||
end
|
||||
return UI.ScrollingGrid.getRowTextColor(self, row, selected)
|
||||
end,
|
||||
@@ -184,22 +188,10 @@ page = UI.Page {
|
||||
return true
|
||||
end,
|
||||
},
|
||||
--[[
|
||||
policy = UI.ScrollingGrid {
|
||||
tabTitle = 'Mod',
|
||||
backgroundColor = UI.TabBar.defaults.selectedBackgroundColor,
|
||||
columns = {
|
||||
{ heading = 'label', key = 'label' },
|
||||
},
|
||||
values = policies,
|
||||
disableHeader = true,
|
||||
sortColumn = 'label',
|
||||
autospace = true,
|
||||
},
|
||||
]]
|
||||
action = UI.Window {
|
||||
tabTitle = 'Action',
|
||||
backgroundColor = colors.cyan,
|
||||
UI.Tab {
|
||||
title = 'Action',
|
||||
backgroundColor = 'primary',
|
||||
moveUp = UI.Button {
|
||||
x = 5, y = 2,
|
||||
text = 'up',
|
||||
@@ -233,8 +225,41 @@ page = UI.Page {
|
||||
info = UI.TextArea {
|
||||
x = 15, y = 2,
|
||||
inactive = true,
|
||||
}
|
||||
},
|
||||
showBlocks = function(self)
|
||||
local script = [[
|
||||
local function inspect(direction)
|
||||
local s,b = turtle['inspect' .. (direction or '')]()
|
||||
if not s then
|
||||
return 'minecraft:air:0'
|
||||
end
|
||||
return string.format('%s:%d', b.name, b.metadata)
|
||||
end
|
||||
|
||||
local bu, bf, bd = inspect('Up'), inspect(), inspect('Down')
|
||||
return string.format('%s\n%s\n%s', bu, bf, bd)
|
||||
]]
|
||||
|
||||
local s, m = self:runFunction(script, true)
|
||||
self.info:setText(s or m)
|
||||
end,
|
||||
eventHandler = function(self, event)
|
||||
if event.type == 'button_press' then
|
||||
if event.button.fn then
|
||||
self:runFunction(event.button.fn, event.button.nowrap)
|
||||
self:showBlocks()
|
||||
end
|
||||
return true
|
||||
end
|
||||
return UI.Tab.eventHandler(self, event)
|
||||
end,
|
||||
},
|
||||
enable = function(self)
|
||||
if config.tab then
|
||||
self:selectTab(Util.find(self, 'title', config.tab))
|
||||
end
|
||||
UI.Tabs.enable(self)
|
||||
end
|
||||
},
|
||||
statusBar = UI.StatusBar {
|
||||
values = { },
|
||||
@@ -331,24 +356,6 @@ function page:runScript(scriptName)
|
||||
end
|
||||
end
|
||||
|
||||
function page:showBlocks()
|
||||
local script = [[
|
||||
local function inspect(direction)
|
||||
local s,b = turtle['inspect' .. (direction or '')]()
|
||||
if not s then
|
||||
return 'minecraft:air:0'
|
||||
end
|
||||
return string.format('%s:%d', b.name, b.metadata)
|
||||
end
|
||||
|
||||
local bu, bf, bd = inspect('Up'), inspect(), inspect('Down')
|
||||
return string.format('%s\n%s\n%s', bu, bf, bd)
|
||||
]]
|
||||
|
||||
local s, m = self:runFunction(script, true)
|
||||
self.tabs.action.info:setText(s or m)
|
||||
end
|
||||
|
||||
function page:eventHandler(event)
|
||||
if event.type == 'quit' then
|
||||
UI:quit()
|
||||
@@ -357,13 +364,6 @@ function page:eventHandler(event)
|
||||
config.tab = event.button.text
|
||||
Config.update('Turtles', config)
|
||||
|
||||
elseif event.type == 'button_press' then
|
||||
if event.button.fn then
|
||||
self:runFunction(event.button.fn, event.button.nowrap)
|
||||
self:showBlocks()
|
||||
elseif event.button.script then
|
||||
self:runScript(event.button.script)
|
||||
end
|
||||
else
|
||||
return UI.Page.eventHandler(self, event)
|
||||
end
|
||||
@@ -393,9 +393,5 @@ Event.onInterval(1, function()
|
||||
end
|
||||
end)
|
||||
|
||||
if config.tab then
|
||||
page.tabs.tabBar:selectTab(config.tab)
|
||||
end
|
||||
|
||||
UI:setPage(page)
|
||||
UI:start()
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
category = "Apps",
|
||||
requires = "advancedComputer",
|
||||
iconExt = "\030 \031 \128\030d\159\030 \031d\140\030d\031 \155\030 \0315\140\0305\031 \155\030 \128\010\030 \031d\136\145\0315\136\145\031d\153\031 \128\0315\153\010\030 \031 \128\031d\130\140\134\0315\140\134\031 \128",
|
||||
run = "fileui --exec=hexedit.lua",
|
||||
run = "fileui --exec=hexedit.lua --title=hexedit",
|
||||
},
|
||||
[ "fb1c39e9f4f3c2628ad173ab401a6e4e4baf783d" ] = {
|
||||
title = "Sounds",
|
||||
|
||||
@@ -308,7 +308,7 @@ local containerText = {
|
||||
}
|
||||
|
||||
local containTab = UI.Tab {
|
||||
tabTitle = 'Contain',
|
||||
title = 'Contain',
|
||||
button = UI.Button {
|
||||
x = 2, y = 2,
|
||||
text = 'Set corner',
|
||||
@@ -321,7 +321,7 @@ local containTab = UI.Tab {
|
||||
}
|
||||
|
||||
local blocksTab = UI.Tab {
|
||||
tabTitle = 'Blocks',
|
||||
title = 'Blocks',
|
||||
grid = UI.ScrollingGrid {
|
||||
y = 1,
|
||||
columns = {
|
||||
@@ -333,7 +333,7 @@ local blocksTab = UI.Tab {
|
||||
}
|
||||
|
||||
local turtlesTab = UI.Tab {
|
||||
tabTitle = 'Turtles',
|
||||
title = 'Turtles',
|
||||
grid = UI.ScrollingGrid {
|
||||
y = 1,
|
||||
values = pool,
|
||||
|
||||
@@ -14,7 +14,7 @@ local config = Config.load('lzwfs', {
|
||||
})
|
||||
|
||||
local tab = UI.Tab {
|
||||
tabTitle = 'Compression',
|
||||
title = 'Compression',
|
||||
description = 'Disk compression',
|
||||
[1] = UI.Window {
|
||||
x = 2, y = 2, ex = -2, ey = 6,
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
local Milo = require('milo')
|
||||
local UI = require('opus.ui')
|
||||
|
||||
local turtle = _G.turtle
|
||||
|
||||
local learnPage = UI.Page {
|
||||
titleBar = UI.TitleBar { title = 'Learn Recipe' },
|
||||
wizard = UI.Wizard {
|
||||
y = 2, ey = -2,
|
||||
pages = {
|
||||
general = UI.WizardPage {
|
||||
index = 1,
|
||||
grid = UI.ScrollingGrid {
|
||||
@@ -23,11 +20,10 @@ local learnPage = UI.Page {
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
notification = UI.Notification { },
|
||||
}
|
||||
|
||||
local general = learnPage.wizard.pages.general
|
||||
local general = learnPage.wizard.general
|
||||
|
||||
function general:validate()
|
||||
Milo:setState('learnType', self.grid:getSelected().value)
|
||||
@@ -37,7 +33,7 @@ end
|
||||
function learnPage:enable()
|
||||
local t = { }
|
||||
|
||||
for _, page in pairs(self.wizard.pages) do
|
||||
for _, page in pairs(self.wizard:getPages()) do
|
||||
if page.validFor then
|
||||
t[page.validFor] = {
|
||||
name = page.validFor,
|
||||
@@ -63,7 +59,7 @@ function learnPage.wizard:getPage(index)
|
||||
local pages = { }
|
||||
table.insert(pages, general)
|
||||
local selected = general.grid:getSelected()
|
||||
for _, page in pairs(self.pages) do
|
||||
for _, page in pairs(self:getPages()) do
|
||||
if page.validFor and (not selected or selected.value == page.validFor) then
|
||||
table.insert(pages, page)
|
||||
end
|
||||
|
||||
@@ -35,6 +35,36 @@ local networkPage = UI.Page {
|
||||
},
|
||||
sortColumn = 'displayName',
|
||||
help = 'Select Node',
|
||||
getDisplayValues = function(_, row)
|
||||
row = Util.shallowCopy(row)
|
||||
local t = { row.name:match(':(.+)_(%d+)$') }
|
||||
if #t ~= 2 then
|
||||
t = { row.name:match('(.+)_(%d+)$') }
|
||||
end
|
||||
if t and #t == 2 then
|
||||
row.name, row.suffix = table.unpack(t)
|
||||
row.name = row.name .. '_' .. row.suffix
|
||||
end
|
||||
row.displayName = row.displayName or row.name
|
||||
return row
|
||||
end,
|
||||
getRowTextColor = function(self, row, selected)
|
||||
if not device[row.name] then
|
||||
return colors.red
|
||||
end
|
||||
if row.mtype == 'ignore' then
|
||||
return colors.lightGray
|
||||
end
|
||||
return UI.Grid.getRowTextColor(self, row, selected)
|
||||
end,
|
||||
sortCompare = function(self, a, b)
|
||||
if self.sortColumn == 'displayName' then
|
||||
local an = a.displayName or a.name
|
||||
local bn = b.displayName or b.name
|
||||
return an:lower() < bn:lower()
|
||||
end
|
||||
return UI.Grid.sortCompare(self, a, b)
|
||||
end,
|
||||
},
|
||||
remove = UI.Button {
|
||||
y = -2, x = -4,
|
||||
@@ -55,39 +85,6 @@ local networkPage = UI.Page {
|
||||
}
|
||||
}
|
||||
|
||||
function networkPage.grid:getDisplayValues(row)
|
||||
row = Util.shallowCopy(row)
|
||||
local t = { row.name:match(':(.+)_(%d+)$') }
|
||||
if #t ~= 2 then
|
||||
t = { row.name:match('(.+)_(%d+)$') }
|
||||
end
|
||||
if t and #t == 2 then
|
||||
row.name, row.suffix = table.unpack(t)
|
||||
row.name = row.name .. '_' .. row.suffix
|
||||
end
|
||||
row.displayName = row.displayName or row.name
|
||||
return row
|
||||
end
|
||||
|
||||
function networkPage.grid:getRowTextColor(row, selected)
|
||||
if not device[row.name] then
|
||||
return colors.red
|
||||
end
|
||||
if row.mtype == 'ignore' then
|
||||
return colors.lightGray
|
||||
end
|
||||
return UI.Grid:getRowTextColor(row, selected)
|
||||
end
|
||||
|
||||
function networkPage.grid:sortCompare(a, b)
|
||||
if self.sortColumn == 'displayName' then
|
||||
local an = a.displayName or a.name
|
||||
local bn = b.displayName or b.name
|
||||
return an:lower() < bn:lower()
|
||||
end
|
||||
return UI.Grid.sortCompare(self, a, b)
|
||||
end
|
||||
|
||||
function networkPage:getList()
|
||||
for _, v in pairs(device) do
|
||||
if not context.storage.nodes[v.name] then
|
||||
@@ -96,7 +93,7 @@ function networkPage:getList()
|
||||
mtype = 'ignore',
|
||||
category = 'ignore',
|
||||
}
|
||||
for _, page in pairs(nodeWizard.wizard.pages) do
|
||||
for _, page in pairs(nodeWizard.wizard:getPages()) do
|
||||
if page.isValidType and page:isValidType(node) then
|
||||
context.storage.nodes[v.name] = node
|
||||
break
|
||||
@@ -191,7 +188,6 @@ nodeWizard = UI.Page {
|
||||
titleBar = UI.TitleBar { title = 'Configure' },
|
||||
wizard = UI.Wizard {
|
||||
y = 2, ey = -2,
|
||||
pages = {
|
||||
general = UI.WizardPage {
|
||||
index = 1,
|
||||
form = UI.Form {
|
||||
@@ -219,6 +215,50 @@ nodeWizard = UI.Page {
|
||||
sortColumn = 'slot',
|
||||
help = 'Contents of inventory',
|
||||
},
|
||||
getDisplayValues = function(_, row)
|
||||
row = Util.shallowCopy(row)
|
||||
row.displayName = itemDB:getName(row)
|
||||
return row
|
||||
end,
|
||||
enable = function(self)
|
||||
UI.WizardPage.enable(self)
|
||||
self:focusFirst()
|
||||
end,
|
||||
isValidFor = function()
|
||||
return false
|
||||
end,
|
||||
showInventory = function(self, node)
|
||||
local inventory
|
||||
|
||||
if device[node.name] and device[node.name].list then
|
||||
pcall(function()
|
||||
inventory = device[node.name].list()
|
||||
for k,v in pairs(inventory) do
|
||||
v.slot = k
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
self.grid:setValues(inventory or { })
|
||||
end,
|
||||
validate = function(self)
|
||||
if self.form:save() then
|
||||
nodeWizard.node.category = Util.find(nodeWizard.choices, 'value', nodeWizard.node.mtype).category
|
||||
|
||||
nodeWizard.nodePages = { }
|
||||
table.insert(nodeWizard.nodePages, nodeWizard.wizard.general)
|
||||
for _, page in pairs(nodeWizard.wizard:getPages()) do
|
||||
if not page.isValidFor or page:isValidFor(nodeWizard.node) then
|
||||
table.insert(nodeWizard.nodePages, page)
|
||||
if page.setNode then
|
||||
page:setNode(nodeWizard.node)
|
||||
end
|
||||
end
|
||||
end
|
||||
table.insert(nodeWizard.nodePages, nodeWizard.wizard.confirmation)
|
||||
return true
|
||||
end
|
||||
end,
|
||||
},
|
||||
confirmation = UI.WizardPage {
|
||||
title = 'Confirm changes',
|
||||
@@ -230,7 +270,9 @@ nodeWizard = UI.Page {
|
||||
|
||||
The settings will take effect immediately!]],
|
||||
},
|
||||
},
|
||||
isValidFor = function()
|
||||
return false
|
||||
end,
|
||||
},
|
||||
},
|
||||
statusBar = UI.StatusBar {
|
||||
@@ -255,6 +297,11 @@ The settings will take effect immediately!]],
|
||||
accelerators = {
|
||||
delete = 'remove_entry',
|
||||
},
|
||||
getDisplayValues = function(_, row)
|
||||
row = Util.shallowCopy(row)
|
||||
row.displayName = itemDB:getName(row)
|
||||
return row
|
||||
end,
|
||||
},
|
||||
remove = UI.Button {
|
||||
x = -4, y = 4,
|
||||
@@ -291,11 +338,7 @@ The settings will take effect immediately!]],
|
||||
statusBar = UI.StatusBar {
|
||||
backgroundColor = 'primary',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
--[[ Filter slide out ]] --
|
||||
function nodeWizard.filter:show(entry, callback, whitelistOnly)
|
||||
show = function(self, entry, callback, whitelistOnly)
|
||||
self.entry = entry
|
||||
self.callback = callback
|
||||
|
||||
@@ -312,28 +355,19 @@ function nodeWizard.filter:show(entry, callback, whitelistOnly)
|
||||
self:setFocus(self.form.scan)
|
||||
|
||||
Milo:pauseCrafting({ key = 'gridInUse', msg = 'Crafting paused' })
|
||||
end
|
||||
|
||||
function nodeWizard.filter:hide()
|
||||
end,
|
||||
hide = function(self)
|
||||
UI.SlideOut.hide(self)
|
||||
Milo:resumeCrafting({ key = 'gridInUse' })
|
||||
end
|
||||
|
||||
function nodeWizard.filter:resetGrid()
|
||||
end,
|
||||
resetGrid = function(self)
|
||||
local t = { }
|
||||
for k in pairs(self.entry.filter) do
|
||||
table.insert(t, itemDB:splitKey(k))
|
||||
end
|
||||
self.grid:setValues(t)
|
||||
end
|
||||
|
||||
function nodeWizard.filter.grid:getDisplayValues(row)
|
||||
row = Util.shallowCopy(row)
|
||||
row.displayName = itemDB:getName(row)
|
||||
return row
|
||||
end
|
||||
|
||||
function nodeWizard.filter:eventHandler(event)
|
||||
end,
|
||||
eventHandler = function(self, event)
|
||||
if event.type == 'focus_change' then
|
||||
self.statusBar:setStatus(event.focused.help)
|
||||
|
||||
@@ -366,67 +400,13 @@ function nodeWizard.filter:eventHandler(event)
|
||||
|
||||
elseif event.type == 'cancel' then
|
||||
self:hide()
|
||||
|
||||
else
|
||||
return UI.SlideOut.eventHandler(self, event)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
||||
--[[ General Page ]] --
|
||||
function nodeWizard.wizard.pages.general:enable()
|
||||
UI.WizardPage.enable(self)
|
||||
self:focusFirst()
|
||||
end
|
||||
|
||||
function nodeWizard.wizard.pages.general:isValidFor()
|
||||
return false
|
||||
end
|
||||
|
||||
function nodeWizard.wizard.pages.general:showInventory(node)
|
||||
local inventory
|
||||
|
||||
if device[node.name] and device[node.name].list then
|
||||
pcall(function()
|
||||
inventory = device[node.name].list()
|
||||
for k,v in pairs(inventory) do
|
||||
v.slot = k
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
self.grid:setValues(inventory or { })
|
||||
end
|
||||
|
||||
function nodeWizard.wizard.pages.general.grid:getDisplayValues(row)
|
||||
row = Util.shallowCopy(row)
|
||||
row.displayName = itemDB:getName(row)
|
||||
return row
|
||||
end
|
||||
|
||||
function nodeWizard.wizard.pages.general:validate()
|
||||
if self.form:save() then
|
||||
nodeWizard.node.category = Util.find(nodeWizard.choices, 'value', nodeWizard.node.mtype).category
|
||||
|
||||
nodeWizard.nodePages = { }
|
||||
table.insert(nodeWizard.nodePages, nodeWizard.wizard.pages.general)
|
||||
for _, page in pairs(nodeWizard.wizard.pages) do
|
||||
if not page.isValidFor or page:isValidFor(nodeWizard.node) then
|
||||
table.insert(nodeWizard.nodePages, page)
|
||||
if page.setNode then
|
||||
page:setNode(nodeWizard.node)
|
||||
end
|
||||
end
|
||||
end
|
||||
table.insert(nodeWizard.nodePages, nodeWizard.wizard.pages.confirmation)
|
||||
return true
|
||||
end
|
||||
end
|
||||
|
||||
--[[ Confirmation ]]--
|
||||
function nodeWizard.wizard.pages.confirmation:isValidFor()
|
||||
return false
|
||||
end
|
||||
end,
|
||||
},
|
||||
}
|
||||
|
||||
--[[ Wizard ]] --
|
||||
function nodeWizard:enable(node)
|
||||
@@ -440,7 +420,7 @@ function nodeWizard:enable(node)
|
||||
{ name = 'Ignore', value = 'ignore', category = 'ignore' },
|
||||
{ name = 'Hidden', value = 'hidden', category = 'ignore', help = 'Do not show in list' },
|
||||
}
|
||||
for _, page in pairs(self.wizard.pages) do
|
||||
for _, page in pairs(self.wizard:getPages()) do
|
||||
if page.isValidType then
|
||||
local choice = page:isValidType(self.node)
|
||||
if choice and not Util.find(self.choices, 'value', choice.value) then
|
||||
@@ -448,15 +428,15 @@ function nodeWizard:enable(node)
|
||||
end
|
||||
end
|
||||
end
|
||||
self.wizard.pages.general.form[1].shadowText = self.node.name
|
||||
self.wizard.pages.general.form[2].choices = self.choices
|
||||
self.wizard.pages.general.form:setValues(self.node)
|
||||
self.wizard.general.form[1].shadowText = self.node.name
|
||||
self.wizard.general.form[2].choices = self.choices
|
||||
self.wizard.general.form:setValues(self.node)
|
||||
|
||||
self.wizard.pages.general:showInventory(self.node)
|
||||
self.wizard.general:showInventory(self.node)
|
||||
|
||||
self.nodePages = { }
|
||||
table.insert(self.nodePages, self.wizard.pages.general)
|
||||
table.insert(self.nodePages, self.wizard.pages.confirmation)
|
||||
table.insert(self.nodePages, self.wizard.general)
|
||||
table.insert(self.nodePages, self.wizard.confirmation)
|
||||
|
||||
UI.Page.enable(self)
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ local Ansi = require('opus.ansi')
|
||||
local UI = require('opus.ui')
|
||||
|
||||
local infoTab = UI.Tab {
|
||||
tabTitle = 'Info',
|
||||
title = 'Info',
|
||||
index = 4,
|
||||
textArea = UI.TextArea {
|
||||
x = 2, ex = -2, y = 2, ey = -2,
|
||||
|
||||
@@ -7,7 +7,7 @@ local colors = _G.colors
|
||||
local context = Milo:getContext()
|
||||
|
||||
local machinesTab = UI.Tab {
|
||||
tabTitle = 'Machine',
|
||||
title = 'Machine',
|
||||
index = 3,
|
||||
grid = UI.ScrollingGrid {
|
||||
x = 2, ex = -2, y = 2, ey = -2,
|
||||
|
||||
@@ -7,7 +7,7 @@ local Util = require('opus.util')
|
||||
local context = Milo:getContext()
|
||||
|
||||
local manageTab = UI.Tab {
|
||||
tabTitle = 'Manage',
|
||||
title = 'Manage',
|
||||
index = 1,
|
||||
form = UI.Form {
|
||||
x = 1, ex = -1, ey = -1,
|
||||
|
||||
@@ -4,7 +4,7 @@ local Milo = require('milo')
|
||||
local UI = require('opus.ui')
|
||||
|
||||
local recipeTab = UI.Tab {
|
||||
tabTitle = 'Recipe',
|
||||
title = 'Recipe',
|
||||
index = 2,
|
||||
grid = UI.ScrollingGrid {
|
||||
x = 2, ex = -2, y = 2, ey = -4,
|
||||
|
||||
@@ -7,7 +7,7 @@ local colors = _G.colors
|
||||
local context = Milo:getContext()
|
||||
|
||||
local resetTab = UI.Tab {
|
||||
tabTitle = 'Reset',
|
||||
title = 'Reset',
|
||||
index = 5,
|
||||
noFill = true,
|
||||
textArea = UI.TextArea {
|
||||
|
||||
@@ -23,7 +23,7 @@ local page = UI.Page {
|
||||
tabs = UI.Tabs {
|
||||
y = 2, ey = -2,
|
||||
inventory = UI.Tab {
|
||||
tabTitle = 'Inventory',
|
||||
title = 'Inventory',
|
||||
grid = UI.ScrollingGrid {
|
||||
y = 2, ey = -2,
|
||||
columns = {
|
||||
@@ -33,7 +33,7 @@ local page = UI.Page {
|
||||
},
|
||||
},
|
||||
autostore = UI.Tab {
|
||||
tabTitle = 'Deposit',
|
||||
title = 'Deposit',
|
||||
grid = UI.ScrollingGrid {
|
||||
y = 2, ey = -2,
|
||||
columns = {
|
||||
|
||||
@@ -83,7 +83,7 @@ local function createPage(node)
|
||||
parent = monitor,
|
||||
tabs = UI.Tabs {
|
||||
[1] = UI.Tab {
|
||||
tabTitle = 'Overview',
|
||||
title = 'Overview',
|
||||
backgroundColor = colors.black,
|
||||
noFill = true,
|
||||
onlineLabel = UI.Text {
|
||||
@@ -135,14 +135,14 @@ local function createPage(node)
|
||||
},
|
||||
},
|
||||
[2] = UI.Tab {
|
||||
tabTitle = 'Stats',
|
||||
title = 'Stats',
|
||||
noFill = true,
|
||||
textArea = UI.TextArea {
|
||||
y = 3,
|
||||
},
|
||||
},
|
||||
[3] = UI.Tab {
|
||||
tabTitle = 'Storage',
|
||||
title = 'Storage',
|
||||
noFill = true,
|
||||
grid = UI.ScrollingGrid {
|
||||
y = 2,
|
||||
@@ -157,7 +157,7 @@ local function createPage(node)
|
||||
},
|
||||
},
|
||||
[4] = UI.Tab {
|
||||
tabTitle = 'Offline',
|
||||
title = 'Offline',
|
||||
noFill = true,
|
||||
grid = UI.ScrollingGrid {
|
||||
y = 2,
|
||||
@@ -168,14 +168,14 @@ local function createPage(node)
|
||||
},
|
||||
},
|
||||
[5] = UI.Tab {
|
||||
tabTitle = 'Activity',
|
||||
title = 'Activity',
|
||||
noFill = true,
|
||||
term = UI.Embedded {
|
||||
--visible = true,
|
||||
},
|
||||
},
|
||||
[6] = UI.Tab {
|
||||
tabTitle = 'Tasks',
|
||||
title = 'Tasks',
|
||||
noFill = true,
|
||||
grid = UI.ScrollingGrid {
|
||||
y = 2,
|
||||
@@ -449,7 +449,7 @@ Unlocked Slots : %d of %d (%d%%)
|
||||
function page:eventHandler(event)
|
||||
if event.type == 'tab_activate' then
|
||||
local state = Milo:getState('statusState') or { }
|
||||
state[node.name] = event.activated.tabTitle
|
||||
state[node.name] = event.activated.title
|
||||
Milo:setState('statusState', state)
|
||||
end
|
||||
return UI.Page.eventHandler(self, event)
|
||||
@@ -472,7 +472,7 @@ Unlocked Slots : %d of %d (%d%%)
|
||||
-- restore active tab
|
||||
local tabState = Milo:getState('statusState') or { }
|
||||
if tabState[node.name] then
|
||||
page.tabs:selectTab(Util.find(page.tabs, 'tabTitle', tabState[node.name]))
|
||||
page.tabs:selectTab(Util.find(page.tabs, 'title', tabState[node.name]))
|
||||
end
|
||||
|
||||
return page
|
||||
|
||||
@@ -23,7 +23,7 @@ local config = Config.load('Sensor')
|
||||
local page = UI.Page {
|
||||
tabs = UI.Tabs {
|
||||
listing = UI.Tab {
|
||||
tabTitle = 'Listing',
|
||||
title = 'Listing',
|
||||
grid = UI.ScrollingGrid {
|
||||
columns = {
|
||||
{ heading = 'Name', key = 'displayName' },
|
||||
@@ -35,7 +35,7 @@ local page = UI.Page {
|
||||
},
|
||||
},
|
||||
summary = UI.Tab {
|
||||
tabTitle = 'Summary',
|
||||
title = 'Summary',
|
||||
grid = UI.ScrollingGrid {
|
||||
columns = {
|
||||
{ heading = 'Name', key = 'displayName' },
|
||||
@@ -256,7 +256,7 @@ function page:eventHandler(event)
|
||||
UI:quit()
|
||||
|
||||
elseif event.type == 'tab_activate' then
|
||||
config.activeTab = event.activated.tabTitle
|
||||
config.activeTab = event.activated.title
|
||||
Config.update('Sensor', config)
|
||||
end
|
||||
|
||||
@@ -264,7 +264,7 @@ function page:eventHandler(event)
|
||||
end
|
||||
|
||||
if config.activeTab then
|
||||
page.tabs:selectTab(Util.find(page.tabs.children, 'tabTitle', config.activeTab))
|
||||
page.tabs:selectTab(Util.find(page.tabs.children, 'title', config.activeTab))
|
||||
end
|
||||
|
||||
UI:setPage(page)
|
||||
|
||||
@@ -7,7 +7,7 @@ local config = Config.load('saver', {
|
||||
})
|
||||
|
||||
return UI.Tab {
|
||||
tabTitle = 'Screen Saver',
|
||||
title = 'Screen Saver',
|
||||
description = 'Screen saver',
|
||||
[1] = UI.Window {
|
||||
x = 2, y = 2, ex = -2, ey = 5,
|
||||
|
||||
@@ -7,7 +7,7 @@ local config = Config.load('secure', {
|
||||
})
|
||||
|
||||
local tab = UI.Tab {
|
||||
tabTitle = 'Secure',
|
||||
title = 'Secure',
|
||||
description = 'Secure options',
|
||||
[1] = UI.Window {
|
||||
x = 2, y = 2, ex = -2, ey = 5,
|
||||
|
||||
@@ -172,7 +172,7 @@ function lib.recurse(fromPath, toPath, options, origin, top)
|
||||
end
|
||||
end
|
||||
if mv then
|
||||
if fs.list(toReal)() then -- to is NOT empty
|
||||
if fs.exists(toPath) then -- to is NOT empty
|
||||
return nil, "cannot move '" .. fromPath .. "' to '" .. toPath .. "': Directory not empty"
|
||||
end
|
||||
status(verbose, fromPath, toPath)
|
||||
|
||||
@@ -7,7 +7,7 @@ local os = _G.os
|
||||
local config = Config.load('shop')
|
||||
|
||||
local shopTab = UI.Tab {
|
||||
tabTitle = 'Store',
|
||||
title = 'Store',
|
||||
index = 2,
|
||||
form = UI.Form {
|
||||
x = 2, ex = -2, y = 2, ey = -2,
|
||||
|
||||
@@ -9,7 +9,7 @@ if turtle then
|
||||
local config = Config.load('gps')
|
||||
|
||||
local gpsTab = UI.Tab {
|
||||
tabTitle = 'Home',
|
||||
title = 'Home',
|
||||
description = 'Turtle home location',
|
||||
labelText = UI.Text {
|
||||
x = 3, ex = -3, y = 2,
|
||||
|
||||
Reference in New Issue
Block a user