diff -urN cui65/Makefile cui66/Makefile --- cui65/Makefile Mon Feb 3 01:00:00 2014 +++ cui66/Makefile Sat Feb 8 23:00:00 2014 @@ -1,7 +1,7 @@ CC = gcc -Wall TARG = cui_test -OBJS = cui.o focus.o etext.o menu.o dialog.o scbar.o fillbtn.o tab.o radio.o ckbox.o button.o lblfix.o fill.o label.o panel.o handler.o esc.o key.o rect.o +OBJS = cui.o focus.o etext.o menu.o dialog.o scpanel.o scbar.o fillbtn.o tab.o radio.o ckbox.o button.o lblfix.o fill.o label.o panel.o handler.o esc.o key.o rect.o all: $(TARG) diff -urN cui65/cui_test.c cui66/cui_test.c --- cui65/cui_test.c Fri Feb 7 22:00:00 2014 +++ cui66/cui_test.c Sat Feb 8 23:00:00 2014 @@ -14,6 +14,7 @@ #include "tab.h" #include "fillbtn.h" #include "scbar.h" +#include "scpanel.h" int joke_hdr(cui obj, int evt, int val, void *prm) @@ -86,38 +87,6 @@ } 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_xy_set(big, x, y); - 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, cui_x2(al), 1, "D"); - cui ar = cui_button_new(base, cui_x2(ad), 1, "R"); - cui au = cui_button_new(base, ad->x, 0, "U"); - base->w = cui_x2(ar); - 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; -} - -int radio_hdr(cui obj, int evt, int val, void *prm) { char *s = cui_radio_str_get(obj); @@ -218,7 +187,7 @@ 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 base = cui_base_new(parent, x, y, 0, 0); cui dlg = cui_simple_dialog_new(base, 0, 0, "Are you sure ?", "OK", "Cancel"); cui_simple_dialog p = (cui_simple_dialog)dlg; cui popup = cui_menu_popup_new(base, cui_x2(dlg)+1, cui_y2(dlg)+5, 8, @@ -228,9 +197,13 @@ radio_new(base, cui_x2(dlg)+1, dlg->y); cui_simple_dialog_new(base, dlg->x, cui_y2(dlg), "How are you ?", "^_^", "T_T"); - mn_long_new(base, cui_x2(dlg)+1, cui_y2(dlg)+3); + + cui_wh_fit(base); + cui_fill_new(base, 0, base->h + 4, base->w, 1, "bottom ... ", CUI_ATTR_NORMAL); cui_wh_fit(base); + mn_long_new(base, cui_x2(dlg)+1, cui_y2(dlg)+3); + cui_bind(p->btn1, CUI_EVT_BUTTON, my_hdr, p); cui_bind(popup, CUI_EVT_BUTTON, popup_hdr, lb); *res_dlg = p; @@ -306,13 +279,13 @@ cui mv_lb = cui_label_new(base, cui_x2(mv_btn) + 2, mv_btn->y, ""); 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); + cui small = cui_scpanel_new(base, 2, 3, base->w - (2 * 2), base->h - (3 + 1)); + cui small2 = cui_scpanel_sheet_get(small); cui tab_sheets[] = { base, bs_bar, lb_hoge }; - arrow_new(base, cui_x2(mv_lb) + 2, mv_lb->y, big); + big_new(small2, 0, 0, &p); + cui_wh_fit(small2); cui_hide(small); cui_bind(mn_btn, CUI_EVT_BUTTON, mn_btn_hdr, mv_lb); diff -urN cui65/scbar.c cui66/scbar.c --- cui65/scbar.c Sat Feb 8 22:00:00 2014 +++ cui66/scbar.c Sat Feb 8 23:00:00 2014 @@ -252,8 +252,25 @@ cui_scbar_val_set(cui obj, int v) { cui_scbar p = (cui_scbar)obj; + int bak = cui_hide_enter(obj); p->v = v; - cui_draw(obj); + cui_hide_exit(obj, bak); +} + +int +cui_scbar_max_get(cui obj) +{ + cui_scbar p = (cui_scbar)obj; + return p->max_v; +} + +void +cui_scbar_max_set(cui obj, int max_v) +{ + cui_scbar p = (cui_scbar)obj; + int bak = cui_hide_enter(obj); + p->max_v = max_v; + cui_hide_exit(obj, bak); } /* EOF */ diff -urN cui65/scbar.h cui66/scbar.h --- cui65/scbar.h Sat Feb 8 22:00:00 2014 +++ cui66/scbar.h Sat Feb 8 23:00:00 2014 @@ -20,7 +20,10 @@ int cui_scbar_btn_hdr(cui fb, int evt, int val, void *prm); int cui_scbar_thumb_hdr(cui fb, int evt, int val, void *prm); int cui_scbar_hdr(cui obj, int evt, int val, void *prm); + int cui_scbar_val_get(cui obj); void cui_scbar_val_set(cui obj, int v); +int cui_scbar_max_get(cui obj); +void cui_scbar_max_set(cui obj, int max_v); #endif diff -urN cui65/scpanel.c cui66/scpanel.c --- cui65/scpanel.c Thu Jan 1 09:00:00 1970 +++ cui66/scpanel.c Sat Feb 8 23:00:00 2014 @@ -0,0 +1,78 @@ +#include "scpanel.h" +#include "handler.h" +#include + +cui +cui_scpanel_new(cui parent, int x, int y, int w, int h) +{ + cui obj = cui_alloc(sizeof(struct cui_scpanel)); + cui_scpanel_init(obj, parent, x, y, w, h); + return obj; +} + +void +cui_scpanel_init(cui obj, cui parent, int x, int y, int w, int h) +{ + cui_scpanel p = (cui_scpanel)obj; + + cui_panel_init(obj, parent, x, y, w, h); + + p->view = cui_base_new(obj, 1, 1, w-2, h-2); + p->sheet = cui_base_new(p->view, 0, 0, w-2, h-2); + + p->vbar = cui_scbar_new(obj, w-1, 1, 1, h-2, 1, 0); + cui_hide(p->vbar); + cui_bind(p->vbar, CUI_EVT_BUTTON, cui_scpanel_scbar_hdr, obj); + + p->hbar = cui_scbar_new(obj, 1, h-1, w-2, 1, 1, 0); + cui_hide(p->hbar); + cui_bind(p->hbar, CUI_EVT_BUTTON, cui_scpanel_scbar_hdr, obj); + + cui_bind(obj, CUI_EVT_DRAW, cui_scpanel_hdr, NULL); +} + +int +cui_scpanel_scbar_hdr(cui sb, int evt, int val, void *prm) +{ + cui obj = (cui)prm; + cui_scpanel p = (cui_scpanel)obj; + cui_scbar scbar = (cui_scbar)sb; + + if(scbar->hv == CUI_SCBAR_H) cui_x_set(p->sheet, -val); + else cui_y_set(p->sheet, -val); + + return TRUE; +} + +int +cui_scpanel_hdr(cui obj, int evt, int val, void *prm) +{ + /* CUI_EVT_DRAW */ + + cui_scpanel p = (cui_scpanel)obj; + + if(p->sheet->w > p->view->w){ + cui_scbar_max_set(p->hbar, p->sheet->w - p->view->w); + cui_show(p->hbar); + }else{ + cui_hide(p->hbar); + } + + if(p->sheet->h > p->view->h){ + cui_scbar_max_set(p->vbar, p->sheet->h - p->view->h); + cui_show(p->vbar); + }else{ + cui_hide(p->vbar); + } + + return FALSE; +} + +cui +cui_scpanel_sheet_get(cui obj) +{ + cui_scpanel p = (cui_scpanel)obj; + return p->sheet; +} + +/* EOF */ diff -urN cui65/scpanel.h cui66/scpanel.h --- cui65/scpanel.h Thu Jan 1 09:00:00 1970 +++ cui66/scpanel.h Sat Feb 8 23:00:00 2014 @@ -0,0 +1,18 @@ +#ifndef __SCPANEL_H__ +#define __SCPANEL_H__ + +#include "panel.h" +#include "scbar.h" + +typedef struct cui_scpanel{ + struct cui_panel panel; + cui view, sheet, hbar, vbar; +} *cui_scpanel; + +cui cui_scpanel_new(cui parent, int x, int y, int w, int h); +void cui_scpanel_init(cui obj, cui parent, int x, int y, int w, int h); +int cui_scpanel_scbar_hdr(cui sb, int evt, int val, void *prm); +int cui_scpanel_hdr(cui obj, int evt, int val, void *prm); +cui cui_scpanel_sheet_get(cui obj); + +#endif