Improvements of QuickDialog engine.

Added capability to modify options of QuickWidget.
Added capability to use custom callback in QuickDialog.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2010-06-29 22:01:42 +04:00
parent 760b700645
commit 7869478668
13 changed files with 46 additions and 30 deletions

View File

@ -321,7 +321,7 @@ sort_box (const panel_field_t * sort_format, int *reverse, int *case_sensitive,
QuickDialog quick_dlg = {
dlg_width, dlg_height, -1, -1,
N_("Sort order"), "[Sort Order...]",
quick_widgets, TRUE
quick_widgets, NULL, TRUE
};
quick_widgets[5].u.radio.items = sort_orders_names;
@ -449,7 +449,7 @@ confirm_box (void)
{
QuickDialog confirmation = {
dlg_width, dlg_height, -1, -1, title,
"[Confirmation]", conf_widgets, 1
"[Confirmation]", conf_widgets, NULL, TRUE
};
(void) quick_dialog (&confirmation);
@ -485,7 +485,7 @@ display_bits_box (void) /* AB:FIXME: test dialog */
QuickDialog display_bits = {
DISPX, DISPY, -1, -1, _("Display bits"),
"[Display bits]", display_widgets, TRUE
"[Display bits]", display_widgets, NULL, TRUE
};
int i;
@ -767,7 +767,7 @@ configure_vfs (void)
QuickDialog confvfs_dlg = {
VFSX, VFSY, -1, -1, N_("Virtual File System Setting"),
"[Virtual FS]", confvfs_widgets, FALSE
"[Virtual FS]", confvfs_widgets, NULL, FALSE
};
#ifdef USE_NETCODE
@ -824,7 +824,7 @@ cd_dialog (void)
QuickDialog Quick_input = {
xlen, ylen, 2, LINES - 2 - ylen, _("Quick cd"),
"[Quick cd]", quick_widgets, TRUE
"[Quick cd]", quick_widgets, NULL, TRUE
};
return (quick_dialog (&Quick_input) != B_CANCEL) ? my_str : NULL;
@ -847,7 +847,7 @@ symlink_dialog (const char *existing, const char *new, char **ret_existing, char
QuickDialog Quick_input = {
64, 12, -1, -1, N_("Symbolic link"),
"[File Menu]", quick_widgets, FALSE
"[File Menu]", quick_widgets, NULL, FALSE
};
if (quick_dialog (&Quick_input) == B_CANCEL)

View File

@ -613,7 +613,7 @@ select_unselect_cmd (const char *title, const char *history_name, gboolean do_se
QuickDialog quick_dlg = {
DX, DY, -1, -1, title,
"[Select/Unselect Files]", quick_widgets, FALSE
"[Select/Unselect Files]", quick_widgets, NULL, FALSE
};
if (quick_dialog (&quick_dlg) == B_CANCEL)

View File

@ -135,9 +135,9 @@ mcdiffview_dialog_search (WDiff * dview)
};
QuickDialog search_input = {
SEARCH_DLG_WIDTH, SEARCH_DLG_HEIGHT, -1, 0,
SEARCH_DLG_WIDTH, SEARCH_DLG_HEIGHT, -1, -1,
N_("Search"), "[Input Line Keys]",
search_widgets, 0
search_widgets, NULL, FALSE
};
mcdiffview_dialog_fix_buttons_positions (&search_input);

View File

@ -2421,7 +2421,7 @@ dview_diff_options (WDiff * dview)
QuickDialog diffopt = {
OPTX, OPTY, -1, -1,
N_("Diff Options"), "[Diff Options]",
diffopt_widgets, 0
diffopt_widgets, NULL, FALSE
};
if (quick_dialog (&diffopt) != B_CANCEL)

View File

@ -457,7 +457,7 @@ menu_save_mode_cmd (void)
QuickDialog dialog = {
DLG_X, DLG_Y, -1, -1, N_("Edit Save Mode"),
"[Edit Save Mode]", widgets, FALSE
"[Edit Save Mode]", widgets, NULL, FALSE
};
size_t i;
@ -556,7 +556,7 @@ edit_get_save_file_as (WEdit * edit)
QuickDialog Quick_options = {
DLG_WIDTH, DLG_HEIGHT, -1, -1,
N_("Save As"), "[Save File As]",
quick_widgets, FALSE
quick_widgets, NULL, FALSE
};
if (quick_dialog (&Quick_options) != B_CANCEL)
@ -2671,7 +2671,7 @@ edit_mail_dialog (WEdit * edit)
QuickDialog Quick_input = {
50, MAIL_DLG_HEIGHT, -1, -1, N_("Mail"),
"[Input Line Keys]", quick_widgets, FALSE
"[Input Line Keys]", quick_widgets, NULL, FALSE
};
quick_widgets[2].u.input.text = mail_cc_last ? mail_cc_last : "";

View File

@ -138,7 +138,7 @@ editcmd_dialog_replace_show (WEdit * edit, const char *search_default, const cha
QuickDialog Quick_input = {
REPLACE_DLG_WIDTH, REPLACE_DLG_HEIGHT, -1, -1, N_("Replace"),
"[Input Line Keys]", quick_widgets, FALSE
"[Input Line Keys]", quick_widgets, NULL, FALSE
};
if (quick_dialog (&Quick_input) != B_CANCEL)
@ -218,7 +218,7 @@ editcmd_dialog_search_show (WEdit * edit, char **search_text)
QuickDialog Quick_input = {
SEARCH_DLG_WIDTH, SEARCH_DLG_HEIGHT, -1, -1, N_("Search"),
"[Input Line Keys]", quick_widgets, TRUE
"[Input Line Keys]", quick_widgets, NULL, TRUE
};
#ifdef ENABLE_NLS
@ -612,7 +612,7 @@ editcmd_dialog_replace_prompt_show (WEdit * edit, char *from_text, char *to_text
{
QuickDialog Quick_input = {
dlg_width, dlg_height, 0, 0, N_("Confirm replace"),
"[Input Line Keys]", quick_widgets, FALSE
"[Input Line Keys]", quick_widgets, NULL, FALSE
};
/* Sometimes menu can hide replaced text. I don't like it */

View File

@ -107,7 +107,7 @@ edit_options_dialog (WEdit * edit)
QuickDialog Quick_options = {
OPT_DLG_W, OPT_DLG_H, -1, -1, N_("Editor options"),
"[Editor options]", quick_widgets, FALSE
"[Editor options]", quick_widgets, NULL, FALSE
};
#ifdef ENABLE_NLS

View File

@ -1042,7 +1042,7 @@ file_mask_dialog (FileOpContext * ctx, FileOperation operation,
QuickDialog Quick_input = {
fmd_xlen, FMDY, -1, -1, op_names[operation],
"[Mask Copy/Rename]", fmd_widgets, TRUE
"[Mask Copy/Rename]", fmd_widgets, NULL, TRUE
};
ask_file_mask:

View File

@ -973,7 +973,7 @@ add_new_entry_input (const char *header, const char *text1, const char *text2,
{
QuickDialog Quick_input = {
len, lines1 + lines2 + 7, -1, -1, header,
help, quick_widgets, FALSE
help, quick_widgets, NULL, FALSE
};
for (i = 0; i < 7; i++)
@ -1060,7 +1060,7 @@ add_new_group_input (const char *header, const char *label, char **result)
{
QuickDialog Quick_input = {
len, lines + 6, -1, -1, header,
"[Hotlist]", quick_widgets, FALSE
"[Hotlist]", quick_widgets, NULL, FALSE
};
int relative_y[] = { 1, 1, 1, 0, 2 }; /* the relative_x component from the

View File

@ -118,7 +118,7 @@ configure_box (void)
QuickDialog Quick_input = {
dlg_width, dlg_height, -1, -1,
N_("Configure options"), "[Configuration]",
quick_widgets, TRUE
quick_widgets, NULL, TRUE
};
int qd_result;
@ -290,7 +290,7 @@ panel_options_box (void)
QuickDialog Quick_input = {
dlg_width, dlg_height, -1, -1,
N_("Panel options"), "[Panel options]",
quick_widgets, TRUE
quick_widgets, NULL, TRUE
};
int qd_result;

View File

@ -112,7 +112,7 @@ mcview_dialog_search (mcview_t * view)
QuickDialog Quick_input = {
SEARCH_DLG_WIDTH, SEARCH_DLG_HEIGHT, -1, -1,
N_("Search"), "[Input Line Keys]",
quick_widgets, FALSE
quick_widgets, NULL, FALSE
};
qd_result = quick_dialog (&Quick_input);
@ -201,7 +201,7 @@ mcview_dialog_goto (mcview_t * view, off_t * offset)
QuickDialog Quick_input = {
goto_dlg_width, goto_dlg_height, -1, -1,
N_("Goto"), "[Input Line Keys]",
quick_widgets, FALSE
quick_widgets, NULL, FALSE
};
#ifdef ENABLE_NLS

View File

@ -385,11 +385,11 @@ quick_dialog_skip (QuickDialog * qd, int nskip)
if ((qd->xpos == -1) || (qd->ypos == -1))
dd = create_dlg (TRUE, 0, 0, qd->ylen, qd->xlen,
dialog_colors, NULL, qd->help, qd->title,
dialog_colors, qd->callback, qd->help, qd->title,
DLG_CENTER | DLG_TRYUP | DLG_REVERSE);
else
dd = create_dlg (TRUE, qd->ypos, qd->xpos, qd->ylen, qd->xlen,
dialog_colors, NULL, qd->help, qd->title, DLG_REVERSE);
dialog_colors, qd->callback, qd->help, qd->title, DLG_REVERSE);
for (qw = qd->widgets; qw->widget_type != quick_end; qw++)
{
@ -464,11 +464,19 @@ quick_dialog_skip (QuickDialog * qd, int nskip)
break;
}
add_widget (dd, qw->widget);
if (qw->widget != NULL)
{
qw->widget->options |= qw->options; /* FIXME: cannot reset flags, setup only */
add_widget (dd, qw->widget);
}
}
while (nskip-- != 0)
dd->current = dd->current->next;
{
dd->current = g_list_next (dd->current);
if (dd->current == NULL)
dd->current = dd->widgets;
}
return_val = run_dlg (dd);
@ -592,7 +600,7 @@ fg_input_dialog_help (const char *header, const char *text, const char *help,
{
QuickDialog Quick_input = {
len, lines + 6, -1, -1, header,
help, quick_widgets, TRUE
help, quick_widgets, NULL, TRUE
};
for (i = 0; i < 4; i++)

View File

@ -48,6 +48,7 @@ typedef struct
int y_divisions;
Widget *widget;
widget_options_t options;
/* widget parameters */
union
@ -103,6 +104,7 @@ typedef struct
.relative_y = y, \
.y_divisions = ydiv, \
.widget = NULL, \
.options = 0, \
.u = { \
.checkbox = { \
.text = txt, \
@ -119,6 +121,7 @@ typedef struct
.relative_y = y, \
.y_divisions = ydiv, \
.widget = NULL, \
.options = 0, \
.u = { \
.button = { \
.text = txt, \
@ -136,6 +139,7 @@ typedef struct
.relative_y = y, \
.y_divisions = ydiv, \
.widget = NULL, \
.options = 0, \
.u = { \
.input = { \
.text = txt, \
@ -155,6 +159,7 @@ typedef struct
.relative_y = y, \
.y_divisions = ydiv, \
.widget = NULL, \
.options = 0, \
.u = { \
.label = { \
.text = txt \
@ -170,6 +175,7 @@ typedef struct
.relative_y = y, \
.y_divisions = ydiv, \
.widget = NULL, \
.options = 0, \
.u = { \
.radio = { \
.count = cnt, \
@ -187,6 +193,7 @@ typedef struct
.relative_y = y, \
.y_divisions = ydiv, \
.widget = NULL, \
.options = 0, \
.u = { \
.groupbox = { \
.width = w, \
@ -196,7 +203,6 @@ typedef struct
} \
}
#define QUICK_END \
{ \
.widget_type = quick_end, \
@ -205,6 +211,7 @@ typedef struct
.relative_y = 0, \
.y_divisions = 0, \
.widget = NULL, \
.options = 0, \
.u = { \
.input = { \
.text = NULL, \
@ -223,6 +230,7 @@ typedef struct
const char *title;
const char *help;
QuickWidget *widgets;
dlg_cb_fn callback;
gboolean i18n; /* If true, internationalization has happened */
} QuickDialog;