mirror of
https://github.com/Insality/druid
synced 2025-09-27 10:02:19 +02:00
This commit is contained in:
@@ -560,13 +560,13 @@ end
|
||||
|
||||
function Scroll._set_scroll_position(self, position)
|
||||
local available_extra = self.available_pos_extra
|
||||
position.x = helper.clamp(position.x, available_extra.x, available_extra.z)
|
||||
position.y = helper.clamp(position.y, available_extra.w, available_extra.y)
|
||||
local position_x = helper.clamp(position.x, available_extra.x, available_extra.z)
|
||||
local position_y = helper.clamp(position.y, available_extra.w, available_extra.y)
|
||||
|
||||
if self.position.x ~= position.x or self.position.y ~= position.y then
|
||||
self.position.x = position.x
|
||||
self.position.y = position.y
|
||||
gui.set_position(self.content_node, position)
|
||||
if self.position.x ~= position_x or self.position.y ~= position_y then
|
||||
self.position.x = position_x
|
||||
self.position.y = position_y
|
||||
gui.set_position(self.content_node, self.position)
|
||||
|
||||
self.on_scroll:trigger(self:get_context(), self.position)
|
||||
end
|
||||
@@ -708,17 +708,13 @@ function Scroll._update_size(self)
|
||||
local content_border_extra = helper.get_border(self.content_node)
|
||||
local stretch_size = self.style.EXTRA_STRETCH_SIZE
|
||||
|
||||
if self.drag.can_x then
|
||||
local sign = content_size.x > self.view_size.x and 1 or -1
|
||||
content_border_extra.x = content_border_extra.x - stretch_size * sign
|
||||
content_border_extra.z = content_border_extra.z + stretch_size * sign
|
||||
end
|
||||
local sign_x = content_size.x > self.view_size.x and 1 or -1
|
||||
content_border_extra.x = content_border_extra.x - stretch_size * sign_x
|
||||
content_border_extra.z = content_border_extra.z + stretch_size * sign_x
|
||||
|
||||
if self.drag.can_y then
|
||||
local sign = content_size.y > self.view_size.y and 1 or -1
|
||||
content_border_extra.y = content_border_extra.y + stretch_size * sign
|
||||
content_border_extra.w = content_border_extra.w - stretch_size * sign
|
||||
end
|
||||
local sign_y = content_size.y > self.view_size.y and 1 or -1
|
||||
content_border_extra.y = content_border_extra.y + stretch_size * sign_y
|
||||
content_border_extra.w = content_border_extra.w - stretch_size * sign_y
|
||||
|
||||
if not self.style.SMALL_CONTENT_SCROLL then
|
||||
self.drag.can_x = content_size.x > self.view_size.x
|
||||
|
@@ -25,6 +25,12 @@
|
||||
--- Event triggered when scroll progress is changed; event(self, progress_value)
|
||||
-- @tfield DruidEvent on_scroll_progress_change @{DruidEvent}
|
||||
|
||||
---On DataList visual element created Event callback(self, index, node, instance)
|
||||
-- @tfield DruidEvent on_element_add @{DruidEvent}
|
||||
|
||||
---On DataList visual element created Event callback(self, index)
|
||||
-- @tfield DruidEvent on_element_remove @{DruidEvent}
|
||||
|
||||
---
|
||||
|
||||
local const = require("druid.const")
|
||||
@@ -64,6 +70,8 @@ function DataList.init(self, scroll, grid, create_function)
|
||||
self.scroll.on_scroll:subscribe(self._check_elements, self)
|
||||
|
||||
self.on_scroll_progress_change = Event()
|
||||
self.on_element_add = Event()
|
||||
self.on_element_remove = Event()
|
||||
|
||||
self:set_data()
|
||||
end
|
||||
@@ -89,6 +97,14 @@ function DataList.set_data(self, data)
|
||||
end
|
||||
|
||||
|
||||
--- Return current data from DataList component
|
||||
-- @tparam DataList self @{DataList}
|
||||
-- @treturn table The current data array
|
||||
function DataList.get_data(self)
|
||||
return self._data
|
||||
end
|
||||
|
||||
|
||||
--- Add element to DataList. Currenly untested
|
||||
-- @tparam DataList self @{DataList}
|
||||
-- @tparam table data
|
||||
@@ -189,6 +205,34 @@ function DataList.get_index(self, data)
|
||||
end
|
||||
|
||||
|
||||
--- Return all currenly created nodes in DataList
|
||||
-- @tparam DataList self @{DataList}
|
||||
-- @treturn Node[] List of created nodes
|
||||
function DataList.get_created_nodes(self)
|
||||
local nodes = {}
|
||||
|
||||
for index, data in pairs(self._data_visual) do
|
||||
nodes[index] = data.node
|
||||
end
|
||||
|
||||
return nodes
|
||||
end
|
||||
|
||||
|
||||
--- Return all currenly created components in DataList
|
||||
-- @tparam DataList self @{DataList}
|
||||
-- @treturn druid.base_component[] List of created nodes
|
||||
function DataList.get_created_components(self)
|
||||
local components = {}
|
||||
|
||||
for index, data in pairs(self._data_visual) do
|
||||
components[index] = data.component
|
||||
end
|
||||
|
||||
return components
|
||||
end
|
||||
|
||||
|
||||
--- Instant scroll to element with passed index
|
||||
-- @tparam DataList self @{DataList}
|
||||
-- @tparam number index
|
||||
@@ -220,6 +264,7 @@ function DataList._add_at(self, index)
|
||||
}
|
||||
|
||||
self:log_message("Add element at", { index = index })
|
||||
self.on_element_add:trigger(self:get_context(), index, node, instance)
|
||||
end
|
||||
|
||||
|
||||
@@ -233,12 +278,14 @@ function DataList._remove_at(self, index)
|
||||
local node = self._data_visual[index].node
|
||||
gui.delete_node(node)
|
||||
|
||||
if self._data_visual[index].component then
|
||||
self.druid:remove(self._data_visual[index].component)
|
||||
local instance = self._data_visual[index].component
|
||||
if instance then
|
||||
self.druid:remove(instance)
|
||||
end
|
||||
self._data_visual[index] = nil
|
||||
|
||||
self:log_message("Remove element at", { index = index })
|
||||
self.on_element_remove:trigger(self:get_context(), index)
|
||||
end
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user