diff --git a/README.md b/README.md index 6831790..7f46b50 100644 --- a/README.md +++ b/README.md @@ -100,7 +100,7 @@ end Basic custom component template looks like this: ```lua local const = require("druid.const") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("amazing_component", { const.ON_INPUT }) @@ -137,7 +137,7 @@ On each component recomended describe component schema in next way: ```lua -- Component module local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("new_component") diff --git a/druid/base/back_handler.lua b/druid/base/back_handler.lua index fa1d001..67078c5 100644 --- a/druid/base/back_handler.lua +++ b/druid/base/back_handler.lua @@ -2,7 +2,7 @@ -- @module druid.back_handler local const = require("druid.const") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("back_handler", { const.ON_INPUT }) diff --git a/druid/base/blocker.lua b/druid/base/blocker.lua index 5585252..dcd00bd 100644 --- a/druid/base/blocker.lua +++ b/druid/base/blocker.lua @@ -3,7 +3,7 @@ local const = require("druid.const") local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("blocker", { const.ON_SWIPE }) diff --git a/druid/base/button.lua b/druid/base/button.lua index f28aff7..5fb3a14 100644 --- a/druid/base/button.lua +++ b/druid/base/button.lua @@ -7,7 +7,7 @@ local const = require("druid.const") local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("button", { const.ON_INPUT }) diff --git a/druid/base/checkbox.lua b/druid/base/checkbox.lua index 1d36dd9..3c9c148 100644 --- a/druid/base/checkbox.lua +++ b/druid/base/checkbox.lua @@ -2,7 +2,7 @@ -- @module druid.checkbox local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("checkbox") diff --git a/druid/base/checkbox_group.lua b/druid/base/checkbox_group.lua index ea5e03d..90f9481 100644 --- a/druid/base/checkbox_group.lua +++ b/druid/base/checkbox_group.lua @@ -1,7 +1,7 @@ --- Checkboux group module -- @module druid.checkbox_group -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("checkbox_group") diff --git a/druid/base/grid.lua b/druid/base/grid.lua index d423959..1878fa3 100644 --- a/druid/base/grid.lua +++ b/druid/base/grid.lua @@ -3,7 +3,7 @@ -- @module druid.grid local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("grid") diff --git a/druid/base/locale.lua b/druid/base/locale.lua index 4aedbfc..d419f01 100644 --- a/druid/base/locale.lua +++ b/druid/base/locale.lua @@ -4,7 +4,7 @@ local const = require("druid.const") local settings = require("druid.system.settings") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("locale", { const.ON_CHANGE_LANGUAGE }) diff --git a/druid/base/progress.lua b/druid/base/progress.lua index 9530f1d..cdf5776 100644 --- a/druid/base/progress.lua +++ b/druid/base/progress.lua @@ -3,7 +3,7 @@ local const = require("druid.const") local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("progress", { const.ON_UPDATE }) diff --git a/druid/base/radio_group.lua b/druid/base/radio_group.lua index 4450265..b5e2f97 100644 --- a/druid/base/radio_group.lua +++ b/druid/base/radio_group.lua @@ -1,7 +1,7 @@ --- Radio group module -- @module druid.radio_group -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("radio_group") diff --git a/druid/base/scroll.lua b/druid/base/scroll.lua index 49eb85b..fb32d9d 100644 --- a/druid/base/scroll.lua +++ b/druid/base/scroll.lua @@ -3,7 +3,7 @@ local helper = require("druid.helper") local const = require("druid.const") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("scroll", { const.ON_UPDATE, const.ON_SWIPE }) diff --git a/druid/base/slider.lua b/druid/base/slider.lua index 59c0fb5..2c2a3ed 100644 --- a/druid/base/slider.lua +++ b/druid/base/slider.lua @@ -3,7 +3,7 @@ local helper = require("druid.helper") local const = require("druid.const") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("slider", { const.ON_SWIPE }) diff --git a/druid/base/text.lua b/druid/base/text.lua index 7aae65b..bc44c7c 100644 --- a/druid/base/text.lua +++ b/druid/base/text.lua @@ -4,7 +4,7 @@ local const = require("druid.const") local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("text") diff --git a/druid/base/timer.lua b/druid/base/timer.lua index 42de1af..62c3c41 100644 --- a/druid/base/timer.lua +++ b/druid/base/timer.lua @@ -4,7 +4,7 @@ local const = require("druid.const") local formats = require("druid.helper.formats") local helper = require("druid.helper") -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("timer", { const.ON_UPDATE }) diff --git a/druid/component.lua b/druid/component.lua new file mode 100644 index 0000000..2013cda --- /dev/null +++ b/druid/component.lua @@ -0,0 +1,169 @@ +--- Basic class for all Druid components. +-- To create you component, use `component.create` +-- @module component + +local const = require("druid.const") +local class = require("druid.system.middleclass") + +-- @classmod Component +local Component = class("druid.component") + + +--- Setup component context and his style table +-- @function component:setup_component +-- @tparam context table Druid context. Usually it is self of script +-- @tparam style table Druid style module +-- @treturn Component Component itself +function Component.setup_component(self, context, style) + self._meta = { + template = nil, + context = nil, + nodes = nil, + style = nil, + } + + self:set_context(context) + self:set_style(style) + + return self +end + + +--- Get current component style table +-- @function component:get_style +-- @treturn table Component style table +function Component.get_style(self) + if not self._meta.style then + return const.EMPTY_TABLE + end + + return self._meta.style[self._component.name] or const.EMPTY_TABLE +end + + +--- Set current component style table +-- @function component:set_style +-- @tparam table style Druid style module +function Component.set_style(self, druid_style) + self._meta.style = druid_style +end + + +--- Get current component template name +-- @function component:get_template +-- @treturn string Component template name +function Component.get_template(self) + return self._meta.template +end + + +--- Set current component template name +-- @function component:set_template +-- @tparam string template Component template name +function Component.set_template(self, template) + self._meta.template = template +end + + +--- Get current component nodes +-- @function component:get_nodes +-- @treturn table Component nodes table +function Component.get_nodes(self) + return self._meta.nodes +end + + +--- Set current component nodes +-- @function component:set_nodes +-- @tparam table nodes Component nodes table +function Component.set_nodes(self, nodes) + self._meta.nodes = nodes +end + + +--- Get current component context +-- @function component:get_context +-- @treturn table Component context +function Component.get_context(self, context) + return self._meta.context +end + + +--- Set current component context +-- @function component:set_context +-- @tparam table context Druid context. Usually it is self of script +function Component.set_context(self, context) + self._meta.context = context +end + + +--- Get current component interests +-- @function component:get_interests +-- @treturn table List of component interests +function Component.get_interests(self) + return self._component.interest +end + + +-- TODO: Определиться с get_node и node +-- get_node - берет ноду по ноде или строке +-- node - может брать ноду у компонента по схеме (если есть +-- template или таблица нод после gui.clone_tree) +function Component.get_node(self, node_or_name) + local template_name = self:get_template() or const.EMPTY_STRING + local nodes = self:get_nodes() + + if nodes then + return nodes[template_name .. node_or_name] + else + if type(node_or_name) == const.STRING then + return gui.get_node(template_name .. node_or_name) + else + return node_or_name + end + end +end + + +--- Return druid with context of calling component. +-- Use it to create component inside of other components. +-- @function component:get_druid +-- @treturn Druid Druid instance with component context +function Component.get_druid(self) + local context = { _context = self } + return setmetatable(context, { __index = self:get_context().druid }) +end + + +--- Basic constructor of component. It will call automaticaly +-- by `Component.static.create` +-- @function component:initialize +-- @tparam string name Component name +-- @tparam table interest List of component's interest +-- @local +function Component.initialize(self, name, interest) + self._component = { + name = name, + interest = interest + } +end + + +--- Create new component. It will inheritance from basic +-- druid component. +-- @function Component.create +-- @tparam string name Component name +-- @tparam table interest List of component's interest +function Component.static.create(name, interest) + -- Yea, inheritance here + local new_class = class(name, Component) + + new_class.initialize = function(self) + Component.initialize(self, name, interest) + end + + return new_class +end + + +return Component diff --git a/druid/rich/progress_rich.lua b/druid/rich/progress_rich.lua index ec53597..fe39a9b 100644 --- a/druid/rich/progress_rich.lua +++ b/druid/rich/progress_rich.lua @@ -1,7 +1,7 @@ --- Component for rich progress component -- @module druid.progress_rich -local component = require("druid.system.component") +local component = require("druid.component") local M = component.create("progress_rich")