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