diff -urN cui119/cui_srv.c cui120/cui_srv.c --- cui119/cui_srv.c 2014-04-18 00:00:00.000000000 +0900 +++ cui120/cui_srv.c 2014-04-18 23:00:00.000000000 +0900 @@ -40,8 +40,8 @@ { static int cnt = 0; char buf[16]; - cui view = tab->parent; - int y = cui_y2(tab); + cui view = cui_tab_parent(tab); + int y = cui_y2(cui_tab_scline(tab)); cui termin = cui_termin_new(view, 0, 0, 0, 0, cfd); cui_hide(termin); diff -urN cui119/cui_test.c cui120/cui_test.c --- cui119/cui_test.c 2014-04-18 22:00:00.000000000 +0900 +++ cui120/cui_test.c 2014-04-18 23:00:00.000000000 +0900 @@ -400,11 +400,12 @@ cui add = cui_index_to_child(bs, 0); cui ck = cui_index_to_child(bs, 1); cui del = cui_index_to_child(bs, 2); - cui tab_test = cui_index_to_child(bs, 3); + cui scl = cui_index_to_child(bs, 3); + cui tab_test = cui_scline_sheet_get(scl); static int cnt = 0; char buf[16]; - cui parent = tab_test->parent; + cui parent = scl; int y = cui_y2(tab_test); if(obj == add){ diff -urN cui119/scline.c cui120/scline.c --- cui119/scline.c 2014-04-18 22:00:00.000000000 +0900 +++ cui120/scline.c 2014-04-18 23:00:00.000000000 +0900 @@ -137,14 +137,12 @@ step = p->step_cb ? (*p->step_cb)(-1, p->step_prm) : 1; if(p->sheet) cui_x_set(p->sheet, p->sheet->x + step); } - if(lx(obj) == 0) onoff_set(obj, -1, FALSE); adj(obj); }else if(ev_obj == p->inc){ if(lx2(obj) > obj->w){ step = p->step_cb ? (*p->step_cb)(1, p->step_prm) : 1; if(p->sheet) cui_x_set(p->sheet, p->sheet->x - step); } - if(lx2(obj) == obj->w) onoff_set(obj, 1, FALSE); adj(obj); }else return FALSE; break; diff -urN cui119/tab.c cui120/tab.c --- cui119/tab.c 2014-04-15 23:00:00.000000000 +0900 +++ cui120/tab.c 2014-04-18 23:00:00.000000000 +0900 @@ -1,6 +1,7 @@ #include "tab.h" #include "handler.h" #include "key.h" +#include "scline.h" #include cui @@ -92,13 +93,67 @@ return obj; } +static int +tab_hdr(cui obj, int evt, int val, void *prm) +{ + cui_tab p = (cui_tab)obj; + + switch(evt){ + case CUI_EVT_RESIZE: + cui_w_set(p->scl, obj->w); + break; + default: + return FALSE; + } + return TRUE; +} + +static int +tab_step(int sign, void *step_prm) +{ + cui obj = (cui)step_prm; + cui_tab p = (cui_tab)obj; + int n = cui_index(obj->children) + 1; + int i, x, ret = 1; + cui btn = NULL; + cui view = cui_scline_view_get(p->scl); + + if(sign < 0){ + for(i=n-1; i>=0; i--){ + btn = cui_index_to_child(obj, i); + x = cui_lx(view, cui_gx(btn)); + if(x < 0) break; + } + if(x < 0){ + ret = -x; + if(i == 0) ret--; + } + }else{ + for(i=0; iw; + if(x > view->w) break; + } + if(x > view->w){ + ret = x - view->w; + if(i == n-1) ret--; + } + } + return ret; +} + void cui_tab_init(cui obj, cui parent, int x, int y, int w, char **lst, cui *sheets, int v) { + cui_tab p = (cui_tab)obj; cui btn; int i; - cui_base_init(obj, parent, x, y, w, 1); + p->scl = cui_scline_new(parent, x, y, w); + cui_base_init(obj, cui_scline_view_get(p->scl), 0, 0, w, 1); + cui_scline_sheet_set(p->scl, obj); + cui_scline_step_set(p->scl, tab_step, p); + cui_bind(obj, CUI_EVT_RESIZE, tab_hdr, NULL); if(lst){ x = 0; for(i=0; lst[i]; i++){ @@ -107,7 +162,7 @@ cui_bind(btn, CUI_EVT_BUTTON, cui_tab_btn_hdr, NULL); } } - if(w < 0) cui_wh_fit(obj); + if(w <= 0) cui_wh_fit(obj); } void @@ -164,4 +219,17 @@ cui_handler_call(c, CUI_EVT_KEY, CUI_KEY_ENTER); } +cui +cui_tab_scline(cui obj) +{ + cui_tab p = (cui_tab)obj; + return p->scl; +} + +cui +cui_tab_parent(cui obj) +{ + return cui_tab_scline(obj)->parent; +} + /* EOF */ diff -urN cui119/tab.h cui120/tab.h --- cui119/tab.h 2014-04-15 23:00:00.000000000 +0900 +++ cui120/tab.h 2014-04-18 23:00:00.000000000 +0900 @@ -11,6 +11,7 @@ typedef struct cui_tab{ struct cui_base base; + cui scl; } *cui_tab; cui cui_tab_btn_new(cui parent, int x, int y, char *s, int v, cui sheet); @@ -29,4 +30,7 @@ cui cui_tab_get(cui obj); void cui_tab_set(cui obj, cui sheet); +cui cui_tab_scline(cui obj); +cui cui_tab_parent(cui obj); + #endif