Added Drop Down

This commit is contained in:
Cooldude2606
2017-12-16 21:02:28 +00:00
parent 658366249f
commit a0748a3af0
2 changed files with 62 additions and 7 deletions

View File

@@ -59,6 +59,24 @@ function inputs._input:draw(root)
local success, err = pcall(self.data._start,player,root)
if success then data.value = err else error(err) end
return root.add(data)
elseif is_type(self.data._index,'function') then
local data = table.deepcopy(self.draw_data)
local success, err = pcall(self.data._index,player,root)
if success then data.selected_index = err else error(err) end
if is_type(self.data._items,'function') then
local success, err = pcall(self.data._items,player,root)
if success then data.items = err else error(err) end
end
return root.add(data)
elseif is_type(self.data._items,'function') then
local data = table.deepcopy(self.draw_data)
local success, err = pcall(self.data._items,player,root)
if success then data.items = err else error(err) end
if is_type(self.data._index,'function') then
local success, err = pcall(self.data._index,player,root)
if success then data.selected_index = err else error(err) end
end
return root.add(data)
else
return root.add(self.draw_data)
end
@@ -115,6 +133,7 @@ Event.register(inputs.events.elem,inputs._event_handler)
Event.register(inputs.events.state,inputs._event_handler)
Event.register(inputs.events.text,inputs._event_handler)
Event.register(inputs.events.slider,inputs._event_handler)
Event.register(inputs.events.selection,inputs._event_handler)
-- the folwing functions are just to make inputs easier but if what you want is not include use inputs.add(obj)
--- Used to define a button, can have many function
@@ -238,7 +257,7 @@ function inputs.reset_radio(elements)
local state = false
local success, err = pcall(_element.data._state,elements.parent)
if success then state = err else error(err) end
element.state = state
elements.state = state
end
end
end
@@ -286,7 +305,7 @@ function inputs.add_slider(name,orientation,min,max,start_callback,callback)
orientation=orientation,
minimum_value=min,
maximum_value=max,
value=start
value=start_callback
}
slider.data._start = start_callback
slider.data._callback = callback
@@ -304,6 +323,36 @@ function inputs.add_slider(name,orientation,min,max,start_callback,callback)
return slider
end
--- Used to define a drop down callback only on value_changed
-- @usage Gui.inputs.add_drop_down('test',{1,2,3},1,function)
-- @param items either a list or a function which returns a list
-- @param index either a number or a function which returns a number
-- @tparam function callback the callback which is called when a new index is selected function(player,selected,items,element)
-- @treturn table the drop-down object that was made, to allow a custom error event if wanted
function inputs.add_drop_down(name,items,index,callback)
local drop_down = inputs.add{
type='drop-down',
name=name,
items=items,
selected_index=index
}
drop_down.data._items = items
drop_down.data._index = index
drop_down.data._callback = callback
drop_down:on_event('selection',function(event)
local player = Game.get_player(event)
local element = event.element
local items = element.items
local selected = items[element.selected_index]
local callback = drop_down.data._callback
if is_type(callback,'function') then
local success, err = pcall(callback,player,selected,items,element)
if not success then error(err) end
else error('Invalid Callback Condition Format') end
end)
return drop_down
end
return inputs
-- to see examples look at GuiParts/test.lua

View File

@@ -58,14 +58,14 @@ end,function(player,element)
end)
local radio_test = Gui.inputs.add_checkbox('test-radio',true,'Kill Self',function(player,parent)
return player.in_combat
return false
end,function(player,element)
if player.character then player.character.die() end
Gui.inputs.reset_radio(element.parent['test-radio-reset'])
end)
local radio_test_reset = Gui.inputs.add_checkbox('test-radio-reset',true,'Reset Kill Self',function(parent)
return false
local radio_test_reset = Gui.inputs.add_checkbox('test-radio-reset',true,'Reset Kill Self',function(player,parent)
return not parent['test-radio'].state
end,function(player,element)
Gui.inputs.reset_radio(element.parent['test-radio'])
end)
@@ -78,11 +78,16 @@ local box_test = Gui.inputs.add_text('test-box',true,'default text but a box',fu
player_return(text,nil,player)
end)
slider_test = Gui.inputs.add_slider('test-slider','vertical',0,5,function(player,parent)
local slider_test = Gui.inputs.add_slider('test-slider','vertical',0,5,function(player,parent)
return player.character_running_speed_modifier
end,function(player,value,percent,element)
player.character_running_speed_modifier = value
player_return('Value In Percent of Max '..percent*100,nil,player)
player_return('Value In Percent of Max '..math.floor(percent*100)-(math.floor(percent*100)%5),nil,player)
end)
local drop_test = Gui.inputs.add_drop_down('test-drop',table.keys(defines.color),1,function(player,selected,items,element)
player.color = defines.color[selected]
player.chat_color = defines.color[selected]
end)
local function test_gui(event)
@@ -101,6 +106,7 @@ local function test_gui(event)
text_test:draw(frame)
box_test:draw(frame)
slider_test:draw(frame)
drop_test:draw(frame)
end
Gui.toolbar.add('open-gui-test','Open Test Gui','Opens the test gui with every input',test_gui)