(widget_get_options): new widget API.

Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Andrew Borodin 2016-04-10 10:49:31 +03:00
parent 4a0cd948df
commit f5a1dfcef4
8 changed files with 47 additions and 28 deletions

View File

@ -247,7 +247,7 @@ do_select_widget (WDialog * h, GList * w, select_dir_t dir)
break;
}
}
while (h->current != w /* && (WIDGET (h->current->data)->options & WOP_DISABLED) == 0 */ );
while (h->current != w);
if (widget_overlapped (w0, WIDGET (h->current->data)))
{
@ -405,7 +405,7 @@ dlg_mouse_event (WDialog * h, Gpm_Event * event)
{
Widget *w = WIDGET (p->data);
if ((w->options & WOP_DISABLED) == 0 && w->mouse_callback != NULL)
if (!widget_get_options (w, WOP_DISABLED) && w->mouse_callback != NULL)
{
/* put global cursor position to the widget */
int ret;
@ -445,10 +445,10 @@ dlg_try_hotkey (WDialog * h, int d_key)
current = WIDGET (h->current->data);
if ((current->options & WOP_DISABLED) != 0)
if (widget_get_options (current, WOP_DISABLED))
return MSG_NOT_HANDLED;
if ((current->options & WOP_IS_INPUT) != 0)
if (widget_get_options (current, WOP_IS_INPUT))
{
/* skip ascii control characters, anything else can valid character in
* some encoding */
@ -462,7 +462,7 @@ dlg_try_hotkey (WDialog * h, int d_key)
d_key = g_ascii_tolower (c);
handled = MSG_NOT_HANDLED;
if ((current->options & WOP_WANT_HOTKEY) != 0)
if (widget_get_options (current, WOP_WANT_HOTKEY))
handled = send_message (current, NULL, MSG_HOTKEY, d_key, NULL);
/* If not used, send hotkey to other widgets */
@ -476,7 +476,8 @@ dlg_try_hotkey (WDialog * h, int d_key)
{
current = WIDGET (hot_cur->data);
if ((current->options & WOP_WANT_HOTKEY) != 0 && (current->options & WOP_DISABLED) == 0)
if (widget_get_options (current, WOP_WANT_HOTKEY)
&& !widget_get_options (current, WOP_DISABLED))
handled = send_message (current, NULL, MSG_HOTKEY, d_key, NULL);
if (handled == MSG_NOT_HANDLED)
@ -569,7 +570,7 @@ frontend_dlg_run (WDialog * h)
if (idle_hook)
execute_hooks (idle_hook);
while ((WIDGET (h)->options & WOP_WANT_IDLE) != 0 && is_idle ())
while (widget_get_options (WIDGET (h), WOP_WANT_IDLE) && is_idle ())
send_message (h, NULL, MSG_IDLE, 0, NULL);
/* Allow terminating the dialog from the idle handler */
@ -1048,7 +1049,7 @@ dlg_focus (WDialog * h)
{
Widget *current = WIDGET (h->current->data);
if (((current->options & WOP_DISABLED) == 0)
if (!widget_get_options (current, WOP_DISABLED))
&& (send_message (current, NULL, MSG_FOCUS, 0, NULL) == MSG_HANDLED))
{
send_message (h, current, MSG_FOCUS, 0, NULL);
@ -1166,7 +1167,7 @@ update_cursor (WDialog * h)
w = WIDGET (p->data);
if (((w->options & WOP_DISABLED) == 0) && ((w->options & WOP_WANT_CURSOR) != 0))
if (!widget_get_options (w, WOP_DISABLED) && widget_get_options (w, WOP_WANT_CURSOR))
send_message (w, NULL, MSG_CURSOR, 0, NULL);
else
do
@ -1177,9 +1178,9 @@ update_cursor (WDialog * h)
w = WIDGET (p->data);
if (((w->options & WOP_DISABLED) == 0) && ((w->options & WOP_WANT_CURSOR) != 0))
if (send_message (w, NULL, MSG_CURSOR, 0, NULL) == MSG_HANDLED)
break;
if (!widget_get_options (w, WOP_DISABLED) && widget_get_options (w, WOP_WANT_CURSOR)
&& send_message (w, NULL, MSG_CURSOR, 0, NULL) == MSG_HANDLED)
break;
}
while (TRUE);
}

View File

@ -71,7 +71,7 @@ groupbox_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void
gboolean disabled;
disabled = (w->options & WOP_DISABLED) != 0;
disabled = widget_get_options (w, WOP_DISABLED);
tty_setcolor (disabled ? DISABLED_COLOR : h->color[DLG_COLOR_NORMAL]);
tty_draw_box (w->y, w->x, w->lines, w->cols, TRUE);

View File

@ -103,7 +103,7 @@ static void
draw_history_button (WInput * in)
{
char c;
gboolean disabled = (WIDGET (in)->options & WOP_DISABLED) != 0;
gboolean disabled;
if (g_list_next (in->history.current) == NULL)
c = '^';
@ -113,6 +113,7 @@ draw_history_button (WInput * in)
c = '|';
widget_move (in, 0, WIDGET (in)->cols - HISTORY_BUTTON_WIDTH);
disabled = widget_get_options (WIDGET (in), WOP_DISABLED);
tty_setcolor (disabled ? DISABLED_COLOR : in->color[WINPUTC_HISTORY]);
#ifdef LARGE_HISTORY_BUTTON
@ -1295,7 +1296,7 @@ input_update (WInput * in, gboolean clear_first)
if (has_history != 0)
draw_history_button (in);
if ((w->options & WOP_DISABLED) != 0)
if (widget_get_options (w, WOP_DISABLED))
tty_setcolor (DISABLED_COLOR);
else if (in->first)
tty_setcolor (in->color[WINPUTC_UNCHANGED]);

View File

@ -81,7 +81,7 @@ label_callback (Widget * w, Widget * sender, widget_msg_t msg, int parm, void *d
if (l->text == NULL)
return MSG_HANDLED;
disabled = (w->options & WOP_DISABLED) != 0;
disabled = widget_get_options (w, WOP_DISABLED);
if (l->transparent)
tty_setcolor (disabled ? DISABLED_COLOR : DEFAULT_COLOR);

View File

@ -132,22 +132,24 @@ listbox_draw (WListbox * l, gboolean focused)
{
Widget *w = WIDGET (l);
const WDialog *h = w->owner;
const gboolean disabled = (w->options & WOP_DISABLED) != 0;
const int normalc = disabled ? DISABLED_COLOR : h->color[DLG_COLOR_NORMAL];
/* *INDENT-OFF* */
int selc = disabled
? DISABLED_COLOR
: focused
? h->color[DLG_COLOR_HOT_FOCUS]
: h->color[DLG_COLOR_FOCUS];
/* *INDENT-ON* */
gboolean disabled;
int normalc, selc;
int length = 0;
GList *le = NULL;
int pos;
int i;
int sel_line = -1;
disabled = widget_get_options (w, WOP_DISABLED);
normalc = disabled ? DISABLED_COLOR : h->color[DLG_COLOR_NORMAL];
/* *INDENT-OFF* */
selc = disabled
? DISABLED_COLOR
: focused
? h->color[DLG_COLOR_HOT_FOCUS]
: h->color[DLG_COLOR_FOCUS];
/* *INDENT-ON* */
if (l->list != NULL)
{
length = g_queue_get_length (l->list);

View File

@ -241,7 +241,7 @@ widget_selectcolor (Widget * w, gboolean focused, gboolean hotkey)
WDialog *h = w->owner;
int color;
if ((w->options & WOP_DISABLED) != 0)
if (widget_get_options (w, WOP_DISABLED))
color = DISABLED_COLOR;
else if (hotkey)
{

View File

@ -185,6 +185,21 @@ send_message (void *w, void *sender, widget_msg_t msg, int parm, void *data)
return ret;
}
/* --------------------------------------------------------------------------------------------- */
/**
* Check whether one or several option flags are set or not.
* @param w widget
* @param options widget option flags
*
* @return TRUE if all requested option flags are set, FALSE otherwise.
*/
static inline gboolean
widget_get_options (const Widget * w, widget_options_t options)
{
return ((w->options & options) == options);
}
/* --------------------------------------------------------------------------------------------- */
#endif /* MC__WIDGET_INTERNAL_H */

View File

@ -955,7 +955,7 @@ check_find_events (WDialog * h)
/* dialog terminated */
return FIND_ABORT;
}
if ((WIDGET (h)->options & WOP_WANT_IDLE) == 0)
if (!widget_get_options (WIDGET (h), WOP_WANT_IDLE))
{
/* searching suspended */
return FIND_SUSPEND;