doc(w.w.template) 3rd party lib usage example
This commit is contained in:
parent
bfe4832c63
commit
8803878e1f
|
@ -22,6 +22,32 @@
|
||||||
--
|
--
|
||||||
--@DOC_wibox_widget_template_basic_textbox_declarative_EXAMPLE@
|
--@DOC_wibox_widget_template_basic_textbox_declarative_EXAMPLE@
|
||||||
--
|
--
|
||||||
|
-- Usage in libraries
|
||||||
|
-- ==================
|
||||||
|
--
|
||||||
|
-- (this part is to be completed according to awful.widget comming PRs to implement the widget_template usage)
|
||||||
|
--
|
||||||
|
-- This widget was designed to be used as a standard way to offer customization
|
||||||
|
-- over concrete widget implementation. We use the `wibox.widget.template` as a
|
||||||
|
-- base to implement widgets from the `awful.widget` library. This way, it is
|
||||||
|
-- easy for the final user to customize the standard widget offered by awesome!
|
||||||
|
--
|
||||||
|
-- It is possible to use the template widget as a base for a custom 3rd party
|
||||||
|
-- widget module to offer more customization to the final user.
|
||||||
|
--
|
||||||
|
-- Here is an example of implementation for a custom widget inheriting from
|
||||||
|
-- `wibox.widget.template` :
|
||||||
|
--
|
||||||
|
-- The module definition should include a default widget and a builder function
|
||||||
|
-- that can build the widget with either, the user values or the default.
|
||||||
|
--
|
||||||
|
--@DOC_wibox_widget_template_concrete_implementation_module_EXAMPLE@
|
||||||
|
--
|
||||||
|
-- On the user side, it only requires to call the builder function to get an
|
||||||
|
-- instance of the widget.
|
||||||
|
--
|
||||||
|
--@DOC_wibox_widget_template_concrete_implementation_user_EXAMPLE@
|
||||||
|
--
|
||||||
-- @author Aire-One
|
-- @author Aire-One
|
||||||
-- @copyright 2021 Aire-One <aireone@aireone.xyz>
|
-- @copyright 2021 Aire-One <aireone@aireone.xyz>
|
||||||
--
|
--
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
--DOC_NO_USAGE
|
||||||
|
|
||||||
|
--DOC_HIDE_START
|
||||||
|
local parent = ...
|
||||||
|
|
||||||
|
local gears = require("gears")
|
||||||
|
local wibox = require("wibox")
|
||||||
|
|
||||||
|
local concrete_widget_template_builder
|
||||||
|
--DOC_HIDE_END
|
||||||
|
|
||||||
|
-- Build the default widget used as a fallback if user doesn't provide a template
|
||||||
|
local default_widget = {
|
||||||
|
template = wibox.widget.textclock,
|
||||||
|
update_callback = function(widget_template, args)
|
||||||
|
local text = args and args.text or "???"
|
||||||
|
widget_template.widget.text = text
|
||||||
|
end,
|
||||||
|
}
|
||||||
|
|
||||||
|
--DOC_NEWLINE
|
||||||
|
function concrete_widget_template_builder(args)
|
||||||
|
args = args or {}
|
||||||
|
|
||||||
|
--DOC_NEWLINE
|
||||||
|
-- Build an instance of the template widget with either, the
|
||||||
|
-- user provided parameters or the default
|
||||||
|
local ret = wibox.widget.template(
|
||||||
|
args.widget_template and args.widget_template or
|
||||||
|
default_widget
|
||||||
|
)
|
||||||
|
|
||||||
|
--DOC_NEWLINE
|
||||||
|
-- Patch the methods and fields the widget instance should have
|
||||||
|
|
||||||
|
--DOC_NEWLINE
|
||||||
|
-- e.g. Apply the received buttons, visible, forced_width and so on
|
||||||
|
gears.table.crush(ret, args)
|
||||||
|
|
||||||
|
--DOC_NEWLINE
|
||||||
|
-- Optionally, call update once with parameters to prepare the widget
|
||||||
|
ret:update {
|
||||||
|
text = "default text",
|
||||||
|
}
|
||||||
|
|
||||||
|
--DOC_NEWLINE
|
||||||
|
return ret
|
||||||
|
end
|
||||||
|
|
||||||
|
--DOC_HIDE_START
|
||||||
|
|
||||||
|
local w = concrete_widget_template_builder()
|
||||||
|
parent:add(w)
|
||||||
|
|
||||||
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
--DOC_NO_USAGE
|
||||||
|
|
||||||
|
--DOC_HIDE_START
|
||||||
|
local parent = ...
|
||||||
|
|
||||||
|
local wibox = require("wibox")
|
||||||
|
|
||||||
|
local function concrete_widget_template_builder(args)
|
||||||
|
return wibox.widget.template(args)
|
||||||
|
end
|
||||||
|
--DOC_HIDE_END
|
||||||
|
|
||||||
|
-- Instanciate the widget with the default template
|
||||||
|
local default_widget = concrete_widget_template_builder()
|
||||||
|
|
||||||
|
--DOC_NEWLINE
|
||||||
|
-- Instanciate the widget with a custom template
|
||||||
|
local custom_widget = concrete_widget_template_builder {
|
||||||
|
widget_template = {
|
||||||
|
template = wibox.widget.imagebox,
|
||||||
|
update_callback = function (template, args)
|
||||||
|
if args and args.text == "default text" then
|
||||||
|
template.widget.image = "/path/to/image.png"
|
||||||
|
else
|
||||||
|
template.widget.image = "/path/to/another-image.png"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--DOC_HIDE_START
|
||||||
|
|
||||||
|
parent:add(default_widget)
|
||||||
|
parent:add(custom_widget)
|
||||||
|
|
||||||
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|
||||||
|
|
Loading…
Reference in New Issue