Widget library: added new widget WHLine.

Signed-off-by: Slava Zanko <slavazanko@gmail.com>
Signed-off-by: Andrew Borodin <aborodin@vmail.ru>
This commit is contained in:
Slava Zanko 2010-02-23 01:57:07 +02:00
parent 334560adac
commit c40c5014b9
2 changed files with 68 additions and 0 deletions

View File

@ -785,6 +785,66 @@ label_new (int y, int x, const char *text)
return l;
}
static cb_ret_t
hline_callback (Widget *w, widget_msg_t msg, int parm)
{
WHLine *l = (WHLine *) w;
Dlg_head *h = l->widget.parent;
switch (msg) {
case WIDGET_INIT:
case WIDGET_RESIZED:
if (l->auto_adjust_cols) {
if (((w->parent->flags & DLG_COMPACT) != 0)) {
w->x = w->parent->x;
w->cols = w->parent->cols;
} else {
w->x = w->parent->x + 1;
w->cols = w->parent->cols - 2;
}
}
case WIDGET_FOCUS:
/* We don't want to get the focus */
return MSG_NOT_HANDLED;
case WIDGET_DRAW:
if (l->transparent)
tty_setcolor (DEFAULT_COLOR);
else
tty_setcolor (DLG_NORMALC (h));
tty_draw_hline (w->y, w->x + 1, ACS_HLINE, w->cols - 2);
if (l->auto_adjust_cols) {
widget_move (w, 0, 0);
tty_print_alt_char (ACS_LTEE);
widget_move (w, 0, w->cols - 1);
tty_print_alt_char (ACS_RTEE);
}
return MSG_HANDLED;
default:
return default_proc (msg, parm);
}
}
WHLine *
hline_new (int y, int x, int width)
{
WHLine *l;
int cols = width;
int lines = 1;
l = g_new (WHLine, 1);
init_widget (&l->widget, y, x, lines, cols, hline_callback, NULL);
l->auto_adjust_cols = (width < 0);
l->transparent = FALSE;
widget_want_cursor (l->widget, 0);
return l;
}
/* Gauge widget (progress indicator) */
/* Currently width is hardcoded here for text mode */

View File

@ -128,6 +128,12 @@ typedef struct {
int transparent; /* Paint in the default color fg/bg */
} WLabel;
typedef struct {
Widget widget;
gboolean auto_adjust_cols; /* Compute widget.cols from parent width? */
gboolean transparent; /* Paint in the default color fg/bg */
} WHLine;
typedef struct WLEntry {
char *text; /* Text to display */
int hotkey;
@ -187,6 +193,8 @@ WRadio *radio_new (int y, int x, int count, const char **text);
WCheck *check_new (int y, int x, int state, const char *text);
WInput *input_new (int y, int x, int color, int len, const char *text, const char *histname, INPUT_COMPLETE_FLAGS completion_flags);
WLabel *label_new (int y, int x, const char *text);
WHLine *hline_new (int y, int x, int width);
WGauge *gauge_new (int y, int x, int shown, int max, int current);
WListbox *listbox_new (int y, int x, int height, int width, gboolean deletable, lcback callback);
WButtonBar *buttonbar_new (gboolean visible);