Skip to content

Instantly share code, notes, and snippets.

@AmandaCameron
Created May 15, 2015 14:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AmandaCameron/80fe275d9b37d5154bbb to your computer and use it in GitHub Desktop.
Save AmandaCameron/80fe275d9b37d5154bbb to your computer and use it in GitHub Desktop.
os.loadAPI("__LIB__/veek/veek")
veek.load_api("__LIB__/veek/gui")
local side = ...
local app = kidven.new('veek-app')
local search = kidven.new('veek-search', term.getSize())
local p = peripheral.wrap(side)
if not p.listSources or not p.listSources().inventory then
printError("Must expose an inventory.")
return
end
local function attribify(str)
local skip = false
local ret = str
return ret
end
local ItemDetails = {}
function ItemDetails:init(data)
self.veek_container:init(1, 1, 35, 5)
self.data = data
end
function ItemDetails:show()
self:reflow()
app:add(self)
app:select(self)
end
function ItemDetails:hide()
app:remove(self)
app:select(search)
end
function ItemDetails:add_collection(name, size)
local ret = kidven.new('veek-collection', name, 29, size)
ret:move(2, self.veek_widget.height + 1)
self:add(ret)
self:resize(35, self.veek_widget.height + ret.veek_widget.height + 1)
return ret
end
function ItemDetails:reflow()
self:add(kidven.new('veek-label', 2, 2, self.data.display_name, 33))
self:add(kidven.new('veek-label', 2, 4, 'Quantity: ' .. self.data.qty))
local details_btn = kidven.new('veek-button', 25, 4, 'Details', 9)
self:add(details_btn)
self.coll_y = 6
if self.data.energy_te and self.data.energy_te.maxEnergyStored > 0 then
local coll = self:add_collection('Power', 1)
local energy = kidven.new('veek-progress-bar', 1, 1, 29)
energy:set_progress(self.data.energy_te.energyStored / self.data.energy_te.maxEnergyStored)
coll:add(energy)
end
if self.data.computer then
local coll = self:add_collection('Computer', 2)
coll:add(kidven.new('veek-label', 1, 1, "Name: " .. (self.data.computer.label or 'None Assigned'), coll.veek_widget.width - 8))
coll:add(kidven.new('veek-label', 1, 2, "ID: " .. (self.data.computer.id or 'None Assigned'), coll.veek_widget.width - 8))
elseif self.data.disk then
local coll = self:add_collection('Disc', 1)
local label = kidven.new('veek-label', 2, 1, 'Label: ' .. self.data.disk.label, 29)
coll:add(label)
end
--[[
local oredict_entries = {}
for k, _ in pairs(self.data.ore_dict) do table.insert(oredict_entries, k) end
if #oredict_entries > 0 then
local ore_dict = self:add_collection('Ore Dict Entries', #oredict_entries)
for y, name in ipairs(oredict_entries) do
ore_dict:add(kidven.new('veek-label', 1, y, name))
end
end
]]--
self.veek_widget.x = app.main_window.canvas.width / 2 - self.veek_widget.width / 2
self.veek_widget.y = app.main_window.canvas.height / 2 - self.veek_widget.height / 2
end
function ItemDetails:key(kc)
if kc == keys.backspace then
self:hide()
return true
end
return self.veek_container:key(kc)
end
function ItemDetails:blur()
self.veek_container:blur()
self:hide()
end
kidven.register('item-details', ItemDetails, 'veek-container')
app:subscribe('gui.search.input', function(_, id, terms)
terms = terms:lower()
search.results:clear()
for _, item in pairs(p.getAllStacks()) do
local ok, err = pcall(function()
if item.display_name:lower():find(terms) then
local list_item = kidven.new('veek-list-item', attribify(item.display_name))
search.results:add(list_item)
list_item.data = item
end
end)
end
end)
app:subscribe('gui.search.selected', function(_, id, item)
if not item then
return
end
local ok, err = pcall(function()
local height = 3
if item.data.energy_te and item.data.energy_te.maxEnergyStored > 0 then
height = height + 2
end
if item.data.computer then
height = height + 5
elseif item.data.disk then
height = height + 2
end
--local window = app:new_window(item.data.display_name, 35, height)
local window = kidven.new('item-details', item.data)
app:subscribe('gui.button.pressed', function(_, id)
if id == details_btn:cast('veek-widget').id then
local details_win = app:new_window('Details', 35, 5)
details_win:add_flag('closable')
details_win:add(kidven.new('veek-label', 2, 2, 'Basic Stats:'))
details_win:add(kidven.new('veek-label', 4, 3, 'Mod: ' .. item.data.mod_id, 30))
details_win:add(kidven.new('veek-label', 4, 4, 'Name: ' .. item.data.name, 30))
local y = 7
for name, _ in pairs(item.data.ore_dict) do
details_win:add(kidven.new('veek-label', 4, y, name, 30))
y = y + 1
end
if y > 7 then
details_win:add(kidven.new('veek-label', 2, 6, 'Ore Dict:'))
details_win:resize(35, y + 2)
end
app:subscribe('window.closed', function(_, id)
if id == details_win.id then
details_win:hide()
end
end)
end
end)
window:show()
end)
if not ok then
local err_window = app:new_window('Error', 35, 3)
err_window:add_flag('closable')
err_window:add(kidven.new('veek-label', 2, 2, err))
app:subscribe('window.closed', function(_, id)
err_window:hide()
end)
end
end)
app:add(search)
app:main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment