X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fgadgets.c;h=244db6ea8852b4a4df027f3ffbc95848b635210d;hb=39fb4fecfb8d4647d3563bdb18ce0065f6129522;hp=a797c75475a1a9b41bf9f6cb2e25a79a67f5f406;hpb=e9b47ffa7a91cd2a2317b3d5db85165b64e2f74c;p=rocksndiamonds.git diff --git a/src/libgame/gadgets.c b/src/libgame/gadgets.c index a797c754..244db6ea 100644 --- a/src/libgame/gadgets.c +++ b/src/libgame/gadgets.c @@ -13,6 +13,7 @@ #include #include "gadgets.h" +#include "image.h" #include "text.h" #include "misc.h" @@ -782,6 +783,10 @@ static void HandleGadgetTags(struct GadgetInfo *gi, int first_tag, va_list ap) { switch(tag) { + case GDI_IMAGE_ID: + gi->image_id = va_arg(ap, int); + break; + case GDI_CUSTOM_ID: gi->custom_id = va_arg(ap, int); break; @@ -1281,6 +1286,7 @@ struct GadgetInfo *CreateGadget(int first_tag, ...) /* always start with reliable default values */ new_gadget->id = getNewGadgetID(); + new_gadget->image_id = -1; new_gadget->callback_info = default_callback_info; new_gadget->callback_action = default_callback_action; new_gadget->active = TRUE; @@ -2267,3 +2273,43 @@ boolean HandleGadgetsKeyInput(Key key) return TRUE; } + +void DumpGadgetIdentifiers() +{ + struct GadgetInfo *gi; + + Print("Gadgets on current screen:\n"); + + for (gi = gadget_list_first_entry; gi != NULL; gi = gi->next) + { + if (gi->mapped && gi->image_id != -1) + { + char *token = getTokenFromImageID(gi->image_id); + char *prefix = "gfx."; + + if (strPrefix(token, prefix)) + token = &token[strlen(prefix)]; + + Print("- '%s'\n", token); + } + } + + Print("Done.\n"); +} + +boolean DoGadgetAction(int image_id) +{ + struct GadgetInfo *gi; + + for (gi = gadget_list_first_entry; gi != NULL; gi = gi->next) + { + if (gi->mapped && gi->image_id == image_id) + { + gi->callback_action(gi); + + return TRUE; + } + } + + return FALSE; +}