Made the center gui look better

This commit is contained in:
Cooldude2606
2017-12-19 19:34:54 +00:00
parent d7b8c47455
commit 77a1cd387e
3 changed files with 42 additions and 30 deletions

View File

@@ -30,7 +30,7 @@ function center.clear(player)
end end
function center._center.open(event) function center._center.open(event)
local player = Game.get_player(player) local player = Game.get_player(event)
local _center = Gui._get_data('center')[event.element.name] local _center = Gui._get_data('center')[event.element.name]
local center_flow = center.get_flow(player) local center_flow = center.get_flow(player)
if center_flow[_center.name] then center.clear(player) return end if center_flow[_center.name] then center.clear(player) return end
@@ -46,38 +46,45 @@ function center._center.open(event)
if not success then error(err) end if not success then error(err) end
else error('No Callback on center frame '.._center.name) else error('No Callback on center frame '.._center.name)
end end
player.opened=center_frame
end end
function center._center:callback(frame) function center._center:callback(frame)
frame.focus() local tab_bar = frame.add{
local tabs = self.tabs type='frame',
local tab_bar_scroll = frame.add{
type='scroll-pane',
name='tab_bar_scroll',
vertical_scroll_policy='never',
horizontal_scroll_policy='always'
}
local tab_bar = tab_bar_scroll.add{
type='flow',
direction='horizontal',
name='tab_bar' name='tab_bar'
} }
local tab = frame.add{ local tab_bar_scroll = tab_bar.add{
type='scroll-pane', type='scroll-pane',
name='tab_bar_scroll',
can_scroll_horizontally=true,
direction='horizontal'
}
local tab_bar_scroll_flow = tab_bar_scroll.add{
type='flow',
name='tab_bar_scroll_flow',
direction='horizontal'
}
local tab = frame.add{
type ='frame',
name='tab', name='tab',
vertical_scroll_policy='auto', direction='vertical'
horizontal_scroll_policy='never' }
local tab_scroll = tab.add{
type ='scroll-pane',
name='tab_scroll',
can_scroll_horizontally=false
} }
local first_tab = nil local first_tab = nil
for name,button in pairs(tabs) do for name,button in pairs(self.tabs) do
local first_tab = first_tab or name first_tab = first_tab or name
button:draw(tab_bar) button:draw(tab_bar_scroll_flow)
end end
self.tabs[first_tab](tab) self._tabs[self.name..'_'..first_tab](tab_scroll)
tab.style.minimal_height = 300; tab.style.maximal_height = 300 tab_scroll.style.height = 300
tab.style.minimal_width = 500; tab.style.maximal_width = 500 tab_scroll.style.width = 500
tab_bar_scroll.style.minimal_height = 60; tab_bar_scroll.style.maximal_height = 60 tab_bar_scroll.style.height = 80
tab_bar_scroll.style.minimal_width = 500; tab_bar_scroll.style.maximal_width = 500 tab_bar_scroll.style.width = 500
frame.parent.add{type='frame',name='temp'}.destroy()--recenter the GUI frame.parent.add{type='frame',name='temp'}.destroy()--recenter the GUI
end end
@@ -88,10 +95,10 @@ function center._center:add_tab(name,caption,tooltip,callback)
name=self.name..'_'..name, name=self.name..'_'..name,
caption=caption, caption=caption,
tooltip=tooltip tooltip=tooltip
}.on_event('click',function(event) }:on_event('click',function(event)
local tab = event.element.parent.parent.parent.tab local tab = event.element.parent.parent.parent.parent.tab.tab_scroll
tab.clear() tab.clear()
local frame_name = tab.parent.name local frame_name = tab.parent.parent.name
local _center = Gui._get_data('center')[frame_name] local _center = Gui._get_data('center')[frame_name]
local _tab = _center._tabs[event.element.name] local _tab = _center._tabs[event.element.name]
if is_type(_tab,'function') then if is_type(_tab,'function') then
@@ -102,4 +109,8 @@ function center._center:add_tab(name,caption,tooltip,callback)
return self return self
end end
Event.register(defines.events.on_gui_closed,function(event)
if event.element and event.element.valid then event.element.destroy() end
end)
return center return center

View File

@@ -318,13 +318,12 @@ function inputs.add_slider(name,orientation,min,max,start_callback,callback)
} }
slider.data._start = start_callback slider.data._start = start_callback
slider.data._callback = callback slider.data._callback = callback
slider.data.max = max
slider:on_event('slider',function(event) slider:on_event('slider',function(event)
local slider = Gui._get_data('inputs_'..event.element.type)[event.element.name] local slider = Gui._get_data('inputs_'..event.element.type)[event.element.name]
local player = Game.get_player(event) local player = Game.get_player(event)
local value = event.element.slider_value local value = event.element.slider_value
local data = slider.data local data = slider.data
local percent = value/data.max local percent = value/event.element.get_slider_maximum()
if is_type(data._callback,'function') then if is_type(data._callback,'function') then
local success, err = pcall(data._callback,player,value,percent,event.element) local success, err = pcall(data._callback,player,value,percent,event.element)
if not success then error(err) end if not success then error(err) end

View File

@@ -49,7 +49,9 @@ center.add{
caption='Gui Center', caption='Gui Center',
tooltip='Just a gui test' tooltip='Just a gui test'
}:add_tab('tab-1','Tab 1','Just a tab',function(frame) }:add_tab('tab-1','Tab 1','Just a tab',function(frame)
frame.add{type='lable',caption='Test'} frame.add{type='label',caption='Test'}
end):add_tab('tab-2','Tab 2','Just a tab',function(frame) end):add_tab('tab-2','Tab 2','Just a tab',function(frame)
frame.add{type='lable',caption='Test 2'} for i = 1,100 do
frame.add{type='label',caption='Test 2'}
end
end) end)