rnd-19990108-1
[rocksndiamonds.git] / src / buttons.h
index d52b4a628b529c3cf3ba193cdb9a3a8418bee7ee..5a62e9a48a848036cbf80ef9ae656301b8100116 100644 (file)
 #define ED_BUTTON_EDOWN_Y2POS  165
 #define ED_BUTTON_ELEM_Y2POS   190
 
+#define ED_SCROLLBUTTON_XSIZE  30
+#define ED_SCROLLBUTTON_YSIZE  20
+
 #define ED_BUTTON_CTRL_XPOS    5
 #define ED_BUTTON_CTRL_YPOS    5
 #define ED_BUTTON_CTRL_XSIZE   90
 #define ED_BUTTON_FILL_YSIZE   20
 #define ED_BUTTON_LEFT_XPOS    5
 #define ED_BUTTON_LEFT_YPOS    65
-#define ED_BUTTON_LEFT_XSIZE   30
-#define ED_BUTTON_LEFT_YSIZE   20
+#define ED_BUTTON_LEFT_XSIZE   ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_LEFT_YSIZE   ED_SCROLLBUTTON_YSIZE
 #define ED_BUTTON_UP_XPOS      35
 #define ED_BUTTON_UP_YPOS      55
-#define ED_BUTTON_UP_XSIZE     30
-#define ED_BUTTON_UP_YSIZE     20
+#define ED_BUTTON_UP_XSIZE     ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_UP_YSIZE     ED_SCROLLBUTTON_YSIZE
 #define ED_BUTTON_DOWN_XPOS    35
 #define ED_BUTTON_DOWN_YPOS    75
-#define ED_BUTTON_DOWN_XSIZE   30
-#define ED_BUTTON_DOWN_YSIZE   20
+#define ED_BUTTON_DOWN_XSIZE   ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_DOWN_YSIZE   ED_SCROLLBUTTON_YSIZE
 #define ED_BUTTON_RIGHT_XPOS   65
 #define ED_BUTTON_RIGHT_YPOS   65
-#define ED_BUTTON_RIGHT_XSIZE  30
-#define ED_BUTTON_RIGHT_YSIZE  20
+#define ED_BUTTON_RIGHT_XSIZE  ED_SCROLLBUTTON_XSIZE
+#define ED_BUTTON_RIGHT_YSIZE  ED_SCROLLBUTTON_YSIZE
 
 #define ED_BUTTON_EDIT_XPOS    5
 #define ED_BUTTON_EDIT_YPOS    5
 #define ED_BUTTON_EXIT_XSIZE   90
 #define ED_BUTTON_EXIT_YSIZE   20
 
+#define ED_BUTTON_COUNT_YPOS   60
+#define ED_BUTTON_COUNT_XSIZE  20
+#define ED_BUTTON_COUNT_YSIZE  20
 #define ED_BUTTON_MINUS_XPOS   2
-#define ED_BUTTON_MINUS_YPOS   60
-#define ED_BUTTON_MINUS_XSIZE  20
-#define ED_BUTTON_MINUS_YSIZE  20
+#define ED_BUTTON_MINUS_YPOS   ED_BUTTON_COUNT_YPOS
+#define ED_BUTTON_MINUS_XSIZE  ED_BUTTON_COUNT_XSIZE
+#define ED_BUTTON_MINUS_YSIZE  ED_BUTTON_COUNT_YSIZE
 #define ED_WIN_COUNT_XPOS      (ED_BUTTON_MINUS_XPOS+ED_BUTTON_MINUS_XSIZE+2)
-#define ED_WIN_COUNT_YPOS      ED_BUTTON_MINUS_YPOS
+#define ED_WIN_COUNT_YPOS      ED_BUTTON_COUNT_YPOS
 #define ED_WIN_COUNT_XSIZE     52
-#define ED_WIN_COUNT_YSIZE     ED_BUTTON_MINUS_YSIZE
+#define ED_WIN_COUNT_YSIZE     ED_BUTTON_COUNT_YSIZE
 #define ED_BUTTON_PLUS_XPOS    (ED_WIN_COUNT_XPOS+ED_WIN_COUNT_XSIZE+2)
-#define ED_BUTTON_PLUS_YPOS    ED_BUTTON_MINUS_YPOS
-#define ED_BUTTON_PLUS_XSIZE   ED_BUTTON_MINUS_XSIZE
-#define ED_BUTTON_PLUS_YSIZE   ED_BUTTON_MINUS_YSIZE
+#define ED_BUTTON_PLUS_YPOS    ED_BUTTON_COUNT_YPOS
+#define ED_BUTTON_PLUS_XSIZE   ED_BUTTON_COUNT_XSIZE
+#define ED_BUTTON_PLUS_YSIZE   ED_BUTTON_COUNT_YSIZE
 
 #define ED_COUNT_GADGET_XPOS   16
 #define ED_COUNT_GADGET_YPOS   (16+3*MINI_TILEY+64)
@@ -270,7 +276,7 @@ int CheckCountButtons(int, int, int);
 
 /* gadget types */
 #define GD_TYPE_NORMAL_BUTTON          (1<<0)
-#define GD_TYPE_TWO_STATE_BUTTON       (1<<1)
+#define GD_TYPE_RADIO_BUTTON           (1<<1)
 #define GD_TYPE_DRAWING_AREA           (1<<2)
 #define GD_TYPE_TEXTINPUT              (1<<3)
 #define GD_TYPE_TEXTOUTPUT             (1<<4)
