Add :move() and :remove() methods
This commit is contained in:
parent
ddd67ca569
commit
8fa38c2a2c
|
@ -224,8 +224,14 @@ here is the list:
|
|||
| clear | Remove all items | --- | --- |
|
||||
| scroll_down | If the menu is cropped, scroll down | --- | --- |
|
||||
| scroll_up | If the menu is cropped, scroll up | --- | --- |
|
||||
| swap | Swap 2 items | both items | --- |
|
||||
| move | Move an item | the item, the new idx | --- |
|
||||
| remove | Remove the item | the item | --- |
|
||||
|
||||
|
||||
Menu also emit many signals, the syntax is usually `PROPERTY_NAME::changed`. The exeptions are
|
||||
`item::moved`, `item::swapped`, `item::removed`
|
||||
|
||||
###Beautiful options
|
||||
|
||||
Radical also use the some of the same theme options as awful.menu, plus some:
|
||||
|
|
12
bar.lua
12
bar.lua
|
@ -1,4 +1,4 @@
|
|||
local setmetatable,unpack = setmetatable,unpack
|
||||
local setmetatable,unpack,table = setmetatable,unpack,table
|
||||
local base = require( "radical.base" )
|
||||
local color = require( "gears.color" )
|
||||
local wibox = require( "wibox" )
|
||||
|
@ -58,11 +58,19 @@ local function setup_drawable(data)
|
|||
data.fit = internal.margin.fit
|
||||
data.draw = internal.margin.draw
|
||||
|
||||
--Swap
|
||||
-- Swap / Move / Remove
|
||||
data:connect_signal("item::swapped",function(_,item1,item2,index1,index2)
|
||||
internal.layout.widgets[index1],internal.layout.widgets[index2] = internal.layout.widgets[index2],internal.layout.widgets[index1]
|
||||
internal.layout:emit_signal("widget::updated")
|
||||
end)
|
||||
data:connect_signal("item::moved",function(_,item,new_idx,old_idx)
|
||||
table.insert(internal.layout.widgets,new_idx,table.remove(internal.layout.widgets,old_idx))
|
||||
internal.layout:emit_signal("widget::updated")
|
||||
end)
|
||||
data:connect_signal("item::removed",function(_,item,old_idx)
|
||||
table.remove(internal.layout.widgets,old_idx)
|
||||
internal.layout:emit_signal("widget::updated")
|
||||
end)
|
||||
end
|
||||
|
||||
local function setup_buttons(data,item,args)
|
||||
|
|
37
base.lua
37
base.lua
|
@ -2,6 +2,7 @@ local setmetatable = setmetatable
|
|||
local pairs,ipairs = pairs, ipairs
|
||||
local type,string = type,string
|
||||
local print,unpack = print, unpack
|
||||
local table = table
|
||||
local beautiful = require( "beautiful" )
|
||||
local util = require( "awful.util" )
|
||||
local aw_key = require( "awful.key" )
|
||||
|
@ -472,6 +473,42 @@ local function new(args)
|
|||
end
|
||||
end
|
||||
|
||||
function data:move(item,idx)
|
||||
local idx1 = nil
|
||||
for k,v in ipairs(internal.items) do --rows
|
||||
if item == v[1] then
|
||||
idx1 = k
|
||||
break
|
||||
end
|
||||
end
|
||||
if idx1 then
|
||||
-- if idx < idx1 then
|
||||
-- idx = idx + 1
|
||||
-- end
|
||||
if idx1 > #internal.items + 1 then
|
||||
idx1 = #internal.items + 1
|
||||
end
|
||||
if idx ~= idx1 then
|
||||
table.insert(internal.items,idx1,table.remove(internal.items,idx))
|
||||
data:emit_signal("item::moved",item,idx,idx1)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function data:remove(item)
|
||||
local idx1 = nil
|
||||
for k,v in ipairs(internal.items) do --rows
|
||||
if item == v[1] then
|
||||
idx1 = k
|
||||
break
|
||||
end
|
||||
end
|
||||
if idx1 then
|
||||
table.remove(internal.items,idx1)
|
||||
data:emit_signal("item::removed",item,idx1)
|
||||
end
|
||||
end
|
||||
|
||||
function data:scroll_up()
|
||||
if data.max_items ~= nil and data.rowcount >= data.max_items and (data._start_at or 1) > 1 then
|
||||
data._start_at = (data._start_at or 1) - 1
|
||||
|
|
|
@ -150,10 +150,10 @@ function module:setup_item(data,item,args)
|
|||
-- Text need to take as much space as possible, override default
|
||||
module:setup_text(item,data)
|
||||
|
||||
--TODO DEAD CODE?
|
||||
-- local fit_w,fit_h = data._internal.layout:fit()
|
||||
-- data.width = fit_w
|
||||
-- data.height = fit_h
|
||||
-- Necessary for :set_position()
|
||||
local fit_w,fit_h = data._internal.layout:fit()
|
||||
data.width = fit_w
|
||||
data.height = fit_h
|
||||
|
||||
-- Enable scrollbar if necessary
|
||||
if data._internal.scroll_w and data.rowcount > data.max_items then
|
||||
|
@ -235,11 +235,19 @@ local function new(data)
|
|||
real_l.setup_item = module.setup_item
|
||||
data._internal.content_layout = l
|
||||
|
||||
--SWAP
|
||||
--SWAP / MOVE / REMOVE
|
||||
data:connect_signal("item::swapped",function(_,item1,item2,index1,index2)
|
||||
real_l.widgets[index1],real_l.widgets[index2] = real_l.widgets[index2],real_l.widgets[index1]
|
||||
real_l:emit_signal("widget::updated")
|
||||
end)
|
||||
data:connect_signal("item::moved",function(_,item,new_idx,old_idx)
|
||||
table.insert(real_l.widgets,new_idx,table.remove(real_l.widgets,old_idx))
|
||||
real_l:emit_signal("widget::updated")
|
||||
end)
|
||||
data:connect_signal("item::removed",function(_,item,old_idx)
|
||||
table.remove(real_l.widgets,old_idx)
|
||||
real_l:emit_signal("widget::updated")
|
||||
end)
|
||||
return real_l
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in New Issue