Skip to content

Commit 3644aea

Browse files
committed
feat(jukebox): add sound menu search filter fields
1 parent fe635a5 commit 3644aea

8 files changed

Lines changed: 559 additions & 4 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
Adds a search/filter field to the top of the BLT mod options list and Mod Overrides list.
44

5+
Also adds filter fields to the Jukebox heist playlist, heist tracks, and menu playlist screens.
6+
57
Type in the `Filter` input to narrow the visible mods by mod name or description.
68

79
## Requirements

mod.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"name": "Mod Options Search Filter",
33
"description": "Adds search filter fields to the BLT mod options and installed mod_overrides lists.",
44
"author": "Perry",
5-
"version": "1.1.0",
5+
"version": "1.2.0",
66
"blt_version": 2,
77
"priority": 1,
88
"updates": [

modoptionssearchfilter.lua

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ local modules = {
1414
"modules/shared/context.lua",
1515
"modules/blt/context.lua",
1616
"modules/mo/context.lua",
17+
"modules/jukebox/context.lua",
1718
"modules/shared/input.lua",
1819
"modules/shared/order.lua",
1920
"modules/shared/filter.lua",
@@ -22,6 +23,7 @@ local modules = {
2223
"modules/blt/order.lua",
2324
"modules/blt/menu.lua",
2425
"modules/mo/menu.lua",
26+
"modules/jukebox/menu.lua",
2527
"modules/shared/core.lua",
2628
}
2729

modules/jukebox/context.lua

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
_G.ModOptionsSearchFilter = _G.ModOptionsSearchFilter or {}
2+
3+
local ModOptionsSearchFilter = _G.ModOptionsSearchFilter
4+
5+
local MARKER = "_mod_options_search_jukebox_context"
6+
7+
ModOptionsSearchFilter.JUKEBOX_CONTEXT_MARKER = MARKER
8+
ModOptionsSearchFilter.JUKEBOX_HEIST_PLAYLIST_INPUT_ID = "jukebox_heist_playlist_search_filter"
9+
ModOptionsSearchFilter.JUKEBOX_HEIST_TRACKS_INPUT_ID = "jukebox_heist_tracks_search_filter"
10+
ModOptionsSearchFilter.JUKEBOX_MENU_PLAYLIST_INPUT_ID = "jukebox_menu_playlist_search_filter"
11+
ModOptionsSearchFilter.CALLBACKS.open_jukebox_heist_playlist_search = "jukebox_heist_playlist_search_open"
12+
ModOptionsSearchFilter.CALLBACKS.open_jukebox_heist_tracks_search = "jukebox_heist_tracks_search_open"
13+
ModOptionsSearchFilter.CALLBACKS.open_jukebox_menu_playlist_search = "jukebox_menu_playlist_search_open"
14+
15+
function ModOptionsSearchFilter:NodeHasJukeboxCallback(node, callback_name)
16+
if not node or not callback_name then
17+
return false
18+
end
19+
20+
local items = self.GetNodeItems and self:GetNodeItems(node) or node._items or {}
21+
22+
for _, item in pairs(items) do
23+
local parameters = self.ItemParameters and self:ItemParameters(item) or item and item._parameters or {}
24+
25+
if parameters.callback == callback_name then
26+
return true
27+
end
28+
end
29+
30+
return false
31+
end
32+
33+
function ModOptionsSearchFilter:IsJukeboxSearchNode(node_gui, node, context_key, callback_name)
34+
local target_node = node or node_gui and node_gui.node or node_gui
35+
36+
if not target_node then
37+
return false
38+
end
39+
40+
if target_node[MARKER] == context_key then
41+
return true
42+
end
43+
44+
local parameters = self:GetNodeParameters(target_node)
45+
46+
if parameters and parameters[MARKER] == context_key then
47+
return true
48+
end
49+
50+
return self:NodeHasJukeboxCallback(target_node, callback_name)
51+
end
52+
53+
ModOptionsSearchFilter:RegisterSearchContext({
54+
key = "jukebox_heist_playlist",
55+
menu_id = "jukebox_heist_playlist",
56+
input_id = ModOptionsSearchFilter.JUKEBOX_HEIST_PLAYLIST_INPUT_ID,
57+
callback_id = ModOptionsSearchFilter.CALLBACKS.open_jukebox_heist_playlist_search,
58+
handle_field = "JukeboxHeistPlaylistSearchInput",
59+
text_field = "jukebox_heist_playlist_search_text",
60+
desc = "Filter custom heist playlist.",
61+
accepts_search_item = true,
62+
matches = function(owner, node_gui, node)
63+
return owner:IsJukeboxSearchNode(node_gui, node, "jukebox_heist_playlist", "jukebox_option_heist_playlist")
64+
end
65+
})
66+
67+
ModOptionsSearchFilter:RegisterSearchContext({
68+
key = "jukebox_heist_tracks",
69+
menu_id = "jukebox_heist_tracks",
70+
input_id = ModOptionsSearchFilter.JUKEBOX_HEIST_TRACKS_INPUT_ID,
71+
callback_id = ModOptionsSearchFilter.CALLBACKS.open_jukebox_heist_tracks_search,
72+
handle_field = "JukeboxHeistTracksSearchInput",
73+
text_field = "jukebox_heist_tracks_search_text",
74+
desc = "Filter custom heist tracks.",
75+
accepts_search_item = true,
76+
matches = function(owner, node_gui, node)
77+
return owner:IsJukeboxSearchNode(node_gui, node, "jukebox_heist_tracks", "jukebox_option_heist_tracks")
78+
end
79+
})
80+
81+
ModOptionsSearchFilter:RegisterSearchContext({
82+
key = "jukebox_menu_playlist",
83+
menu_id = "jukebox_menu_playlist",
84+
input_id = ModOptionsSearchFilter.JUKEBOX_MENU_PLAYLIST_INPUT_ID,
85+
callback_id = ModOptionsSearchFilter.CALLBACKS.open_jukebox_menu_playlist_search,
86+
handle_field = "JukeboxMenuPlaylistSearchInput",
87+
text_field = "jukebox_menu_playlist_search_text",
88+
desc = "Filter custom menu playlist.",
89+
accepts_search_item = true,
90+
matches = function(owner, node_gui, node)
91+
return owner:IsJukeboxSearchNode(node_gui, node, "jukebox_menu_playlist", "jukebox_option_menu_playlist")
92+
end
93+
})
94+
95+
return ModOptionsSearchFilter

0 commit comments

Comments
 (0)