Fixed Admin gui not closing; Gui draw more consistent

This commit is contained in:
Cooldude2606
2018-12-31 13:54:06 +00:00
parent f0b1f51c0b
commit 2d1de044dd
13 changed files with 48 additions and 58 deletions

View File

@@ -16,7 +16,7 @@ local mod_gui = require('mod-gui')
local module_verbose = false local module_verbose = false
local AdminGui = { local AdminGui = {
on_init=function() on_init=function()
if loaded_modules['ExpGamingPlayer.playerInfo'] then playerInfo = require('ExpGamingPlayer') if loaded_modules['ExpGamingPlayer.playerInfo'] then playerInfo = require('ExpGamingPlayer.playerInfo')
else playerInfo = function(player,frame) else playerInfo = function(player,frame)
frame.add{ frame.add{
type='label', type='label',
@@ -30,7 +30,7 @@ local AdminGui = {
function Admin.open(player,pre_select_player,pre_select_action) function Admin.open(player,pre_select_player,pre_select_action)
Gui.center.clear(player) Gui.center.clear(player)
Admin.center.open(player,pre_select_player,pre_select_action) Admin.center(player,pre_select_player,pre_select_action)
end end
-- Function Define -- Function Define
@@ -140,24 +140,7 @@ Admin.center = Gui.center{
name='admin-commands', name='admin-commands',
caption='utility/danger_icon', caption='utility/danger_icon',
tooltip={'ExpGamingAdmin.tooltip'}, tooltip={'ExpGamingAdmin.tooltip'},
open=function(event,pre_select_player,pre_select_action) draw=function(self,frame,pre_select_player,pre_select_action)
local _player = Game.get_player(pre_select_player)
local player = Game.get_player(event)
local _center = Gui.data.center['admin-commands']
local center_flow = Gui.center.get_flow(player)
if center_flow[_center.name] then Gui.center.clear(player) return end
local center_frame = center_flow.add{
name=_center.name,
type='frame',
direction='vertical',
style=mod_gui.frame_style
}
-- only edit i made was passing diffrent arguments to the draw function, try to avoid this
local success, err = pcall(_center.draw,center_frame,_player,pre_select_action)
if not success then error(err) end
player.opened=center_frame
end,
draw=function(frame,pre_select_player,pre_select_action)
frame.caption={'ExpGamingAdmin.name'} frame.caption={'ExpGamingAdmin.name'}
local frame = frame.add{ local frame = frame.add{
type='flow', type='flow',

View File

@@ -21,11 +21,11 @@ function center.add(obj)
if not is_type(obj,'table') then return end if not is_type(obj,'table') then return end
if not is_type(obj.name,'string') then return end if not is_type(obj.name,'string') then return end
verbose('Created Center Gui: '..obj.name) verbose('Created Center Gui: '..obj.name)
setmetatable(obj,{__index=center._prototype,__call=function(self,player) return center.open(player,self.name) end}) setmetatable(obj,{__index=center._prototype,__call=function(self,player,...) return center.open(player,self.name,...) end})
obj.tabs = {} obj.tabs = {}
obj._tabs = {} obj._tabs = {}
Gui.data('center',obj.name,obj) Gui.data('center',obj.name,obj)
if Gui.toolbar then Gui.toolbar(obj.name,obj.caption,obj.tooltip,obj.open) end if Gui.toolbar then Gui.toolbar(obj.name,obj.caption,obj.tooltip,function(event) return obj:open(event.player_index) end) end
return obj return obj
end end
@@ -39,23 +39,31 @@ function center.get_flow(player)
return player.gui.center.exp_center or player.gui.center.add{name='exp_center',type='flow'} return player.gui.center.exp_center or player.gui.center.add{name='exp_center',type='flow'}
end end
--- Used to open a center frame for a player --- Used to open a center frame for a player, extra params are sent to open event
-- @usage Gui.center.open(player,'server-info') -- return true -- @usage Gui.center.open(player,'server-info') -- return true
-- @param player a player indifier to get the flow for -- @param player a player indifier to get the flow for
-- @tparam string center the name of the center frame to open -- @tparam string center the name of the center frame to open
-- @treturn boelon based on if it successed or not -- @treturn boelon based on if it successed or not
function center.open(player,center) function center.open(player,center,...)
local player = Game.get_player(player) local player = Game.get_player(player)
if not player then error('Invalid player',2) return false end if not player then error('Invalid player',2) return false end
Gui.center.clear(player) Gui.center.clear(player)
if not Gui.data.center[center] then return false end if not Gui.data.center[center] then return false end
Gui.data.center[center].open{ local self = Gui.data.center[center]
element={name=center}, -- this function is the draw function passed to the open event
player_index=player.index self:open(player,function(...) Gui.center._draw(self,...) end,...)
}
return true return true
end end
-- used as a pice of middle ware for the open event
function center._draw(self,frame,...)
game.players[frame.player_index].opened=frame
if is_type(self.draw,'function') then
local success, err = pcall(self.draw,self,frame,...)
if not success then error(err) end
else error('No Callback on center frame '..self.name) end
end
--- Used to open a center frame for a player --- Used to open a center frame for a player
-- @usage Gui.center.open_tab(player,'readme','rules') -- return true -- @usage Gui.center.open_tab(player,'readme','rules') -- return true
-- @param player a player indifier to get the flow for -- @param player a player indifier to get the flow for
@@ -82,27 +90,24 @@ function center.clear(player)
center.get_flow(player).clear() center.get_flow(player).clear()
end end
-- used on the button press when the toolbar button is press, can be overriden -- opens this gui for this player, draw is the draw function when event is called from center.open
-- not recomented for direct use see Gui.center.open -- this is the default function it can be overriden when the gui is defined, simply call draw on the frame you create
function center._prototype.open(event) -- extra values passed to draw will also be passed to the draw event
local player = Game.get_player(event) -- extra values from center.draw and passed to the open event
local _center = Gui.data.center[event.element.name] function center._prototype:open(player,draw,...)
local player = Game.get_player(player)
local draw = draw or function(...) center._draw(self,...) end
local center_flow = center.get_flow(player) local center_flow = center.get_flow(player)
if center_flow[_center.name] then Gui.center.clear(player) return end if center_flow[self.name] then Gui.center.clear(player) return end
local center_frame = center_flow.add{ local center_frame = center_flow.add{
name=_center.name, name=self.name,
type='frame', type='frame',
caption=_center.caption, caption=self.caption,
direction='vertical', direction='vertical',
style=mod_gui.frame_style style=mod_gui.frame_style
} }
if is_type(center_frame.caption,'string') and player.gui.is_valid_sprite_path(center_frame.caption) then center_frame.caption = '' end if is_type(center_frame.caption,'string') and player.gui.is_valid_sprite_path(center_frame.caption) then center_frame.caption = '' end
if is_type(_center.draw,'function') then draw(center_frame,...)
local success, err = pcall(_center.draw,_center,center_frame)
if not success then error(err) end
else error('No Callback on center frame '.._center.name)
end
player.opened=center_frame
end end
-- this is the default draw function if one is not provided, can be overriden -- this is the default draw function if one is not provided, can be overriden

View File

@@ -168,7 +168,7 @@ function left._prototype:first_open(player)
frame.style.visible = false frame.style.visible = false
if is_type(self.open_on_join,'boolean') then frame.style.visible = self.open_on_join left_flow['gui-left-hide'].style.visible = true end if is_type(self.open_on_join,'boolean') then frame.style.visible = self.open_on_join left_flow['gui-left-hide'].style.visible = true end
end end
if is_type(self.draw,'function') then self.draw(frame) else frame.style.visible = false error('No Callback On '..self.name) end if is_type(self.draw,'function') then self:draw(frame) else frame.style.visible = false error('No Callback On '..self.name) end
return frame return frame
end end

View File

@@ -68,7 +68,7 @@ function popup.open(style,data,players)
} }
_popup.close(_frame) _popup.close(_frame)
if is_type(_popup.draw,'function') then if is_type(_popup.draw,'function') then
local success, err = pcall(_popup.draw,frame,data) local success, err = pcall(_popup.draw,_popup,frame,data)
if not success then error(err) end if not success then error(err) end
else error('No Draw On Popup '.._popup.name) end else error('No Draw On Popup '.._popup.name) end
end end
@@ -94,7 +94,7 @@ function popup.open(style,data,players)
} }
self.data.popup.close(_frame) self.data.popup.close(_frame)
if is_type(self.data.popup.draw,'function') then if is_type(self.data.popup.draw,'function') then
local success, err = pcall(self.data.popup.draw,frame,self.data.data) local success, err = pcall(self.data.popup.draw,self.data.popup,frame,self.data.data)
if not success then error(err) end if not success then error(err) end
else error('No Draw On Popup '..self.data.popup.name) end else error('No Draw On Popup '..self.data.popup.name) end
end):open() end):open()

View File

@@ -143,7 +143,7 @@ Gui.left{
name='test-left', name='test-left',
caption='Gui Left', caption='Gui Left',
tooltip='just testing', tooltip='just testing',
draw=function(frame) draw=function(self,frame)
for _,player in pairs(game.connected_players) do for _,player in pairs(game.connected_players) do
frame.add{type='label',caption=player.name} frame.add{type='label',caption=player.name}
end end
@@ -166,14 +166,14 @@ end)
Gui.popup{ Gui.popup{
name='test-popup', name='test-popup',
caption='Gui Popup', caption='Gui Popup',
draw=function(frame,data) draw=function(self,frame,data)
frame.add{type='label',caption='Opened by: '..data.player} frame.add{type='label',caption='Opened by: '..data.player}
frame.add{type='label',caption='Message: '..data.message} frame.add{type='label',caption='Message: '..data.message}
end end
}:add_left{ }:add_left{
caption='Gui Left w/ Popup', caption='Gui Left w/ Popup',
tooltip='Send a message', tooltip='Send a message',
draw=function(frame) function(self,frame)
text_popup:draw(frame) text_popup:draw(frame)
send_popup:draw(frame) send_popup:draw(frame)
end end

View File

@@ -31,7 +31,7 @@ ThisModule.Gui = Gui.left{
name='rockets', name='rockets',
caption='item/rocket-silo', caption='item/rocket-silo',
tooltip={'ExpGamingInfo-Rockets.tooltip'}, tooltip={'ExpGamingInfo-Rockets.tooltip'},
draw=function(frame) draw=function(self,frame)
frame.caption = {'ExpGamingInfo-Rockets.name'} frame.caption = {'ExpGamingInfo-Rockets.name'}
local player = Game.get_player(frame.player_index) local player = Game.get_player(frame.player_index)
local satellites = player.force.get_item_launched('satellite') local satellites = player.force.get_item_launched('satellite')

View File

@@ -42,7 +42,7 @@ ThisModule.Gui = Gui.left{
name='science', name='science',
caption='item/lab', caption='item/lab',
tooltip={'ExpGamingInfo-Science.tooltip'}, tooltip={'ExpGamingInfo-Science.tooltip'},
draw=function(frame) draw=function(self,frame)
local player = Game.get_player(frame.player_index) local player = Game.get_player(frame.player_index)
if not global[player.force.name] then if not global[player.force.name] then
verbose('Added Science Global for: '..player.force.name) verbose('Added Science Global for: '..player.force.name)

View File

@@ -130,7 +130,7 @@ ThisModule.Gui = Gui.left{
name='tasklist', name='tasklist',
caption='utility/not_enough_repair_packs_icon', caption='utility/not_enough_repair_packs_icon',
tooltip={'ExpGamingInfo-Tasklist.tooltip'}, tooltip={'ExpGamingInfo-Tasklist.tooltip'},
draw=function(frame) draw=function(self,frame)
frame.caption = '' frame.caption = ''
local title = frame.add{ local title = frame.add{
type='flow', type='flow',

View File

@@ -54,5 +54,5 @@ return setmetatable({
if loaded_modules['ExpGamingCore.Group'] then Group = require('ExpGamingCore.Group') end if loaded_modules['ExpGamingCore.Group'] then Group = require('ExpGamingCore.Group') end
end end
},{ },{
__call=function(self,...) self.get_player_info(...) end __call=function(self,...) return self.get_player_info(...) end
}) })

View File

@@ -63,7 +63,7 @@ ThisModule.Gui = Gui.left{
name='player-list', name='player-list',
caption='entity/player', caption='entity/player',
tooltip={'ExpGamingPlayer-playerList.tooltip'}, tooltip={'ExpGamingPlayer-playerList.tooltip'},
draw=function(frame) draw=function(self,frame)
frame.caption = '' frame.caption = ''
local player_list = frame.add{ local player_list = frame.add{
name='scroll', name='scroll',
@@ -125,6 +125,8 @@ script.on_event(defines.events.on_gui_click,function(event)
-- must be a right click -- must be a right click
if event.button == defines.mouse_button_type.right then else return end if event.button == defines.mouse_button_type.right then else return end
local player_list = event.element.parent.parent.parent local player_list = event.element.parent.parent.parent
-- must be a valid player which is clicked
if not Game.get_player(event.element.name) then return end
-- hides the player list to show the info -- hides the player list to show the info
player_list.scroll.style.visible = false player_list.scroll.style.visible = false
local flow = player_list.add{type='flow',direction='vertical'} local flow = player_list.add{type='flow',direction='vertical'}

View File

@@ -206,7 +206,7 @@ end)
ThisModule.Gui = Gui.popup{ ThisModule.Gui = Gui.popup{
name='polls', name='polls',
caption={'ExpGamingPlayer-polls.name'}, caption={'ExpGamingPlayer-polls.name'},
draw=function(frame,data) draw=function(self,frame,data)
frame.style.right_padding = 5 frame.style.right_padding = 5
frame.style.bottom_padding = 5 frame.style.bottom_padding = 5
local uuid = data.uuid local uuid = data.uuid
@@ -225,7 +225,7 @@ ThisModule.Gui = Gui.popup{
}:add_left{ }:add_left{
caption='utility/item_editor_icon', caption='utility/item_editor_icon',
tooltip={'ExpGamingPlayer-polls.tooltip'}, tooltip={'ExpGamingPlayer-polls.tooltip'},
draw=function(frame) draw=function(self,frame)
frame.caption={'ExpGamingPlayer-polls.name'} frame.caption={'ExpGamingPlayer-polls.name'}
frame.add{ frame.add{
type='label', type='label',

View File

@@ -57,7 +57,7 @@ end)
ThisModule.Gui = Gui.popup{ ThisModule.Gui = Gui.popup{
name='announcements', name='announcements',
caption={'GuiAnnouncements.name'}, caption={'GuiAnnouncements.name'},
draw=function(frame,data) draw=function(self,frame,data)
frame.style.right_padding = 5 frame.style.right_padding = 5
frame.style.bottom_padding = 5 frame.style.bottom_padding = 5
frame.add{type='label',caption=data.sent_by,style='caption_label'} frame.add{type='label',caption=data.sent_by,style='caption_label'}
@@ -72,7 +72,7 @@ ThisModule.Gui = Gui.popup{
}:add_left{ }:add_left{
caption='item/programmable-speaker', caption='item/programmable-speaker',
tooltip={'GuiAnnouncements.tooltip'}, tooltip={'GuiAnnouncements.tooltip'},
draw=function(frame) draw=function(self,frame)
frame.caption = {'GuiAnnouncements.name'} frame.caption = {'GuiAnnouncements.name'}
local frame = frame.add{ local frame = frame.add{
type='flow', type='flow',

View File

@@ -145,7 +145,7 @@ ThisModule.Gui = Gui.left{
name='warp-list', name='warp-list',
caption='item/'..warp_item, caption='item/'..warp_item,
tooltip={'WarpPoints.tooltip'}, tooltip={'WarpPoints.tooltip'},
draw=function(frame) draw=function(self,frame)
local player = Game.get_player(frame.player_index) local player = Game.get_player(frame.player_index)
frame.caption={'WarpPoints.name'} frame.caption={'WarpPoints.name'}
local warp_list = frame.add{ local warp_list = frame.add{