123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266 |
- /** \file quick.h
- * \brief Header: quick dialog engine
- */
- #ifndef MC__QUICK_H
- #define MC__QUICK_H
- /*** typedefs(not structures) and defined constants **********************************************/
- #define QUICK_CHECKBOX(txt, st, id_) \
- { \
- .widget_type = quick_checkbox, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = id_, .u = { \
- .checkbox = { .text = txt, .state = st } \
- } \
- }
- #define QUICK_BUTTON(txt, act, cb, id_) \
- { \
- .widget_type = quick_button, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = id_, .u = { \
- .button = { .text = txt, .action = act, .callback = cb } \
- } \
- }
- #define QUICK_INPUT(txt, hname, res, id_, is_passwd_, strip_passwd_, completion_flags_) \
- { \
- .widget_type = quick_input, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = id_, .u = { \
- .input = { .label_text = NULL, \
- .label_location = input_label_none, \
- .label = NULL, \
- .text = txt, \
- .completion_flags = completion_flags_, \
- .is_passwd = is_passwd_, \
- .strip_passwd = strip_passwd_, \
- .histname = hname, \
- .result = res } \
- } \
- }
- #define QUICK_LABELED_INPUT(label_, label_loc, txt, hname, res, id_, is_passwd_, strip_passwd_, \
- completion_flags_) \
- { \
- .widget_type = quick_input, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = id_, .u = { \
- .input = { .label_text = label_, \
- .label_location = label_loc, \
- .label = NULL, \
- .text = txt, \
- .completion_flags = completion_flags_, \
- .is_passwd = is_passwd_, \
- .strip_passwd = strip_passwd_, \
- .histname = hname, \
- .result = res } \
- } \
- }
- #define QUICK_LABEL(txt, id_) \
- { \
- .widget_type = quick_label, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = id_, .u = { \
- .label = { .text = txt, .input = NULL } \
- } \
- }
- #define QUICK_RADIO(cnt, items_, val, id_) \
- { \
- .widget_type = quick_radio, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = id_, .u = { \
- .radio = { .count = cnt, .items = items_, .value = val } \
- } \
- }
- #define QUICK_START_GROUPBOX(t) \
- { \
- .widget_type = quick_start_groupbox, .options = WOP_DEFAULT, \
- .pos_flags = WPOS_KEEP_DEFAULT, .id = NULL, .u = { \
- .groupbox = { .title = t } \
- } \
- }
- #define QUICK_STOP_GROUPBOX \
- { \
- .widget_type = quick_stop_groupbox, .options = WOP_DEFAULT, \
- .pos_flags = WPOS_KEEP_DEFAULT, .id = NULL, .u = { \
- .input = { .text = NULL, .histname = NULL, .result = NULL } \
- } \
- }
- #define QUICK_SEPARATOR(line_) \
- { \
- .widget_type = quick_separator, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = NULL, .u = { \
- .separator = { .space = TRUE, .line = line_ } \
- } \
- }
- #define QUICK_START_COLUMNS \
- { \
- .widget_type = quick_start_columns, .options = WOP_DEFAULT, \
- .pos_flags = WPOS_KEEP_DEFAULT, .id = NULL, .u = { \
- .input = { .text = NULL, .histname = NULL, .result = NULL } \
- } \
- }
- #define QUICK_NEXT_COLUMN \
- { \
- .widget_type = quick_next_column, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = NULL, .u = { \
- .input = { .text = NULL, .histname = NULL, .result = NULL } \
- } \
- }
- #define QUICK_STOP_COLUMNS \
- { \
- .widget_type = quick_stop_columns, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = NULL, .u = { \
- .input = { .text = NULL, .histname = NULL, .result = NULL } \
- } \
- }
- #define QUICK_START_BUTTONS(space_, line_) \
- { \
- .widget_type = quick_buttons, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = NULL, .u = { \
- .separator = { .space = space_, .line = line_ } \
- } \
- }
- #define QUICK_BUTTONS_OK_CANCEL \
- QUICK_START_BUTTONS (TRUE, TRUE), QUICK_BUTTON (N_ ("&OK"), B_ENTER, NULL, NULL), \
- QUICK_BUTTON (N_ ("&Cancel"), B_CANCEL, NULL, NULL)
- #define QUICK_END \
- { \
- .widget_type = quick_end, .options = WOP_DEFAULT, .pos_flags = WPOS_KEEP_DEFAULT, \
- .id = NULL, .u = { \
- .input = { .text = NULL, .histname = NULL, .result = NULL } \
- } \
- }
- /*** enums ***************************************************************************************/
- /* Quick Widgets */
- typedef enum
- {
- quick_end = 0,
- quick_checkbox = 1,
- quick_button = 2,
- quick_input = 3,
- quick_label = 4,
- quick_radio = 5,
- quick_start_groupbox = 6,
- quick_stop_groupbox = 7,
- quick_separator = 8,
- quick_start_columns = 9,
- quick_next_column = 10,
- quick_stop_columns = 11,
- quick_buttons = 12
- } quick_t;
- typedef enum
- {
- input_label_none = 0,
- input_label_above = 1,
- input_label_left = 2,
- input_label_right = 3,
- input_label_below = 4
- } quick_input_label_location_t;
- /*** structures declarations (and typedefs of structures)*****************************************/
- /* The widget is placed on relative_?/divisions_? of the parent widget */
- typedef struct quick_widget_t quick_widget_t;
- struct quick_widget_t
- {
- quick_t widget_type;
- widget_options_t options;
- widget_state_t state;
- widget_pos_flags_t pos_flags;
- unsigned long *id;
- /* widget parameters */
- union
- {
- struct
- {
- const char *text;
- gboolean *state; /* in/out */
- } checkbox;
- struct
- {
- const char *text;
- int action;
- bcback_fn callback;
- } button;
- struct
- {
- const char *label_text;
- quick_input_label_location_t label_location;
- quick_widget_t *label;
- const char *text;
- input_complete_t completion_flags;
- gboolean is_passwd; /* TRUE -- is password */
- gboolean strip_passwd;
- const char *histname;
- char **result;
- } input;
- struct
- {
- const char *text;
- quick_widget_t *input;
- } label;
- struct
- {
- int count;
- const char **items;
- int *value; /* in/out */
- } radio;
- struct
- {
- const char *title;
- } groupbox;
- struct
- {
- gboolean space;
- gboolean line;
- } separator;
- } u;
- };
- typedef struct
- {
- WRect rect; /* if rect.x == -1 or rect.y == -1, then dialog is ceneterd;
- * rect.lines is unused and ignored */
- const char *title;
- const char *help;
- quick_widget_t *widgets;
- widget_cb_fn callback;
- widget_mouse_cb_fn mouse_callback;
- } quick_dialog_t;
- /*** global variables defined in .c file *********************************************************/
- /*** declarations of public functions ************************************************************/
- int quick_dialog_skip (quick_dialog_t *quick_dlg, int nskip);
- /*** inline functions ****************************************************************************/
- static inline int
- quick_dialog (quick_dialog_t *quick_dlg)
- {
- return quick_dialog_skip (quick_dlg, 1);
- }
- #endif /* MC__QUICK_H */
|