scrolling windows

This commit is contained in:
kepler155c@gmail.com 2016-12-14 13:54:13 -05:00
parent 48f16ce2c7
commit e25f4f9319
7 changed files with 87 additions and 97 deletions

View File

@ -261,6 +261,13 @@ function page:eventHandler(event)
event.focused.parent:scrollIntoView()
end
elseif event.type == 'tab_change' then
if event.current > event.last then
self.container:setTransition('left')
else
self.container:setTransition('right')
end
elseif event.type == 'refresh' then
applications = { }
Config.load('apps', applications)

View File

@ -6,23 +6,23 @@ local UI = require('ui')
multishell.setTitle(multishell.getCurrent(), 'Devices')
--[[ -- PeripheralsPage -- ]] --
local peripheralsPage = UI.Page({
grid = UI.ScrollingGrid({
local peripheralsPage = UI.Page {
grid = UI.ScrollingGrid {
columns = {
{ heading = 'Type', key = 'type' },
{ heading = 'Side', key = 'side' }
{ heading = 'Side', key = 'side' },
},
sortColumn = 'type',
height = UI.term.height - 1,
autospace = true,
}),
statusBar = UI.StatusBar({
},
statusBar = UI.StatusBar {
status = 'Select peripheral'
}),
},
accelerators = {
q = 'quit',
},
})
}
function peripheralsPage.grid:draw()
local sides = peripheral.getNames()
@ -40,7 +40,6 @@ function peripheralsPage.grid:draw()
end
function peripheralsPage:updatePeripherals()
if UI:getCurrentPage() == self then
self.grid:draw()
self:sync()
@ -59,29 +58,27 @@ function peripheralsPage:eventHandler(event)
end
--[[ -- MethodsPage -- ]] --
local methodsPage = UI.Page({
grid = UI.ScrollingGrid({
local methodsPage = UI.Page {
grid = UI.ScrollingGrid {
columns = {
{ heading = 'Name', key = 'name', width = UI.term.width }
},
sortColumn = 'name',
height = 7,
}),
container = UI.Window({
},
viewportConsole = UI.ViewportWindow {
y = 8,
height = UI.term.height-8,
viewportConsole = UI.ViewportWindow({
backgroundColor = colors.brown
}),
}),
statusBar = UI.StatusBar({
height = UI.term.height - 8,
backgroundColor = colors.brown,
},
statusBar = UI.StatusBar {
status = 'q to return',
}),
},
accelerators = {
q = 'back',
backspace = 'back',
},
})
}
function methodsPage:enable(p)
@ -103,6 +100,8 @@ function methodsPage:enable(p)
end
end
self.viewportConsole.offy = 0
self.grid:update()
self.grid:setIndex(1)
@ -110,31 +109,26 @@ function methodsPage:enable(p)
UI.Page.enable(self)
end
function methodsPage.container.viewportConsole:draw()
if methodsPage.grid:getSelected() then
methodsPage:drawMethodInfo(self, methodsPage.grid:getSelected())
end
end
function methodsPage:eventHandler(event)
if event.type == 'back' then
UI:setPage(peripheralsPage)
return true
elseif event.type == 'grid_focus_row' then
self.container.viewportConsole.height = 1
self.container.viewportConsole.offset = 0
self.container.viewportConsole.y = 1
self:drawMethodInfo(self.container.viewportConsole, event.selected)
self.viewportConsole.offy = 0
self.viewportConsole:draw()
end
return UI.Page.eventHandler(self, event)
end
function methodsPage:drawMethodInfo(c, method)
function methodsPage.viewportConsole:draw()
local c = self
local method = methodsPage.grid:getSelected()
c:clear()
c:setCursorPos(1, 1)
if method.noext then
c.cursorY = 2
c:print('No extended Information')
return 2
end
@ -189,10 +183,7 @@ function methodsPage:drawMethodInfo(c, method)
end
end
c.height = c.cursorY + 1
term.setBackgroundColor(colors.black)
return y
c.ymax = c.cursorY + 1
end
Event.addHandler('peripheral', function()

View File

@ -11,73 +11,79 @@ local env = {
aliases = shell.aliases(),
lua_path = LUA_PATH,
}
Config.load('multishell', env)
UI.TextEntry.defaults.backgroundFocusColor = colors.black
local systemPage = UI.Page({
local systemPage = UI.Page {
backgroundColor = colors.blue,
tabs = UI.Tabs({
pathTab = UI.Window({
tabs = UI.Tabs {
pathTab = UI.Window {
tabTitle = 'Path',
entry = UI.TextEntry({
y = 2, x = 2, limit = 256,
width = UI.term.width - 2,
entry = UI.TextEntry {
x = 2, y = 2, rex = -2,
limit = 256,
value = shell.path(),
shadowText = 'enter system path',
accelerators = {
enter = 'update_path',
},
}),
grid = UI.Grid({
},
grid = UI.Grid {
y = 4,
values = paths,
disableHeader = true,
columns = { { key = 'value' } },
autospace = true,
}),
}),
},
},
aliasTab = UI.Window({
aliasTab = UI.Window {
tabTitle = 'Aliases',
alias = UI.TextEntry({
y = 2, x = 2, width = UI.term.width - 2,
alias = UI.TextEntry {
x = 2, y = 2, rex = -2,
limit = 32,
shadowText = 'Alias',
}),
path = UI.TextEntry({
y = 3, x = 2, width = UI.term.width - 2, limit = 256,
},
path = UI.TextEntry {
y = 3, x = 2, rex = -2,
limit = 256,
shadowText = 'Program path',
accelerators = {
enter = 'new_alias',
},
}),
grid = UI.Grid({
y = 5, values = aliases, autospace = true,
},
grid = UI.Grid {
y = 5,
values = aliases,
autospace = true,
sortColumn = 'alias',
columns = {
{ heading = 'Alias', key = 'alias' },
{ heading = 'Program', key = 'path' },
},
sortColumn = 'alias',
accelerators = {
delete = 'delete_alias',
},
}),
}),
},
},
infoTab = UI.Window({
infoTab = UI.Window {
tabTitle = 'Info',
labelText = UI.Text({ y = 2, x = 3, value = 'Label' }),
label = UI.TextEntry({
y = 2, x = 9, width = UI.term.width - 12,
limit = 32, value = os.getComputerLabel(),
labelText = UI.Text {
x = 3, y = 2,
value = 'Label'
},
label = UI.TextEntry {
x = 9, y = 2, rex = -12,
limit = 32,
value = os.getComputerLabel(),
backgroundFocusColor = colors.black,
accelerators = {
enter = 'update_label',
},
}),
grid = UI.ScrollingGrid({
},
grid = UI.ScrollingGrid {
y = 4,
values = {
{ name = 'CC version', value = os.version() },
@ -93,15 +99,14 @@ local systemPage = UI.Page({
{ key = 'name', width = 12 },
{ key = 'value', width = UI.term.width - 15 },
},
}),
}),
}),
-- statusBar = UI.StatusBar(),
},
},
},
notification = UI.Notification(),
accelerators = {
q = 'quit',
},
})
}
function systemPage.tabs.pathTab.grid:draw()
self.values = { }
@ -120,10 +125,8 @@ function systemPage.tabs.pathTab:eventHandler(event)
self.grid:draw()
Config.update('multishell', env)
systemPage.notification:success('reboot to take effect')
else
return UI.Window.eventHandler(self, event)
return true
end
return true
end
function systemPage.tabs.aliasTab.grid:draw()
@ -144,6 +147,7 @@ function systemPage.tabs.aliasTab:eventHandler(event)
self.grid:draw()
Config.update('multishell', env)
systemPage.notification:success('reboot to take effect')
return true
elseif event.type == 'new_alias' then
env.aliases[self.alias.value] = self.path.value
@ -153,10 +157,8 @@ function systemPage.tabs.aliasTab:eventHandler(event)
self:setFocus(self.alias)
Config.update('multishell', env)
systemPage.notification:success('reboot to take effect')
else
return UI.Window.eventHandler(self, event)
return true
end
return true
end
function systemPage.tabs.infoTab:eventHandler(event)
@ -164,21 +166,15 @@ function systemPage.tabs.infoTab:eventHandler(event)
os.setComputerLabel(self.label.value)
systemPage.notification:success('Label updated')
return true
else
return UI.Window.eventHandler(self, event)
end
return true
end
function systemPage:eventHandler(event)
if event.type == 'quit' then
Event.exitPullEvents()
elseif event.type == 'tab_activate' then
event.activated:focusFirst()
--self.statusBar:setValue('')
--self.statusBar:draw()
else
return UI.Page.eventHandler(self, event)
end

View File

@ -811,6 +811,8 @@ local __actions = {
local nx = nextWord(tLines[y], x)
if nx then
x = nx
elseif x < #tLines[y] + 1 then
x = #tLines[y] + 1
elseif y < #tLines then
x = 1
y = y + 1

View File

@ -455,7 +455,7 @@ end)
local function startup()
local hasError
local function runDir(directory, open)
local function runDir(directory, desc, open)
if not fs.exists(directory) then
return
end
@ -464,8 +464,8 @@ local function startup()
table.sort(files)
for _,file in ipairs(files) do
print('Autorunning: ' .. file)
print(desc .. file)
os.sleep(0)
local result, err = open(directory .. '/' .. file)
if not result then
printError(err)
@ -474,7 +474,7 @@ local function startup()
end
end
runDir('/sys/extensions', shell.run)
runDir('/sys/extensions', '[ ext ] ', shell.run)
local overviewId = multishell.openTab({
path = '/apps/Overview.lua',
@ -484,8 +484,8 @@ local function startup()
})
overviewTab = tabs[overviewId]
runDir('/sys/services', shell.openHiddenTab)
runDir('/autorun', shell.run)
runDir('/sys/services', '[ svc ] ', shell.openHiddenTab)
runDir('/autorun', '[ aut ] ', shell.run)
if hasError then
error('An autorun program has errored')

View File

@ -14,7 +14,7 @@ local version = "Version 1.1.6"
-- Original code by Bomb Bloke
-- Modified to integrate with opus os
local calls, recTerm, oldTerm, arg, showInput, skipLast, lastDelay, curInput, callCount, callListCount = {{["delay"] = 0}}, {}, term.current(), {...}, false, false, 2, "", 1, 2
local calls, recTerm, oldTerm, arg, showInput, skipLast, lastDelay, curInput, callCount, callListCount = {{["delay"] = 0}}, {}, Util.shallowCopy(multishell.term), {...}, false, false, 2, "", 1, 2
local curBlink, oldBlink, curCalls, tTerm, buffer, colourNum, xPos, yPos, oldXPos, oldYPos, tCol, bCol, xSize, ySize = false, false, calls[1], {}, {}, {}, 1, 1, 1, 1, colours.white, colours.black, term.getSize()
local greys, buttons = {["0"] = true, ["7"] = true, ["8"] = true, ["f"] = true}, {"l", "r", "m"}
local charW, charH, chars, resp
@ -84,8 +84,6 @@ end
package = loadAPI('.recGif/package', getfenv(1))
GIF = loadAPI('.recGif/GIF', getfenv(1))
oldTerm = Util.shallowCopy(multishell.term)
local oldDir = shell.dir()
shell.setDir('.recGif')
shell.run("package get Y0eLUPtr")

View File

@ -1,6 +1,2 @@
local args = { ... }
local options = ''
for _,v in pairs(args) do
options = options .. ' ' .. v
end
shell.run('pastebin run sj4VMVJj' .. options)
local options = table.concat({ ... }, ' ')
shell.run('pastebin run sj4VMVJj ' .. options)