FrameworkZ 10.8.3
Provides a framework for Project Zomboid with various systems.
Loading...
Searching...
No Matches
Contexts.lua
Go to the documentation of this file.
3
5 local self = setmetatable({}, MenuManager)
6 self.context = context
7 self.contextMenuBuilder = ContextMenuBuilder.new(self, context)
8 self.subMenuBuilders = {}
9 return self
10end
11
12function MenuManager:addOption(option, target)
13 target = target or self.contextMenuBuilder
14 return target:addOption(option.text, option.target, option.callback, option.callbackParameters, option.addOnTop)
15end
17function MenuManager:addSubMenu(name, addOnTop, options)
18 -- Create a submenu and its builder
19 local menuOption, subMenuBuilder = self.contextMenuBuilder:addSubMenu(name, addOnTop, options)
21 -- Store the submenu builder for later use
22 table.insert(self.subMenuBuilders, subMenuBuilder)
23
24 return subMenuBuilder
25end
26
27function MenuManager:addAggregatedOption(unqiueID, option, target)
28 target = target or self.contextMenuBuilder
29 target:addAggregatedOptionWithCallback(unqiueID, option.target, option.text, option.callback, option.callbackParameters, option.addOnTop, option.useMultiple, option.count)
30end
31
32function MenuManager:buildMenu()
33 local function buildSubMenu(subMenuBuilder)
34 for _, subMenu in ipairs(subMenuBuilder.subMenus) do
35 buildSubMenu(subMenu)
36 end
37
38 subMenuBuilder:buildAggregatedOptions()
39 end
41 -- Build aggregated options for the main context menu
42 self.contextMenuBuilder:buildAggregatedOptions()
43
44 -- Build aggregated options for submenus
45 for _, subMenuBuilder in ipairs(self.subMenuBuilders) do
46 buildSubMenu(subMenuBuilder)
47 end
48end
50function MenuManager:getContext()
52end
53
54function MenuManager:getSubMenu(subMenuName)
55 for _, subMenuBuilder in ipairs(self.subMenuBuilders) do
56 if subMenuBuilder.name and subMenuBuilder.name == subMenuName then
57 return subMenuBuilder
58 end
59 end
60
61 return nil
62end
63
64-- Options class
65Options = {}
66Options.__index = Options
67
68function Options.new(text, target, callback, callbackParameters, addOnTop, useMultiple, count)
69 local self = setmetatable({}, Options)
70
71 self.text = text
72 self.target = target
73 self.callback = callback
74 self.callbackParameters = callbackParameters or {}
75 self.addOnTop = addOnTop or false
76 self.useMultiple = useMultiple or false
77 self.count = count or 1
78
79 return self
80end
81
82-- getters for Options class
83function Options:getText() return self.text end
84function Options:getTarget() return self.target end
85function Options:getCallback() return self.callback end
86function Options:getCallbackParameters() return self.callbackParameters end
87function Options:getAddOnTop() return self.addOnTop end
88function Options:getUseMultiple() return self.useMultiple end
89function Options:getCount() return self.count end
90
91-- setters for Options class
92function Options:setText(text) self.text = text end
93function Options:setTarget(target) self.target = target end
94function Options:setCallback(callback) self.callback = callback end
95function Options:setCallbackParameters(callbackParameters) self.callbackParameters = callbackParameters end
96function Options:setAddOnTop(addOnTop) self.addOnTop = addOnTop end
97function Options:setUseMultiple(useMultiple) self.useMultiple = useMultiple end
98function Options:setCount(count) self.count = count end
99
100-- AggregatedOptions class
103
105 local self = setmetatable({}, AggregatedOptions)
106 self.uniqueID = uniqueID
107 self.options = {}
108 return self
109end
110
111-- getters for AggregatedOptions class
112function AggregatedOptions:getUniqueID() return self.uniqueID end
113function AggregatedOptions:getOptions() return self.options end
114
115function AggregatedOptions:addOption(option)
116 table.insert(self.options, option)
117end
118
119-- ContextMenuBuilder class
122
123function ContextMenuBuilder.new(menuManager, context)
124 local self = setmetatable({}, ContextMenuBuilder)
125 self.menuManager = menuManager
126 self.context = context
127 self.addedOptions = {}
128 self.aggregatedOptions = {}
129 self.subMenus = {}
130 return self
131end
132
133function ContextMenuBuilder:getContext()
134 return self.context
135end
136
137function ContextMenuBuilder:getOptions()
138 return self.addedOptions
139end
140
141function ContextMenuBuilder:getAggregatedOptions()
143end
144
145function ContextMenuBuilder:getMenuManager()
146 return self.menuManager
147end
148
149function ContextMenuBuilder:addOption(name, target, callback, parameters, addOnTop)
150 local option
151 if addOnTop then
152 option = self.context:addOptionOnTop(name, target, callback, parameters)
153 else
154 option = self.context:addOption(name, target, callback, parameters)
155 end
156
157 -- Track added options for debugging
158 table.insert(self.addedOptions, option)
159 return option
160end
161
162function ContextMenuBuilder:addSubMenu(name, addOnTop, options)
163 -- Create a new context for the submenu
164 local subMenu = ISContextMenu:getNew(self.context)
165 local subMenuBuilder = ContextMenuBuilder.new(self.menuManager, subMenu) -- Pass menuManager properly
166 subMenuBuilder["name"] = name
167
168 -- Add predefined options to the submenu
169 if options then
170 for _, option in ipairs(options) do
171 subMenuBuilder:addOption(option.text, option.target, option.callback, option.callbackParameters, option.addOnTop)
172 end
173 end
174
175 -- Create a new menu option that leads to the submenu
176 local menuOption
177 if addOnTop then
178 menuOption = self.context:addOptionOnTop(name)
179 else
180 menuOption = self.context:addOption(name)
181 end
182
183 -- Add the submenu to the parent context
184 self.context:addSubMenu(menuOption, subMenu)
185 table.insert(self.subMenus, subMenuBuilder)
186
187 return menuOption, subMenuBuilder
188end
189
190function ContextMenuBuilder:addAggregatedOption(aggregatedOption)
191 local uniqueID = aggregatedOption:getUniqueID()
192
193 if not self.aggregatedOptions[uniqueID] then
194 self.aggregatedOptions[uniqueID] = aggregatedOption
195 end
196end
197
198function ContextMenuBuilder:addAggregatedOptionWithCallback(uniqueID, target, text, callback, params, addOnTop, useMultiple, count)
199 local option = Options.new(text, target, callback, params, addOnTop, useMultiple, count)
200 local aggregatedOption = AggregatedOptions.new(uniqueID)
201
202 aggregatedOption:addOption(option)
203 self:addAggregatedOption(aggregatedOption)
204end
205
206function ContextMenuBuilder:buildAggregatedOptions()
207 local previousUniqueID = nil
208
209 if self.aggregatedOptions then
210 for _, aggregatedOption in pairs(self.aggregatedOptions) do
211 local uniqueID = aggregatedOption:getUniqueID()
212
213 if uniqueID ~= previousUniqueID then
214 for _, option in ipairs(aggregatedOption:getOptions()) do
215 local optionText = option:getText()
216
217 if option:getUseMultiple() and option:getCount() > 1 then
218 optionText = optionText .. " (x" .. option:getCount() .. ")"
219 end
220
221 local callback = function(target, parameters)
222 option:getCallback()(target, parameters)
223 end
224
225 if option:getAddOnTop() then
226 self:addOption(optionText, option:getTarget(), callback, option:getCallbackParameters(), true)
227 else
228 self:addOption(optionText, option:getTarget(), callback, option:getCallbackParameters(), false)
229 end
230 end
231 end
232
234 end
235 end
236
238end
void local x()
void ContextMenuBuilder()
void menuOption()
void previousUniqueID()
void Options()
void local callback()
void UnnamedFunction()
void MenuManager()
void self aggregatedOptions()
void context()
void uniqueID()
void local subMenu()
void local option
Definition Items.lua:263
void self FrameworkZ UI self nil
Definition MainMenu.lua:95
void self self
Definition MainMenu.lua:89
void processingNotification backgroundColor a()
void local options()
void self parent()
void local name()
void new(uniqueID)
void addOption(option)
void buildAggregatedOptions()
void new(menuManager, context)
void getAggregatedOptions()
void addOption(name, target, callback, parameters, addOnTop)
void addAggregatedOptionWithCallback(uniqueID, target, text, callback, params, addOnTop, useMultiple, count)
void addSubMenu(name, addOnTop, options)
void addAggregatedOption(aggregatedOption)
void addAggregatedOption(unqiueID, option, target)
void getContext()
void buildMenu()
void getSubMenu(subMenuName)
void new(context)
void addOption(option, target)
void addSubMenu(name, addOnTop, options)
void new(text, target, callback, callbackParameters, addOnTop, useMultiple, count)