2019-03-28 11:29:01 +00:00
|
|
|
local Config = require('config')
|
|
|
|
local UI = require('ui')
|
|
|
|
local Util = require('util')
|
|
|
|
|
|
|
|
local colors = _G.colors
|
|
|
|
local os = _G.os
|
|
|
|
|
|
|
|
local config = Config.load('shellprompt')
|
|
|
|
|
|
|
|
local allColors = { }
|
|
|
|
for k,v in pairs(colors) do
|
2019-06-18 19:19:24 +00:00
|
|
|
if type(v) == 'number' then
|
|
|
|
table.insert(allColors, { name = k, value = v })
|
|
|
|
end
|
2019-03-28 11:29:01 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
local defaults = {
|
2019-06-18 19:19:24 +00:00
|
|
|
textColor = colors.white,
|
|
|
|
commandTextColor = colors.yellow,
|
|
|
|
directoryTextColor = colors.orange,
|
|
|
|
directoryBackgroundColor = colors.black,
|
|
|
|
promptTextColor = colors.blue,
|
|
|
|
promptBackgroundColor = colors.black,
|
|
|
|
directoryColor = colors.green,
|
|
|
|
fileColor = colors.white,
|
|
|
|
backgroundColor = colors.black,
|
2019-03-28 11:29:01 +00:00
|
|
|
}
|
|
|
|
local _colors = config.color or Util.shallowCopy(defaults)
|
|
|
|
|
|
|
|
local allSettings = { }
|
|
|
|
for k, v in pairs(defaults) do
|
2019-06-18 19:19:24 +00:00
|
|
|
table.insert(allSettings, { name = k })
|
2019-03-28 11:29:01 +00:00
|
|
|
end
|
|
|
|
|
2019-03-28 11:39:34 +00:00
|
|
|
-- temp
|
|
|
|
if not _colors.backgroundColor then
|
2019-06-18 19:19:24 +00:00
|
|
|
_colors.backgroundColor = colors.black
|
|
|
|
_colors.fileColor = colors.white
|
2019-03-28 11:39:34 +00:00
|
|
|
end
|
|
|
|
|
2019-03-28 11:29:01 +00:00
|
|
|
local tab = UI.Tab {
|
|
|
|
tabTitle = 'Shell',
|
2019-06-18 19:19:24 +00:00
|
|
|
description = 'Shell options',
|
|
|
|
grid1 = UI.ScrollingGrid {
|
|
|
|
y = 2, ey = -10, x = 3, ex = -16,
|
2019-03-28 11:29:01 +00:00
|
|
|
disableHeader = true,
|
2019-06-18 19:19:24 +00:00
|
|
|
columns = { { key = 'name' } },
|
|
|
|
values = allSettings,
|
|
|
|
sortColumn = 'name',
|
2019-03-28 11:29:01 +00:00
|
|
|
},
|
2019-06-18 19:19:24 +00:00
|
|
|
grid2 = UI.ScrollingGrid {
|
|
|
|
y = 2, ey = -10, x = -14, ex = -3,
|
2019-03-28 11:29:01 +00:00
|
|
|
disableHeader = true,
|
|
|
|
columns = { { key = 'name' } },
|
2019-06-18 19:19:24 +00:00
|
|
|
values = allColors,
|
|
|
|
sortColumn = 'name',
|
|
|
|
},
|
|
|
|
directoryLabel = UI.Text {
|
|
|
|
x = 2, y = -2,
|
|
|
|
value = 'Display directory',
|
|
|
|
},
|
|
|
|
directory = UI.Checkbox {
|
|
|
|
x = 20, y = -2,
|
|
|
|
value = config.displayDirectory
|
|
|
|
},
|
|
|
|
reset = UI.Button {
|
|
|
|
x = -18, y = -2,
|
|
|
|
text = 'Reset',
|
|
|
|
event = 'reset',
|
|
|
|
},
|
|
|
|
button = UI.Button {
|
|
|
|
x = -9, y = -2,
|
|
|
|
text = 'Update',
|
|
|
|
event = 'update',
|
|
|
|
},
|
|
|
|
display = UI.Window {
|
|
|
|
x = 3, ex = -3, y = -8, height = 5,
|
2019-03-28 11:29:01 +00:00
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
function tab.grid2:getRowTextColor(row)
|
2019-06-18 19:19:24 +00:00
|
|
|
local selected = tab.grid1:getSelected()
|
|
|
|
if _colors[selected.name] == row.value then
|
|
|
|
return colors.yellow
|
|
|
|
end
|
|
|
|
return UI.Grid.getRowTextColor(self, row)
|
2019-03-28 11:29:01 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function tab.display:draw()
|
2019-06-18 19:19:24 +00:00
|
|
|
self:clear(_colors.backgroundColor)
|
|
|
|
local offset = 0
|
|
|
|
if config.displayDirectory then
|
|
|
|
self:write(1, 1,
|
|
|
|
'==' .. os.getComputerLabel() .. ':/dir/etc',
|
|
|
|
_colors.directoryBackgroundColor, _colors.directoryTextColor)
|
|
|
|
offset = 1
|
|
|
|
end
|
|
|
|
|
|
|
|
self:write(1, 1 + offset, '$ ',
|
|
|
|
_colors.promptBackgroundColor, _colors.promptTextColor)
|
|
|
|
|
|
|
|
self:write(3, 1 + offset, 'ls /',
|
|
|
|
_colors.backgroundColor, _colors.commandTextColor)
|
|
|
|
|
|
|
|
self:write(1, 2 + offset, 'sys usr',
|
|
|
|
_colors.backgroundColor, _colors.directoryColor)
|
|
|
|
|
|
|
|
self:write(1, 3 + offset, 'startup',
|
|
|
|
_colors.backgroundColor, _colors.fileColor)
|
2019-03-28 11:29:01 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
function tab:eventHandler(event)
|
2019-06-18 19:19:24 +00:00
|
|
|
if event.type =='checkbox_change' then
|
|
|
|
config.displayDirectory = not not event.checked
|
|
|
|
self.display:draw()
|
2019-03-28 11:29:01 +00:00
|
|
|
|
2019-06-18 19:19:24 +00:00
|
|
|
elseif event.type == 'grid_focus_row' and event.element == self.grid1 then
|
|
|
|
self.grid2:draw()
|
2019-03-28 11:29:01 +00:00
|
|
|
|
2019-06-18 19:19:24 +00:00
|
|
|
elseif event.type == 'grid_select' and event.element == self.grid2 then
|
|
|
|
_colors[tab.grid1:getSelected().name] = event.selected.value
|
|
|
|
self.display:draw()
|
|
|
|
self.grid2:draw()
|
2019-03-28 11:29:01 +00:00
|
|
|
|
2019-06-18 19:19:24 +00:00
|
|
|
elseif event.type == 'reset' then
|
|
|
|
config.color = defaults
|
|
|
|
config.displayDirectory = true
|
|
|
|
self.directory.value = true
|
|
|
|
_colors = Util.shallowCopy(defaults)
|
2019-03-28 11:29:01 +00:00
|
|
|
|
2019-06-18 19:19:24 +00:00
|
|
|
Config.update('shellprompt', config)
|
|
|
|
self:draw()
|
2019-03-28 11:29:01 +00:00
|
|
|
|
2019-06-18 19:19:24 +00:00
|
|
|
elseif event.type == 'update' then
|
|
|
|
config.color = _colors
|
|
|
|
Config.update('shellprompt', config)
|
2019-03-28 11:29:01 +00:00
|
|
|
|
2019-06-18 19:19:24 +00:00
|
|
|
end
|
|
|
|
return UI.Tab.eventHandler(self, event)
|
2019-03-28 11:29:01 +00:00
|
|
|
end
|
|
|
|
|
|
|
|
return tab
|