diff -urN cui42/Makefile cui43/Makefile --- cui42/Makefile 2014-01-31 01:10:00.000000000 +0900 +++ cui43/Makefile 2014-01-31 02:30:00.000000000 +0900 @@ -1,7 +1,7 @@ CC = gcc -Wall TARG = cui_test -OBJS = cui.o focus.o dialog.o button.o fill.o label.o panel.o handler.o esc.o key.o rect.o +OBJS = cui.o focus.o dialog.o ckbox.o button.o fill.o label.o panel.o handler.o esc.o key.o rect.o all: $(TARG) diff -urN cui42/ckbox.c cui43/ckbox.c --- cui42/ckbox.c 1970-01-01 09:00:00.000000000 +0900 +++ cui43/ckbox.c 2014-01-31 02:30:00.000000000 +0900 @@ -0,0 +1,68 @@ +#include "ckbox.h" +#include "key.h" +#include "handler.h" +#include +#include + +cui +cui_ckbox_new(cui parent, int x, int y, char *s, int v) +{ + cui obj = cui_alloc(sizeof(struct cui_ckbox)); + cui_ckbox_init(obj, parent, x, y, s, v); + return obj; +} + +int +cui_ckbox_hdr(cui obj, int evt, int val, void *prm) +{ + cui_ckbox p = (cui_ckbox)obj; + int attr; + + if(evt == CUI_EVT_KEY){ + if(val == CUI_KEY_ENTER){ + p->v = !p->v; + cui_label_str_set(p->lb1, p->v ? "[X] " : "[ ] "); + cui_draw(obj); + cui_handler_call(obj, obj->handler_list, CUI_EVT_BUTTON, p->v); + return TRUE; + } + return FALSE; + } + + /* CUI_EVT_DRAW */ + + attr = (val == CUI_DRAW_FOCUS) ? CUI_ATTR_ULINE : CUI_ATTR_NORMAL; + cui_label_attr_set(p->lb1, attr); + cui_label_attr_set(p->lb2, attr); + return TRUE; +} + +void +cui_ckbox_init(cui obj, cui parent, int x, int y, char *s, int v) +{ + cui_ckbox p = (cui_ckbox)obj; + cui_base_init(obj, parent, x, y, 0, 1); + p->lb1 = cui_label_new(obj, 0, 0, "[ ] "); + p->lb2 = cui_label_new(obj, 4, 0, s); + obj->w = p->lb2->x + p->lb2->w; + obj->flags |= CUI_FLG_CAN_FOCUS; + cui_bind(obj, CUI_EVT_DRAW | CUI_EVT_KEY, cui_ckbox_hdr, NULL); + p->v = v; +} + +char * +cui_ckbox_str_get(cui obj) +{ + cui_ckbox p = (cui_ckbox)obj; + return cui_label_str_get(p->lb2); +} + +void +cui_ckbox_str_set(cui obj, char *s) +{ + cui_ckbox p = (cui_ckbox)obj; + cui_label_str_set(p->lb2, s); + cui_w_set(obj, p->lb2->x + p->lb2->w); +} + +/* EOF */ diff -urN cui42/ckbox.h cui43/ckbox.h --- cui42/ckbox.h 1970-01-01 09:00:00.000000000 +0900 +++ cui43/ckbox.h 2014-01-31 02:30:00.000000000 +0900 @@ -0,0 +1,19 @@ +#ifndef __CKBOX_H__ +#define __CKBOX_H__ + +#include "label.h" + +typedef struct cui_ckbox{ + struct cui_base base; + cui lb1, lb2; + int v; +} *cui_ckbox; + +cui cui_ckbox_new(cui parent, int x, int y, char *s, int v); +void cui_ckbox_init(cui obj, cui parent, int x, int y, char *s, int v); +char *cui_ckbox_str_get(cui obj); +void cui_ckbox_str_set(cui obj, char *s); + + +#endif + diff -urN cui42/cui_test.c cui43/cui_test.c --- cui42/cui_test.c 2014-01-31 02:20:00.000000000 +0900 +++ cui43/cui_test.c 2014-01-31 02:30:00.000000000 +0900 @@ -5,6 +5,7 @@ #include "handler.h" #include "label.h" #include "button.h" +#include "ckbox.h" #include "dialog.h" int @@ -61,9 +62,8 @@ my_hdr2(cui obj, int evt, int val, void *prm) { cui dlg = (cui)prm; - if(cui_is_visible(dlg)) cui_hide(dlg); - else cui_show(dlg); - cui_button_str_set(obj, cui_is_visible(dlg) ? "Hide Dialog" : "Show Dialog"); + if(val) cui_show(dlg); + else cui_hide(dlg); return TRUE; } @@ -130,8 +130,8 @@ main() { cui base = cui_panel_new(NULL, 0, 0, 40, 20); - cui btn = cui_button_new(base, 2, 1, "Show Dialog"); - cui mv_btn = cui_button_new(base, btn->x + btn->w + 2, btn->y, "move"); + cui ck = cui_ckbox_new(base, 2, 1, "Show", FALSE); + cui mv_btn = cui_button_new(base, ck->x + ck->w + 2, ck->y, "move"); cui mv_lb = cui_label_new(base, mv_btn->x + mv_btn->w + 2, mv_btn->y, ""); cui_simple_dialog p; @@ -142,7 +142,7 @@ arrow_new(base, mv_lb->x + mv_lb->w + 2, mv_lb->y, big); small->flags |= CUI_FLG_HIDE; - cui_bind(btn, CUI_EVT_BUTTON, my_hdr2, small); + cui_bind(ck, CUI_EVT_BUTTON, my_hdr2, small); cui_bind(mv_btn, CUI_EVT_BUTTON, mv_hdr, mv_lb); cui_main(base, NULL);