diff -urN cui105/cui.c cui106/cui.c --- cui105/cui.c 2014-04-10 22:00:00.000000000 +0900 +++ cui106/cui.c 2014-04-11 02:00:00.000000000 +0900 @@ -585,7 +585,7 @@ static void html(cui obj) { - cui term = cui_term_new(obj, 0, 0, cui_x2(obj)+2, cui_y2(obj)+2); + cui term = cui_term_new(obj, 0, 0, cui_x2(obj), cui_y2(obj)+1); cui_hide(term); cui_puts_add(html_puts, term); @@ -603,7 +603,7 @@ cmenu(cui obj, int key) { cui mn; - char *lst[] = { "Cancel", "^C", "HTML", "Quit", NULL }, *s; + char *lst[] = { "Cancel", "^C", "Redraw", "HTML", "Quit", NULL }, *s; if(key != CUI_KEY_CTRL('C')) return key; @@ -615,7 +615,8 @@ if(strcmp(s, "^C") == 0) return 1; else if(strcmp(s, "Quit") == 0) cui_quit(); - else if(strcmp(s, "HTML") == 0) html(obj); + else if(strcmp(s, "Redraw") == 0) cui_draw(obj); + else if(strcmp(s, "HTML") == 0) html(cui_root(obj)); /* else Cancel */ return 0; } @@ -648,7 +649,7 @@ cui_readable_work(); if(!cui_select_chk(KEY_FD)) continue; if((key = cui_key_get2()) == 0) continue; - if(cmenu(cui_root(top_obj), key) == 0) continue; + if(cmenu(top_obj, key) == 0) continue; focus = cui_focus_get(); if(focus){ if(cui_handler_call(focus, CUI_EVT_KEY, key)) continue; @@ -707,8 +708,6 @@ cui_free(obj); } -typedef void (*puts_func)(char *, void *prm); - typedef struct puts_data{ puts_func f; void *prm; diff -urN cui105/cui_test.c cui106/cui_test.c --- cui105/cui_test.c 2014-04-10 22:00:00.000000000 +0900 +++ cui106/cui_test.c 2014-04-11 00:00:00.000000000 +0900 @@ -418,7 +418,7 @@ cui small2 = cui_scpanel_sheet_get(small); cui tab_sheets[] = { base, bs_bar, sc_hoge, bs_term, bs_timer, bs_num }; - + cui tab = cui_tab_new(bs_view, 0, 0, -1, (char *[]){"foo", "bar", "hoge", "term", "timer", "num", NULL}, tab_sheets, 0); char lb_timer1_buf[16]; big_new(small2, 0, 0, &p); @@ -466,7 +466,9 @@ cui_bind(btn_num, CUI_EVT_BUTTON, btn_num_hdr, num_arr); cui_wh_exp(bs_num); - cui_tab_new(bs_view, 0, 0, -1, (char *[]){"foo", "bar", "hoge", "term", "timer", "num", NULL}, tab_sheets, 0); + cui_wh_set(bs_view, cui_x2(tab), bs_view->h); + cui_wh_set(bs, cui_x2(bs_view)+1, cui_y2(bs_view)+1); + cui_xy_set(((cui_scpanel)bs)->rszbox, bs->w-1, bs->h-1); cui_main(bs, NULL); printf("result %s\n", p->btn_result); diff -urN cui105/etext.c cui106/etext.c --- cui105/etext.c 2014-04-10 22:00:00.000000000 +0900 +++ cui106/etext.c 2014-04-11 01:00:00.000000000 +0900 @@ -117,7 +117,12 @@ cui_lblfix_str_set(p->lbf_shadow, p->buf); p->n = strlen(p->buf); cui_etext_hist_add(obj); - cui_etext_selall_in(obj); + if(p->mode == CUI_ETEXT_MODE_SELALL){ + cui_hide(p->view_cursor); + p->mode = CUI_ETEXT_MODE_NORMAL; + cui_draw(obj); + } + else cui_etext_selall_in(obj); return TRUE; } @@ -149,7 +154,7 @@ cui obj = (cui)prm; cui_etext p = (cui_etext)obj; - p->buf[p->cursor] = *cui_menu_popup_str_get(pm); + p->buf[p->cursor] = '0' + cui_menu_int_get(pm); cui_lblfix_str_set(p->lbf, p->buf); cui_lblfix_str_set(p->lbf_shadow, p->buf); return TRUE; @@ -159,15 +164,14 @@ cui_etext_digit_menu(cui obj) { cui_etext p = (cui_etext)obj; - char *lst[] = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", NULL }; cui pm; if(p->cursor >= p->n || !isdigit(p->buf[p->cursor])) return; - pm = cui_menu_popup_new(p->view_cursor, 0, 0, 0, lst, p->buf[p->cursor] - '0'); + pm = cui_menu_int_new(p->view_cursor, 0, 0, 0, p->buf[p->cursor] - '0', 0, 9); cui_bind(pm, CUI_EVT_BUTTON, cui_etext_digit_menu_hdr, p); cui_hide(pm); cui_handler_call(pm, CUI_EVT_KEY, CUI_KEY_ENTER); - cui_menu_popup_del_free(pm); + cui_menu_int_del_free(pm); } void @@ -204,6 +208,22 @@ cui_show(p->view_cursor); } +static void +mode_edit_normal_key_in(cui obj, int val) +{ + cui_etext p = (cui_etext)obj; + int i; + + if(p->n >= CUI_ETEXT_BSIZE - 1) return; + for(i=p->n; i>=p->cursor; i--) p->buf[i+1] = p->buf[i]; + p->buf[p->cursor] = val; + p->n++; + cui_lblfix_str_set(p->lbf, p->buf); + cui_lblfix_str_set(p->lbf_shadow, p->buf); + p->cursor++; + cui_etext_cursor_update(obj); +} + int cui_etext_hdr(cui obj, int evt, int val, void *prm) { @@ -242,6 +262,10 @@ case CUI_KEY_DOWN: cui_etext_hist_menu(obj); break; + default: + cui_etext_edit_in(obj, CUI_KEY_BS); + mode_edit_normal_key_in(obj, val); + break; } return TRUE; case CUI_ETEXT_MODE_EDIT: @@ -277,14 +301,7 @@ cui_etext_cursor_update(obj); break; default: - if(p->n >= CUI_ETEXT_BSIZE - 1) break; - for(i=p->n; i>=p->cursor; i--) p->buf[i+1] = p->buf[i]; - p->buf[p->cursor] = val; - p->n++; - cui_lblfix_str_set(p->lbf, p->buf); - cui_lblfix_str_set(p->lbf_shadow, p->buf); - p->cursor++; - cui_etext_cursor_update(obj); + mode_edit_normal_key_in(obj, val); break; } return TRUE; diff -urN cui105/menu.c cui106/menu.c --- cui105/menu.c 2014-04-10 22:00:00.000000000 +0900 +++ cui106/menu.c 2014-04-11 01:00:00.000000000 +0900 @@ -179,6 +179,7 @@ if(w >= 0) cui_w_set(obj, w); p->menu = cui_menu_new(cui_root(obj), 0, 0, lst); p->val = val; + p->vp = NULL; p->call_btn_hdr_flag = TRUE; /* ! */ cui_unbind(obj, CUI_EVT_KEY | CUI_EVT_BUTTON, cui_menu_item_hdr); @@ -209,6 +210,7 @@ }else if(evt == CUI_EVT_BUTTON){ /* menu */ cui_menu_popup p = (cui_menu_popup)prm; p->val = val; + if(p->vp) *p->vp = p->val; cui_quit(); return TRUE; } @@ -234,6 +236,7 @@ cui_menu_popup p = (cui_menu_popup)obj; char *s; p->val = idx; + if(p->vp) *p->vp = p->val; s = cui_menu_item_str_get(cui_index_to_child(p->menu, p->val)); cui_menu_item_str_set(obj, s); } @@ -246,6 +249,14 @@ cui_del_free(obj); } +void +cui_menu_popup_vp_set(cui obj, int *vp) +{ + cui_menu_popup p = (cui_menu_popup)obj; + p->vp = vp; + if(p->vp) cui_menu_popup_set(obj, *p->vp); +} + cui cui_menu_int_new(cui parent, int x, int y, int w, int init_v, int min_v, int max_v) { @@ -383,4 +394,11 @@ cui_menu_int_set(obj, p->v); } +void +cui_menu_int_del_free(cui obj) +{ + cui_menu_int_lst_free(obj); + cui_menu_popup_del_free(obj); +} + /* EOF */ diff -urN cui105/menu.h cui106/menu.h --- cui105/menu.h 2014-04-10 22:00:00.000000000 +0900 +++ cui106/menu.h 2014-04-11 01:00:00.000000000 +0900 @@ -16,7 +16,7 @@ typedef struct cui_menu_popup{ struct cui_menu_item item; cui menu; - int val; + int val, *vp; int call_btn_hdr_flag; /* ! */ } *cui_menu_popup; @@ -49,6 +49,7 @@ int cui_menu_popup_get(cui obj); void cui_menu_popup_set(cui obj, int idx); void cui_menu_popup_del_free(cui obj); +void cui_menu_popup_vp_set(cui obj, int *vp); cui cui_menu_int_new(cui parent, int x, int y, int w, int init_v, int min_v, int max_v); void cui_menu_int_init(cui obj, cui parent, int x, int y, int w, int init_v, int min_v, int max_v); @@ -58,5 +59,6 @@ void cui_menu_int_set(cui obj, int v); void cui_menu_int_vp_set(cui obj, int *vp); void cui_menu_int_min_max_set(cui obj, int min_v, int max_v); +void cui_menu_int_del_free(cui obj); #endif diff -urN cui105/num.c cui106/num.c --- cui105/num.c 2014-04-08 22:00:00.000000000 +0900 +++ cui106/num.c 2014-04-10 23:00:00.000000000 +0900 @@ -21,6 +21,7 @@ { cui_num p = (cui_num)obj; char buf[ CUI_ETEXT_BSIZE ]; + cui eview; w = w < 6 ? 6 : w; cui_base_init(obj, parent, x, y, w, 1); @@ -40,7 +41,8 @@ if(bar_h == 0) bar_h = w; p->fb_dec = cui_fillbtn_new(obj, 0, 0, 1, 1, "<"); - p->etx = cui_etext_new(obj, 1, 0, w-3, buf); + eview = cui_base_new(obj, 1, 0, w-3, 1); + p->etx = cui_etext_new(eview, -1, 0, w-1, buf); p->fb_inc = cui_fillbtn_new(obj, cui_x2(p->etx), 0, 1, 1, ">"); p->fb_bar = cui_fillbtn_new(obj, cui_x2(p->fb_inc), 0, 1, 1, "|"); diff -urN cui105/tab.c cui106/tab.c --- cui105/tab.c 2014-02-02 23:50:00.000000000 +0900 +++ cui106/tab.c 2014-04-11 00:00:00.000000000 +0900 @@ -22,9 +22,9 @@ p->lb1 = rd->lb1; p->lb2 = rd->lb2; - cui_label_str_set(p->lb1, "/"); + cui_label_str_set(p->lb1, "/ "); cui_x_set(p->lb2, cui_x2(p->lb1)); - p->lb3 = cui_label_new(obj, cui_x2(p->lb2), 0, "|"); + p->lb3 = cui_label_new(obj, cui_x2(p->lb2), 0, " |"); cui_wh_fit(obj); cui_bind(obj, CUI_EVT_DRAW , cui_tab_btn_hdr, NULL);