milo wip
This commit is contained in:
@@ -43,12 +43,17 @@ if (options.slot.value or options.shield.value) and
|
|||||||
end
|
end
|
||||||
|
|
||||||
local page = UI.Page {
|
local page = UI.Page {
|
||||||
menuBar = UI.MenuBar {
|
dummy = UI.Window {
|
||||||
buttons = {
|
x = 1, ex = -10, y = 1, height = 1,
|
||||||
{ text = 'Craft', event = 'craft' },
|
infoBar = UI.StatusBar {
|
||||||
{ text = 'Refresh', event = 'refresh', x = -9 },
|
backgroundColor = colors.lightGray,
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
refresh = UI.Button {
|
||||||
|
y = 1, x = -9,
|
||||||
|
event = 'refresh',
|
||||||
|
text = 'Refresh',
|
||||||
|
},
|
||||||
grid = UI.Grid {
|
grid = UI.Grid {
|
||||||
y = 2, ey = -2,
|
y = 2, ey = -2,
|
||||||
columns = {
|
columns = {
|
||||||
@@ -56,34 +61,49 @@ local page = UI.Page {
|
|||||||
{ heading = 'Name', key = 'displayName' },
|
{ heading = 'Name', key = 'displayName' },
|
||||||
},
|
},
|
||||||
sortColumn = 'displayName',
|
sortColumn = 'displayName',
|
||||||
|
help = '^(s)tack, ^(a)ll'
|
||||||
},
|
},
|
||||||
statusBar = UI.StatusBar {
|
statusBar = UI.Window {
|
||||||
|
y = -1,
|
||||||
filter = UI.TextEntry {
|
filter = UI.TextEntry {
|
||||||
x = 1, ex = -4,
|
x = 1, ex = -9,
|
||||||
limit = 50,
|
limit = 50,
|
||||||
shadowText = 'filter',
|
shadowText = 'filter',
|
||||||
shadowTextColor = colors.gray,
|
|
||||||
backgroundColor = colors.cyan,
|
backgroundColor = colors.cyan,
|
||||||
backgroundFocusColor = colors.cyan,
|
backgroundFocusColor = colors.cyan,
|
||||||
accelerators = {
|
accelerators = {
|
||||||
[ 'enter' ] = 'craft',
|
[ 'enter' ] = 'eject',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
amount = UI.TextEntry {
|
||||||
|
x = -8, ex = -4,
|
||||||
|
limit = 3,
|
||||||
|
shadowText = '1',
|
||||||
|
shadowTextColor = colors.gray,
|
||||||
|
backgroundColor = colors.black,
|
||||||
|
backgroundFocusColor = colors.black,
|
||||||
|
accelerators = {
|
||||||
|
[ 'enter' ] = 'eject_specified',
|
||||||
|
},
|
||||||
|
help = 'Specify an amount to send',
|
||||||
|
},
|
||||||
display = UI.Button {
|
display = UI.Button {
|
||||||
x = -3,
|
x = -3,
|
||||||
event = 'toggle_display',
|
event = 'toggle_display',
|
||||||
value = 0,
|
value = 0,
|
||||||
text = 'A',
|
text = 'A',
|
||||||
|
help = 'Toggle display mode',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
notification = UI.Notification(),
|
|
||||||
accelerators = {
|
accelerators = {
|
||||||
r = 'refresh',
|
r = 'refresh',
|
||||||
q = 'quit',
|
|
||||||
[ 'control-e' ] = 'eject',
|
|
||||||
[ 'control-r' ] = 'refresh',
|
[ 'control-r' ] = 'refresh',
|
||||||
|
[ 'control-e' ] = 'eject',
|
||||||
[ 'control-s' ] = 'eject_stack',
|
[ 'control-s' ] = 'eject_stack',
|
||||||
[ 'control-a' ] = 'eject_all',
|
[ 'control-a' ] = 'eject_all',
|
||||||
|
|
||||||
|
q = 'quit',
|
||||||
|
|
||||||
[ 'control-1' ] = 'eject_1',
|
[ 'control-1' ] = 'eject_1',
|
||||||
[ 'control-2' ] = 'eject_1',
|
[ 'control-2' ] = 'eject_1',
|
||||||
[ 'control-3' ] = 'eject_1',
|
[ 'control-3' ] = 'eject_1',
|
||||||
@@ -94,8 +114,6 @@ local page = UI.Page {
|
|||||||
[ 'control-8' ] = 'eject_1',
|
[ 'control-8' ] = 'eject_1',
|
||||||
[ 'control-9' ] = 'eject_1',
|
[ 'control-9' ] = 'eject_1',
|
||||||
[ 'control-0' ] = 'eject_1',
|
[ 'control-0' ] = 'eject_1',
|
||||||
[ 'control-m' ] = 'machines',
|
|
||||||
[ 'control-l' ] = 'resume',
|
|
||||||
},
|
},
|
||||||
displayMode = 0,
|
displayMode = 0,
|
||||||
}
|
}
|
||||||
@@ -121,14 +139,21 @@ local function filterItems(t, filter, displayMode)
|
|||||||
return t
|
return t
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function page:setStatus(status)
|
||||||
|
self.dummy.infoBar:setStatus(status)
|
||||||
|
self:sync()
|
||||||
|
end
|
||||||
|
|
||||||
function page:sendRequest(data)
|
function page:sendRequest(data)
|
||||||
local response
|
local response
|
||||||
|
|
||||||
debug(data)
|
debug(data)
|
||||||
sync(self, function()
|
sync(self, function()
|
||||||
|
self:sync()
|
||||||
local msg
|
local msg
|
||||||
for _ = 1, 2 do
|
for _ = 1, 2 do
|
||||||
if not socket or not socket.connected then
|
if not socket or not socket.connected then
|
||||||
|
self:setStatus('connecting ...')
|
||||||
socket, msg = Socket.connect(options.server.value, 4242)
|
socket, msg = Socket.connect(options.server.value, 4242)
|
||||||
if socket then
|
if socket then
|
||||||
socket:write(options.user.value)
|
socket:write(options.user.value)
|
||||||
@@ -138,13 +163,16 @@ debug(data)
|
|||||||
if socket:write(data) then
|
if socket:write(data) then
|
||||||
response = socket:read(2)
|
response = socket:read(2)
|
||||||
if response then
|
if response then
|
||||||
|
Event.onTimeout(2, function()
|
||||||
|
self:setStatus('')
|
||||||
|
end)
|
||||||
return
|
return
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
socket:close()
|
socket:close()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
self.notification:error(msg or 'Failed to connect')
|
self:setStatus(msg or 'Failed to connect')
|
||||||
end)
|
end)
|
||||||
debug('got response')
|
debug('got response')
|
||||||
return response
|
return response
|
||||||
@@ -180,9 +208,13 @@ function page:eventHandler(event)
|
|||||||
if event.type == 'quit' then
|
if event.type == 'quit' then
|
||||||
UI:exitPullEvents()
|
UI:exitPullEvents()
|
||||||
|
|
||||||
elseif event.type == 'eject' then
|
elseif event.type == 'focus_change' then
|
||||||
|
self.dummy.infoBar:setStatus(event.focused.help)
|
||||||
|
|
||||||
|
elseif event.type == 'eject' or event.type == 'grid_select' then
|
||||||
local item = self.grid:getSelected()
|
local item = self.grid:getSelected()
|
||||||
if item then
|
if item then
|
||||||
|
self:setStatus('requesting 1 ...')
|
||||||
local response = self:sendRequest({ request = 'transfer', item = item, count = 1 })
|
local response = self:sendRequest({ request = 'transfer', item = item, count = 1 })
|
||||||
item.count = response.count
|
item.count = response.count
|
||||||
self.grid:draw()
|
self.grid:draw()
|
||||||
@@ -191,6 +223,7 @@ function page:eventHandler(event)
|
|||||||
elseif event.type == 'eject_stack' then
|
elseif event.type == 'eject_stack' then
|
||||||
local item = self.grid:getSelected()
|
local item = self.grid:getSelected()
|
||||||
if item then
|
if item then
|
||||||
|
self:setStatus('requesting stack ...')
|
||||||
local response = self:sendRequest({ request = 'transfer', item = item, count = 64 })
|
local response = self:sendRequest({ request = 'transfer', item = item, count = 64 })
|
||||||
item.count = response.count
|
item.count = response.count
|
||||||
self.grid:draw()
|
self.grid:draw()
|
||||||
@@ -199,15 +232,31 @@ function page:eventHandler(event)
|
|||||||
elseif event.type == 'eject_all' then
|
elseif event.type == 'eject_all' then
|
||||||
local item = self.grid:getSelected()
|
local item = self.grid:getSelected()
|
||||||
if item then
|
if item then
|
||||||
|
self:setStatus('requesting all ...')
|
||||||
local response = self:sendRequest({ request = 'transfer', item = item, count = item.count })
|
local response = self:sendRequest({ request = 'transfer', item = item, count = item.count })
|
||||||
item.count = response.count
|
item.count = response.count
|
||||||
self.grid:draw()
|
self.grid:draw()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
elseif event.type == 'eject_specified' then
|
||||||
|
local item = self.grid:getSelected()
|
||||||
|
local count = tonumber(self.statusBar.amount.value)
|
||||||
|
if item and count then
|
||||||
|
self.statusBar.amount:reset()
|
||||||
|
self:setFocus(self.statusBar.filter)
|
||||||
|
self:setStatus('requesting ' .. count .. ' ...')
|
||||||
|
local response = self:sendRequest({ request = 'transfer', item = item, count = count })
|
||||||
|
item.count = response.count
|
||||||
|
self.grid:draw()
|
||||||
|
else
|
||||||
|
self:setStatus('nope ...')
|
||||||
|
end
|
||||||
|
|
||||||
elseif event.type == 'refresh' then
|
elseif event.type == 'refresh' then
|
||||||
|
self:setStatus('updating ...')
|
||||||
self:refresh()
|
self:refresh()
|
||||||
self.grid:draw()
|
self.grid:draw()
|
||||||
self.statusBar.filter:focus()
|
self:setFocus(self.statusBar.filter)
|
||||||
|
|
||||||
elseif event.type == 'toggle_display' then
|
elseif event.type == 'toggle_display' then
|
||||||
local values = {
|
local values = {
|
||||||
@@ -223,14 +272,13 @@ function page:eventHandler(event)
|
|||||||
self:applyFilter()
|
self:applyFilter()
|
||||||
self.grid:draw()
|
self.grid:draw()
|
||||||
|
|
||||||
elseif event.type == 'text_change' then
|
elseif event.type == 'text_change' and event.element == self.statusBar.filter then
|
||||||
self.filter = event.text
|
self.filter = event.text
|
||||||
if #self.filter == 0 then
|
if #self.filter == 0 then
|
||||||
self.filter = nil
|
self.filter = nil
|
||||||
end
|
end
|
||||||
self:applyFilter()
|
self:applyFilter()
|
||||||
self.grid:draw()
|
self.grid:draw()
|
||||||
self.statusBar.filter:focus()
|
|
||||||
|
|
||||||
else
|
else
|
||||||
UI.Page.eventHandler(self, event)
|
UI.Page.eventHandler(self, event)
|
||||||
|
|||||||
Reference in New Issue
Block a user