Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 | /* SPDX-License-Identifier: GPL-2.0+ */ /* * dialog.h -- common declarations for all dialog modules * * AUTHOR: Savio Lam (lam836@cs.cuhk.hk) */ #include <sys/types.h> #include <fcntl.h> #include <unistd.h> #include <ctype.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #ifdef __sun__ #define CURS_MACROS #endif #include <ncurses.h> #define TR(params) _tracef params #define KEY_ESC 27 #define TAB 9 #define MAX_LEN 2048 #define BUF_SIZE (10*1024) #define MIN(x,y) (x < y ? x : y) #define MAX(x,y) (x > y ? x : y) #ifndef ACS_ULCORNER #define ACS_ULCORNER '+' #endif #ifndef ACS_LLCORNER #define ACS_LLCORNER '+' #endif #ifndef ACS_URCORNER #define ACS_URCORNER '+' #endif #ifndef ACS_LRCORNER #define ACS_LRCORNER '+' #endif #ifndef ACS_HLINE #define ACS_HLINE '-' #endif #ifndef ACS_VLINE #define ACS_VLINE '|' #endif #ifndef ACS_LTEE #define ACS_LTEE '+' #endif #ifndef ACS_RTEE #define ACS_RTEE '+' #endif #ifndef ACS_UARROW #define ACS_UARROW '^' #endif #ifndef ACS_DARROW #define ACS_DARROW 'v' #endif /* error return codes */ #define ERRDISPLAYTOOSMALL (KEY_MAX + 1) /* * Color definitions */ struct dialog_color { chtype atr; /* Color attribute */ int fg; /* foreground */ int bg; /* background */ int hl; /* highlight this item */ }; struct subtitle_list { struct subtitle_list *next; const char *text; }; struct dialog_info { const char *backtitle; struct subtitle_list *subtitles; struct dialog_color screen; struct dialog_color shadow; struct dialog_color dialog; struct dialog_color title; struct dialog_color border; struct dialog_color button_active; struct dialog_color button_inactive; struct dialog_color button_key_active; struct dialog_color button_key_inactive; struct dialog_color button_label_active; struct dialog_color button_label_inactive; struct dialog_color inputbox; struct dialog_color inputbox_border; struct dialog_color searchbox; struct dialog_color searchbox_title; struct dialog_color searchbox_border; struct dialog_color position_indicator; struct dialog_color menubox; struct dialog_color menubox_border; struct dialog_color item; struct dialog_color item_selected; struct dialog_color tag; struct dialog_color tag_selected; struct dialog_color tag_key; struct dialog_color tag_key_selected; struct dialog_color check; struct dialog_color check_selected; struct dialog_color uarrow; struct dialog_color darrow; }; /* * Global variables */ extern struct dialog_info dlg; extern char dialog_input_result[]; extern int saved_x, saved_y; /* Needed in signal handler in mconf.c */ /* * Function prototypes */ /* item list as used by checklist and menubox */ void item_reset(void); void item_make(const char *fmt, ...); void item_add_str(const char *fmt, ...); void item_set_tag(char tag); void item_set_data(void *p); void item_set_selected(int val); int item_activate_selected(void); void *item_data(void); char item_tag(void); /* item list manipulation for lxdialog use */ #define MAXITEMSTR 200 struct dialog_item { char str[MAXITEMSTR]; /* prompt displayed */ char tag; void *data; /* pointer to menu item - used by menubox+checklist */ int selected; /* Set to 1 by dialog_*() function if selected. */ }; /* list of lialog_items */ struct dialog_list { struct dialog_item node; struct dialog_list *next; }; extern struct dialog_list *item_cur; extern struct dialog_list item_nil; extern struct dialog_list *item_head; int item_count(void); void item_set(int n); int item_n(void); const char *item_str(void); int item_is_selected(void); int item_is_tag(char tag); #define item_foreach() \ for (item_cur = item_head ? item_head: item_cur; \ item_cur && (item_cur != &item_nil); item_cur = item_cur->next) /* generic key handlers */ int on_key_esc(WINDOW *win); int on_key_resize(void); /* minimum (re)size values */ #define CHECKLIST_HEIGTH_MIN 6 /* For dialog_checklist() */ #define CHECKLIST_WIDTH_MIN 6 #define INPUTBOX_HEIGTH_MIN 2 /* For dialog_inputbox() */ #define INPUTBOX_WIDTH_MIN 2 #define MENUBOX_HEIGTH_MIN 15 /* For dialog_menu() */ #define MENUBOX_WIDTH_MIN 65 #define TEXTBOX_HEIGTH_MIN 8 /* For dialog_textbox() */ #define TEXTBOX_WIDTH_MIN 8 #define YESNO_HEIGTH_MIN 4 /* For dialog_yesno() */ #define YESNO_WIDTH_MIN 4 #define WINDOW_HEIGTH_MIN 19 /* For init_dialog() */ #define WINDOW_WIDTH_MIN 80 int init_dialog(const char *backtitle); void set_dialog_backtitle(const char *backtitle); void set_dialog_subtitles(struct subtitle_list *subtitles); void end_dialog(int x, int y); void attr_clear(WINDOW * win, int height, int width, chtype attr); void dialog_clear(void); void print_autowrap(WINDOW * win, const char *prompt, int width, int y, int x); void print_button(WINDOW * win, const char *label, int y, int x, int selected); void print_title(WINDOW *dialog, const char *title, int width); void draw_box(WINDOW * win, int y, int x, int height, int width, chtype box, chtype border); void draw_shadow(WINDOW * win, int y, int x, int height, int width); int first_alpha(const char *string, const char *exempt); int dialog_yesno(const char *title, const char *prompt, int height, int width); int dialog_msgbox(const char *title, const char *prompt, int height, int width, int pause); typedef void (*update_text_fn)(char *buf, size_t start, size_t end, void *_data); int dialog_textbox(const char *title, char *tbuf, int initial_height, int initial_width, int *keys, int *_vscroll, int *_hscroll, update_text_fn update_text, void *data); int dialog_menu(const char *title, const char *prompt, const void *selected, int *s_scroll); int dialog_checklist(const char *title, const char *prompt, int height, int width, int list_height); int dialog_inputbox(const char *title, const char *prompt, int height, int width, const char *init); |