@@ -283,6 +289,10 @@ int CheckCountButtons(int, int, int);
 #define GD_EVENT_PRESSED               (1<<0)
 #define GD_EVENT_RELEASED              (1<<1)
 #define GD_EVENT_MOVING                        (1<<2)
+#define GD_EVENT_REPEATED              (1<<3)
+#define GD_EVENT_OFF_BORDERS           (1<<4)
+#define GD_EVENT_TEXT_RETURN           (1<<5)
+#define GD_EVENT_TEXT_LEAVING          (1<<6)
 
 /* gadget button states */
 #define GD_BUTTON_UNPRESSED            0
@@ -293,21 +303,30 @@ int CheckCountButtons(int, int, int);
 
 /* gadget creation tags */
 #define GDI_END                                0
-#define GDI_X                          1
-#define GDI_Y                          2
-#define GDI_WIDTH                      3
-#define GDI_HEIGHT                     4
-#define GDI_TYPE                       5
-#define GDI_STATE                      6
-#define GDI_ALT_STATE                  7
-#define GDI_NUMBER_VALUE               8
-#define GDI_TEXT_VALUE                 9
-#define GDI_DESIGN_UNPRESSED           10
-#define GDI_DESIGN_PRESSED             11
-#define GDI_ALT_DESIGN_UNPRESSED       12
-#define GDI_ALT_DESIGN_PRESSED         13
-#define GDI_EVENT                      14
-#define GDI_CALLBACK                   15
+#define GDI_CUSTOM_ID                  1
+#define GDI_X                          2
+#define GDI_Y                          3
+#define GDI_WIDTH                      4
+#define GDI_HEIGHT                     5
+#define GDI_TYPE                       6
+#define GDI_STATE                      7
+#define GDI_RADIO_NR                   8
+#define GDI_RADIO_PRESSED              9
+#define GDI_NUMBER_VALUE               10
+#define GDI_NUMBER_MIN                 11
+#define GDI_NUMBER_MAX                 12
+#define GDI_TEXT_VALUE                 13
+#define GDI_TEXT_SIZE                  14
+#define GDI_TEXT_BORDER                        15
+#define GDI_DESIGN_UNPRESSED           16
+#define GDI_DESIGN_PRESSED             17
+#define GDI_ALT_DESIGN_UNPRESSED       18
+#define GDI_ALT_DESIGN_PRESSED         19
+#define GDI_EVENT_MASK                 20
+#define GDI_EVENT                      21
+#define GDI_CALLBACK                   22
+#define GDI_AREA_SIZE                  23
+#define GDI_ITEM_SIZE                  24
 
 typedef void (*gadget_callback_function)(void *);
 
@@ -317,48 +336,53 @@ struct GadgetDesign
   int x, y;                            /* position of rectangle in Pixmap */
 };
 
+struct GadgetEvent
+{
+  unsigned long type;                  /* event type */
+  int button;                          /* button number for button events */
+  int x, y;                            /* gadget position at event time */
+  boolean off_borders;                 /* mouse pointer outside gadget? */
+};
+
+struct GadgetDrawingArea
+{
+  int area_xsize, area_ysize;          /* size of drawing area (in items) */
+  int item_xsize, item_ysize;          /* size of each item in drawing area */
+};
+
 struct GadgetInfo
 {
+  int id;                              /* internal gadget identifier */
+  int custom_id;                       /* custom gadget identifier */
   int x, y;                            /* gadget position */
   int width, height;                   /* gadget size */
   unsigned long type;                  /* type (button, text input, ...) */
   unsigned long state;                 /* state (pressed, released, ...) */
-  boolean alt_state;                   /* alternative state */
+  int radio_nr;                                /* number of radio button series */
+  boolean radio_pressed;               /* radio button state */
   boolean mapped;                      /* gadget is active */
   long number_value;
   char text_value[MAX_GADGET_TEXTSIZE];
+  int text_size;                       /* maximal size of input text */
+  int text_border;                     /* border size of text input gadget */
   struct GadgetDesign design[2];       /* 0: normal; 1: pressed */
   struct GadgetDesign alt_design[2];   /* alternative design */
-  unsigned long event;                 /* actual gadget event */
+  unsigned long event_mask;            /* possible events for this gadget */
+  struct GadgetEvent event;            /* actual gadget event */
   gadget_callback_function callback;
+  struct GadgetDrawingArea drawing;    /* fields for drawing area gadget */
   struct GadgetInfo *next;             /* next list entry */
 };
 
-
-#if 0
-struct NewGadget
-{
-  int x, y;                            /* screen position */
-  int width, height;                   /* screen size */
-  unsigned long type;                  /* type (button, text input, ...) */
-  struct GadgetDesign *design[2];      /* 0: normal; 1: pressed */
-  struct GadgetDesign *alt_design[2];  /* alternative design */
-  unsigned long value_mask;            /* actual gadget event */
-};
-#endif
-
-struct GadgetEvent
-{
-  unsigned long state;                 /* state (pressed, released, ...) */
-  int x,y;                             /* position inside drawing area */
-};
-
 struct GadgetInfo *CreateGadget(int, ...);
 void FreeGadget(struct GadgetInfo *);
 
+void ClickOnGadget(struct GadgetInfo *);
+
 void MapGadget(struct GadgetInfo *);
 void UnmapGadget(struct GadgetInfo *);
 
 void HandleGadgets(int, int, int);
+void HandleGadgetsKeyInput(KeySym);
 
 #endif