mirror of
https://github.com/kepler155c/opus
synced 2025-03-02 15:50:01 +00:00
scrolling windows
This commit is contained in:
parent
48f16ce2c7
commit
e25f4f9319
@ -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)
|
||||
|
@ -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()
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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')
|
||||
|
@ -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")
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user