From 64ec8c82d301639bc397aafe69dd74974b8161ca Mon Sep 17 00:00:00 2001 From: "kepler155c@gmail.com" Date: Wed, 13 Nov 2019 14:24:54 -0700 Subject: [PATCH] properly handle empty text entry fields (including transformations) --- builder/builder.lua | 2 +- ccemux/system/ccemux.lua | 33 +++++++++++++++++++-------------- common/SoundPlayer.lua | 32 ++++++++++++++++---------------- lzwfs/system/lzwfs.lua | 2 +- milo/MiloRemote.lua | 2 +- milo/core/listing.lua | 2 +- milo/plugins/item/manageTab.lua | 4 ++-- milo/plugins/remote/setup.lua | 4 ++-- milo/plugins/storageView.lua | 4 ++-- screenSaver/system/saver.lua | 12 ++++++++---- secure/system/secure.lua | 12 ++++++++---- swshop/shopConfig.lua | 4 ++-- swshop/shopTab.lua | 2 +- 13 files changed, 64 insertions(+), 51 deletions(-) diff --git a/builder/builder.lua b/builder/builder.lua index a2a5138..0c39cb8 100644 --- a/builder/builder.lua +++ b/builder/builder.lua @@ -276,7 +276,7 @@ function substitutionPage:eventHandler(event) self.info:draw() elseif event.type == 'text_change' then - local text = event.text + local text = event.text or '' if #text == 0 then self.grid.values = self.allItems else diff --git a/ccemux/system/ccemux.lua b/ccemux/system/ccemux.lua index c62dd0f..0948583 100644 --- a/ccemux/system/ccemux.lua +++ b/ccemux/system/ccemux.lua @@ -33,6 +33,7 @@ local tab = UI.Tab { shadowText = 'id', width = 5, limit = 3, + transform = 'number', }, add = UI.Button { x = 28, y = 3, @@ -78,23 +79,27 @@ end function tab:eventHandler(event) if event.type == 'form_complete' then - ccemux.detach(event.values.side) - ccemux.attach(event.values.side, event.values.type) + if event.values.type == 'disk_drive' and not event.values.drive_id then + self:emit({ type = 'error_message', message = 'Invalid drive ID' }) + else + ccemux.detach(event.values.side) + ccemux.attach(event.values.side, event.values.type) - local config = Config.load('ccemux') - config[event.values.side] = { - type = event.values.type - } - if event.values.type == 'disk_drive' and tonumber(event.values.drive_id) then - config[event.values.side].args = { - id = tonumber(event.values.drive_id) + local config = Config.load('ccemux') + config[event.values.side] = { + type = event.values.type } - end - Config.update('ccemux', config) - self:updatePeripherals(config) - self.grid:draw() + if event.values.type == 'disk_drive' then + config[event.values.side].args = { + id = event.values.drive_id + } + end + Config.update('ccemux', config) + self:updatePeripherals(config) + self.grid:draw() - self:emit({ type = 'success_message', message = 'Attached' }) + self:emit({ type = 'success_message', message = 'Attached' }) + end elseif event.type == 'choice_change' then if event.element == self.form.ptype then diff --git a/common/SoundPlayer.lua b/common/SoundPlayer.lua index 459259e..db69f40 100644 --- a/common/SoundPlayer.lua +++ b/common/SoundPlayer.lua @@ -5,13 +5,13 @@ local Util = require('opus.util') local peripheral = _G.peripheral if not peripheral.find('speaker') then - error('No speaker attached') + error('No speaker attached') end local rawSounds = Util.readLines('packages/games/etc/sounds.txt') or error('Unable to read sounds file') local sounds = { } for _, s in pairs(rawSounds) do - table.insert(sounds, { name = s }) + table.insert(sounds, { name = s }) end UI:configure('SoundPlayer', ...) @@ -25,21 +25,21 @@ local page = UI.Page { x = 10, y = 2, ex = -3, limit = 32, }, - grid = UI.ScrollingGrid { + grid = UI.ScrollingGrid { y = 4, - columns = { - { heading = 'Name', key = 'name' }, - }, - values = sounds, - }, + columns = { + { heading = 'Name', key = 'name' }, + }, + values = sounds, + }, } function page:eventHandler(event) - if event.type == 'grid_select' then - Sound.play(event.selected.name) + if event.type == 'grid_select' then + Sound.play(event.selected.name) elseif event.type == 'text_change' then - if #event.text == 0 then + if not event.text then self.grid.values = sounds else self.grid.values = { } @@ -51,12 +51,12 @@ function page:eventHandler(event) end self.grid:update() self.grid:setIndex(1) - self.grid:draw() + self.grid:draw() - else - return UI.Page.eventHandler(self, event) - end - return true + else + return UI.Page.eventHandler(self, event) + end + return true end UI:setPage(page) diff --git a/lzwfs/system/lzwfs.lua b/lzwfs/system/lzwfs.lua index edeff99..2c76f30 100644 --- a/lzwfs/system/lzwfs.lua +++ b/lzwfs/system/lzwfs.lua @@ -85,7 +85,7 @@ local function rewriteFiles(p) end function tab:eventHandler(event) - if event.type == 'add_path' then + if event.type == 'add_path' and self.entry.value then table.insert(self.grid.values, { value = self.entry.value, }) diff --git a/milo/MiloRemote.lua b/milo/MiloRemote.lua index 27aecd5..e85de5c 100644 --- a/milo/MiloRemote.lua +++ b/milo/MiloRemote.lua @@ -246,7 +246,7 @@ function page:eventHandler(event) Config.update('miloRemote', context.state) elseif event.type == 'text_change' and event.element == self.statusBar.filter then - self.filter = event.text + self.filter = event.text or '' if #self.filter == 0 then self.filter = nil end diff --git a/milo/core/listing.lua b/milo/core/listing.lua index 2a6eeea..6a2d9c4 100644 --- a/milo/core/listing.lua +++ b/milo/core/listing.lua @@ -272,7 +272,7 @@ function page:eventHandler(event) end elseif event.type == 'text_change' and event.element == self.statusBar.filter then - self.filter = event.text + self.filter = event.text or '' if #self.filter == 0 then self.filter = nil end diff --git a/milo/plugins/item/manageTab.lua b/milo/plugins/item/manageTab.lua index f7db7b5..2df0a13 100644 --- a/milo/plugins/item/manageTab.lua +++ b/milo/plugins/item/manageTab.lua @@ -21,12 +21,12 @@ local manageTab = UI.Tab { [2] = UI.TextEntry { width = 7, formLabel = 'Min', formKey = 'low', help = 'Craft if below min', - validate = 'numeric', + transform = 'number', }, [3] = UI.TextEntry { width = 7, formLabel = 'Max', formKey = 'limit', help = 'Send to trash if above max', - validate = 'numeric', + transform = 'number', }, [4] = UI.Checkbox { formLabel = 'Ignore Dmg', formKey = 'ignoreDamage', diff --git a/milo/plugins/remote/setup.lua b/milo/plugins/remote/setup.lua index 3ba5439..5d12d21 100644 --- a/milo/plugins/remote/setup.lua +++ b/milo/plugins/remote/setup.lua @@ -21,7 +21,7 @@ local setup = UI.SlideOut { help = 'ID for the server', shadowText = 'Milo server ID', limit = 6, - validate = 'numeric', + transform = 'number', required = true, }, [2] = UI.TextEntry { @@ -29,7 +29,7 @@ local setup = UI.SlideOut { help = 'Use a slot for sending to storage', shadowText = 'Inventory slot #', limit = 5, - validate = 'numeric', + transform = 'number', required = false, }, [3] = UI.Checkbox { diff --git a/milo/plugins/storageView.lua b/milo/plugins/storageView.lua index 50a6788..b1d51c2 100644 --- a/milo/plugins/storageView.lua +++ b/milo/plugins/storageView.lua @@ -15,14 +15,14 @@ local storageView = UI.WizardPage { formLabel = 'Priority', formKey = 'priority', help = 'Larger values get precedence', limit = 4, - validate = 'numeric', + transform = 'number', shadowText = 'Numeric priority', }, [2] = UI.TextEntry { formLabel = 'Refresh', formKey = 'refreshInterval', shadowText = 'seconds between refresh', limit = 4, - validate = 'numeric', + tranform = 'number', help = 'Refresh periodically', }, [3] = UI.TextArea { diff --git a/screenSaver/system/saver.lua b/screenSaver/system/saver.lua index 87e3b5d..b8fa7a3 100644 --- a/screenSaver/system/saver.lua +++ b/screenSaver/system/saver.lua @@ -42,11 +42,15 @@ function tab:eventHandler(event) config.enabled = not not event.checked elseif event.type == 'update' then - config.timeout = self.timeout.value - Config.update('saver', config) + if self.timeout.value then + config.timeout = self.timeout.value + Config.update('saver', config) - self:emit({ type = 'success_message', message = 'Settings updated' }) - os.queueEvent('config_update', 'saver', config) + self:emit({ type = 'success_message', message = 'Settings updated' }) + os.queueEvent('config_update', 'saver', config) + else + self:emit({ type = 'error_message', message = 'Invalid timeout' }) + end end return UI.Tab.eventHandler(self, event) end diff --git a/secure/system/secure.lua b/secure/system/secure.lua index d2d6ba9..113ad9b 100644 --- a/secure/system/secure.lua +++ b/secure/system/secure.lua @@ -42,11 +42,15 @@ function tab:eventHandler(event) config.enabled = not not event.checked elseif event.type == 'update' then - config.timeout = self.timeout.value - Config.update('secure', config) + if self.timeout.value then + config.timeout = self.timeout.value + Config.update('secure', config) - self:emit({ type = 'success_message', message = 'Settings updated' }) - os.queueEvent('config_update', 'secure', config) + self:emit({ type = 'success_message', message = 'Settings updated' }) + os.queueEvent('config_update', 'secure', config) + else + self:emit({ type = 'error_message', message = 'Invalid timeout' }) + end end return UI.Tab.eventHandler(self, event) end diff --git a/swshop/shopConfig.lua b/swshop/shopConfig.lua index 7d65fad..958a86d 100644 --- a/swshop/shopConfig.lua +++ b/swshop/shopConfig.lua @@ -106,7 +106,7 @@ local passwordPage = UI.WizardPage { } local function makeAddress(text, isPrivateKey) - local privKey = text + local privKey = text or '' if not isPrivateKey then privKey = Krist.toKristWalletFormat(privKey) end @@ -116,7 +116,7 @@ end function passwordPage.form:eventHandler(event) if (event.type == 'text_change' and event.element.pass) or (event.type == 'checkbox_change' and event.element.ispkey) then - self.passEntry.shadowText = self.pkeyCheck.value and 'Private key' or 'Password' + self.passEntry.shadowText = self.pkeyCheck.value and 'Private key' or 'Password' self.preview.value = makeAddress(self.passEntry.value, self.pkeyCheck.value) self:draw() end diff --git a/swshop/shopTab.lua b/swshop/shopTab.lua index 169d6ee..6bfabb5 100644 --- a/swshop/shopTab.lua +++ b/swshop/shopTab.lua @@ -25,7 +25,7 @@ local shopTab = UI.Tab { formLabel = 'Price', formKey = 'price', help = 'Per item cost', required = true, - validate = 'numeric', + transform = 'number', }, [3] = UI.TextEntry { limit = 64,