From 61c21823002324464c963ff86adabda31632235b Mon Sep 17 00:00:00 2001 From: Robert Jelic <36573031+NoryiE@users.noreply.github.com> Date: Thu, 13 Oct 2022 19:25:14 +0200 Subject: [PATCH] Small fixes - changed custom event "dynamicValueEvent" into "basalt_dynamicvalue" - fixed disabling autoscroll bug for frames - added custom event handler for custom basalt events (should also fix basalt_resize and basalt_reposition events on children objects) - fixed scrolling - Changed selectItem: wont trigger a onChange event anymore --- Basalt/Frame.lua | 38 +++++++++++++----------------------- Basalt/Object.lua | 38 +++++++++++++++++++++++++++--------- Basalt/libraries/utils.lua | 4 ++++ Basalt/main.lua | 2 +- Basalt/objects/Dropdown.lua | 4 ++-- Basalt/objects/List.lua | 8 ++++---- Basalt/objects/Menubar.lua | 4 ++-- Basalt/objects/Radio.lua | 4 ++-- Basalt/objects/Textfield.lua | 10 +++++----- 9 files changed, 63 insertions(+), 49 deletions(-) diff --git a/Basalt/Frame.lua b/Basalt/Frame.lua index 7b5ea76..775a988 100644 --- a/Basalt/Frame.lua +++ b/Basalt/Frame.lua @@ -240,11 +240,11 @@ return function(name, parent, pTerm, basalt) end return false end - + local math = math local function stringToNumber(str) - local ok, err = pcall(load("return " .. str)) + local ok, result = pcall(load("return " .. str, "", nil, {math=math})) if not(ok)then error(str.." is not a valid dynamic code") end - return load("return " .. str)() + return result end local function newDynamicValue(_, obj, str) @@ -328,7 +328,7 @@ return function(name, parent, pTerm, basalt) if (objects[index] ~= nil) then for _, value in pairs(objects[index]) do if (value.eventHandler ~= nil) then - value:eventHandler("dynamicValueEvent", self) + value:eventHandler("basalt_dynamicvalue", self) end end end @@ -341,12 +341,14 @@ return function(name, parent, pTerm, basalt) end local function calculateMaxScroll(self) - for _, value in pairs(objects) do - for _, b in pairs(value) do - if(b.getHeight~=nil)and(b.getY~=nil)then - local h, y = b:getHeight(), b:getY() - if (h + y - self:getHeight() > scrollAmount) then - scrollAmount = max(h + y - self:getHeight(), 0) + if(autoScroll)then + for _, value in pairs(objects) do + for _, b in pairs(value) do + if(b.getHeight~=nil)and(b.getY~=nil)then + local h, y = b:getHeight(), b:getY() + if (h + y - self:getHeight() ~= scrollAmount) then + scrollAmount = max(h + y - self:getHeight() - 1, 0) + end end end end @@ -398,8 +400,8 @@ return function(name, parent, pTerm, basalt) for _, index in pairs(objZIndex) do if (objects[index] ~= nil) then for _, value in pairs(objects[index]) do - if (value.eventHandler ~= nil) then - value:eventHandler("basalt_resize", value, self) + if (value.customEventHandler ~= nil) then + value:customEventHandler("basalt_resize", self) end end end @@ -425,15 +427,6 @@ return function(name, parent, pTerm, basalt) setPosition = function(self, x, y, rel) base.setPosition(self, x, y, rel) - for _, index in pairs(objZIndex) do - if (objects[index] ~= nil) then - for _, value in pairs(objects[index]) do - if (value.eventHandler ~= nil) then - value:eventHandler("basalt_reposition", value, self) - end - end - end - end self:recalculateDynamicValues() return self end; @@ -794,9 +787,6 @@ return function(name, parent, pTerm, basalt) self:mouseHandler(1, p2, p3, true) end end - if (event == "terminate")and(self.parent==nil)then - basalt.stop() - end end, mouseHandler = function(self, button, x, y, _, side) diff --git a/Basalt/Object.lua b/Basalt/Object.lua index e862bf5..c3a6431 100644 --- a/Basalt/Object.lua +++ b/Basalt/Object.lua @@ -195,11 +195,13 @@ return function(name) return self end; - setValue = function(self, _value) + setValue = function(self, _value, valueChangedHandler) if (value ~= _value) then value = _value self:updateDraw() - self:valueChangedHandler() + if(valueChangedHandler~=false)then + self:valueChangedHandler() + end end return self end; @@ -245,7 +247,7 @@ return function(name) end self.parent:recalculateDynamicValues() end - eventSystem:sendEvent("basalt_reposition", self) + self:customEventHandler("basalt_reposition") self:updateDraw() return self end; @@ -288,7 +290,7 @@ return function(name) end self.parent:recalculateDynamicValues() end - eventSystem:sendEvent("basalt_resize", self) + self:customEventHandler("basalt_resize") self:updateDraw() return self end; @@ -676,13 +678,25 @@ return function(name) for _,v in pairs(table.pack(...))do if(type(v)=="function")then self:registerEvent("key", v) - self:registerEvent("char", v) end end if(self.parent~=nil)then self.parent:addEvent("key", self) - self.parent:addEvent("char", self) activeEvents["key"] = true + end + end + return self + end; + + onChar = function(self, ...) + if(isEnabled)then + for _,v in pairs(table.pack(...))do + if(type(v)=="function")then + self:registerEvent("char", v) + end + end + if(self.parent~=nil)then + self.parent:addEvent("char", self) activeEvents["char"] = true end end @@ -882,7 +896,7 @@ return function(name) charHandler = function(self, char) if(isEnabled)and(isVisible)then if (self:isFocused()) then - local val = eventSystem:sendEvent("char", self, "char", char) + local val = eventSystem:sendEvent("char", self, "char", char) if(val==false)then return false end return true end @@ -894,8 +908,14 @@ return function(name) eventSystem:sendEvent("value_changed", self, value) end; - eventHandler = function(self, event, p1, p2, p3, p4) - local val = eventSystem:sendEvent("other_event", self, event, p1, p2, p3, p4) + eventHandler = function(self, event, ...) + local val = eventSystem:sendEvent("other_event", self, event, ...) + if(val~=nil)then return val end + return true + end; + + customEventHandler = function(self, event, ...) + local val = eventSystem:sendEvent(event, self, event, ...) if(val~=nil)then return val end return true end; diff --git a/Basalt/libraries/utils.lua b/Basalt/libraries/utils.lua index ed1ebb0..03b2d2c 100644 --- a/Basalt/libraries/utils.lua +++ b/Basalt/libraries/utils.lua @@ -188,6 +188,10 @@ uuid = function() return uuid() end, +array = function(arraysize, hashsize) + return load("return {" .. ("nil,"):rep(arraysize) .. ("[0]=nil,"):rep(hashsize) .. "}")() +end, + shrink = function(image, bgCol) local results, width, height, bgCol = {{}, {}, {}}, 0, #image + #image % 3, bgCol or colours.black for i = 1, #image do if #image[i] > width then width = #image[i] end end diff --git a/Basalt/main.lua b/Basalt/main.lua index 7cfd7cf..9c0a457 100644 --- a/Basalt/main.lua +++ b/Basalt/main.lua @@ -216,7 +216,7 @@ local function basaltUpdateEvent(event, ...) local mouseEvents = { mouse_click = mainFrame.mouseHandler, mouse_up = mainFrame.mouseUpHandler, - mouse_scroll = mainFrame.mouseScrollHandler, + mouse_scroll = mainFrame.scrollHandler, mouse_drag = mouseDragEvent, mouse_move = mouseMoveEvent, } diff --git a/Basalt/objects/Dropdown.lua b/Basalt/objects/Dropdown.lua index 6f90715..e3f3058 100644 --- a/Basalt/objects/Dropdown.lua +++ b/Basalt/objects/Dropdown.lua @@ -84,7 +84,7 @@ return function(name) clear = function(self) list = {} - self:setValue({}) + self:setValue({}, false) self:updateDraw() return self end; @@ -101,7 +101,7 @@ return function(name) end; selectItem = function(self, index) - self:setValue(list[index] or {}) + self:setValue(list[index] or {}, false) self:updateDraw() return self end; diff --git a/Basalt/objects/List.lua b/Basalt/objects/List.lua index 97bdae4..e1f3596 100644 --- a/Basalt/objects/List.lua +++ b/Basalt/objects/List.lua @@ -24,8 +24,8 @@ return function(name) addItem = function(self, text, bgCol, fgCol, ...) table.insert(list, { text = text, bgCol = bgCol or self.bgColor, fgCol = fgCol or self.fgColor, args = { ... } }) - if (#list == 1) then - self:setValue(list[1]) + if (#list <= 1) then + self:setValue(list[1], false) end self:updateDraw() return self @@ -66,7 +66,7 @@ return function(name) clear = function(self) list = {} - self:setValue({}) + self:setValue({}, false) self:updateDraw() return self end; @@ -83,7 +83,7 @@ return function(name) end; selectItem = function(self, index) - self:setValue(list[index] or {}) + self:setValue(list[index] or {}, false) self:updateDraw() return self end; diff --git a/Basalt/objects/Menubar.lua b/Basalt/objects/Menubar.lua index 2745783..76bc005 100644 --- a/Basalt/objects/Menubar.lua +++ b/Basalt/objects/Menubar.lua @@ -68,7 +68,7 @@ return function(name) clear = function(self) list = {} - self:setValue({}) + self:setValue({}, false) self:updateDraw() return self end; @@ -142,7 +142,7 @@ return function(name) end; selectItem = function(self, index) - self:setValue(list[index] or {}) + self:setValue(list[index] or {}, false) self:updateDraw() return self end; diff --git a/Basalt/objects/Radio.lua b/Basalt/objects/Radio.lua index b870c2e..1594a5b 100644 --- a/Basalt/objects/Radio.lua +++ b/Basalt/objects/Radio.lua @@ -77,7 +77,7 @@ return function(name) clear = function(self) list = {} - self:setValue({}) + self:setValue({}, false) self:updateDraw() return self end; @@ -94,7 +94,7 @@ return function(name) end; selectItem = function(self, index) - self:setValue(list[index] or {}) + self:setValue(list[index] or {}, false) self:updateDraw() return self end; diff --git a/Basalt/objects/Textfield.lua b/Basalt/objects/Textfield.lua index 29730a7..89827a3 100644 --- a/Basalt/objects/Textfield.lua +++ b/Basalt/objects/Textfield.lua @@ -3,7 +3,7 @@ local tHex = require("tHex") local log = require("basaltLogs") local xmlValue = require("utils").getValueFromXML -local rep = string.rep +local rep,find,gmatch,sub,len = string.rep,string.find,string.gmatch,string.sub,string.len return function(name) local base = Object(name) @@ -23,13 +23,13 @@ return function(name) local function stringGetPositions(str, word) local pos = {} if(str:len()>0)then - for w in string.gmatch(str, word)do - local s, e = string.find(str, w) + for w in gmatch(str, word)do + local s, e = find(str, w) if(s~=nil)and(e~=nil)then table.insert(pos,s) table.insert(pos,e) - local startL = string.sub(str, 1, (s-1)) - local endL = string.sub(str, e+1, str:len()) + local startL = sub(str, 1, (s-1)) + local endL = sub(str, e+1, str:len()) str = startL..(":"):rep(w:len())..endL end end