diff -urN cui13/cui.c cui14/cui.c --- cui13/cui.c Thu Jan 30 05:10:00 2014 +++ cui14/cui.c Thu Jan 30 05:20:00 2014 @@ -189,6 +189,14 @@ } void +cui_handler_list_free(cui_handler_list list) +{ + if(list == NULL) return; + cui_handler_list_free(list->next); + free(list); +} + +void cui_bind(cui obj, int evt, cui_handler hdr, void *prm) { obj->handler_list = cui_handler_list_new(hdr, evt, prm, obj->handler_list); @@ -359,6 +367,53 @@ } cui_key_exit(); cui_esc_exit(); +} + +void +cui_free(cui obj) +{ + if(obj == NULL) return; + cui_free(obj->next); + 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 cui13/cui.h cui14/cui.h --- cui13/cui.h Thu Jan 30 05:00:00 2014 +++ cui14/cui.h Thu Jan 30 05:20:00 2014 @@ -71,5 +71,8 @@ void cui_draw(cui obj); 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 cui13/cui_test.c cui14/cui_test.c --- cui13/cui_test.c Thu Jan 30 05:00:00 2014 +++ cui14/cui_test.c Thu Jan 30 05:20:00 2014 @@ -1,32 +1,13 @@ #include -#include "esc.h" #include "cui.h" int -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; -} - -int main() { - cui panel = cui_panel_new(NULL, 8, 4, 23, 7); - cui btn1 = cui_button_new(panel, 5, 4, "OK"); - cui btn2 = cui_button_new(panel, 12, 4, "Cancel"); - char *btn_result; - - cui_label_new(panel, 3, 2, "Are you sure ?"); - - cui_bind(btn1, CUI_EVT_BUTTON, hdr, &btn_result); - cui_bind(btn2, CUI_EVT_BUTTON, hdr, &btn_result); - - cui_main(panel); + char *s; - printf("result %s\n", btn_result); + s = cui_simple_dialog(2, 2, "Are you sure ?", "OK", "Cancel"); + printf("result %s\n", s); return 0; }