1 /* 2 Dialog box features module for the Midnight Commander 3 */ 4 5 /** \file dialog.h 6 * \brief Header: dialog box features module 7 */ 8 9 #ifndef MC__DIALOG_H 10 #define MC__DIALOG_H 11 12 #include <sys/types.h> /* size_t */ 13 14 #include "lib/global.h" 15 #include "lib/hook.h" /* hook_t */ 16 #include "lib/keybind.h" /* global_keymap_t */ 17 18 /*** typedefs(not structures) and defined constants **********************************************/ 19 20 #define DIALOG(x) ((WDialog *)(x)) 21 #define CONST_DIALOG(x) ((const WDialog *)(x)) 22 23 /* Common return values */ 24 /* ATTENTION: avoid overlapping with FileProgressStatus values */ 25 #define B_EXIT 0 26 #define B_CANCEL 1 27 #define B_ENTER 2 28 #define B_HELP 3 29 #define B_USER 100 30 31 /*** enums ***************************************************************************************/ 32 33 /* Dialog color constants */ 34 typedef enum 35 { 36 DLG_COLOR_NORMAL, 37 DLG_COLOR_FOCUS, 38 DLG_COLOR_HOT_NORMAL, 39 DLG_COLOR_HOT_FOCUS, 40 DLG_COLOR_TITLE, 41 DLG_COLOR_COUNT 42 } dlg_colors_enum_t; 43 44 /*** typedefs(not structures) ********************************************************************/ 45 46 typedef struct WDialog WDialog; 47 48 /* get string representation of shortcut assigned with command */ 49 /* as menu is a widget of dialog, ask dialog about shortcut string */ 50 typedef char *(*dlg_shortcut_str) (long command); 51 52 /* get dialog name to show in dialog list */ 53 typedef char *(*dlg_title_str) (const WDialog * h, size_t len); 54 55 typedef int dlg_colors_t[DLG_COLOR_COUNT]; 56 57 /*** structures declarations (and typedefs of structures)*****************************************/ 58 59 struct WDialog 60 { 61 WGroup group; /* base class */ 62 63 /* Set by the user */ 64 gboolean compact; /* Suppress spaces around the frame */ 65 const char *help_ctx; /* Name of the help entry */ 66 const int *colors; /* Color set. Unused in viewer and editor */ 67 68 /* Set and received by the user */ 69 int ret_value; /* Result of dlg_run() */ 70 71 /* Internal variables */ 72 void *data; /* Data can be passed to dialog */ 73 char *event_group; /* Name of event group for this dialog */ 74 Widget *bg; /* WFrame or WBackground */ 75 76 dlg_shortcut_str get_shortcut; /* Shortcut string */ 77 dlg_title_str get_title; /* useless for modal dialogs */ 78 }; 79 80 /*** global variables defined in .c file *********************************************************/ 81 82 /* Color styles for normal and error dialogs */ 83 extern dlg_colors_t dialog_colors; 84 extern dlg_colors_t alarm_colors; 85 extern dlg_colors_t listbox_colors; 86 87 extern GList *top_dlg; 88 89 /* A hook list for idle events */ 90 extern hook_t *idle_hook; 91 92 extern gboolean fast_refresh; 93 extern gboolean mouse_close_dialog; 94 95 extern const global_keymap_t *dialog_map; 96 97 /*** declarations of public functions ************************************************************/ 98 99 /* Creates a dialog head */ 100 WDialog *dlg_create (gboolean modal, int y1, int x1, int lines, int cols, 101 widget_pos_flags_t pos_flags, gboolean compact, 102 const int *colors, widget_cb_fn callback, widget_mouse_cb_fn mouse_callback, 103 const char *help_ctx, const char *title); 104 105 void dlg_set_default_colors (void); 106 107 void dlg_init (WDialog * h); 108 int dlg_run (WDialog * d); 109 110 void dlg_run_done (WDialog * h); 111 void dlg_save_history (WDialog * h); 112 void dlg_process_event (WDialog * h, int key, Gpm_Event * event); 113 114 char *dlg_get_title (const WDialog * h, size_t len); 115 116 /* Default callbacks for dialogs */ 117 cb_ret_t dlg_default_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data); 118 void dlg_default_mouse_callback (Widget * w, mouse_msg_t msg, mouse_event_t * event); 119 120 void dlg_stop (WDialog * h); 121 122 /* Redraw all dialogs */ 123 void do_refresh (void); 124 125 /* --------------------------------------------------------------------------------------------- */ 126 /*** inline functions ****************************************************************************/ 127 /* --------------------------------------------------------------------------------------------- */ 128 129 #endif /* MC__DIALOG_H */ 130