diff -urN cui25/button.c cui26/button.c --- cui25/button.c Thu Jan 30 23:20:00 2014 +++ cui26/button.c Thu Jan 30 23:40:00 2014 @@ -17,7 +17,7 @@ int cui_button_hdr(cui obj, int evt, int val, void *prm) { - char *s; + cui_button p = (cui_button)obj; int attr; if(evt == CUI_EVT_KEY){ @@ -32,23 +32,27 @@ } /* CUI_EVT_DRAW */ - s = cui_button_str_get(obj); - + attr = (val == CUI_DRAW_FOCUS) ? CUI_ESC_ULINE : CUI_ESC_NORMAL; - cui_draw_str(obj, 0, 0, "(", attr); - cui_draw_str(obj, 1+strlen(s), 0, ")", attr); - + ((cui_label)p->lb1)->attr = attr; + ((cui_label)p->lb3)->attr = attr; attr = (val == CUI_DRAW_ACTIVE) ? CUI_ESC_REVERSE : attr; - cui_draw_str(obj, 1, 0, s, attr); - cui_esc_attr(CUI_ESC_NORMAL); + ((cui_label)p->lb2)->attr = attr; + cui_draw(p->lb1); + cui_draw(p->lb2); + cui_draw(p->lb3); return TRUE; } void cui_button_init(cui obj, cui parent, int x, int y, char *s) { - cui_label_init(obj, parent, x, y, s); - obj->w += 2; + cui_button p = (cui_button)obj; + int n = strlen(s); + cui_base_init(obj, parent, x, y, n+2, 1); + p->lb1 = cui_label_new(obj, 0, 0, "("); + p->lb2 = cui_label_new(obj, 1, 0, s); + p->lb3 = cui_label_new(obj, 1+n, 0, ")"); obj->flags |= CUI_FLG_CAN_FOCUS; cui_bind(obj, CUI_EVT_DRAW | CUI_EVT_KEY, cui_button_hdr, NULL); } @@ -56,16 +60,19 @@ char * cui_button_str_get(cui obj) { - return cui_label_str_get(obj); + cui_button p = (cui_button)obj; + return cui_label_str_get(p->lb2); } void cui_button_str_set(cui obj, char *s) { + cui_button p = (cui_button)obj; int visi = cui_is_visible(obj); if(visi) cui_hide(obj); - cui_label_str_set(obj, s); - obj->w += 2; + cui_label_str_set(p->lb2, s); + p->lb3->x = p->lb1->w + p->lb2->w; + obj->w = p->lb3->x + p->lb3->w; if(visi) cui_show(obj); } diff -urN cui25/button.h cui26/button.h --- cui25/button.h Thu Jan 30 22:10:00 2014 +++ cui26/button.h Thu Jan 30 23:40:00 2014 @@ -4,7 +4,8 @@ #include "label.h" typedef struct cui_button{ - struct cui_label label; + struct cui_base base; + cui lb1, lb2, lb3; } *cui_button; cui cui_button_new(cui parent, int x, int y, char *s); diff -urN cui25/cui_test.c cui26/cui_test.c --- cui25/cui_test.c Thu Jan 30 23:30:00 2014 +++ cui26/cui_test.c Thu Jan 30 23:40:00 2014 @@ -10,10 +10,7 @@ my_hdr(cui obj, int evt, int val, void *prm) { cui_simple_dialog p = (cui_simple_dialog)prm; - cui_hide(p->label); - cui_label_str_set(p->label, "Realy ? Select Yes or No button"); - ((cui_label)p->label)->attr = CUI_ESC_REVERSE; - cui_show(p->label); + cui_label_str_set(p->label, "Realy ?"); cui_button_str_set(p->btn1, "Yes"); cui_button_str_set(p->btn2, "No"); cui_unbind(obj, CUI_EVT_BUTTON, my_hdr); @@ -39,7 +36,6 @@ cui_simple_dialog p = (cui_simple_dialog)dlg; dlg->flags |= CUI_FLG_HIDE; - ((cui_label)p->label)->attr = CUI_ESC_ULINE; cui_bind(btn, CUI_EVT_BUTTON, my_hdr2, p); cui_bind(p->btn1, CUI_EVT_BUTTON, my_hdr, p);