mirror of https://github.com/kepler155c/opus
list mode for overview
This commit is contained in:
parent
3313fb986c
commit
fc1a308193
|
@ -1 +1,2 @@
|
|||
/ignore
|
||||
.project
|
||||
|
|
|
@ -18,6 +18,12 @@ local shell = _ENV.shell
|
|||
local term = _G.term
|
||||
local turtle = _G.turtle
|
||||
|
||||
--[[
|
||||
turtle: 39x13
|
||||
computer: 51x19
|
||||
pocket: 26x20
|
||||
]]
|
||||
|
||||
if not _ENV.multishell then
|
||||
error('multishell is required')
|
||||
end
|
||||
|
@ -110,6 +116,17 @@ local page = UI.Page {
|
|||
backgroundColor = colors.lightGray,
|
||||
newApp = UI.Button {
|
||||
text = '+', event = 'new',
|
||||
backgroundFocusColor = colors.lightGray,
|
||||
},
|
||||
mode = UI.Button {
|
||||
x = 3,
|
||||
text = '=', event = 'display_mode',
|
||||
backgroundFocusColor = colors.lightGray,
|
||||
},
|
||||
help = UI.Button {
|
||||
x = 5,
|
||||
text = '?', event = 'help',
|
||||
backgroundFocusColor = colors.lightGray,
|
||||
},
|
||||
--[[
|
||||
volume = UI.Button {
|
||||
|
@ -138,16 +155,16 @@ local page = UI.Page {
|
|||
required = true,
|
||||
},
|
||||
editIcon = UI.Button {
|
||||
x = 11, y = 9,
|
||||
x = 11, y = 6,
|
||||
text = 'Edit', event = 'editIcon', help = 'Edit icon file',
|
||||
},
|
||||
loadIcon = UI.Button {
|
||||
x = 18, y = 9,
|
||||
x = 11, y = 8,
|
||||
text = 'Load', event = 'loadIcon', help = 'Load icon file',
|
||||
},
|
||||
info = UI.TextArea {
|
||||
x = 11, y = 6, height = 2,
|
||||
value = 'magenta is transparent\n3 high - max width is 8'
|
||||
helpIcon = UI.Button {
|
||||
x = 11, y = 8,
|
||||
text = 'Load', event = 'loadIcon', help = 'Load icon file',
|
||||
},
|
||||
image = UI.NftImage {
|
||||
backgroundColor = colors.black,
|
||||
|
@ -312,25 +329,43 @@ function page.container:setCategory(categoryName, animate)
|
|||
local title = ellipsis(program.title, 8)
|
||||
|
||||
local width = math.max(icon.width + 2, #title + 2)
|
||||
table.insert(self.children, UI.Icon({
|
||||
width = width,
|
||||
image = UI.NftImage({
|
||||
x = math.floor((width - icon.width) / 2) + 1,
|
||||
image = icon,
|
||||
}),
|
||||
button = UI.Button({
|
||||
x = math.floor((width - #title - 2) / 2) + 1,
|
||||
y = 4,
|
||||
text = title,
|
||||
backgroundColor = self:getProperty('backgroundColor'),
|
||||
backgroundFocusColor = colors.gray,
|
||||
textColor = colors.white,
|
||||
textFocusColor = colors.white,
|
||||
width = #title + 2,
|
||||
event = 'button',
|
||||
app = program,
|
||||
}),
|
||||
}))
|
||||
if config.listMode then
|
||||
table.insert(self.children, UI.Icon {
|
||||
width = self.width - 2,
|
||||
height = 1,
|
||||
UI.Button {
|
||||
x = 1, ex = -1,
|
||||
text = program.title,
|
||||
centered = false,
|
||||
backgroundColor = self:getProperty('backgroundColor'),
|
||||
backgroundFocusColor = colors.gray,
|
||||
textColor = colors.white,
|
||||
textFocusColor = colors.white,
|
||||
event = 'button',
|
||||
app = program,
|
||||
}
|
||||
})
|
||||
else
|
||||
table.insert(self.children, UI.Icon({
|
||||
width = width,
|
||||
image = UI.NftImage({
|
||||
x = math.floor((width - icon.width) / 2) + 1,
|
||||
image = icon,
|
||||
}),
|
||||
button = UI.Button({
|
||||
x = math.floor((width - #title - 2) / 2) + 1,
|
||||
y = 4,
|
||||
text = title,
|
||||
backgroundColor = self:getProperty('backgroundColor'),
|
||||
backgroundFocusColor = colors.gray,
|
||||
textColor = colors.white,
|
||||
textFocusColor = colors.white,
|
||||
width = #title + 2,
|
||||
event = 'button',
|
||||
app = program,
|
||||
}),
|
||||
}))
|
||||
end
|
||||
end
|
||||
|
||||
local gutter = 2
|
||||
|
@ -383,7 +418,7 @@ function page.container:setCategory(categoryName, animate)
|
|||
col = col + child.width
|
||||
if col + self.children[k + 1].width + gutter - 2 > self.width then
|
||||
col = gutter
|
||||
row = row + 5
|
||||
row = row + (config.listMode and 1 or 5)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -452,6 +487,9 @@ function page:eventHandler(event)
|
|||
elseif event.type == 'network' then
|
||||
shell.switchTab(shell.openTab('network'))
|
||||
|
||||
elseif event.type == 'help' then
|
||||
shell.switchTab(shell.openTab('Help Overview'))
|
||||
|
||||
elseif event.type == 'focus_change' then
|
||||
if event.focused.parent.UIElement == 'Icon' then
|
||||
event.focused.parent:scrollIntoView()
|
||||
|
@ -486,6 +524,13 @@ function page:eventHandler(event)
|
|||
end
|
||||
self.editor:show({ category = category })
|
||||
|
||||
elseif event.type == 'display_mode' then
|
||||
config.listMode = not config.listMode
|
||||
Config.update('Overview', config)
|
||||
loadApplications()
|
||||
self:refresh()
|
||||
self:draw()
|
||||
|
||||
elseif event.type == 'edit' then
|
||||
local focused = page:getFocused()
|
||||
if focused.app then
|
||||
|
@ -493,7 +538,7 @@ function page:eventHandler(event)
|
|||
end
|
||||
|
||||
else
|
||||
UI.Page.eventHandler(self, event)
|
||||
return UI.Page.eventHandler(self, event)
|
||||
end
|
||||
return true
|
||||
end
|
||||
|
@ -595,10 +640,6 @@ function page.editor:eventHandler(event)
|
|||
return true
|
||||
end
|
||||
|
||||
UI:setPages({
|
||||
main = page,
|
||||
})
|
||||
|
||||
local function reload()
|
||||
loadApplications()
|
||||
page:refresh()
|
||||
|
|
|
@ -45,5 +45,6 @@ if settings then
|
|||
end
|
||||
end
|
||||
|
||||
return settingsTab
|
||||
-- this needs lots of work - currently only works with booleans
|
||||
--return settingsTab
|
||||
end
|
||||
|
|
|
@ -6,10 +6,11 @@ Shortcut keys
|
|||
* l: Lua application
|
||||
* f: Files
|
||||
* e: Edit an application (or right-click)
|
||||
* n: Network
|
||||
* control-n: Add a new application
|
||||
* delete: Delete an application
|
||||
|
||||
Adding a new application
|
||||
========================
|
||||
The run entry can be either a disk file or a URL.
|
||||
Icons must be in NFT format with a height of 3 and a width of 3 to 8 characters.
|
||||
Icons must be in NFT format with a height of 3 and a width of 3 to 8 characters. Magenta is used for transparency.
|
|
@ -77,6 +77,9 @@ function UI.Viewport:getViewArea()
|
|||
end
|
||||
|
||||
function UI.Viewport:eventHandler(event)
|
||||
if #self.lines <= self.height then
|
||||
return
|
||||
end
|
||||
if event.type == 'scroll_down' then
|
||||
self:setScrollPosition(self.offy + 1, self.offx)
|
||||
elseif event.type == 'scroll_up' then
|
||||
|
|
Loading…
Reference in New Issue