Implemented keybindings engine for ButtonBar (F1-F10 keys).
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
Этот коммит содержится в:
родитель
b7f367542a
Коммит
c2693b7212
@ -191,6 +191,7 @@ edit_dialog_callback (Dlg_head *h, Widget *sender,
|
||||
{
|
||||
WEdit *edit;
|
||||
WMenuBar *menubar;
|
||||
WButtonBar *buttonbar;
|
||||
|
||||
edit = (WEdit *) find_widget_type (h, edit_callback);
|
||||
|
||||
@ -206,8 +207,11 @@ edit_dialog_callback (Dlg_head *h, Widget *sender,
|
||||
|
||||
case DLG_ACTION:
|
||||
menubar = find_menubar (h);
|
||||
if (sender == &menubar->widget)
|
||||
return edit_command_execute (edit, parm);
|
||||
if (sender == (Widget *) menubar)
|
||||
return send_message (wedit, WIDGET_COMMAND, parm);
|
||||
buttonbar = find_buttonbar (h);
|
||||
if (sender == (Widget *) buttonbar)
|
||||
return send_message (wedit, WIDGET_COMMAND, parm);
|
||||
return MSG_HANDLED;
|
||||
|
||||
default:
|
||||
@ -263,73 +267,21 @@ edit_get_file_name (const WEdit *edit)
|
||||
return edit->filename;
|
||||
}
|
||||
|
||||
static void cmd_F1 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (1));
|
||||
}
|
||||
|
||||
static void cmd_F2 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (2));
|
||||
}
|
||||
|
||||
static void cmd_F3 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (3));
|
||||
}
|
||||
|
||||
static void cmd_F4 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (4));
|
||||
}
|
||||
|
||||
static void cmd_F5 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (5));
|
||||
}
|
||||
|
||||
static void cmd_F6 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (6));
|
||||
}
|
||||
|
||||
static void cmd_F7 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (7));
|
||||
}
|
||||
|
||||
static void cmd_F8 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (8));
|
||||
}
|
||||
|
||||
#if 0
|
||||
static void cmd_F9 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (9));
|
||||
}
|
||||
#endif
|
||||
|
||||
static void cmd_F10 (WEdit * edit)
|
||||
{
|
||||
send_message ((Widget *) edit, WIDGET_KEY, KEY_F (10));
|
||||
}
|
||||
|
||||
static void
|
||||
edit_set_buttonbar (WEdit *edit)
|
||||
{
|
||||
WButtonBar *bb = find_buttonbar (edit->widget.parent);
|
||||
|
||||
buttonbar_set_label_data (bb, 1, Q_("ButtonBar|Help"), (buttonbarfn) cmd_F1, edit);
|
||||
buttonbar_set_label_data (bb, 2, Q_("ButtonBar|Save"), (buttonbarfn) cmd_F2, edit);
|
||||
buttonbar_set_label_data (bb, 3, Q_("ButtonBar|Mark"), (buttonbarfn) cmd_F3, edit);
|
||||
buttonbar_set_label_data (bb, 4, Q_("ButtonBar|Replac"), (buttonbarfn) cmd_F4, edit);
|
||||
buttonbar_set_label_data (bb, 5, Q_("ButtonBar|Copy"), (buttonbarfn) cmd_F5, edit);
|
||||
buttonbar_set_label_data (bb, 6, Q_("ButtonBar|Move"), (buttonbarfn) cmd_F6, edit);
|
||||
buttonbar_set_label_data (bb, 7, Q_("ButtonBar|Search"), (buttonbarfn) cmd_F7, edit);
|
||||
buttonbar_set_label_data (bb, 8, Q_("ButtonBar|Delete"), (buttonbarfn) cmd_F8, edit);
|
||||
buttonbar_set_label_data (bb, 9, Q_("ButtonBar|PullDn"), (buttonbarfn) edit_menu_cmd, edit);
|
||||
buttonbar_set_label_data (bb, 10, Q_("ButtonBar|Quit"), (buttonbarfn) cmd_F10, edit);
|
||||
buttonbar_set_label (bb, 1, Q_("ButtonBar|Help"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 2, Q_("ButtonBar|Save"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 3, Q_("ButtonBar|Mark"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 4, Q_("ButtonBar|Replac"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 5, Q_("ButtonBar|Copy"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 6, Q_("ButtonBar|Move"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 7, Q_("ButtonBar|Search"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 8, Q_("ButtonBar|Delete"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 9, Q_("ButtonBar|PullDn"), editor_map, (Widget *) edit);
|
||||
buttonbar_set_label (bb, 10, Q_("ButtonBar|Quit"), editor_map, (Widget *) edit);
|
||||
}
|
||||
|
||||
void
|
||||
@ -387,6 +339,10 @@ edit_callback (Widget *w, widget_msg_t msg, int parm)
|
||||
}
|
||||
}
|
||||
|
||||
case WIDGET_COMMAND:
|
||||
/* command from menubar or buttonbar */
|
||||
return edit_command_execute (wedit, parm);
|
||||
|
||||
case WIDGET_CURSOR:
|
||||
widget_move (&e->widget, e->curs_row + EDIT_TEXT_VERTICAL_OFFSET,
|
||||
e->curs_col + e->start_col + e->over_col +
|
||||
|
@ -649,6 +649,10 @@ tree_callback (Dlg_head *h, Widget *sender,
|
||||
}
|
||||
return MSG_HANDLED;
|
||||
|
||||
case DLG_ACTION:
|
||||
/* command from buttonbar */
|
||||
return send_message ((Widget *) find_tree (h), WIDGET_COMMAND, parm);
|
||||
|
||||
default:
|
||||
return default_dlg_callback (h, sender, msg, parm, data);
|
||||
}
|
||||
|
45
src/help.c
45
src/help.c
@ -549,9 +549,8 @@ help_event (Gpm_Event *event, void *vp)
|
||||
|
||||
/* show help */
|
||||
static void
|
||||
help_help (void *vp)
|
||||
help_help (Dlg_head *h)
|
||||
{
|
||||
Dlg_head *h = vp;
|
||||
const char *p;
|
||||
|
||||
history_ptr = (history_ptr + 1) % HISTORY_SIZE;
|
||||
@ -567,9 +566,8 @@ help_help (void *vp)
|
||||
}
|
||||
|
||||
static void
|
||||
help_index (void *vp)
|
||||
help_index (Dlg_head *h)
|
||||
{
|
||||
Dlg_head *h = vp;
|
||||
const char *new_item;
|
||||
|
||||
new_item = search_string (fdata, "[Contents]");
|
||||
@ -589,16 +587,8 @@ help_index (void *vp)
|
||||
}
|
||||
|
||||
static void
|
||||
help_quit (void *vp)
|
||||
help_back (Dlg_head *h)
|
||||
{
|
||||
dlg_stop ((Dlg_head *) vp);
|
||||
}
|
||||
|
||||
static void
|
||||
help_back (void *vp)
|
||||
{
|
||||
Dlg_head *h = vp;
|
||||
|
||||
currentpoint = history [history_ptr].page;
|
||||
selected_item = history [history_ptr].link;
|
||||
history_ptr--;
|
||||
@ -740,23 +730,19 @@ help_select_link (void)
|
||||
}
|
||||
|
||||
static cb_ret_t
|
||||
help_execute_cmd (Widget *sender, Widget *receiver,
|
||||
unsigned long command, const void *data)
|
||||
help_execute_cmd (unsigned long command)
|
||||
{
|
||||
cb_ret_t ret = MSG_HANDLED;
|
||||
|
||||
(void) sender;
|
||||
(void) receiver;
|
||||
|
||||
switch (command) {
|
||||
case CK_HelpHelp:
|
||||
help_help ((void *) data);
|
||||
help_help (whelp);
|
||||
break;
|
||||
case CK_HelpIndex:
|
||||
help_index ((void *) data);
|
||||
help_index (whelp);
|
||||
break;
|
||||
case CK_HelpBack:
|
||||
help_back ((void *) data);
|
||||
help_back (whelp);
|
||||
break;
|
||||
case CK_HelpMoveUp:
|
||||
help_prev_link (TRUE);
|
||||
@ -804,7 +790,7 @@ help_handle_key (Dlg_head *h, int c)
|
||||
|
||||
command = lookup_keymap_command (help_map, c);
|
||||
if ((command == CK_Ignore_Key)
|
||||
|| (help_execute_cmd (NULL, NULL, command, h) == MSG_NOT_HANDLED))
|
||||
|| (help_execute_cmd (command) == MSG_NOT_HANDLED))
|
||||
return MSG_NOT_HANDLED;
|
||||
}
|
||||
|
||||
@ -813,7 +799,8 @@ help_handle_key (Dlg_head *h, int c)
|
||||
}
|
||||
|
||||
static cb_ret_t
|
||||
help_callback (Dlg_head *h, Widget *sender, dlg_msg_t msg, int parm, void *data)
|
||||
help_callback (Dlg_head *h, Widget *sender,
|
||||
dlg_msg_t msg, int parm, void *data)
|
||||
{
|
||||
WButtonBar *bb;
|
||||
|
||||
@ -833,6 +820,10 @@ help_callback (Dlg_head *h, Widget *sender, dlg_msg_t msg, int parm, void *data)
|
||||
case DLG_KEY:
|
||||
return help_handle_key (h, parm);
|
||||
|
||||
case DLG_ACTION:
|
||||
/* command from buttonbar */
|
||||
return help_execute_cmd (parm);
|
||||
|
||||
default:
|
||||
return default_dlg_callback (h, sender, msg, parm, data);
|
||||
}
|
||||
@ -963,16 +954,16 @@ interactive_display (const char *filename, const char *node)
|
||||
add_widget (whelp, md);
|
||||
add_widget (whelp, help_bar);
|
||||
|
||||
buttonbar_set_label_data (help_bar, 1, Q_("ButtonBar|Help"), help_help, whelp);
|
||||
buttonbar_set_label_data (help_bar, 2, Q_("ButtonBar|Index"), help_index, whelp);
|
||||
buttonbar_set_label_data (help_bar, 3, Q_("ButtonBar|Prev"), help_back, whelp);
|
||||
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_data (help_bar, 10, Q_("ButtonBar|Quit"), help_quit, whelp);
|
||||
buttonbar_set_label (help_bar, 10, Q_("ButtonBar|Quit"), help_map, NULL);
|
||||
|
||||
run_dlg (whelp);
|
||||
interactive_display_finish ();
|
||||
|
29
src/main.c
29
src/main.c
@ -1114,16 +1114,16 @@ copy_other_tagged (void)
|
||||
void
|
||||
midnight_set_buttonbar (WButtonBar *b)
|
||||
{
|
||||
buttonbar_set_label (b, 1, Q_("ButtonBar|Help"), help_cmd);
|
||||
buttonbar_set_label (b, 2, Q_("ButtonBar|Menu"), user_file_menu_cmd);
|
||||
buttonbar_set_label (b, 3, Q_("ButtonBar|View"), view_cmd);
|
||||
buttonbar_set_label (b, 4, Q_("ButtonBar|Edit"), edit_cmd);
|
||||
buttonbar_set_label (b, 5, Q_("ButtonBar|Copy"), copy_cmd);
|
||||
buttonbar_set_label (b, 6, Q_("ButtonBar|RenMov"), rename_cmd);
|
||||
buttonbar_set_label (b, 7, Q_("ButtonBar|Mkdir"), mkdir_cmd);
|
||||
buttonbar_set_label (b, 8, Q_("ButtonBar|Delete"), delete_cmd);
|
||||
buttonbar_set_label (b, 9, Q_("ButtonBar|PullDn"), menu_cmd);
|
||||
buttonbar_set_label (b, 10, Q_("ButtonBar|Quit"), quit_cmd);
|
||||
buttonbar_set_label (b, 1, Q_("ButtonBar|Help"), main_map, NULL);
|
||||
buttonbar_set_label (b, 2, Q_("ButtonBar|Menu"), main_map, NULL);
|
||||
buttonbar_set_label (b, 3, Q_("ButtonBar|View"), main_map, NULL);
|
||||
buttonbar_set_label (b, 4, Q_("ButtonBar|Edit"), main_map, NULL);
|
||||
buttonbar_set_label (b, 5, Q_("ButtonBar|Copy"), main_map, NULL);
|
||||
buttonbar_set_label (b, 6, Q_("ButtonBar|RenMov"), main_map, NULL);
|
||||
buttonbar_set_label (b, 7, Q_("ButtonBar|Mkdir"), main_map, NULL);
|
||||
buttonbar_set_label (b, 8, Q_("ButtonBar|Delete"), main_map, NULL);
|
||||
buttonbar_set_label (b, 9, Q_("ButtonBar|PullDn"), main_map, NULL);
|
||||
buttonbar_set_label (b, 10, Q_("ButtonBar|Quit"), main_map, NULL);
|
||||
}
|
||||
|
||||
static gboolean ctl_x_map_enabled = FALSE;
|
||||
@ -1726,8 +1726,15 @@ midnight_callback (Dlg_head *h, Widget *sender,
|
||||
if (sender == NULL)
|
||||
midnight_execute_cmd (NULL, parm);
|
||||
/* message from menu */
|
||||
else if (sender == &the_menubar->widget)
|
||||
else if (sender == (Widget *) the_menubar)
|
||||
midnight_execute_cmd (sender, parm);
|
||||
/* message from buttonbar */
|
||||
else if (sender == (Widget *) the_bar) {
|
||||
if (data == NULL)
|
||||
midnight_execute_cmd (sender, parm);
|
||||
else
|
||||
return send_message ((Widget *) data, WIDGET_COMMAND, parm);
|
||||
}
|
||||
return MSG_HANDLED;
|
||||
|
||||
default:
|
||||
|
80
src/tree.c
80
src/tree.c
@ -91,7 +91,6 @@ struct WTree {
|
||||
|
||||
/* Forwards */
|
||||
static void tree_rescan (void *data);
|
||||
static void tree_toggle_f4 (void *data);
|
||||
|
||||
static tree_entry *
|
||||
back_ptr (tree_entry *ptr, int *count)
|
||||
@ -753,16 +752,6 @@ tree_rmdir (void *data)
|
||||
file_op_context_destroy (ctx);
|
||||
}
|
||||
|
||||
static void
|
||||
tree_toggle_navig (WTree *tree)
|
||||
{
|
||||
tree_navigation_flag = !tree_navigation_flag;
|
||||
buttonbar_set_label_data (find_buttonbar (tree->widget.parent), 4,
|
||||
tree_navigation_flag ? Q_("ButtonBar|Static")
|
||||
: Q_("ButtonBar|Dynamc"),
|
||||
tree_toggle_f4, tree);
|
||||
}
|
||||
|
||||
static inline void
|
||||
tree_move_up (WTree *tree)
|
||||
{
|
||||
@ -866,6 +855,16 @@ tree_start_search (WTree *tree)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
tree_toggle_navig (WTree *tree)
|
||||
{
|
||||
tree_navigation_flag = !tree_navigation_flag;
|
||||
buttonbar_set_label (find_buttonbar (tree->widget.parent), 4,
|
||||
tree_navigation_flag ? Q_("ButtonBar|Static")
|
||||
: Q_("ButtonBar|Dynamc"),
|
||||
tree_map, (Widget *) tree);
|
||||
}
|
||||
|
||||
static cb_ret_t
|
||||
tree_execute_cmd (WTree *tree, unsigned long command)
|
||||
{
|
||||
@ -929,31 +928,6 @@ tree_execute_cmd (WTree *tree, unsigned long command)
|
||||
return res;
|
||||
}
|
||||
|
||||
/* temporary wrappers */
|
||||
static void
|
||||
tree_help (void *data)
|
||||
{
|
||||
tree_execute_cmd ((WTree *) data, CK_TreeHelp);
|
||||
}
|
||||
|
||||
static void
|
||||
tree_toggle_f4 (void *data)
|
||||
{
|
||||
tree_execute_cmd ((WTree *) data, CK_TreeToggleNav);
|
||||
}
|
||||
|
||||
static void
|
||||
tree_copy_cmd (void *data)
|
||||
{
|
||||
tree_execute_cmd ((WTree *) data, CK_TreeCopy);
|
||||
}
|
||||
|
||||
static void
|
||||
tree_move_cmd (void *data)
|
||||
{
|
||||
tree_execute_cmd ((WTree *) data, CK_TreeMove);
|
||||
}
|
||||
|
||||
static cb_ret_t
|
||||
tree_key (WTree *tree, int key)
|
||||
{
|
||||
@ -1030,26 +1004,23 @@ tree_callback (Widget *w, widget_msg_t msg, int parm)
|
||||
show_tree (tree);
|
||||
return MSG_HANDLED;
|
||||
|
||||
case WIDGET_KEY:
|
||||
return tree_key (tree, parm);
|
||||
|
||||
case WIDGET_FOCUS:
|
||||
tree->active = 1;
|
||||
buttonbar_set_label_data (b, 1, Q_("ButtonBar|Help"), tree_help, tree);
|
||||
buttonbar_set_label_data (b, 2, Q_("ButtonBar|Rescan"), tree_rescan, tree);
|
||||
buttonbar_set_label_data (b, 3, Q_("ButtonBar|Forget"), tree_forget, tree);
|
||||
buttonbar_set_label_data (b, 4, tree_navigation_flag ? Q_("ButtonBar|Static")
|
||||
buttonbar_set_label (b, 1, Q_("ButtonBar|Help"), tree_map, (Widget *) tree);
|
||||
buttonbar_set_label (b, 2, Q_("ButtonBar|Rescan"), tree_map, (Widget *) tree);
|
||||
buttonbar_set_label (b, 3, Q_("ButtonBar|Forget"), tree_map, (Widget *) tree);
|
||||
buttonbar_set_label (b, 4, tree_navigation_flag ? Q_("ButtonBar|Static")
|
||||
: Q_("ButtonBar|Dynamc"),
|
||||
tree_toggle_f4, tree);
|
||||
buttonbar_set_label_data (b, 5, Q_("ButtonBar|Copy"), tree_copy_cmd, tree);
|
||||
buttonbar_set_label_data (b, 6, Q_("ButtonBar|RenMov"), tree_move_cmd, tree);
|
||||
tree_map, (Widget *) tree);
|
||||
buttonbar_set_label (b, 5, Q_("ButtonBar|Copy"), tree_map, (Widget *) tree);
|
||||
buttonbar_set_label (b, 6, Q_("ButtonBar|RenMov"), tree_map, (Widget *) tree);
|
||||
#if 0
|
||||
/* FIXME: mkdir is currently defunct */
|
||||
buttonbar_set_label_data (b, 7, Q_("ButtonBar|Mkdir"), tree_mkdir, tree);
|
||||
buttonbar_set_label (b, 7, Q_("ButtonBar|Mkdir"), tree_map, (Widget *) tree);
|
||||
#else
|
||||
buttonbar_clear_label (b, 7);
|
||||
#endif
|
||||
buttonbar_set_label_data (b, 8, Q_("ButtonBar|Rmdir"), tree_rmdir, tree);
|
||||
buttonbar_set_label (b, 8, Q_("ButtonBar|Rmdir"), tree_map, (Widget *) tree);
|
||||
buttonbar_redraw (b);
|
||||
|
||||
/* FIXME: Should find a better way of only displaying the
|
||||
@ -1065,6 +1036,13 @@ tree_callback (Widget *w, widget_msg_t msg, int parm)
|
||||
show_tree (tree);
|
||||
return MSG_HANDLED;
|
||||
|
||||
case WIDGET_KEY:
|
||||
return tree_key (tree, parm);
|
||||
|
||||
case WIDGET_COMMAND:
|
||||
/* command from buttonbar */
|
||||
return tree_execute_cmd (tree, parm);
|
||||
|
||||
case WIDGET_DESTROY:
|
||||
tree_destroy (tree);
|
||||
return MSG_HANDLED;
|
||||
@ -1123,3 +1101,9 @@ sync_tree (const char *path)
|
||||
{
|
||||
tree_chdir (the_tree, path);
|
||||
}
|
||||
|
||||
WTree *
|
||||
find_tree (struct Dlg_head *h)
|
||||
{
|
||||
return (WTree *) find_widget_type (h, tree_callback);
|
||||
}
|
||||
|
@ -18,4 +18,8 @@ char *tree_selected_name (const WTree *tree);
|
||||
|
||||
void sync_tree (const char *pathname);
|
||||
|
||||
struct Dlg_head;
|
||||
|
||||
WTree *find_tree (struct Dlg_head *h);
|
||||
|
||||
#endif /* MC_TREE_H */
|
||||
|
@ -79,6 +79,14 @@
|
||||
|
||||
/*** file scope functions ************************************************************************/
|
||||
|
||||
/* Both views */
|
||||
static void
|
||||
mcview_search (mcview_t *view)
|
||||
{
|
||||
if (mcview_dialog_search (view))
|
||||
mcview_do_search (view);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static void
|
||||
@ -102,7 +110,7 @@ mcview_continue_search_cmd (mcview_t * view)
|
||||
if (!view->search) {
|
||||
/* if not... then ask for an expression */
|
||||
g_free(view->last_search_string);
|
||||
mcview_search_cmd (view);
|
||||
mcview_search (view);
|
||||
} else {
|
||||
view->search->search_type = view->search_type;
|
||||
view->search->is_all_charsets = view->search_all_codepages;
|
||||
@ -116,7 +124,7 @@ mcview_continue_search_cmd (mcview_t * view)
|
||||
} else {
|
||||
/* if not... then ask for an expression */
|
||||
g_free(view->last_search_string);
|
||||
mcview_search_cmd (view);
|
||||
mcview_search (view);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -327,15 +335,10 @@ mcview_handle_editkey (mcview_t * view, int key)
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
static cb_ret_t
|
||||
mcview_execute_cmd (Widget *sender, Widget *receiver,
|
||||
unsigned long command, const void *data)
|
||||
mcview_execute_cmd (mcview_t *view, unsigned long command)
|
||||
{
|
||||
mcview_t *view = (mcview_t *) receiver;
|
||||
int res = MSG_HANDLED;
|
||||
|
||||
(void) sender;
|
||||
(void) data;
|
||||
|
||||
switch (command) {
|
||||
case CK_ViewHelp:
|
||||
interactive_display (NULL, "[Internal File Viewer]");
|
||||
@ -356,13 +359,18 @@ mcview_execute_cmd (Widget *sender, Widget *receiver,
|
||||
mcview_update (view); /* FIXME: view->dirty++ ? */
|
||||
break;
|
||||
case CK_ViewGoto:
|
||||
mcview_goto (view);
|
||||
if (view->hex_mode)
|
||||
mcview_moveto_addr_cmd (view);
|
||||
else
|
||||
mcview_moveto_line_cmd (view);
|
||||
view->dirty++;
|
||||
mcview_update (view); /* FIXME: unneeded? */
|
||||
break;
|
||||
case CK_ViewHexEditSave:
|
||||
mcview_hexedit_save_changes (view);
|
||||
break;
|
||||
case CK_ViewSearch:
|
||||
mcview_search_cmd (view);
|
||||
mcview_search (view);
|
||||
break;
|
||||
case CK_ViewToggleMagicMode:
|
||||
mcview_toggle_magic_mode (view);
|
||||
@ -467,13 +475,13 @@ mcview_handle_key (mcview_t * view, int key)
|
||||
|
||||
command = lookup_keymap_command (view->hex_map, key);
|
||||
if ((command != CK_Ignore_Key)
|
||||
&& (mcview_execute_cmd (NULL, &view->widget, command, NULL) == MSG_HANDLED))
|
||||
&& (mcview_execute_cmd (view, command) == MSG_HANDLED))
|
||||
return MSG_HANDLED;
|
||||
}
|
||||
|
||||
command = lookup_keymap_command (view->plain_map, key);
|
||||
if ((command != CK_Ignore_Key)
|
||||
&& (mcview_execute_cmd (NULL, &view->widget, command, NULL) == MSG_HANDLED))
|
||||
&& (mcview_execute_cmd (view, command) == MSG_HANDLED))
|
||||
return MSG_HANDLED;
|
||||
|
||||
if (mcview_check_left_right_keys (view, key))
|
||||
@ -531,7 +539,15 @@ mcview_callback (Widget * w, widget_msg_t msg, int parm)
|
||||
return MSG_HANDLED;
|
||||
|
||||
case WIDGET_KEY:
|
||||
i = mcview_handle_key ((mcview_t *) view, parm);
|
||||
i = mcview_handle_key (view, parm);
|
||||
if (view->want_to_quit && !mcview_is_in_panel (view))
|
||||
dlg_stop (h);
|
||||
else
|
||||
mcview_update (view);
|
||||
return i;
|
||||
|
||||
case WIDGET_COMMAND:
|
||||
i = mcview_execute_cmd (view, parm);
|
||||
if (view->want_to_quit && !mcview_is_in_panel (view))
|
||||
dlg_stop (h);
|
||||
else
|
||||
@ -560,106 +576,20 @@ cb_ret_t
|
||||
mcview_dialog_callback (Dlg_head *h, Widget *sender,
|
||||
dlg_msg_t msg, int parm, void *data)
|
||||
{
|
||||
mcview_t *view = data;
|
||||
|
||||
switch (msg) {
|
||||
case DLG_RESIZE:
|
||||
mcview_adjust_size (h);
|
||||
return MSG_HANDLED;
|
||||
|
||||
case DLG_ACTION:
|
||||
/* command from buttonbar */
|
||||
return send_message (view, WIDGET_COMMAND, parm);
|
||||
|
||||
default:
|
||||
return default_dlg_callback (h, sender, msg, parm, data);
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
mcview_help_cmd (void)
|
||||
{
|
||||
mcview_execute_cmd (NULL, NULL, CK_ViewHelp, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
mcview_goto (mcview_t *view)
|
||||
{
|
||||
if (view->hex_mode)
|
||||
mcview_moveto_addr_cmd (view);
|
||||
else
|
||||
mcview_moveto_line_cmd (view);
|
||||
|
||||
view->dirty++;
|
||||
mcview_update (view); /* FIXME: unneeded? */
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
mcview_quit_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewQuit, NULL);
|
||||
if (view->want_to_quit)
|
||||
dlg_stop (view->widget.parent);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
/* Toggle between hex view and text view */
|
||||
void
|
||||
mcview_toggle_hex_mode_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewToggleHexMode, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
/* Toggle between hexview and hexedit mode */
|
||||
void
|
||||
mcview_toggle_hexedit_mode_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewToggleHexEditMode, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
mcview_hexedit_save_changes_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewHexEditSave, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
/* Toggle between wrapped and unwrapped view */
|
||||
void
|
||||
mcview_toggle_wrap_mode_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewToggleWrapMode, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
/* Both views */
|
||||
void
|
||||
mcview_search_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewToggleMagicMode, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
mcview_toggle_magic_mode_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewToggleMagicMode, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
||||
void
|
||||
mcview_toggle_nroff_mode_cmd (mcview_t * view)
|
||||
{
|
||||
mcview_execute_cmd (NULL, &view->widget, CK_ViewToggleNroffMode, NULL);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -75,55 +75,45 @@ mcview_set_buttonbar (mcview_t *view)
|
||||
const char *text;
|
||||
Dlg_head *h = view->widget.parent;
|
||||
WButtonBar *b = find_buttonbar (h);
|
||||
const global_keymap_t *keymap = view->hex_mode ? view->hex_map : view->plain_map;
|
||||
|
||||
buttonbar_set_label (b, 1, Q_ ("ButtonBar|Help"), mcview_help_cmd);
|
||||
buttonbar_set_label (b, 1, Q_ ("ButtonBar|Help"), keymap, (Widget *) view);
|
||||
|
||||
if (view->hex_mode) {
|
||||
if (view->hexedit_mode)
|
||||
buttonbar_set_label_data (b, 2, Q_ ("ButtonBar|View"),
|
||||
(buttonbarfn) mcview_toggle_hexedit_mode_cmd, view);
|
||||
else if (view->datasource == DS_FILE)
|
||||
buttonbar_set_label_data (b, 2, Q_ ("ButtonBar|Edit"),
|
||||
(buttonbarfn) mcview_toggle_hexedit_mode_cmd, view);
|
||||
else
|
||||
if (view->hexedit_mode)
|
||||
buttonbar_set_label (b, 2, Q_ ("ButtonBar|View"), keymap, (Widget *) 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_data (b, 4, Q_ ("ButtonBar|Ascii"),
|
||||
(buttonbarfn) mcview_toggle_hex_mode_cmd, view);
|
||||
buttonbar_set_label_data (b, 6, Q_ ("ButtonBar|Save"),
|
||||
(buttonbarfn) mcview_hexedit_save_changes_cmd, view);
|
||||
buttonbar_set_label_data (b, 7, Q_ ("ButtonBar|HxSrch"),
|
||||
(buttonbarfn) mcview_search_cmd, view);
|
||||
} else {
|
||||
text = view->text_wrap_mode ? Q_ ("ButtonBar|UnWrap") : Q_ ("ButtonBar|Wrap");
|
||||
buttonbar_set_label_data (b, 2, text,
|
||||
(buttonbarfn) mcview_toggle_wrap_mode_cmd, view);
|
||||
buttonbar_set_label_data (b, 4, Q_ ("ButtonBar|Hex"),
|
||||
(buttonbarfn) mcview_toggle_hex_mode_cmd, view);
|
||||
buttonbar_clear_label (b, 6);
|
||||
buttonbar_set_label_data (b, 7, Q_ ("ButtonBar|Search"),
|
||||
(buttonbarfn) mcview_search_cmd, view);
|
||||
}
|
||||
buttonbar_set_label (b, 4, Q_ ("ButtonBar|Ascii"), keymap, (Widget *) view);
|
||||
buttonbar_set_label (b, 5, Q_ ("ButtonBar|Goto"), keymap, (Widget *) view);
|
||||
buttonbar_set_label (b, 6, Q_ ("ButtonBar|Save"), keymap, (Widget *) view);
|
||||
buttonbar_set_label (b, 7, Q_ ("ButtonBar|HxSrch"), keymap, (Widget *) view);
|
||||
|
||||
buttonbar_set_label_data (b, 5, Q_ ("ButtonBar|Goto"),
|
||||
(buttonbarfn) mcview_goto, view);
|
||||
} else {
|
||||
buttonbar_set_label (b, 2, view->text_wrap_mode ? Q_ ("ButtonBar|UnWrap")
|
||||
: Q_ ("ButtonBar|Wrap"),
|
||||
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, 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_data (b, 3, Q_ ("ButtonBar|Quit"),
|
||||
(buttonbarfn) mcview_quit_cmd, view);
|
||||
|
||||
text = view->text_nroff_mode ? Q_ ("ButtonBar|Unform") : Q_ ("ButtonBar|Format");
|
||||
buttonbar_set_label_data (b, 9, text,
|
||||
(buttonbarfn) mcview_toggle_nroff_mode_cmd, 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);
|
||||
}
|
||||
|
||||
text = view->magic_mode ? Q_ ("ButtonBar|Raw") : Q_ ("ButtonBar|Parse");
|
||||
buttonbar_set_label_data (b, 8, text,
|
||||
(buttonbarfn) mcview_toggle_magic_mode_cmd, view);
|
||||
|
||||
buttonbar_set_label_data (b, 10, Q_ ("ButtonBar|Quit"),
|
||||
(buttonbarfn) mcview_quit_cmd, 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);
|
||||
}
|
||||
|
||||
/* --------------------------------------------------------------------------------------------- */
|
||||
|
@ -201,16 +201,6 @@ typedef struct mcview_nroff_struct {
|
||||
/*** declarations of public functions **********************************/
|
||||
|
||||
/* actions_cmd.c: */
|
||||
void mcview_help_cmd (void);
|
||||
void mcview_quit_cmd (mcview_t *view);
|
||||
void mcview_goto (mcview_t *view);
|
||||
void mcview_toggle_hex_mode_cmd (mcview_t *view);
|
||||
void mcview_toggle_hexedit_mode_cmd (mcview_t *view);
|
||||
void mcview_hexedit_save_changes_cmd (mcview_t *view);
|
||||
void mcview_toggle_wrap_mode_cmd (mcview_t *view);
|
||||
void mcview_search_cmd (mcview_t *view);
|
||||
void mcview_toggle_magic_mode_cmd (mcview_t *view);
|
||||
void mcview_toggle_nroff_mode_cmd (mcview_t *view);
|
||||
cb_ret_t mcview_callback (Widget *w, widget_msg_t msg, int parm);
|
||||
cb_ret_t mcview_dialog_callback (Dlg_head *h, Widget *sender,
|
||||
dlg_msg_t msg, int parm, void *data);
|
||||
|
67
src/widget.c
67
src/widget.c
@ -2673,17 +2673,15 @@ listbox_get_current (WListbox *l, char **string, char **extra)
|
||||
static gboolean
|
||||
buttonbar_call (WButtonBar *bb, int i)
|
||||
{
|
||||
switch (bb->labels[i].tag) {
|
||||
case BBFUNC_NONE:
|
||||
break;
|
||||
case BBFUNC_VOID:
|
||||
bb->labels[i].u.fn_void ();
|
||||
return TRUE;
|
||||
case BBFUNC_PTR:
|
||||
bb->labels[i].u.fn_ptr (bb->labels[i].data);
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
cb_ret_t ret = MSG_NOT_HANDLED;
|
||||
|
||||
if ((bb != NULL) && (bb->labels[i].text != NULL)
|
||||
&& (bb->labels[i].command != CK_Ignore_Key))
|
||||
ret = bb->widget.parent->callback (bb->widget.parent,
|
||||
&bb->widget, DLG_ACTION,
|
||||
bb->labels[i].command,
|
||||
bb->labels[i].receiver);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* calculate width of one button, width is never lesser than 7 */
|
||||
@ -2694,7 +2692,6 @@ buttonbat_get_button_width (void)
|
||||
return (result >= 7) ? result : 7;
|
||||
}
|
||||
|
||||
|
||||
static cb_ret_t
|
||||
buttonbar_callback (Widget *w, widget_msg_t msg, int parm)
|
||||
{
|
||||
@ -2770,7 +2767,6 @@ WButtonBar *
|
||||
buttonbar_new (gboolean visible)
|
||||
{
|
||||
WButtonBar *bb;
|
||||
int i;
|
||||
|
||||
bb = g_new0 (WButtonBar, 1);
|
||||
|
||||
@ -2778,10 +2774,6 @@ buttonbar_new (gboolean visible)
|
||||
buttonbar_callback, buttonbar_event);
|
||||
bb->widget.pos_flags = WPOS_KEEP_HORZ | WPOS_KEEP_BOTTOM;
|
||||
bb->visible = visible;
|
||||
for (i = 0; i < BUTTONBAR_LABELS_NUM; i++){
|
||||
bb->labels[i].text = NULL;
|
||||
bb->labels[i].tag = BBFUNC_NONE;
|
||||
}
|
||||
widget_want_hotkey (bb->widget, 1);
|
||||
widget_want_cursor (bb->widget, 0);
|
||||
bb->btn_width = buttonbat_get_button_width ();
|
||||
@ -2804,35 +2796,24 @@ find_buttonbar (const Dlg_head *h)
|
||||
}
|
||||
|
||||
void
|
||||
buttonbar_clear_label (WButtonBar *bb, int idx)
|
||||
buttonbar_set_label (WButtonBar *bb, int idx, const char *text,
|
||||
const struct global_keymap_t *keymap, const Widget *receiver)
|
||||
{
|
||||
if (bb != NULL) {
|
||||
set_label_text (bb, idx, "");
|
||||
bb->labels[idx - 1].tag = BBFUNC_NONE;
|
||||
}
|
||||
}
|
||||
if ((bb != NULL) && (idx >= 1) && (idx <= BUTTONBAR_LABELS_NUM)) {
|
||||
unsigned long command = CK_Ignore_Key;
|
||||
|
||||
void
|
||||
buttonbar_set_label_data (WButtonBar *bb, int idx, const char *text,
|
||||
buttonbarfn cback, void *data)
|
||||
{
|
||||
if (bb != NULL) {
|
||||
assert (cback != (buttonbarfn) NULL);
|
||||
set_label_text (bb, idx, text);
|
||||
bb->labels[idx - 1].tag = BBFUNC_PTR;
|
||||
bb->labels[idx - 1].u.fn_ptr = cback;
|
||||
bb->labels[idx - 1].data = data;
|
||||
}
|
||||
}
|
||||
if (keymap != NULL)
|
||||
command = lookup_keymap_command (keymap, KEY_F (idx));
|
||||
|
||||
void
|
||||
buttonbar_set_label (WButtonBar *bb, int idx, const char *text, voidfn cback)
|
||||
{
|
||||
if (bb != NULL) {
|
||||
assert (cback != (voidfn) NULL);
|
||||
set_label_text (bb, idx, text);
|
||||
bb->labels[idx - 1].tag = BBFUNC_VOID;
|
||||
bb->labels[idx - 1].u.fn_void = cback;
|
||||
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 {
|
||||
set_label_text (bb, idx, text);
|
||||
bb->labels[idx - 1].command = command;
|
||||
bb->labels[idx - 1].receiver = receiver;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
21
src/widget.h
21
src/widget.h
@ -162,21 +162,14 @@ struct WListbox {
|
||||
/* number of bttons in buttonbar */
|
||||
#define BUTTONBAR_LABELS_NUM 10
|
||||
|
||||
typedef void (*voidfn)(void);
|
||||
typedef void (*buttonbarfn)(void *);
|
||||
|
||||
typedef struct WButtonBar {
|
||||
Widget widget;
|
||||
gboolean visible; /* Is it visible? */
|
||||
int btn_width; /* width of one button */
|
||||
struct {
|
||||
char *text;
|
||||
enum { BBFUNC_NONE, BBFUNC_VOID, BBFUNC_PTR } tag;
|
||||
union {
|
||||
voidfn fn_void;
|
||||
buttonbarfn fn_ptr;
|
||||
} u;
|
||||
void *data;
|
||||
char *text;
|
||||
unsigned long command;
|
||||
Widget *receiver;
|
||||
} labels [BUTTONBAR_LABELS_NUM];
|
||||
} WButtonBar;
|
||||
|
||||
@ -253,12 +246,12 @@ enum append_pos {
|
||||
char *listbox_add_item (WListbox *l, enum append_pos pos, int
|
||||
hotkey, const char *text, void *data);
|
||||
|
||||
struct global_keymap_t;
|
||||
|
||||
WButtonBar *find_buttonbar (const Dlg_head *h);
|
||||
void buttonbar_clear_label (WButtonBar *bb, int idx);
|
||||
void buttonbar_set_label (WButtonBar *bb, int index, const char *text, voidfn cback);
|
||||
void buttonbar_set_label_data (WButtonBar *bb, int idx, const char *text,
|
||||
buttonbarfn cback, void *data);
|
||||
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);
|
||||
void buttonbar_set_visible (WButtonBar *bb, gboolean visible);
|
||||
void buttonbar_redraw (WButtonBar *bb);
|
||||
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user