Make select and unselect part of the app_widget object
This commit is contained in:
parent
5b8282b82d
commit
4cbedd6244
|
@ -89,47 +89,6 @@ local function has_value(tab, val)
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
local function select_app(self, x, y)
|
|
||||||
local widgets = self._private.grid:get_widgets_at(x, y)
|
|
||||||
if widgets then
|
|
||||||
self._private.active_widget = widgets[1]
|
|
||||||
if self._private.active_widget ~= nil then
|
|
||||||
if self.app_template == nil then
|
|
||||||
self._private.active_widget:get_children_by_id("background_role")[1].bg = self.app_selected_color
|
|
||||||
local name_widget = self._private.active_widget:get_children_by_id("name_role")[1]
|
|
||||||
if name_widget then
|
|
||||||
name_widget.markup = string.format("<span foreground='%s'>%s</span>", self.app_name_selected_color, name_widget.text)
|
|
||||||
end
|
|
||||||
local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name_role")[1]
|
|
||||||
if generic_name_widget then
|
|
||||||
generic_name_widget.markup = string.format("<i><span weight='300'foreground='%s'>%s</span></i>", self.app_name_selected_color, generic_name_widget.text)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self._private.active_widget:emit_signal("selected")
|
|
||||||
self._private.active_widget.selected = true
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function unselect_app(self)
|
|
||||||
if self._private.active_widget ~= nil then
|
|
||||||
if self.app_template == nil then
|
|
||||||
self._private.active_widget:get_children_by_id("background_role")[1].bg = self.app_normal_color
|
|
||||||
local name_widget = self._private.active_widget:get_children_by_id("name_role")[1]
|
|
||||||
if name_widget then
|
|
||||||
name_widget.markup = string.format("<span foreground='%s'>%s</span>", self.app_name_normal_color, name_widget.text)
|
|
||||||
end
|
|
||||||
local generic_name_widget = self._private.active_widget:get_children_by_id("generic_name_role")[1]
|
|
||||||
if generic_name_widget then
|
|
||||||
generic_name_widget.markup = string.format("<i><span weight='300'foreground='%s'>%s</span></i>", self.app_name_normal_color, generic_name_widget.text)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
self._private.active_widget:emit_signal("unselected")
|
|
||||||
self._private.active_widget.selected = false
|
|
||||||
self._private.active_widget = nil
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
local function create_app_widget(self, app)
|
local function create_app_widget(self, app)
|
||||||
local app_widget = nil
|
local app_widget = nil
|
||||||
|
|
||||||
|
@ -247,12 +206,7 @@ local function create_app_widget(self, app)
|
||||||
if self._private.active_widget == app or not self.select_before_spawn then
|
if self._private.active_widget == app or not self.select_before_spawn then
|
||||||
app:spawn()
|
app:spawn()
|
||||||
else
|
else
|
||||||
-- Unmark the previous app
|
app:select()
|
||||||
unselect_app(self)
|
|
||||||
|
|
||||||
-- Mark this app
|
|
||||||
local pos = self._private.grid:get_widget_position(app)
|
|
||||||
select_app(self, pos.row, pos.col)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end)
|
end)
|
||||||
|
@ -269,13 +223,53 @@ local function create_app_widget(self, app)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local _self = self
|
||||||
|
function app_widget:select()
|
||||||
|
if _self._private.active_widget then
|
||||||
|
_self._private.active_widget:unselect()
|
||||||
|
end
|
||||||
|
_self._private.active_widget = self
|
||||||
|
self:emit_signal("selected")
|
||||||
|
self.selected = true
|
||||||
|
|
||||||
|
if _self.app_template == nil then
|
||||||
|
self:get_children_by_id("background_role")[1].bg = _self.app_selected_color
|
||||||
|
local name_widget = self:get_children_by_id("name_role")[1]
|
||||||
|
if name_widget then
|
||||||
|
name_widget.markup = string.format("<span foreground='%s'>%s</span>", _self.app_name_selected_color, name_widget.text)
|
||||||
|
end
|
||||||
|
local generic_name_widget = self:get_children_by_id("generic_name_role")[1]
|
||||||
|
if generic_name_widget then
|
||||||
|
generic_name_widget.markup = string.format("<i><span weight='300'foreground='%s'>%s</span></i>", _self.app_name_selected_color, generic_name_widget.text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function app_widget:unselect()
|
||||||
|
self:emit_signal("unselected")
|
||||||
|
self.selected = false
|
||||||
|
_self._private.active_widget = nil
|
||||||
|
|
||||||
|
if _self.app_template == nil then
|
||||||
|
self:get_children_by_id("background_role")[1].bg = _self.app_normal_color
|
||||||
|
local name_widget = self:get_children_by_id("name_role")[1]
|
||||||
|
if name_widget then
|
||||||
|
name_widget.markup = string.format("<span foreground='%s'>%s</span>", _self.app_name_normal_color, name_widget.text)
|
||||||
|
end
|
||||||
|
local generic_name_widget = self:get_children_by_id("generic_name_role")[1]
|
||||||
|
if generic_name_widget then
|
||||||
|
generic_name_widget.markup = string.format("<i><span weight='300'foreground='%s'>%s</span></i>", _self.app_name_normal_color, generic_name_widget.text)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
return app_widget
|
return app_widget
|
||||||
end
|
end
|
||||||
|
|
||||||
local function search(self, text)
|
local function search(self, text)
|
||||||
unselect_app(self)
|
self._private.active_widget:unselect()
|
||||||
|
|
||||||
local pos = self._private.grid:get_widget_position(self._private.active_widget)
|
local old_pos = self._private.grid:get_widget_position(self._private.active_widget)
|
||||||
|
|
||||||
-- Reset all the matched entries
|
-- Reset all the matched entries
|
||||||
self._private.matched_entries = {}
|
self._private.matched_entries = {}
|
||||||
|
@ -328,14 +322,17 @@ local function search(self, text)
|
||||||
-- it will reselect the app whose index is the same as the app index that was previously selected
|
-- it will reselect the app whose index is the same as the app index that was previously selected
|
||||||
-- and if matched_entries.length < current_index it will instead select the app with the greatest index
|
-- and if matched_entries.length < current_index it will instead select the app with the greatest index
|
||||||
if self.try_to_keep_index_after_searching then
|
if self.try_to_keep_index_after_searching then
|
||||||
if self._private.grid:get_widgets_at(pos.row, pos.col) == nil then
|
if self._private.grid:get_widgets_at(old_pos.row, old_pos.col) == nil then
|
||||||
local app = self._private.grid.children[#self._private.grid.children]
|
local app = self._private.grid.children[#self._private.grid.children]
|
||||||
pos = self._private.grid:get_widget_position(app)
|
app:select()
|
||||||
|
else
|
||||||
|
local app = self._private.grid:get_widgets_at(old_pos.row, old_pos.col)[1]
|
||||||
|
app:select()
|
||||||
end
|
end
|
||||||
select_app(self, pos.row, pos.col)
|
|
||||||
-- Otherwise select the first app on the list
|
-- Otherwise select the first app on the list
|
||||||
else
|
else
|
||||||
select_app(self, 1, 1)
|
local app = self._private.grid:get_widgets_at(1, 1)[1]
|
||||||
|
app:select()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -352,8 +349,8 @@ local function page_forward(self, direction)
|
||||||
min_app_index_to_include = 0
|
min_app_index_to_include = 0
|
||||||
max_app_index_to_include = self._private.apps_per_page
|
max_app_index_to_include = self._private.apps_per_page
|
||||||
elseif self.wrap_app_scrolling then
|
elseif self.wrap_app_scrolling then
|
||||||
unselect_app(self)
|
local app = self._private.grid:get_widgets_at(1, 1)[1]
|
||||||
select_app(self, 1, 1)
|
app:select()
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
@ -373,15 +370,15 @@ local function page_forward(self, direction)
|
||||||
|
|
||||||
if self._private.current_page > 1 or self.wrap_page_scrolling then
|
if self._private.current_page > 1 or self.wrap_page_scrolling then
|
||||||
if direction == "down" then
|
if direction == "down" then
|
||||||
select_app(self, 1, 1)
|
local app = self._private.grid:get_widgets_at(1, 1)[1]
|
||||||
|
app:select()
|
||||||
else
|
else
|
||||||
local next_app = self._private.grid:get_widgets_at(pos.row, 1)
|
local app = self._private.grid:get_widgets_at(pos.row, 1)[1]
|
||||||
if next_app == nil then
|
if app == nil then
|
||||||
local next_app = self._private.grid.children[#self._private.grid.children]
|
local app = self._private.grid.children[#self._private.grid.children]
|
||||||
local next_app_pos = self._private.grid:get_widget_position(next_app)
|
app:select()
|
||||||
select_app(self, next_app_pos.row, next_app_pos.col)
|
|
||||||
else
|
else
|
||||||
select_app(self, pos.row, 1)
|
app:select()
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -393,9 +390,8 @@ local function page_backward(self, direction)
|
||||||
elseif self.wrap_page_scrolling and #self._private.matched_entries >= self._private.max_apps_per_page then
|
elseif self.wrap_page_scrolling and #self._private.matched_entries >= self._private.max_apps_per_page then
|
||||||
self._private.current_page = self._private.pages_count
|
self._private.current_page = self._private.pages_count
|
||||||
elseif self.wrap_app_scrolling then
|
elseif self.wrap_app_scrolling then
|
||||||
local rows, columns = self._private.grid:get_dimension()
|
local app = self._private.grid.children{#self._private.grid.children}
|
||||||
unselect_app(self)
|
app:select()
|
||||||
select_app(self, math.min(rows, #self._private.grid.children % self.apps_per_row), columns)
|
|
||||||
return
|
return
|
||||||
else
|
else
|
||||||
return
|
return
|
||||||
|
@ -419,15 +415,16 @@ local function page_backward(self, direction)
|
||||||
local rows, columns = self._private.grid:get_dimension()
|
local rows, columns = self._private.grid:get_dimension()
|
||||||
if self._private.current_page < self._private.pages_count then
|
if self._private.current_page < self._private.pages_count then
|
||||||
if direction == "up" then
|
if direction == "up" then
|
||||||
select_app(self, rows, columns)
|
local app = self._private.grid.children{#self._private.grid.children}
|
||||||
|
app:select()
|
||||||
else
|
else
|
||||||
-- Keep the same row from last page
|
-- Keep the same row from last page
|
||||||
select_app(self, pos.row, columns)
|
local app = self._private.grid:get_widgets_at(pos.row, columns)[1]
|
||||||
|
app:select()
|
||||||
end
|
end
|
||||||
elseif self.wrap_page_scrolling then
|
elseif self.wrap_page_scrolling then
|
||||||
local next_app = self._private.grid.children[#self._private.grid.children]
|
local app = self._private.grid.children[#self._private.grid.children]
|
||||||
local next_app_pos = self._private.grid:get_widget_position(next_app)
|
app:select()
|
||||||
select_app(self, next_app_pos.row, next_app_pos.col)
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -439,10 +436,8 @@ local function scroll_up(self)
|
||||||
|
|
||||||
local can_scroll_up = self._private.grid:index(self._private.active_widget) > 1
|
local can_scroll_up = self._private.grid:index(self._private.active_widget) > 1
|
||||||
if can_scroll_up then
|
if can_scroll_up then
|
||||||
local next_app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, -1)
|
local app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, -1)
|
||||||
local next_app_pos = self._private.grid:get_widget_position(next_app)
|
app:select()
|
||||||
unselect_app(self)
|
|
||||||
select_app(self, next_app_pos.row, next_app_pos.col)
|
|
||||||
else
|
else
|
||||||
page_backward(self, "up")
|
page_backward(self, "up")
|
||||||
end
|
end
|
||||||
|
@ -456,10 +451,8 @@ local function scroll_down(self)
|
||||||
|
|
||||||
local can_scroll_down = self._private.grid:index(self._private.active_widget) < #self._private.grid.children
|
local can_scroll_down = self._private.grid:index(self._private.active_widget) < #self._private.grid.children
|
||||||
if can_scroll_down then
|
if can_scroll_down then
|
||||||
local next_app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, 1)
|
local app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, 1)
|
||||||
local next_app_pos = self._private.grid:get_widget_position(next_app)
|
app:select()
|
||||||
unselect_app(self)
|
|
||||||
select_app(self, next_app_pos.row, next_app_pos.col)
|
|
||||||
else
|
else
|
||||||
page_forward(self, "down")
|
page_forward(self, "down")
|
||||||
end
|
end
|
||||||
|
@ -474,10 +467,8 @@ local function scroll_left(self)
|
||||||
local pos = self._private.grid:get_widget_position(self._private.active_widget)
|
local pos = self._private.grid:get_widget_position(self._private.active_widget)
|
||||||
local can_scroll_left = self._private.grid:get_widgets_at(pos.row, pos.col - 1) ~= nil
|
local can_scroll_left = self._private.grid:get_widgets_at(pos.row, pos.col - 1) ~= nil
|
||||||
if can_scroll_left then
|
if can_scroll_left then
|
||||||
local next_app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, -self.apps_per_row)
|
local app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, -self.apps_per_row)
|
||||||
local next_app_pos = self._private.grid:get_widget_position(next_app)
|
app:select()
|
||||||
unselect_app(self)
|
|
||||||
select_app(self, next_app_pos.row, next_app_pos.col)
|
|
||||||
else
|
else
|
||||||
page_backward(self, "left")
|
page_backward(self, "left")
|
||||||
end
|
end
|
||||||
|
@ -492,10 +483,8 @@ local function scroll_right(self)
|
||||||
local pos = self._private.grid:get_widget_position(self._private.active_widget)
|
local pos = self._private.grid:get_widget_position(self._private.active_widget)
|
||||||
local can_scroll_right = self._private.grid:get_widgets_at(pos.row, pos.col + 1) ~= nil
|
local can_scroll_right = self._private.grid:get_widgets_at(pos.row, pos.col + 1) ~= nil
|
||||||
if can_scroll_right then
|
if can_scroll_right then
|
||||||
local next_app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, self.apps_per_row)
|
local app = gtable.cycle_value(self._private.grid.children, self._private.active_widget, self.apps_per_row)
|
||||||
local next_app_pos = self._private.grid:get_widget_position(next_app)
|
app:select()
|
||||||
unselect_app(self)
|
|
||||||
select_app(self, next_app_pos.row, next_app_pos.col)
|
|
||||||
else
|
else
|
||||||
page_forward(self, "right")
|
page_forward(self, "right")
|
||||||
end
|
end
|
||||||
|
@ -517,7 +506,8 @@ local function reset(self)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
select_app(self, 1, 1)
|
local app = self._private.grid:get_widgets_at(1, 1)[1]
|
||||||
|
app:select()
|
||||||
end
|
end
|
||||||
|
|
||||||
local function generate_apps(self)
|
local function generate_apps(self)
|
||||||
|
|
Loading…
Reference in New Issue