#define ED_BUTTON_EDOWN_Y2POS 165
#define ED_BUTTON_ELEM_Y2POS 190
+#define ED_CURSORBUTTON_XSIZE 30
+#define ED_CURSORBUTTON_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_CURSORBUTTON_XSIZE
+#define ED_BUTTON_LEFT_YSIZE ED_CURSORBUTTON_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_CURSORBUTTON_XSIZE
+#define ED_BUTTON_UP_YSIZE ED_CURSORBUTTON_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_CURSORBUTTON_XSIZE
+#define ED_BUTTON_DOWN_YSIZE ED_CURSORBUTTON_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_CURSORBUTTON_XSIZE
+#define ED_BUTTON_RIGHT_YSIZE ED_CURSORBUTTON_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)
/* gadget types */
-#define GD_TYPE_NORMAL_BUTTON (1<<0)
-#define GD_TYPE_TWO_STATE_BUTTON (1<<1)
-#define GD_TYPE_DRAWING_AREA (1<<2)
-#define GD_TYPE_TEXTINPUT (1<<3)
-#define GD_TYPE_TEXTOUTPUT (1<<4)
-#define GD_TYPE_NUMBERINPUT (1<<5)
-#define GD_TYPE_NUMBEROUTPUT (1<<6)
-#define GD_TYPE_SCROLLBAR_VERTICAL (1<<7)
-#define GD_TYPE_SCROLLBAR_HORIZONTAL (1<<8)
+#define GD_TYPE_NORMAL_BUTTON (1 << 0)
+#define GD_TYPE_CHECK_BUTTON (1 << 1)
+#define GD_TYPE_RADIO_BUTTON (1 << 2)
+#define GD_TYPE_DRAWING_AREA (1 << 3)
+#define GD_TYPE_TEXTINPUT_ALPHANUMERIC (1 << 4)
+#define GD_TYPE_TEXTINPUT_NUMERIC (1 << 5)
+#define GD_TYPE_SCROLLBAR_VERTICAL (1 << 6)
+#define GD_TYPE_SCROLLBAR_HORIZONTAL (1 << 7)
+
+#define GD_TYPE_BUTTON (GD_TYPE_NORMAL_BUTTON | \
+ GD_TYPE_CHECK_BUTTON | \
+ GD_TYPE_RADIO_BUTTON)
+#define GD_TYPE_SCROLLBAR (GD_TYPE_SCROLLBAR_VERTICAL | \
+ GD_TYPE_SCROLLBAR_HORIZONTAL)
+#define GD_TYPE_TEXTINPUT (GD_TYPE_TEXTINPUT_ALPHANUMERIC | \
+ GD_TYPE_TEXTINPUT_NUMERIC)
/* gadget events */
-#define GD_EVENT_PRESSED (1<<0)
-#define GD_EVENT_RELEASED (1<<1)
-#define GD_EVENT_MOVING (1<<2)
+#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
/* gadget structure constants */
#define MAX_GADGET_TEXTSIZE 1024
+#define MAX_INFO_TEXTSIZE 1024
/* gadget creation tags */
#define GDI_END 0
-#define GDI_ID 1
+#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_ALT_STATE 8
-#define GDI_NUMBER_VALUE 9
-#define GDI_TEXT_VALUE 10
-#define GDI_DESIGN_UNPRESSED 11
-#define GDI_DESIGN_PRESSED 12
-#define GDI_ALT_DESIGN_UNPRESSED 13
-#define GDI_ALT_DESIGN_PRESSED 14
-#define GDI_EVENT_MASK 15
-#define GDI_EVENT 16
-#define GDI_CALLBACK 17
-
-typedef void (*gadget_callback_function)(void *);
+#define GDI_CHECKED 8
+#define GDI_RADIO_NR 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_DESIGN_UNPRESSED 15
+#define GDI_DESIGN_PRESSED 16
+#define GDI_ALT_DESIGN_UNPRESSED 17
+#define GDI_ALT_DESIGN_PRESSED 18
+#define GDI_DESIGN_BORDER 19
+#define GDI_DECORATION_DESIGN 20
+#define GDI_DECORATION_POSITION 22
+#define GDI_DECORATION_SIZE 21
+#define GDI_DECORATION_SHIFTING 23
+#define GDI_EVENT_MASK 24
+#define GDI_EVENT 25
+#define GDI_CALLBACK_INFO 26
+#define GDI_CALLBACK_ACTION 27
+#define GDI_AREA_SIZE 28
+#define GDI_ITEM_SIZE 29
+#define GDI_SCROLLBAR_ITEMS_MAX 30
+#define GDI_SCROLLBAR_ITEMS_VISIBLE 31
+#define GDI_SCROLLBAR_ITEM_POSITION 32
+#define GDI_INFO_TEXT 33
+
+typedef void (*gadget_function)(void *);
struct GadgetDesign
{
int x, y; /* position of rectangle in Pixmap */
};
+struct GadgetDecoration
+{
+ struct GadgetDesign design; /* decoration design structure */
+ int x, y; /* position of deco on the gadget */
+ int width, height; /* width and height of decoration */
+ int xshift, yshift; /* deco shifting when gadget pressed */
+};
+
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? */
+ int item_x, item_y, item_position; /* new item position */
+};
+
+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 GadgetTextInput
+{
+ char value[MAX_GADGET_TEXTSIZE]; /* text string in input field */
+ int number_value; /* integer value, if numeric */
+ int number_min; /* minimal allowed numeric value */
+ int number_max; /* maximal allowed numeric value */
+ int size; /* maximal size of input text */
+ int cursor_position; /* actual cursor position */
+};
+
+struct GadgetScrollbar
+{
+ int items_max; /* number of items to access */
+ int items_visible; /* number of visible items */
+ int item_position; /* actual item position */
+ int size_max; /* this is either width or height */
+ int size; /* scrollbar size on screen */
+ int position; /* scrollbar position on screen */
+ int position_max; /* bottom/right scrollbar position */
+ int drag_position; /* drag position on scrollbar */
};
struct GadgetInfo
{
- int id; /* gadget identifier */
+ int id; /* internal gadget identifier */
+ int custom_id; /* custom gadget identifier */
+ char info_text[MAX_INFO_TEXTSIZE]; /* short popup info text */
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 */
+ boolean checked; /* check/radio button state */
+ int radio_nr; /* number of radio button series */
boolean mapped; /* gadget is active */
- long number_value;
- char text_value[MAX_GADGET_TEXTSIZE];
struct GadgetDesign design[2]; /* 0: normal; 1: pressed */
struct GadgetDesign alt_design[2]; /* alternative design */
+ struct GadgetDecoration deco; /* decoration on top of gadget */
+ int design_border; /* border size of gadget decoration */
unsigned long event_mask; /* possible events for this gadget */
struct GadgetEvent event; /* actual gadget event */
- gadget_callback_function callback;
+ gadget_function callback_info; /* function for pop-up info text */
+ gadget_function callback_action; /* function for gadget action */
+ struct GadgetDrawingArea drawing; /* fields for drawing area gadget */
+ struct GadgetTextInput text; /* fields for text input gadget */
+ struct GadgetScrollbar scrollbar; /* fields for scrollbar gadget */
struct GadgetInfo *next; /* next list entry */
};
struct GadgetInfo *CreateGadget(int, ...);
void FreeGadget(struct GadgetInfo *);
+void ClickOnGadget(struct GadgetInfo *);
+void AdjustScrollbar(struct GadgetInfo *, int, int);
+void ModifyTextInputTextValue(struct GadgetInfo *, char *);
+void ModifyTextInputNumberValue(struct GadgetInfo *, int);
+
void MapGadget(struct GadgetInfo *);
void UnmapGadget(struct GadgetInfo *);
void HandleGadgets(int, int, int);
+void HandleGadgetsKeyInput(KeySym);
#endif