static cb_ret_t edit_dialog_callback (Dlg_head * h, Widget * sender, dlg_msg_t msg, int parm, void *data) { WEdit *edit; WMenuBar *menubar; WButtonBar *buttonbar; edit = (WEdit *) find_widget_type (h, edit_callback); menubar = find_menubar (h); buttonbar = find_buttonbar (h); switch (msg) { case DLG_INIT: edit_set_buttonbar (edit, buttonbar); return MSG_HANDLED; case DLG_DRAW: /* don't use common_dialog_repaint() -- we don't need a frame */ tty_setcolor (EDITOR_NORMAL_COLOR); dlg_erase (h); return MSG_HANDLED; case DLG_RESIZE: /* dlg_set_size() is surplus for this case */ h->lines = LINES; h->cols = COLS; widget_set_size (&buttonbar->widget, h->lines - 1, h->x, 1, h->cols); widget_set_size (&menubar->widget, h->y, h->x, 1, h->cols); menubar_arrange (menubar); widget_set_size (&edit->widget, h->y + 1, h->x, h->lines - 2, h->cols); return MSG_HANDLED; case DLG_ACTION: if (sender == (Widget *) menubar) return send_message ((Widget *) edit, WIDGET_COMMAND, parm); if (sender == (Widget *) buttonbar) return send_message ((Widget *) edit, WIDGET_COMMAND, parm); return MSG_HANDLED; case DLG_VALIDATE: h->state = DLG_ACTIVE; /* don't stop the dialog before final decision */ if (edit_ok_to_exit (edit)) h->state = DLG_CLOSED; return MSG_HANDLED; default: return default_dlg_callback (h, sender, msg, parm, data); } }
gboolean edit_add_window (WDialog * h, int y, int x, int lines, int cols, const vfs_path_t * f, long fline) { WEdit *edit; Widget *w; edit = edit_init (NULL, y, x, lines, cols, f, fline); if (edit == NULL) return FALSE; w = WIDGET (edit); w->callback = edit_callback; w->mouse_callback = edit_mouse_callback; add_widget (h, w); edit_set_buttonbar (edit, find_buttonbar (h)); dlg_redraw (h); return TRUE; }
static cb_ret_t edit_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *data) { WEdit *e = (WEdit *) w; switch (msg) { case MSG_FOCUS: edit_set_buttonbar (e, find_buttonbar (w->owner)); return MSG_HANDLED; case MSG_DRAW: e->force |= REDRAW_COMPLETELY; edit_update_screen (e); return MSG_HANDLED; case MSG_KEY: { int cmd, ch; cb_ret_t ret = MSG_NOT_HANDLED; /* The user may override the access-keys for the menu bar. */ if (macro_index == -1 && edit_execute_macro (e, parm)) { edit_update_screen (e); ret = MSG_HANDLED; } else if (edit_translate_key (e, parm, &cmd, &ch)) { edit_execute_key_command (e, cmd, ch); edit_update_screen (e); ret = MSG_HANDLED; } return ret; } case MSG_ACTION: /* command from menubar or buttonbar */ edit_execute_key_command (e, parm, -1); edit_update_screen (e); return MSG_HANDLED; case MSG_CURSOR: { int y, x; y = (e->fullscreen ? 0 : 1) + EDIT_TEXT_VERTICAL_OFFSET + e->curs_row; x = (e->fullscreen ? 0 : 1) + EDIT_TEXT_HORIZONTAL_OFFSET + option_line_state_width + e->curs_col + e->start_col + e->over_col; widget_move (w, y, x); return MSG_HANDLED; } case MSG_IDLE: edit_update_screen (e); return MSG_HANDLED; case MSG_DESTROY: edit_clean (e); return MSG_HANDLED; default: return widget_default_callback (w, sender, msg, parm, data); } }
static cb_ret_t edit_callback (Widget * w, widget_msg_t msg, int parm) { WEdit *e = (WEdit *) w; switch (msg) { case WIDGET_FOCUS: edit_set_buttonbar (e, find_buttonbar (e->widget.owner)); /* fall through */ case WIDGET_DRAW: e->force |= REDRAW_COMPLETELY; edit_update_screen (e); return MSG_HANDLED; case WIDGET_UNFOCUS: /* redraw frame and status */ edit_status (e, FALSE); return MSG_HANDLED; case WIDGET_KEY: { int cmd, ch; cb_ret_t ret = MSG_NOT_HANDLED; /* The user may override the access-keys for the menu bar. */ if (macro_index == -1 && edit_execute_macro (e, parm)) { edit_update_screen (e); ret = MSG_HANDLED; } else if (edit_translate_key (e, parm, &cmd, &ch)) { edit_execute_key_command (e, cmd, ch); edit_update_screen (e); ret = MSG_HANDLED; } return ret; } case WIDGET_COMMAND: /* command from menubar or buttonbar */ edit_execute_key_command (e, parm, -1); edit_update_screen (e); return MSG_HANDLED; case WIDGET_CURSOR: { int y, x; y = (e->fullscreen ? 0 : 1) + EDIT_TEXT_VERTICAL_OFFSET + e->curs_row; x = (e->fullscreen ? 0 : 1) + EDIT_TEXT_HORIZONTAL_OFFSET + option_line_state_width + e->curs_col + e->start_col + e->over_col; widget_move (w, y, x); return MSG_HANDLED; } case WIDGET_DESTROY: edit_clean (e); return MSG_HANDLED; default: return default_proc (msg, parm); } }