refactor: Port radical.layout.vertical to the declarative syntax
This commit is contained in:
parent
bf64eec5c9
commit
a625388122
|
@ -191,78 +191,121 @@ local function compute_geo(data,width,height,force_values)
|
||||||
end
|
end
|
||||||
|
|
||||||
local function new(data)
|
local function new(data)
|
||||||
if not base then
|
base = base or require( "radical.base" )
|
||||||
base = require( "radical.base" )
|
|
||||||
end
|
|
||||||
local l = wibox.layout.fixed.vertical()
|
|
||||||
local real_l = wibox.layout.fixed.vertical()
|
local real_l = wibox.layout.fixed.vertical()
|
||||||
local pref_l,suf_l = wibox.layout.fixed.vertical(),wibox.layout.fixed.vertical()
|
|
||||||
real_l:add(pref_l)
|
local function real_fit(self,context,o_w,o_h,force_values)
|
||||||
if data.max_items then
|
|
||||||
data._internal.scroll_w = scroll(data)
|
|
||||||
pref_l:add(data._internal.scroll_w["up"])
|
|
||||||
end
|
|
||||||
real_l:add(l)
|
|
||||||
real_l:add(suf_l)
|
|
||||||
if data.show_filter then
|
|
||||||
if data.max_items then
|
|
||||||
suf_l:add(data._internal.scroll_w["down"])
|
|
||||||
end
|
|
||||||
local filter_tb = filter(data)
|
|
||||||
suf_l:add(filter_tb)
|
|
||||||
data._internal.filter_tb = filter_tb.widget
|
|
||||||
else
|
|
||||||
if data.max_items then
|
|
||||||
suf_l:add(data._internal.scroll_w["down"])
|
|
||||||
end
|
|
||||||
end
|
|
||||||
real_l.fit = function(self,context,o_w,o_h,force_values)
|
|
||||||
if not data.visible then return 1,1 end
|
if not data.visible then return 1,1 end
|
||||||
local w,h = compute_geo(data,o_w,o_h,force_values)
|
local w,h = compute_geo(data,o_w,o_h,force_values)
|
||||||
data:emit_signal("layout_size",w,h)
|
data:emit_signal("layout_size",w,h)
|
||||||
return w,h
|
return w,h
|
||||||
end
|
end
|
||||||
real_l.add = function(real_l,item)
|
|
||||||
return wibox.layout.fixed.add(l,item.widget)
|
|
||||||
end
|
|
||||||
real_l.item_fit = item_fit
|
|
||||||
real_l.setup_key_hooks = module.setup_key_hooks
|
|
||||||
real_l.setup_item = module.setup_item
|
|
||||||
data._internal.content_layout = l
|
|
||||||
data._internal.suf_l,data._internal.pref_l=suf_l,pref_l
|
|
||||||
|
|
||||||
-- if data.spacing and l.set_spacing then
|
local function real_add(self, item)
|
||||||
-- l:set_spacing(data.spacing)
|
return wibox.layout.fixed.add(data._internal.content_layout, item.widget)
|
||||||
-- end
|
end
|
||||||
|
|
||||||
|
-- Create the scroll widgets
|
||||||
|
if data.max_items then
|
||||||
|
data._internal.scroll_w = scroll(data)
|
||||||
|
end
|
||||||
|
|
||||||
|
real_l : setup {
|
||||||
|
-- Widgets
|
||||||
|
{
|
||||||
|
-- The prefix section, used for the scroll widgets and custom prefixes
|
||||||
|
|
||||||
|
-- Widgets
|
||||||
|
data._internal.scroll_w and data._internal.scroll_w["up"] or nil,
|
||||||
|
|
||||||
|
-- Attributes
|
||||||
|
id = "prefix_layout",
|
||||||
|
layout = wibox.layout.fixed.vertical
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-- The main layout (where items are added)
|
||||||
|
|
||||||
|
-- Attributes
|
||||||
|
id = "content_layout",
|
||||||
|
spacing = data.spacing and data.spacing or 0,
|
||||||
|
layout = wibox.layout.fixed.vertical ,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
-- The suffix section, used for the scroll widgets and custom suffixes
|
||||||
|
|
||||||
|
-- Widgets
|
||||||
|
data._internal.scroll_w and data._internal.scroll_w["down"] or nil,
|
||||||
|
data.show_filter and {
|
||||||
|
id = "filter_widget",
|
||||||
|
widget = filter(data) --FIXME for some reason it doesn't show up
|
||||||
|
} or nil,
|
||||||
|
|
||||||
|
-- Attributes
|
||||||
|
id = "suffix_layout" ,
|
||||||
|
layout = wibox.layout.fixed.vertical,
|
||||||
|
},
|
||||||
|
|
||||||
|
-- Attributes
|
||||||
|
id = "real_l" ,
|
||||||
|
layout = wibox.layout.fixed.vertical,
|
||||||
|
|
||||||
|
-- Methods
|
||||||
|
item_fit = item_fit ,
|
||||||
|
setup_key_hooks = module.setup_key_hooks,
|
||||||
|
setup_item = module.setup_item ,
|
||||||
|
}
|
||||||
|
|
||||||
|
-- Set the important widgets
|
||||||
|
data._internal.content_layout = real_l:get_children_by_id( "content_layout" )[1]
|
||||||
|
data._internal.suf_l = real_l:get_children_by_id( "suffix_layout" )[1]
|
||||||
|
data._internal.pref_l = real_l:get_children_by_id( "prefix_layout" )[1]
|
||||||
|
data._internal.filter_tb = real_l:get_children_by_id( "filter_widget" )[1]
|
||||||
|
|
||||||
|
-- Set the overloaded methods
|
||||||
|
real_l.real_l.fit = real_fit
|
||||||
|
real_l.real_l.add = real_add
|
||||||
|
|
||||||
|
local l = data._internal.content_layout
|
||||||
|
|
||||||
--SWAP / MOVE / REMOVE
|
--SWAP / MOVE / REMOVE
|
||||||
data:connect_signal("item::swapped",function(_,item1,item2,index1,index2)
|
data:connect_signal("item::swapped",function(_,item1,item2,index1,index2)
|
||||||
l:swap(index1, index2)
|
l:swap(index1, index2)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
data:connect_signal("item::moved",function(_,item,new_idx,old_idx)
|
data:connect_signal("item::moved",function(_,item,new_idx,old_idx)
|
||||||
local w = l:get_children()[old_idx]
|
local w = l:get_children()[old_idx]
|
||||||
l:remove(old_idx)
|
l:remove(old_idx)
|
||||||
l:insert(new_idx, w)
|
l:insert(new_idx, w)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
data:connect_signal("item::removed",function(_,item,old_idx)
|
data:connect_signal("item::removed",function(_,item,old_idx)
|
||||||
l:remove(old_idx)
|
l:remove(old_idx)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
data:connect_signal("item::appended",function(_,item)
|
data:connect_signal("item::appended",function(_,item)
|
||||||
l:add(item.widget)
|
l:add(item.widget)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
data:connect_signal("widget::added",function(_,item,widget)
|
data:connect_signal("widget::added",function(_,item,widget)
|
||||||
wibox.layout.fixed.add(l,item.widget)
|
wibox.layout.fixed.add(l,item.widget)
|
||||||
l:emit_signal("widget::updated")
|
l:emit_signal("widget::updated")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
data:connect_signal("prefix_widget::added",function(_,widget,args)
|
data:connect_signal("prefix_widget::added",function(_,widget,args)
|
||||||
pref_l:insert(1,widget)
|
data._internal.pref_l:insert(1,widget)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
data:connect_signal("suffix_widget::added",function(_,widget,args)
|
data:connect_signal("suffix_widget::added",function(_,widget,args)
|
||||||
suf_l:add(widget)
|
data._internal.suf_l:add(widget)
|
||||||
end)
|
end)
|
||||||
data._internal.text_fit = function(self,context,width,height) return width,height end
|
|
||||||
return real_l
|
data._internal.text_fit = function(self, context, width, height)
|
||||||
|
return width,height
|
||||||
|
end
|
||||||
|
|
||||||
|
return real_l.real_l
|
||||||
end
|
end
|
||||||
|
|
||||||
return setmetatable(module, { __call = function(_, ...) return new(...) end })
|
return setmetatable(module, { __call = function(_, ...) return new(...) end })
|
||||||
-- kate: space-indent on; indent-width 2; replace-tabs on;
|
-- kate: space-indent on; indent-width 4; replace-tabs on;
|
||||||
|
|
Loading…
Reference in New Issue