--- Adds a button handler local mod_gui = require 'mod-gui' local Gui = require './core' local Button = { config={}, clean_names={}, _prototype=Gui._extend_prototype{ on_click = Gui._new_event_adder('on_click'), on_left_click = Gui._new_event_adder('on_left_click'), on_right_click = Gui._new_event_adder('on_right_click'), } } function Button.new_button(name) local self = Gui._new_define(Button._prototype) self.draw_data.type = 'button' self.draw_data.style = mod_gui.button_style if name then self:debug_name(name) end Gui.on_click(self.name,function(event) local mouse_button = event.button local keys = {alt=event.alt,control=event.control,shift=event.shift} event.keys = keys if self.post_authenticator then if not self.post_authenticator(event.player,self.clean_name or self.name) then return end end if mouse_button == defines.mouse_button_type.left and self.events.on_left_click then self.events.on_left_click(event.player,event.element,event) elseif mouse_button == defines.mouse_button_type.right and self.events.on_right_click then self.events.on_right_click(event.player,event.element,event) end if self.mouse_button_filter and not self.mouse_button_filter[mouse_button] then return end if self.key_button_filter then for key,state in pairs(self.key_button_filter) do if state and not keys[key] then return end end end if self.events.on_click then self.events.on_click(event.player,event.element,event) end end) return self end function Button._prototype:set_sprites(sprite,hovered_sprite,clicked_sprite) self.draw_data.type = 'sprite-button' self.draw_data.sprite = sprite self.draw_data.hovered_sprite = hovered_sprite self.draw_data.clicked_sprite = clicked_sprite return self end function Button._prototype:set_click_filter(filter,...) if type(filter) == 'string' then filter = {[filter]=true} for _,v in pairs({...}) do filter[v] = true end end for k,v in pairs(filter) do if type(v) == 'string' then filter[k] = defines.mouse_button_type[v] end end self.mouse_button_filter = filter return self end function Button._prototype:set_key_filter(filter,...) if type(filter) == 'string' then filter = {[filter]=true} for _,v in pairs({...}) do filter[v] = true end end self.key_button_filter = filter return self end return Button