@ -55,7 +55,7 @@ end
ItemSelection = defclass ( ItemSelection , widgets.Window )
ItemSelection.ATTRS {
frame_title = ' Choose items ' ,
frame = { w = 56 , h = 2 0, l = 4 , t = 8 } ,
frame = { w = 56 , h = 2 4, l = 4 , t = 7 } ,
resizable = true ,
index = DEFAULT_NIL ,
desc = DEFAULT_NIL ,
@ -81,6 +81,10 @@ function ItemSelection:init()
end
self : addviews {
widgets.Panel {
view_id = ' header ' ,
frame = { t = 0 , h = 3 } ,
subviews = {
widgets.Label {
frame = { t = 0 , l = 0 , r = 16 } ,
text = {
@ -114,17 +118,23 @@ function ItemSelection:init()
on_click = self : callback ( ' submit ' ) ,
visible = function ( ) return self.num_selected >= self.quantity end ,
} ,
widgets.FilteredList {
view_id = ' flist ' ,
frame = { t = 3 , l = 0 , r = 0 , b = 4 } ,
case_sensitive = false ,
choices = choices ,
icon_width = 2 ,
on_submit = self : callback ( ' toggle_group ' ) ,
edit_on_char = function ( ch ) return ch : match ( ' [%l -] ' ) end ,
} ,
} ,
}
self : addviews {
widgets.Panel {
view_id = ' body ' ,
frame = { t = self.subviews . header.frame . h , b = 4 } ,
subviews = {
widgets.EditField {
view_id = ' search ' ,
frame = { l = 1 , t = 0 } ,
label_text = ' Search: ' ,
on_char = function ( ch ) return ch : match ( ' [%l -] ' ) end ,
} ,
widgets.CycleHotkeyLabel {
frame = { l = 0 , b = 2 } ,
frame = { l = 1, t = 2 } ,
key = ' CUSTOM_SHIFT_R ' ,
label = ' Sort by: ' ,
options = {
@ -134,54 +144,81 @@ function ItemSelection:init()
} ,
on_change = self : callback ( ' on_sort ' ) ,
} ,
widgets.HotkeyLabel {
frame = { l = 0 , b = 1 } ,
key = ' SELECT ' ,
label = ' Use all/none ' ,
auto_width = true ,
on_activate = function ( ) self : toggle_group ( self.subviews . flist.list : getSelected ( ) ) end ,
widgets.Panel {
frame = { l = 0 , t = 3 , r = 0 , b = 0 } ,
frame_style = gui.INTERIOR_FRAME ,
subviews = {
widgets.FilteredList {
view_id = ' flist ' ,
frame = { t = 0 , b = 0 } ,
case_sensitive = false ,
choices = choices ,
icon_width = 2 ,
on_submit = self : callback ( ' toggle_group ' ) ,
} ,
widgets.HotkeyLabel {
frame = { l = 22 , b = 1 } ,
key = ' CUSTOM_SHIFT_C ' ,
label = ' Continue ' ,
auto_width = true ,
on_activate = self : callback ( ' submit ' ) ,
} ,
widgets.HotkeyLabel {
frame = { l = 38 , b = 1 } ,
key = ' LEAVESCREEN ' ,
label = ' Go back ' ,
auto_width = true ,
on_activate = self : callback ( ' on_cancel ' ) ,
} ,
} ,
} ,
widgets.Panel {
view_id = ' footer ' ,
frame = { l = 1 , r = 1 , b = 0 , h = 3 } ,
subviews = {
widgets.HotkeyLabel {
frame = { l = 0 , b = 0 } ,
frame = { l = 0 , h= 1 , t = 0 } ,
key = ' KEYBOARD_CURSOR_RIGHT_FAST ' ,
key_sep = ' : ' ,
key_sep = ' ----: ' , -- these hypens function as "padding" to be overwritten by the next Label
label = ' Use one ' ,
auto_width = true ,
on_activate = function ( ) self : increment_group ( self.subviews . flist.list : getSelected ( ) ) end ,
} ,
widgets.Label {
frame = { l = 6 , b= 0 , w = 5 } ,
frame = { l = 6 , w= 5 , t = 0 } ,
text_pen = COLOR_LIGHTGREEN ,
text = ' Right ' ,
text = ' Right ' , -- this overrides the "6----" characters from the previous HotkeyLabel
} ,
widgets.HotkeyLabel {
frame = { l = 23, b = 0 } ,
frame = { l = 1, h = 1 , t = 1 } ,
key = ' KEYBOARD_CURSOR_LEFT_FAST ' ,
key_sep = ' : ' ,
key_sep = ' ---: ' , -- these hypens function as "padding" to be overwritten by the next Label
label = ' Use one fewer ' ,
auto_width = true ,
on_activate = function ( ) self : decrement_group ( self.subviews . flist.list : getSelected ( ) ) end ,
} ,
widgets.Label {
frame = { l = 29, b = 0 , w = 4 } ,
frame = { l = 7, w = 4 , t = 1 } ,
text_pen = COLOR_LIGHTGREEN ,
text = ' Left ' ,
text = ' Left ' , -- this overrides the "4---" characters from the previous HotkeyLabel
} ,
widgets.HotkeyLabel {
frame = { l = 6 , t = 2 , h = 2 } ,
key = ' SELECT ' ,
label = ' Use all/none ' ,
auto_width = true ,
on_activate = function ( ) self : toggle_group ( self.subviews . flist.list : getSelected ( ) ) end ,
} ,
widgets.HotkeyLabel {
frame = { r = 5 , t = 0 } ,
key = ' LEAVESCREEN ' ,
label = ' Go back ' ,
auto_width = true ,
on_activate = self : callback ( ' on_cancel ' ) ,
} ,
widgets.HotkeyLabel {
frame = { r = 4 , t = 2 } ,
key = ' CUSTOM_SHIFT_C ' ,
label = ' Continue ' ,
auto_width = true ,
on_activate = self : callback ( ' submit ' ) ,
} ,
} ,
} ,
}
self.subviews . flist.list . frame.t = 0
self.subviews . flist.edit . visible = false
self.subviews . flist.edit = self.subviews . search
self.subviews . search.on_change = self.subviews . flist : callback ( ' onFilterChange ' )
end
-- resort and restore selection
@ -234,7 +271,7 @@ function ItemSelection:get_choices(sort_fn)
for desc , choice in pairs ( buckets ) do
local data = choice.data
choice.text = {
{ width = 10 , text = function ( ) return ( ' [ %d/%d] ' ) : format ( data.selected , data.quantity ) end } ,
{ width = 10 , text = function ( ) return ( ' %d/%d' ) : format ( data.selected , data.quantity ) end } ,
{ gap = 2 , text = desc } ,
}
table.insert ( choices , choice )