diff -urN cui39/cui_test.c cui40/cui_test.c --- cui39/cui_test.c Fri Jan 31 01:20:00 2014 +++ cui40/cui_test.c Fri Jan 31 02:00:00 2014 @@ -79,18 +79,70 @@ } int +arrow_hdr(cui obj, int evt, int val, void *prm) +{ + cui big = (cui)prm; + char *s = cui_button_str_get(obj); + int x = big->x, y = big->y; + + if(strcmp(s, "L") == 0) x++; + else if (strcmp(s, "R") == 0) x--; + else if (strcmp(s, "U") == 0) y++; + else if (strcmp(s, "D") == 0) y--; + cui_xywh_set(big, x, y, big->w, big->h); + return TRUE; +} + +cui +arrow_new(cui parent, int x, int y, void *prm) +{ + cui base = cui_base_new(parent, x, y, 0, 0); + cui al = cui_button_new(base, 0, 1, "L"); + cui ad = cui_button_new(base, al->x + al->w, 1, "D"); + cui ar = cui_button_new(base, ad->x + ad->w, 1, "R"); + cui au = cui_button_new(base, ad->x, 0, "U"); + base->w = ar->x + ar->w; + base->h = 2; + cui_bind(al, CUI_EVT_BUTTON, arrow_hdr, prm); + cui_bind(ad, CUI_EVT_BUTTON, arrow_hdr, prm); + cui_bind(ar, CUI_EVT_BUTTON, arrow_hdr, prm); + cui_bind(au, CUI_EVT_BUTTON, arrow_hdr, prm); + return base; +} + +cui +big_new(cui parent, int x, int y, cui_simple_dialog *res_dlg) +{ + cui base = cui_panel_new(parent, x, y, 0, 0); + cui dlg = cui_simple_dialog_new(base, 1, 1, "Are you sure ?", "OK", "Cancel"); + cui_simple_dialog_new(base, dlg->x + dlg->w, dlg->y, "Continue ?", "Yes", "No"); + cui_simple_dialog_new(base, dlg->x, dlg->y + dlg->h, "How are you ?", "^_^", "T_T"); + cui_simple_dialog_new(base, dlg->x + dlg->w, dlg->y + dlg->h, "(A1) (B2)", "C3", "D4"); + cui_simple_dialog p = (cui_simple_dialog)dlg; + base->w = dlg->w * 2; + base->h = dlg->h * 2; + cui_bind(p->btn1, CUI_EVT_BUTTON, my_hdr, p); + *res_dlg = p; + return base; +} + +int 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 mv_lb = cui_label_new(base, mv_btn->x + mv_btn->w + 2, mv_btn->y, ""); - cui dlg = cui_simple_dialog_new(base, 2, 2, "Are you sure ?", "OK", "Cancel"); - cui_simple_dialog p = (cui_simple_dialog)dlg; - dlg->flags |= CUI_FLG_HIDE; - cui_bind(btn, CUI_EVT_BUTTON, my_hdr2, p); - cui_bind(p->btn1, CUI_EVT_BUTTON, my_hdr, p); + cui_simple_dialog p; + cui small = cui_panel_new(base, 2, 3, base->w - (2 * 2), base->h - (3 + 1)); + cui small2 = cui_base_new(small, 1, 1, small->w - 2, small->h - 2); + cui big = big_new(small2, 0, 0, &p); + + 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(mv_btn, CUI_EVT_BUTTON, mv_hdr, mv_lb); cui_main(base, NULL);