123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /* gui_util.c - GUI utility functions. */
- /*
- * GRUB -- GRand Unified Bootloader
- * Copyright (C) 2008 Free Software Foundation, Inc.
- *
- * GRUB is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * GRUB is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with GRUB. If not, see <http://www.gnu.org/licenses/>.
- */
- #include <grub/mm.h>
- #include <grub/misc.h>
- #include <grub/gui.h>
- #include <grub/gui_string_util.h>
- struct find_by_id_state
- {
- const char *match_id;
- grub_gui_component_callback match_callback;
- void *match_userdata;
- };
- static void
- find_by_id_recursively (grub_gui_component_t component, void *userdata)
- {
- struct find_by_id_state *state;
- const char *id;
- state = (struct find_by_id_state *) userdata;
- id = component->ops->get_id (component);
- if (id && grub_strcmp (id, state->match_id) == 0)
- state->match_callback (component, state->match_userdata);
- if (component->ops->is_instance (component, "container"))
- {
- grub_gui_container_t container;
- container = (grub_gui_container_t) component;
- container->ops->iterate_children (container,
- find_by_id_recursively,
- state);
- }
- }
- void
- grub_gui_find_by_id (grub_gui_component_t root,
- const char *id,
- grub_gui_component_callback cb,
- void *userdata)
- {
- struct find_by_id_state state;
- state.match_id = id;
- state.match_callback = cb;
- state.match_userdata = userdata;
- find_by_id_recursively (root, &state);
- }
- struct iterate_recursively_state
- {
- grub_gui_component_callback callback;
- void *userdata;
- };
- static
- void iterate_recursively_cb (grub_gui_component_t component, void *userdata)
- {
- struct iterate_recursively_state *state;
- state = (struct iterate_recursively_state *) userdata;
- state->callback (component, state->userdata);
- if (component->ops->is_instance (component, "container"))
- {
- grub_gui_container_t container;
- container = (grub_gui_container_t) component;
- container->ops->iterate_children (container,
- iterate_recursively_cb,
- state);
- }
- }
- void
- grub_gui_iterate_recursively (grub_gui_component_t root,
- grub_gui_component_callback cb,
- void *userdata)
- {
- struct iterate_recursively_state state;
- state.callback = cb;
- state.userdata = userdata;
- iterate_recursively_cb (root, &state);
- }
|