Modified ButtonBar engine to allow bind keys to unused buttons.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2009-11-12 21:44:38 +03:00
parent eb2e4b0e17
commit 1ed7892f8e
7 changed files with 33 additions and 34 deletions

View File

@ -208,10 +208,10 @@ edit_dialog_callback (Dlg_head *h, Widget *sender,
case DLG_ACTION:
menubar = find_menubar (h);
if (sender == (Widget *) menubar)
return send_message (wedit, WIDGET_COMMAND, parm);
return send_message ((Widget *) edit, WIDGET_COMMAND, parm);
buttonbar = find_buttonbar (h);
if (sender == (Widget *) buttonbar)
return send_message (wedit, WIDGET_COMMAND, parm);
return send_message ((Widget *) edit, WIDGET_COMMAND, parm);
return MSG_HANDLED;
default:

View File

@ -957,12 +957,12 @@ interactive_display (const char *filename, const char *node)
buttonbar_set_label (help_bar, 1, Q_("ButtonBar|Help"), help_map, NULL);
buttonbar_set_label (help_bar, 2, Q_("ButtonBar|Index"), help_map, NULL);
buttonbar_set_label (help_bar, 3, Q_("ButtonBar|Prev"), help_map, NULL);
buttonbar_clear_label (help_bar, 4);
buttonbar_clear_label (help_bar, 5);
buttonbar_clear_label (help_bar, 6);
buttonbar_clear_label (help_bar, 7);
buttonbar_clear_label (help_bar, 8);
buttonbar_clear_label (help_bar, 9);
buttonbar_set_label (help_bar, 4, "", help_map, NULL);
buttonbar_set_label (help_bar, 5, "", help_map, NULL);
buttonbar_set_label (help_bar, 6, "", help_map, NULL);
buttonbar_set_label (help_bar, 7, "", help_map, NULL);
buttonbar_set_label (help_bar, 8, "", help_map, NULL);
buttonbar_set_label (help_bar, 9, "", help_map, NULL);
buttonbar_set_label (help_bar, 10, Q_("ButtonBar|Quit"), help_map, NULL);
run_dlg (whelp);

View File

@ -1237,7 +1237,7 @@ midnight_execute_cmd (Widget *sender, unsigned long command)
history_cmd ();
break;
case CK_InfoCmd:
if (sender == the_menubar)
if (sender == (Widget *) the_menubar)
info_cmd (); /* mwnu */
else
info_cmd_no_menu (); /* shortcut or buttonbar */
@ -1290,7 +1290,7 @@ midnight_execute_cmd (Widget *sender, unsigned long command)
quick_chdir_cmd ();
break;
case CK_QuickViewCmd:
if (sender == the_menubar)
if (sender == (Widget *) the_menubar)
quick_view_cmd (); /* menu */
else
quick_cmd_no_menu (); /* shortcut or buttonabr */

View File

@ -1018,7 +1018,7 @@ tree_callback (Widget *w, widget_msg_t msg, int parm)
/* FIXME: mkdir is currently defunct */
buttonbar_set_label (b, 7, Q_("ButtonBar|Mkdir"), tree_map, (Widget *) tree);
#else
buttonbar_clear_label (b, 7);
buttonbar_clear_label (b, 7, (Widget *) tree);
#endif
buttonbar_set_label (b, 8, Q_("ButtonBar|Rmdir"), tree_map, (Widget *) tree);
buttonbar_redraw (b);

View File

@ -85,7 +85,7 @@ mcview_set_buttonbar (mcview_t *view)
else if (view->datasource == DS_FILE)
buttonbar_set_label (b, 2, Q_ ("ButtonBar|Edit"), keymap, (Widget *) view);
else
buttonbar_clear_label (b, 2);
buttonbar_set_label (b, 2, "", keymap, (Widget *) view);
buttonbar_set_label (b, 4, Q_ ("ButtonBar|Ascii"), keymap, (Widget *) view);
buttonbar_set_label (b, 5, Q_ ("ButtonBar|Goto"), keymap, (Widget *) view);
@ -98,22 +98,24 @@ mcview_set_buttonbar (mcview_t *view)
keymap, (Widget *) view);
buttonbar_set_label (b, 4, Q_ ("ButtonBar|Hex"), keymap, (Widget *) view);
buttonbar_set_label (b, 5, Q_ ("ButtonBar|Line"), keymap, (Widget *) view);
buttonbar_clear_label (b, 6);
buttonbar_set_label (b, 6, "", keymap, (Widget *) view);
buttonbar_set_label (b, 7, Q_ ("ButtonBar|Search"), keymap, (Widget *) view);
}
/* don't override the key to access the main menu */
if (!mcview_is_in_panel (view)) {
buttonbar_set_label (b, 3, Q_ ("ButtonBar|Quit"), keymap, (Widget *) view);
buttonbar_set_label (b, 9, view->text_nroff_mode ? Q_ ("ButtonBar|Unform")
: Q_ ("ButtonBar|Format"),
keymap, (Widget *) view);
}
buttonbar_set_label (b, 8, view->magic_mode ? Q_ ("ButtonBar|Raw")
: Q_ ("ButtonBar|Parse"),
keymap, (Widget *) view);
buttonbar_set_label (b, 10, Q_ ("ButtonBar|Quit"), keymap, (Widget *) view);
if (mcview_is_in_panel (view))
buttonbar_set_label (b, 10, "", keymap, (Widget *) view);
else {
/* don't override some panel buttonbar keys */
buttonbar_set_label (b, 3, Q_ ("ButtonBar|Quit"), keymap, (Widget *) view);
buttonbar_set_label (b, 9, view->text_nroff_mode ? Q_ ("ButtonBar|Unform")
: Q_ ("ButtonBar|Format"),
keymap, (Widget *) view);
buttonbar_set_label (b, 10, Q_ ("ButtonBar|Quit"), keymap, (Widget *) view);
}
}
/* --------------------------------------------------------------------------------------------- */

