diff -urN cui52/Makefile cui53/Makefile --- cui52/Makefile Fri Jan 31 22:20:00 2014 +++ cui53/Makefile Sat Feb 1 00:00:00 2014 @@ -1,7 +1,7 @@ CC = gcc -Wall TARG = cui_test -OBJS = cui.o focus.o menu.o dialog.o radio.o ckbox.o button.o fill.o label.o panel.o handler.o esc.o key.o rect.o +OBJS = cui.o focus.o etext.o menu.o dialog.o radio.o ckbox.o button.o fill.o label.o panel.o handler.o esc.o key.o rect.o all: $(TARG) diff -urN cui52/cui_test.c cui53/cui_test.c --- cui52/cui_test.c Fri Jan 31 23:00:00 2014 +++ cui53/cui_test.c Sat Feb 1 00:00:00 2014 @@ -9,6 +9,7 @@ #include "radio.h" #include "dialog.h" #include "menu.h" +#include "etext.h" int joke_hdr(cui obj, int evt, int val, void *prm) @@ -267,6 +268,7 @@ { cui base = cui_panel_new(NULL, 0, 0, 40, 20); cui mn_btn = cui_menu_btn_new(base, 1, 1, "File"); + cui etx = cui_etext_new(base, mn_btn->x, cui_y2(mn_btn), 8, "foo"); cui ck = cui_ckbox_new(base, cui_x2(mn_btn)+2, 1, "Show", FALSE); cui mv_btn = cui_button_new(base, cui_x2(ck) + 2, ck->y, "move"); cui mv_lb = cui_label_new(base, cui_x2(mv_btn) + 2, mv_btn->y, ""); diff -urN cui52/etext.c cui53/etext.c --- cui52/etext.c Thu Jan 1 09:00:00 1970 +++ cui53/etext.c Sat Feb 1 00:00:00 2014 @@ -0,0 +1,65 @@ +#include "etext.h" +#include "handler.h" +#include +#include + +cui +cui_etext_new(cui parent, int x, int y, int w, char *init_s) +{ + cui obj = cui_alloc(sizeof(struct cui_etext)); + cui_etext_init(obj, parent, x, y, w, init_s); + return obj; +} + +void +cui_etext_init(cui obj, cui parent, int x, int y, int w, char *init_s) +{ + cui_etext p = (cui_etext)obj; + + cui_base_init(obj, parent, x, y, 0, 1); + if(init_s == NULL) init_s = ""; + strcpy(p->buf, init_s); + p->lb_top = cui_label_new(obj, 0, 0, "["); + p->view = cui_base_new(obj, 1, 0, w-2, 1); + p->lb_end = cui_label_new(obj, cui_x2(p->view), 0, "]"); + cui_wh_fit(obj, obj->children); + + p->inner = cui_base_new(p->view, 0, 0, 0, 1); + p->lb = cui_label_new(p->inner, 0, 0, p->buf); + p->fill = cui_fill_new(p->inner, cui_x2(p->lb), 0, w-2, 1, " ", CUI_ATTR_NORMAL); + cui_wh_fit(p->inner, p->inner->children); + + obj->flags |= CUI_FLG_CAN_FOCUS; + cui_bind(obj, CUI_EVT_DRAW, cui_etext_hdr, NULL); +} + +int +cui_etext_hdr(cui obj, int evt, int val, void *prm) +{ + cui_etext p = (cui_etext)obj; + int attr; + + if(evt == CUI_EVT_DRAW){ + attr = (val == CUI_DRAW_FOCUS) ? CUI_ATTR_ULINE : CUI_ATTR_NORMAL; + cui_label_attr_set(p->lb_top, attr); + cui_label_attr_set(p->lb, attr); + cui_fill_attr_set(p->fill, attr); + cui_label_attr_set(p->lb_end, attr); + return TRUE; + } + return FALSE; +} + +char * +cui_etext_str_get(cui obj) +{ + cui_etext p = (cui_etext)obj; + return p->buf; +} + +void +cui_etext_str_set(cui obj, char *s) +{ +} + +/* EOF */ diff -urN cui52/etext.h cui53/etext.h --- cui52/etext.h Thu Jan 1 09:00:00 1970 +++ cui53/etext.h Sat Feb 1 00:00:00 2014 @@ -0,0 +1,21 @@ +#ifndef __ETEXT_H__ +#define __ETEXT_H__ + +#include "fill.h" + +#define CUI_ETEXT_MAX 1024 + +typedef struct cui_etext{ + struct cui_base base; + char buf[ CUI_ETEXT_MAX ], bak[ CUI_ETEXT_MAX ]; + cui lb_top, lb, fill, lb_end; + cui view, inner; +} *cui_etext; + +cui cui_etext_new(cui parent, int x, int y, int w, char *init_s); +void cui_etext_init(cui obj, cui parent, int x, int y, int w, char *init_s); +int cui_etext_hdr(cui obj, int evt, int val, void *prm); +char *cui_etext_str_get(cui obj); +void cui_etext_str_set(cui obj, char *s); + +#endif