diff -urN cui61/Makefile cui62/Makefile --- cui61/Makefile 2014-02-02 23:50:00.000000000 +0900 +++ cui62/Makefile 2014-02-03 00:00:00.000000000 +0900 @@ -1,7 +1,7 @@ CC = gcc -Wall TARG = cui_test -OBJS = cui.o focus.o etext.o menu.o dialog.o tab.o radio.o ckbox.o button.o lblfix.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 fillbtn.o tab.o radio.o ckbox.o button.o lblfix.o fill.o label.o panel.o handler.o esc.o key.o rect.o all: $(TARG) diff -urN cui61/cui_test.c cui62/cui_test.c --- cui61/cui_test.c 2014-02-02 23:50:00.000000000 +0900 +++ cui62/cui_test.c 2014-02-03 00:00:00.000000000 +0900 @@ -1,5 +1,6 @@ #include #include +#include #include "cui.h" #include "esc.h" #include "handler.h" @@ -11,6 +12,7 @@ #include "menu.h" #include "etext.h" #include "tab.h" +#include "fillbtn.h" int joke_hdr(cui obj, int evt, int val, void *prm) @@ -275,10 +277,25 @@ } int +fb_hdr(cui obj, int evt, int val, void *prm) +{ + cui lb = (cui)prm; + static char buf[8]; + static int cnt = 0; + + usleep(100*1000); + sprintf(buf, "%d", cnt++); + cui_label_str_set(lb, buf); + return TRUE; +} + +int main() { cui bs = cui_panel_new(NULL, 0, 0, 42, 23); - cui lb_bar = cui_label_new(bs, 4, 4, "bar sheet"); + cui bs_bar = cui_base_new(bs, 1, 2, 0, 0); + cui lb_bar = cui_label_new(bs_bar, 1, 1, "bar"); + cui fb = cui_fillbtn_new(bs_bar, 1, 2, 4, 4, "+"); cui lb_hoge = cui_label_new(bs, 4, 4, "hoge sheet"); cui base = cui_panel_new(bs, 1, 2, 40, 20); cui mn_btn = cui_menu_btn_new(base, 1, 1, "File"); @@ -300,7 +317,12 @@ cui_bind(ck, CUI_EVT_BUTTON, my_hdr2, small); cui_bind(mv_btn, CUI_EVT_BUTTON, mv_hdr, mv_lb); - cui_tab_new(bs, 1, 1, -1, (char *[]){"foo", "bar", "hoge", NULL}, (cui []){base, lb_bar, lb_hoge}, 0); + cui_hide(bs_bar); + cui_wh_fit(bs_bar); + cui_bind(fb, CUI_EVT_BUTTON, fb_hdr, lb_bar); + cui_hide(lb_hoge); + + cui_tab_new(bs, 1, 1, -1, (char *[]){"foo", "bar", "hoge", NULL}, (cui []){base, bs_bar, lb_hoge}, 0); cui_main(bs, NULL); printf("result %s\n", p->btn_result); diff -urN cui61/fillbtn.c cui62/fillbtn.c --- cui61/fillbtn.c 1970-01-01 09:00:00.000000000 +0900 +++ cui62/fillbtn.c 2014-02-03 00:00:00.000000000 +0900 @@ -0,0 +1,48 @@ +#include "fillbtn.h" +#include "handler.h" +#include "key.h" +#include + +cui +cui_fillbtn_new(cui parent, int x, int y, int w, int h, char *s) +{ + cui obj = cui_alloc(sizeof(struct cui_fillbtn)); + cui_fillbtn_init(obj, parent, x, y, w, h, s); + return obj; +} + +void +cui_fillbtn_init(cui obj, cui parent, int x, int y, int w, int h, char *s) +{ + cui_fillbtn p = (cui_fillbtn)obj; + cui_base_init(obj, parent, x, y, w, h); + p->fill = cui_fill_new(obj, 0, 0, w, h, s, CUI_ATTR_NORMAL); + p->v = 0; + obj->flags |= CUI_FLG_CAN_FOCUS; + cui_bind(obj, CUI_EVT_DRAW | CUI_EVT_KEY, cui_fillbtn_hdr, NULL); +} + +int +cui_fillbtn_hdr(cui obj, int evt, int val, void *prm) +{ + cui_fillbtn p = (cui_fillbtn)obj; + int attr; + + switch(evt){ + case CUI_EVT_DRAW: + attr = p->v ? CUI_ATTR_REVERSE : (val == CUI_DRAW_FOCUS ? CUI_ATTR_ULINE : CUI_ATTR_NORMAL); + cui_fill_attr_set(p->fill, attr); + return TRUE; + case CUI_EVT_KEY: + if(val != CUI_KEY_ENTER) break; + p->v = TRUE; + cui_draw(obj); + cui_handler_call(obj, CUI_EVT_BUTTON, p->v); + p->v = FALSE; + cui_draw(obj); + return TRUE; + } + return FALSE; +} + +/* EOF */ diff -urN cui61/fillbtn.h cui62/fillbtn.h --- cui61/fillbtn.h 1970-01-01 09:00:00.000000000 +0900 +++ cui62/fillbtn.h 2014-02-03 00:00:00.000000000 +0900 @@ -0,0 +1,17 @@ +#ifndef __FILLBTN_H__ +#define __FILLBTN_H__ + +#include "fill.h" + +typedef struct cui_fillbtn{ + struct cui_base base; + cui fill; + int v; +} *cui_fillbtn; + + +cui cui_fillbtn_new(cui parent, int x, int y, int w, int h, char *s); +void cui_fillbtn_init(cui obj, cui parent, int x, int y, int w, int h, char *s); +int cui_fillbtn_hdr(cui obj, int evt, int val, void *prm); + +#endif