View File

@ -2675,10 +2675,9 @@ buttonbar_call (WButtonBar *bb, int i)
{
cb_ret_t ret = MSG_NOT_HANDLED;
if ((bb != NULL) && (bb->labels[i].text != NULL)
&& (bb->labels[i].command != CK_Ignore_Key))
if (bb != NULL)
ret = bb->widget.parent->callback (bb->widget.parent,
&bb->widget, DLG_ACTION,
(Widget *) bb, DLG_ACTION,
bb->labels[i].command,
bb->labels[i].receiver);
return ret;
@ -2805,15 +2804,13 @@ buttonbar_set_label (WButtonBar *bb, int idx, const char *text,
if (keymap != NULL)
command = lookup_keymap_command (keymap, KEY_F (idx));
if ((text == NULL) || (text[0] == '\0') || (command == CK_Ignore_Key)) {
set_label_text (bb, idx, NULL);
bb->labels[idx - 1].command = CK_Ignore_Key;
bb->labels[idx - 1].receiver = NULL;
} else {
if ((text == NULL) || (text[0] == '\0'))
set_label_text (bb, idx, "");
else
set_label_text (bb, idx, text);
bb->labels[idx - 1].command = command;
bb->labels[idx - 1].receiver = receiver;
}
bb->labels[idx - 1].command = command;
bb->labels[idx - 1].receiver = (Widget *) receiver;
}
}

View File

@ -251,7 +251,7 @@ struct global_keymap_t;
WButtonBar *find_buttonbar (const Dlg_head *h);
void buttonbar_set_label (WButtonBar *bb, int index, const char *text,
const struct global_keymap_t *keymap, const Widget *receiver);
#define buttonbar_clear_label(bb, idx) buttonbar_set_label (bb, idx, NULL, NULL, NULL);
#define buttonbar_clear_label(bb, idx, recv) buttonbar_set_label (bb, idx, "", NULL, recv)
void buttonbar_set_visible (WButtonBar *bb, gboolean visible);
void buttonbar_redraw (WButtonBar *bb);