fixed compiler warnings (after adding "-Wstrict-prototypes")
[rocksndiamonds.git] / src / libgame / gadgets.c
index 668641bd30be64133832e37550cbc06eccedd803..4cf008fc01eaaec6044f85d3de57e00bfd4cad36 100644 (file)
@@ -13,6 +13,7 @@
 #include <string.h>
 
 #include "gadgets.h"
+#include "image.h"
 #include "text.h"
 #include "misc.h"
 
@@ -59,7 +60,7 @@ static struct GadgetInfo *getGadgetInfoFromGadgetID(int id)
   return gi;
 }
 
-static int getNewGadgetID()
+static int getNewGadgetID(void)
 {
   int id = next_free_gadget_id++;
 
@@ -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;
@@ -1426,37 +1432,37 @@ static void MultiMapGadgets(int mode)
   }
 }
 
-void UnmapAllGadgets()
+void UnmapAllGadgets(void)
 {
   MultiMapGadgets(MULTIMAP_ALL | MULTIMAP_UNMAP);
 }
 
-void RemapAllGadgets()
+void RemapAllGadgets(void)
 {
   MultiMapGadgets(MULTIMAP_ALL | MULTIMAP_REMAP);
 }
 
-boolean anyTextInputGadgetActive()
+boolean anyTextInputGadgetActive(void)
 {
   return (last_gi && (last_gi->type & GD_TYPE_TEXT_INPUT) && last_gi->mapped);
 }
 
-boolean anyTextAreaGadgetActive()
+boolean anyTextAreaGadgetActive(void)
 {
   return (last_gi && (last_gi->type & GD_TYPE_TEXT_AREA) && last_gi->mapped);
 }
 
-boolean anySelectboxGadgetActive()
+boolean anySelectboxGadgetActive(void)
 {
   return (last_gi && (last_gi->type & GD_TYPE_SELECTBOX) && last_gi->mapped);
 }
 
-boolean anyScrollbarGadgetActive()
+boolean anyScrollbarGadgetActive(void)
 {
   return (last_gi && (last_gi->type & GD_TYPE_SCROLLBAR) && last_gi->mapped);
 }
 
-boolean anyTextGadgetActive()
+boolean anyTextGadgetActive(void)
 {
   return (anyTextInputGadgetActive() ||
          anyTextAreaGadgetActive() ||
@@ -1481,7 +1487,7 @@ static boolean insideSelectboxArea(struct GadgetInfo *gi, int mx, int my)
 
 void ClickOnGadget(struct GadgetInfo *gi, int button)
 {
-  if (!gi->mapped)
+  if (gi == NULL || gi->deactivated || !gi->mapped)
     return;
 
   /* simulate releasing mouse button over last gadget, if still pressed */
@@ -2267,3 +2273,43 @@ boolean HandleGadgetsKeyInput(Key key)
 
   return TRUE;
 }
+
+void DumpGadgetIdentifiers(void)
+{
+  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;
+}