|
1 | 1 | #include "game/gui/trn_menu.h" |
2 | 2 | #include "game/gui/sizer.h" |
| 3 | +#include "game/gui/widget.h" |
3 | 4 | #include "utils/allocator.h" |
4 | 5 | #include "utils/log.h" |
5 | 6 | #include "utils/vector.h" |
@@ -420,6 +421,46 @@ int trnmenu_is_finished(const component *c) { |
420 | 421 | return m->finished; |
421 | 422 | } |
422 | 423 |
|
| 424 | +static component *trnmenu_find_text(component *c, const char *text) { |
| 425 | + log_debug("trnmenu_find_text"); |
| 426 | + |
| 427 | + iterator it; |
| 428 | + component **tmp; |
| 429 | + sizer_begin_iterator(c, &it); |
| 430 | + |
| 431 | + foreach(it, tmp) { |
| 432 | + component *t = *tmp; |
| 433 | + // log_debug("trnmenu_find_text: iterating %p", t); |
| 434 | + |
| 435 | + // if(!component_is_selectable(t)) { |
| 436 | + // continue; |
| 437 | + //} |
| 438 | + // widget *w = component_get_obj(t); |
| 439 | + // component_get_obj(t); |
| 440 | + |
| 441 | + component *found = widget_find_text(t, text); |
| 442 | + if(found != NULL) { |
| 443 | + log_debug("trnmenu_find_text: found %p", t); |
| 444 | + return found; |
| 445 | + } else { |
| 446 | + log_debug("trnmenu_find_text: found was NULL on %p", t); |
| 447 | + } |
| 448 | + } |
| 449 | + log_debug("trnmenu_find_text: checking submenu"); |
| 450 | + |
| 451 | + trnmenu *m = sizer_get_obj(c); |
| 452 | + if(m->submenu != NULL) { |
| 453 | + log_debug("trnmenu_find_text: submenu is non-NULL"); |
| 454 | + component *found = component_find_text(m->submenu, text); |
| 455 | + if(found != NULL) { |
| 456 | + return found; |
| 457 | + } |
| 458 | + } else { |
| 459 | + log_debug("trnmenu_find_text: submenu is NULL"); |
| 460 | + } |
| 461 | + return NULL; |
| 462 | +} |
| 463 | + |
423 | 464 | void trnmenu_set_submenu(component *c, component *submenu) { |
424 | 465 | trnmenu *m = sizer_get_obj(c); |
425 | 466 | if(m->submenu) { |
@@ -480,6 +521,7 @@ component *trnmenu_create(surface *button_sheet, int sheet_x, int sheet_y, bool |
480 | 521 | sizer_set_event_cb(c, trnmenu_event); |
481 | 522 | sizer_set_tick_cb(c, trnmenu_tick); |
482 | 523 | sizer_set_free_cb(c, trnmenu_free); |
| 524 | + sizer_set_find_text_cb(c, trnmenu_find_text); |
483 | 525 |
|
484 | 526 | return c; |
485 | 527 | } |
0 commit comments