diff -urN cui15/Makefile cui16/Makefile --- cui15/Makefile Thu Jan 30 05:30:00 2014 +++ cui16/Makefile Thu Jan 30 22:00:00 2014 @@ -1,7 +1,7 @@ CC = gcc -Wall TARG = cui_test -OBJS = cui.o button.o label.o panel.o handler.o esc.o key.o +OBJS = cui.o dialog.o button.o label.o panel.o handler.o esc.o key.o all: $(TARG) diff -urN cui15/button.c cui16/button.c --- cui15/button.c Thu Jan 30 05:30:00 2014 +++ cui16/button.c Thu Jan 30 22:00:00 2014 @@ -50,7 +50,6 @@ cui_label_init(obj, parent, x, y, s); obj->w += 2; obj->flags |= CUI_FLG_CAN_FOCUS; - cui_unbind(obj, CUI_EVT_DRAW, cui_label_hdr); cui_bind(obj, CUI_EVT_DRAW | CUI_EVT_KEY, cui_button_hdr, NULL); } diff -urN cui15/cui.c cui16/cui.c --- cui15/cui.c Thu Jan 30 05:30:00 2014 +++ cui16/cui.c Thu Jan 30 22:00:00 2014 @@ -54,6 +54,33 @@ fflush(stdout); } +void +cui_fill_rect(cui obj, int x, int y, int w, int h, char c, int attr) +{ + int ix, iy; + char s[4]; + + s[0] = c; + s[1] = '\0'; + for(iy=0; iyw, obj->h); +} + int cui_gx(cui obj) { @@ -179,6 +206,7 @@ cui_key_enter(); cui_running = TRUE; + cui_clear(top_obj); cui_draw(top_obj); while(cui_running){ if((key = cui_key_get2()) == 0) continue; @@ -205,43 +233,6 @@ cui_free(obj->children); cui_handler_list_free(obj->handler_list); free(obj); -} - -int -cui_simple_dialog_hdr(cui obj, int evt, int val, void *prm) -{ - char **result_ptr = (char **)prm; - *result_ptr = cui_button_str_get(obj); - cui_quit(); - return TRUE; -} - -char * -cui_simple_dialog(int x, int y, char *s, char *s_btn1, char *s_btn2) -{ - int n, n1, n2, x2, w, w2; - cui panel, btn1, btn2; - char *btn_result; - - n = strlen(s); - n1 = strlen(s_btn1); - n2 = strlen(s_btn2); - w = 3 + n + 3; - x2 = 4 + 1 + n1 + 1 + 3; - w2 = x2 + 1 + n2 + 1 + 3; - w = w2 > w ? w2 : w; - - panel = cui_panel_new(NULL, x, y, w, 7); - cui_label_new(panel, 3, 2, s); - btn1 = cui_button_new(panel, 4, 5, s_btn1); - btn2 = cui_button_new(panel, x2, 5, s_btn2); - - cui_bind(btn1, CUI_EVT_BUTTON, cui_simple_dialog_hdr, &btn_result); - cui_bind(btn2, CUI_EVT_BUTTON, cui_simple_dialog_hdr, &btn_result); - - cui_main(panel); - cui_free(panel); - return btn_result; } /* EOF */ diff -urN cui15/cui.h cui16/cui.h --- cui15/cui.h Thu Jan 30 05:30:00 2014 +++ cui16/cui.h Thu Jan 30 22:00:00 2014 @@ -33,6 +33,9 @@ void cui_base_child_add(cui obj, cui child); void cui_draw_str(cui obj, int x, int y, char *s, int attr); +void cui_fill_rect(cui obj, int x, int y, int w, int h, char c, int attr); +void cui_clear_rect(cui obj, int x, int y, int w, int h); +void cui_clear(cui obj); int cui_gx(cui obj); int cui_gy(cui obj); @@ -40,7 +43,5 @@ void cui_quit(void); void cui_main(cui top_obj); void cui_free(cui obj); - -char *cui_simple_dialog(int x, int y, char *s, char *s_btn1, char *s_btn2); #endif diff -urN cui15/cui_test.c cui16/cui_test.c --- cui15/cui_test.c Thu Jan 30 05:20:00 2014 +++ cui16/cui_test.c Thu Jan 30 22:00:00 2014 @@ -1,13 +1,15 @@ #include #include "cui.h" +#include "dialog.h" int main() { - char *s; - - s = cui_simple_dialog(2, 2, "Are you sure ?", "OK", "Cancel"); - printf("result %s\n", s); + cui obj = cui_simple_dialog_new(NULL, 2, 2, "Are you sure ?", "OK", "Cancel"); + cui_simple_dialog p = (cui_simple_dialog)obj; + cui_main(obj); + printf("result %s\n", p->btn_result); + cui_free(obj); return 0; } diff -urN cui15/dialog.c cui16/dialog.c --- cui15/dialog.c Thu Jan 1 09:00:00 1970 +++ cui16/dialog.c Thu Jan 30 22:00:00 2014 @@ -0,0 +1,40 @@ +#include "dialog.h" +#include "button.h" +#include "handler.h" +#include + +int +cui_simple_dialog_hdr(cui obj, int evt, int val, void *prm) +{ + cui_simple_dialog p = (cui_simple_dialog)prm; + p->btn_result = cui_button_str_get(obj); + cui_quit(); + return TRUE; +} + +cui +cui_simple_dialog_new(cui parent, int x, int y, char *s, char *s_btn1, char *s_btn2) +{ + int n, n1, n2, x2, w, w2; + cui obj = cui_alloc(sizeof(struct cui_simple_dialog)); + cui_simple_dialog p = (cui_simple_dialog)obj; + + n = strlen(s); + n1 = strlen(s_btn1); + n2 = strlen(s_btn2); + w = 3 + n + 3; + x2 = 4 + 1 + n1 + 1 + 3; + w2 = x2 + 1 + n2 + 1 + 3; + w = w2 > w ? w2 : w; + + cui_panel_init(obj, parent, x, y, w, 7); + p->label = cui_label_new(obj, 3, 2, s); + p->btn1 = cui_button_new(obj, 4, 4, s_btn1); + p->btn2 = cui_button_new(obj, x2, 4, s_btn2); + + cui_bind(p->btn1, CUI_EVT_BUTTON, cui_simple_dialog_hdr, obj); + cui_bind(p->btn2, CUI_EVT_BUTTON, cui_simple_dialog_hdr, obj); + return obj; +} + +/* EOF */ diff -urN cui15/dialog.h cui16/dialog.h --- cui15/dialog.h Thu Jan 1 09:00:00 1970 +++ cui16/dialog.h Thu Jan 30 22:00:00 2014 @@ -0,0 +1,14 @@ +#ifndef __DIALOG_H_ +#define __DIALOG_H_ + +#include "panel.h" + +typedef struct cui_simple_dialog{ + struct cui_panel panel; + cui label, btn1, btn2; + char *btn_result; +} *cui_simple_dialog; + +cui cui_simple_dialog_new(cui parent, int x, int y, char *s, char *s_btn1, char *s_btn2); + +#endif diff -urN cui15/esc.c cui16/esc.c --- cui15/esc.c Thu Jan 30 03:20:00 2014 +++ cui16/esc.c Thu Jan 30 22:00:00 2014 @@ -64,7 +64,6 @@ cui_esc_enter(void) { cui_esc_cursor_pos_save(); - cui_esc_exopt(CUI_ESC_SCREEN_SAVE_LOAD, 1); cui_esc_exopt(CUI_ESC_CURSOR_ONOFF, 0); } @@ -73,7 +72,6 @@ { cui_esc_attr(CUI_ESC_NORMAL); cui_esc_exopt(CUI_ESC_CURSOR_ONOFF, 1); - cui_esc_exopt(CUI_ESC_SCREEN_SAVE_LOAD, 0); cui_esc_cursor_pos_load(); } diff -urN cui15/handler.c cui16/handler.c --- cui15/handler.c Thu Jan 30 05:30:00 2014 +++ cui16/handler.c Thu Jan 30 22:00:00 2014 @@ -49,8 +49,8 @@ cui_handler_call(cui obj, cui_handler_list list, int evt, int val) { if(list == NULL) return FALSE; - if(cui_handler_call(obj, list->next, evt, val)) return TRUE; - return (evt & list->evt) ? (*list->hdr)(obj, evt, val, list->prm) : FALSE; + return (evt & list->evt) && (*list->hdr)(obj, evt, val, list->prm) ? TRUE : + cui_handler_call(obj, list->next, evt, val); } /* EOF */ diff -urN cui15/panel.c cui16/panel.c --- cui15/panel.c Thu Jan 30 05:30:00 2014 +++ cui16/panel.c Thu Jan 30 22:00:00 2014 @@ -14,21 +14,10 @@ int cui_panel_hdr(cui obj, int evt, int val, void *prm) { - int x, y; - - for(y=0; yh; y++){ - for(x=0; xw; x++){ - cui_draw_str(obj, x, y, " ", CUI_ESC_NORMAL); - } - } - for(x=1; xw-1; x++){ - cui_draw_str(obj, x, 0, "-", CUI_ESC_NORMAL); - cui_draw_str(obj, x, obj->h-1, "-", CUI_ESC_NORMAL); - } - for(y=1; yh-1; y++){ - cui_draw_str(obj, 0, y, "|", CUI_ESC_NORMAL); - cui_draw_str(obj, obj->w-1, y, "|", CUI_ESC_NORMAL); - } + cui_fill_rect(obj, 1, 0, obj->w-2, 1, '-', CUI_ESC_NORMAL); + cui_fill_rect(obj, 1, obj->h-1, obj->w-2, 1, '-', CUI_ESC_NORMAL); + cui_fill_rect(obj, 0, 1, 1, obj->h-2, '|', CUI_ESC_NORMAL); + cui_fill_rect(obj, obj->w-1, 1, 1, obj->h-2, '|', CUI_ESC_NORMAL); cui_draw_str(obj, 0, 0, "+", CUI_ESC_NORMAL); cui_draw_str(obj, obj->w-1, 0, "+", CUI_ESC_NORMAL); cui_draw_str(obj, obj->w-1, obj->h-1, "+", CUI_ESC_NORMAL);