Mercurial > repos > blastem
comparison nuklear_ui/blastem_nuklear.c @ 1521:a51721408c15 nuklear_ui
More fleshed out keyboard bindings view
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 05 Feb 2018 23:39:14 -0800 |
parents | cb3c6395b28c |
children | 63659fb92db4 |
comparison
equal
deleted
inserted
replaced
1520:cb3c6395b28c | 1521:a51721408c15 |
---|---|
233 } | 233 } |
234 tern_node **binding_lookup = data; | 234 tern_node **binding_lookup = data; |
235 *binding_lookup = tern_insert_ptr(*binding_lookup, val.ptrval, strdup(key)); | 235 *binding_lookup = tern_insert_ptr(*binding_lookup, val.ptrval, strdup(key)); |
236 } | 236 } |
237 | 237 |
238 void binding_group(struct nk_context *context, char *name, const char **binds, uint32_t num_binds, tern_node *binding_lookup) | 238 static const char *set_binding; |
239 { | 239 char *set_label; |
240 nk_layout_row_static(context, 34*num_binds+30, render_width() - 80, 1); | 240 void binding_group(struct nk_context *context, char *name, const char **binds, const char **bind_names, uint32_t num_binds, tern_node *binding_lookup) |
241 { | |
242 nk_layout_row_static(context, 34*num_binds+60, render_width() - 80, 1); | |
241 if (nk_group_begin(context, name, NK_WINDOW_TITLE)) { | 243 if (nk_group_begin(context, name, NK_WINDOW_TITLE)) { |
242 nk_layout_row_static(context, 30, render_width()/2 - 80, 2); | 244 nk_layout_row_static(context, 30, render_width()/2 - 80, 2); |
243 | 245 |
244 for (int i = 0; i < num_binds; i++) | 246 for (int i = 0; i < num_binds; i++) |
245 { | 247 { |
246 char *label_alloc = path_extension(binds[i]); | 248 char *label_alloc = bind_names ? NULL : path_extension(binds[i]); |
247 const char *label = label_alloc; | 249 const char *label = label_alloc; |
248 if (!label) { | 250 if (!label) { |
249 label = binds[i]; | 251 label = bind_names ? bind_names[i] : binds[i]; |
250 } | 252 } |
251 nk_label(context, label, NK_TEXT_LEFT); | 253 nk_label(context, label, NK_TEXT_LEFT); |
254 if (nk_button_label(context, tern_find_ptr_default(binding_lookup, binds[i], "Not Set"))) { | |
255 set_binding = binds[i]; | |
256 set_label = strdup(label); | |
257 } | |
252 if (label_alloc) { | 258 if (label_alloc) { |
253 free(label_alloc); | 259 free(label_alloc); |
254 } | 260 } |
255 nk_button_label(context, tern_find_ptr_default(binding_lookup, binds[i], "Not Set")); | |
256 } | 261 } |
257 nk_group_end(context); | 262 nk_group_end(context); |
258 } | 263 } |
259 } | 264 } |
260 | 265 |
261 void view_key_bindings(struct nk_context *context) | 266 void view_key_bindings(struct nk_context *context) |
262 { | 267 { |
263 const char *controller1_binds[] = { | 268 const char *controller1_binds[] = { |
264 "gamepads.1.up", "gamepads.1.down", "gamepads.1.left", "gamepads.1.right" | 269 "gamepads.1.up", "gamepads.1.down", "gamepads.1.left", "gamepads.1.right", |
265 "gamepads.1.a", "gamepads.1.b", "gamepads.1.c", | 270 "gamepads.1.a", "gamepads.1.b", "gamepads.1.c", |
266 "gamepads.1.x", "gamepads.1.y", "gamepads.1.z", | 271 "gamepads.1.x", "gamepads.1.y", "gamepads.1.z", |
267 "gamepads.1.start", "gamepads.1.mode" | 272 "gamepads.1.start", "gamepads.1.mode" |
268 }; | 273 }; |
269 const char *controller2_binds[] = { | 274 const char *controller2_binds[] = { |
270 "gamepads.2.up", "gamepads.2.down", "gamepads.2.left", "gamepads.2.right" | 275 "gamepads.2.up", "gamepads.2.down", "gamepads.2.left", "gamepads.2.right", |
271 "gamepads.2.a", "gamepads.2.b", "gamepads.2.c", | 276 "gamepads.2.a", "gamepads.2.b", "gamepads.2.c", |
272 "gamepads.2.x", "gamepads.2.y", "gamepads.2.z", | 277 "gamepads.2.x", "gamepads.2.y", "gamepads.2.z", |
273 "gamepads.2.start", "gamepads.2.mode" | 278 "gamepads.2.start", "gamepads.2.mode" |
279 }; | |
280 const char *general_binds[] = { | |
281 "ui.exit", "ui.save_state", "ui.toggle_fullscreen", "ui.soft_reset", "ui.reload", | |
282 "ui.screenshot", "ui.sms_pause", "ui.toggle_keyboard_cpatured", "ui.release_mouse" | |
283 }; | |
284 const char *general_names[] = { | |
285 "Show Menu", "Quick Save", "Toggle Fullscreen", "Soft Reset", "Reload Media" | |
286 "Internal Screenshot", "SMS Pause", "Capture Keyboard", "Release Mouse" | |
274 }; | 287 }; |
275 const char *speed_binds[] = { | 288 const char *speed_binds[] = { |
276 "ui.next_speed", "ui.prev_speed", | 289 "ui.next_speed", "ui.prev_speed", |
277 "ui.set_speed.0", "ui.set_speed.1", "ui.set_speed.2" ,"ui.set_speed.3", "ui.set_speed.4", | 290 "ui.set_speed.0", "ui.set_speed.1", "ui.set_speed.2" ,"ui.set_speed.3", "ui.set_speed.4", |
278 "ui.set_speed.5", "ui.set_speed.6", "ui.set_speed.7" ,"ui.set_speed.8", "ui.set_speed.9", | 291 "ui.set_speed.5", "ui.set_speed.6", "ui.set_speed.7" ,"ui.set_speed.8", "ui.set_speed.9", |
279 }; | 292 }; |
293 const char *speed_names[] = { | |
294 "Next", "Previous", | |
295 "Default Speed", "Set Speed 1", "Set Speed 2", "Set Speed 3", "Set Speed 4", | |
296 "Set Speed 5", "Set Speed 6", "Set Speed 7", "Set Speed 8", "Set Speed 9" | |
297 }; | |
298 const char *debug_binds[] = { | |
299 "ui.enter_debugger", "ui.vdp_debug_mode", "ui.vdp_debug_pal" | |
300 }; | |
301 const char *debug_names[] = { | |
302 "Enter Debugger", "VDP Debug Mode", "Debug Palette" | |
303 }; | |
280 const uint32_t NUM_C1_BINDS = sizeof(controller1_binds)/sizeof(*controller1_binds); | 304 const uint32_t NUM_C1_BINDS = sizeof(controller1_binds)/sizeof(*controller1_binds); |
281 const uint32_t NUM_C2_BINDS = sizeof(controller2_binds)/sizeof(*controller2_binds); | 305 const uint32_t NUM_C2_BINDS = sizeof(controller2_binds)/sizeof(*controller2_binds); |
282 const uint32_t NUM_SPEED_BINDS = sizeof(speed_binds)/sizeof(*speed_binds); | 306 const uint32_t NUM_SPEED_BINDS = sizeof(speed_binds)/sizeof(*speed_binds); |
307 const uint32_t NUM_GEN_BINDS = sizeof(general_binds)/sizeof(*general_binds); | |
308 const uint32_t NUM_DBG_BINDS = sizeof(debug_binds)/sizeof(*debug_binds); | |
283 static tern_node *binding_lookup; | 309 static tern_node *binding_lookup; |
284 if (!binding_lookup) { | 310 if (!binding_lookup) { |
285 tern_node *bindings = tern_find_path(config, "bindings\0keys\0", TVAL_NODE).ptrval; | 311 tern_node *bindings = tern_find_path(config, "bindings\0keys\0", TVAL_NODE).ptrval; |
286 if (bindings) { | 312 if (bindings) { |
287 tern_foreach(bindings, binding_loop, &binding_lookup); | 313 tern_foreach(bindings, binding_loop, &binding_lookup); |
288 } | 314 } |
289 } | 315 } |
290 uint32_t width = render_width(); | 316 uint32_t width = render_width(); |
291 uint32_t height = render_height(); | 317 uint32_t height = render_height(); |
292 if (nk_begin(context, "Keyboard Bindings", nk_rect(0, 0, width, height), 0)) { | 318 if (nk_begin(context, "Keyboard Bindings", nk_rect(0, 0, width, height), 0)) { |
293 binding_group(context, "Controller 1", controller1_binds, NUM_C1_BINDS, binding_lookup); | 319 binding_group(context, "Controller 1", controller1_binds, NULL, NUM_C1_BINDS, binding_lookup); |
294 binding_group(context, "Controller 2", controller2_binds, NUM_C2_BINDS, binding_lookup); | 320 binding_group(context, "Controller 2", controller2_binds, NULL, NUM_C2_BINDS, binding_lookup); |
295 binding_group(context, "Speed Control", speed_binds, NUM_SPEED_BINDS, binding_lookup); | 321 binding_group(context, "General", general_binds, general_names, NUM_GEN_BINDS, binding_lookup); |
322 binding_group(context, "Speed Control", speed_binds, speed_names, NUM_SPEED_BINDS, binding_lookup); | |
323 binding_group(context, "Debug", debug_binds, debug_names, NUM_DBG_BINDS, binding_lookup); | |
296 | 324 |
325 nk_end(context); | |
326 } | |
327 if (set_binding && nk_begin(context, "Set Binding", nk_rect(width/4, height/4, width/2/*width*3/4*/, height/2), NK_WINDOW_TITLE | NK_WINDOW_BORDER)) { | |
328 nk_layout_row_static(context, 30, width/2-30, 1); | |
329 nk_label(context, "Press new key for", NK_TEXT_CENTERED); | |
330 nk_label(context, set_label, NK_TEXT_CENTERED); | |
331 if (nk_button_label(context, "Cancel")) { | |
332 free(set_label); | |
333 set_binding = set_label = NULL; | |
334 } | |
297 nk_end(context); | 335 nk_end(context); |
298 } | 336 } |
299 } | 337 } |
300 void view_controllers(struct nk_context *context) | 338 void view_controllers(struct nk_context *context) |
301 { | 339 { |