22#ifndef MADS_CORE_POPUP_H
23#define MADS_CORE_POPUP_H
25#include "mads/core/general.h"
26#include "mads/core/font.h"
27#include "mads/core/sprite.h"
28#include "mads/core/heap.h"
32#define POPUP_UPPER_LEFT 1
33#define POPUP_UPPER_RIGHT 2
34#define POPUP_LOWER_LEFT 3
35#define POPUP_LOWER_RIGHT 4
40#define POPUP_UPPER_CENTER 9
42#define pop_xs(piece) (box_param.series->index[piece-1].xs)
43#define pop_ys(piece) (box_param.series->index[piece-1].ys)
45#define pop_y2(piece) (box_param.series->index[piece-1].y)
46#define pop_y(piece) (pop_y2(piece) - pop_ys(piece) + 1)
48#define pop_m(piece) (box_param.series->index[piece-1].x)
49#define pop_x(piece) (pop_m(piece) - (pop_xs(piece) >> 1))
50#define pop_x2(piece) (pop_x(piece) + pop_xs(piece) - 1)
52#define POPUP_BASE_COLOR 18
53#define POPUP_NUM_COLORS 8
55#define POPUP_FILL_COLOR popup_colors[8]
56#define POPUP_FILL_COLOR_2 popup_colors[9]
57#define POPUP_TEXT_COLOR popup_colors[10]
58#define POPUP_HILITE_COLOR popup_colors[11]
59#define POPUP_HILITE_COLOR_2 popup_colors[12]
60#define POPUP_ASK_COLOR popup_colors[13]
62#define popup_normal_color_1 popup_colors[0]
63#define popup_normal_color_2 popup_colors[1]
64#define popup_shadow_color_1 popup_colors[2]
65#define popup_shadow_color_2 popup_colors[3]
66#define popup_hilite_color_1 popup_colors[4]
67#define popup_hilite_color_2 popup_colors[5]
68#define popup_ask_color popup_colors[6]
69#define popup_text_color popup_colors[7]
71#define POPUP_DIALOG_TEXT_COLOR popup_colors[14]
72#define POPUP_DIALOG_BUTTON_COLOR_1 popup_colors[15]
73#define POPUP_DIALOG_BUTTON_COLOR_2 popup_colors[16]
74#define POPUP_DIALOG_BORDER_COLOR_1 popup_colors[17]
75#define POPUP_DIALOG_BORDER_COLOR_2 popup_colors[18]
76#define POPUP_DIALOG_SELECT_COLOR popup_colors[19]
77#define POPUP_DIALOG_STRING_COLOR popup_colors[20]
79#define POPUP_DIALOG_MENU_TEXT_1 popup_colors[21]
80#define POPUP_DIALOG_MENU_TEXT_2 popup_colors[22]
81#define POPUP_DIALOG_MENU_TEXT_3 popup_colors[23]
83#define POPUP_MAX_LINES 20
84#define POPUP_SPACING 1
86#define POPUP_CENTER 0x8000
87#define POPUP_BUTTON_ROW 0x4000
88#define POPUP_RIGHT_JUST 0x2000
90#define POPUP_BUTTON_RIGHT 0x0800
91#define POPUP_BUTTON_LEFT 0x0400
95#define POPUP_BAR 0xffff
96#define POPUP_UNDERLINE 0x8000
97#define POPUP_DOWNPIXEL 0x4000
100#define popup_padding_width 3
112 int upper_right_adjust_y;
114 int lower_left_adjust_x;
116 int lower_right_adjust_y;
125 int pieces_per_center;
132 int menu_font_spacing;
135 int menu_right_width;
136 int menu_middle_width;
138 int menu_text_x_offset;
139 int menu_text_y_offset;
140 int menu_text_x_bonus;
141 int menu_text_y_bonus;
152 int window_x, window_y;
153 int window_xs, window_ys;
158 int depth_x, depth_xs;
167 word tab[POPUP_MAX_LINES];
168 char *text[POPUP_MAX_LINES];
173 int depth_preserve_handle;
200#define ITEM_MESSAGE 2
201#define ITEM_SAVELIST 3
218#define SCROLL_AXIS_HORIZONTAL 0
219#define SCROLL_AXIS_VERTICAL 1
221#define SCROLL_STATUS_UP 0x80
222#define SCROLL_STATUS_DOWN 0x40
246 int list_xs, list_ys;
247 int list_xw, list_yw;
251 int extra_x, extra_y;
252 int extra_xs, extra_ys;
255 int element_max_length;
272#define POPUP_DOUBLE_CLICK_THRESHOLD 20
275#define POPUP_ITEM_VECTORS 7
277#define VECTOR_X_SIZE 0
278#define VECTOR_Y_SIZE 1
279#define VECTOR_ADJUST 2
281#define VECTOR_UPDATE 4
282#define VECTOR_MOUSE 5
285#define ITEM_STATUS_ACTIVE 0x01
286#define ITEM_STATUS_CLOCK 0x02
287#define ITEM_STATUS_FORCED 0x04
288#define ITEM_STATUS_IN_RANGE 0x08
290#define ITEM_STATUS_STRING 0x10
292#define ITEM_STATUS_VIRGIN 0x20
293#define ITEM_STATUS_DIRTY 0x40
294#define ITEM_STATUS_INPUT 0x80
296#define ITEM_STATUS_INERT 0x100
323 int (*vector[POPUP_ITEM_VECTORS])(
PopupItem *item);
327#define POPUP_MOUSE_SCROLL 0x8000
328#define POPUP_MOUSE_UP 0x4000
329#define POPUP_MOUSE_DOWN 0x2000
332#define POPUP_STATUS_DYNAMIC 0x8000
333#define POPUP_STATUS_VALID 0x4000
334#define POPUP_STATUS_EXIT 0x2000
336#define POPUP_STATUS_BAR 0x0004
337#define POPUP_STATUS_STEAL 0x0002
338#define POPUP_STATUS_BUTTON 0x0001
353 int16 button_spacing;
354 int16 button_left_fill;
355 int16 button_right_fill;
356 int16 button_bar_color;
386extern int popup_esc_key;
387extern int popup_asking_number;
389extern int popup_available;
391extern int popup_preserve_initiator[3];
393extern byte popup_colors[24];
394extern byte popup_num_colors;
398extern void init_popup();
400extern int popup_create(
int horiz_pieces,
int x,
int y);
401extern void popup_add_icon(
SeriesPtr series,
int id,
int center);
402extern int popup_draw(
int save_screen,
int depth_code);
403extern void popup_destroy();
405extern void popup_next_line();
406extern void popup_set_ask();
407extern void popup_add_string(
const char *
string);
408extern void popup_write_string(
const char *
string);
409extern void popup_bar();
410extern void popup_underline();
411extern void popup_downpixel();
412extern void popup_tab(
int tab_level);
413extern void popup_center_string(
const char *
string,
int underline);
415extern int popup_and_wait(
int save_screen);
416extern int popup_and_dont_wait(
int save_screen);
418extern void popup_update_ask(
char *
string,
int maxlen);
419extern int popup_ask_string(
char *target,
int maxlen,
int save_screen);
420extern int popup_ask_number(
long *value,
int maxlen,
int save_screen);
422extern int popup_estimate_pieces(
int maxlen);
423extern int popup_get_string(
char *target,
const char *top,
const char *left,
int maxlen);
424extern int popup_get_long(
long *value,
const char *top,
const char *left,
int maxlen);
425extern int popup_get_number(int16 *value,
const char *top,
const char *left,
int maxlen);
427extern int popup_alert(
int width,
const char *message_line, ...);
429extern int popup_box_load();
441Popup *popup_dialog_create(
void *memory,
long heap_size,
int max_items);
448extern Popup *popup_dialog_destroy();
450extern PopupItem *popup_button(
const char *prompt,
int x);
451extern PopupItem *popup_cancel_button(
const char *prompt);
452extern PopupItem *popup_message(
const char *prompt,
int x,
int y);
455extern PopupItem *popup_savelist(
char *data,
char *empty_string,
456 int elements,
int element_offset,
int element_max_length,
457 int pixel_width,
int rows,
int accept_input,
int default_element);
459extern void popup_blank(
int num_lines);
460extern void popup_blank_line();
461extern void popup_width_force(
int width);
464extern void popup_menu_option(
PopupItem *item,
char *option);
465extern PopupItem *popup_menu(
const char *prompt,
466 int x,
int y,
int pixel_width,
468 int elements,
int element_max_length,
469 int default_element);