diff -urN cui71/Makefile cui72/Makefile --- cui71/Makefile Sun Feb 9 01:00:00 2014 +++ cui72/Makefile Mon Feb 10 00:00:00 2014 @@ -1,7 +1,7 @@ CC = gcc -Wall TARG = cui_test -OBJS = cui.o focus.o etext.o menu.o dialog.o scpanel.o rszbox.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 tbar.o rszbox.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 cui71/cui_test.c cui72/cui_test.c --- cui71/cui_test.c Sun Feb 9 22:00:00 2014 +++ cui72/cui_test.c Mon Feb 10 00:00:00 2014 @@ -274,7 +274,7 @@ cui sc2 = cui_scbar_new(bs_bar, 1, 3, 20, 1, 10, 0); cui sc3 = cui_scbar_new(bs_bar, cui_x2(sc)+2, sc->y, 1, 16, 4, 2); cui lb_hoge = cui_label_new(bs, 4, 4, "hoge sheet"); - cui base = cui_panel_new(bs, 1, 2, 40, 20); + cui base = cui_base_new(bs, 1, 2, 40, 20); cui mn_btn = cui_menu_btn_new(base, 1, 1, "File"); cui etx = cui_etext_new(base, mn_btn->x, cui_y2(mn_btn), 8, "foo"); cui ck = cui_ckbox_new(base, cui_x2(mn_btn)+2, 1, "Show", FALSE); @@ -282,7 +282,7 @@ cui mv_lb = cui_label_new(base, cui_x2(mv_btn) + 2, mv_btn->y, ""); cui_simple_dialog p; - cui small = cui_scpanel_new(base, 2, 3, base->w - (2 * 2), base->h - (3 + 1)); + cui small = cui_scpanel_new(base, 2, 3, base->w - (2 * 2), base->h - (3 + 1), "title"); cui small2 = cui_scpanel_sheet_get(small); cui tab_sheets[] = { base, bs_bar, lb_hoge }; diff -urN cui71/scpanel.c cui72/scpanel.c --- cui71/scpanel.c Sun Feb 9 01:00:00 2014 +++ cui72/scpanel.c Mon Feb 10 00:00:00 2014 @@ -3,15 +3,15 @@ #include cui -cui_scpanel_new(cui parent, int x, int y, int w, int h) +cui_scpanel_new(cui parent, int x, int y, int w, int h, char *s) { cui obj = cui_alloc(sizeof(struct cui_scpanel)); - cui_scpanel_init(obj, parent, x, y, w, h); + cui_scpanel_init(obj, parent, x, y, w, h, s); return obj; } void -cui_scpanel_init(cui obj, cui parent, int x, int y, int w, int h) +cui_scpanel_init(cui obj, cui parent, int x, int y, int w, int h, char *s) { cui_scpanel p = (cui_scpanel)obj; @@ -29,6 +29,7 @@ cui_bind(p->hbar, CUI_EVT_BUTTON, cui_scpanel_scbar_hdr, obj); p->rszbox = cui_rszbox_new(obj); + p->tbar = s ? cui_tbar_new(obj, s) : NULL; cui_bind(obj, CUI_EVT_RESIZE, cui_scpanel_hdr, obj); cui_bind(p->sheet, CUI_EVT_RESIZE, cui_scpanel_hdr, obj); @@ -73,6 +74,9 @@ }else{ cui_hide(p->vbar); } + + if(p->tbar && obj->w != p->tbar->w) cui_w_set(p->tbar, obj->w); + return TRUE; } diff -urN cui71/scpanel.h cui72/scpanel.h --- cui71/scpanel.h Sun Feb 9 01:00:00 2014 +++ cui72/scpanel.h Mon Feb 10 00:00:00 2014 @@ -4,14 +4,15 @@ #include "panel.h" #include "scbar.h" #include "rszbox.h" +#include "tbar.h" typedef struct cui_scpanel{ struct cui_panel panel; - cui view, sheet, hbar, vbar, rszbox; + cui view, sheet, hbar, vbar, rszbox, tbar; } *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); +cui cui_scpanel_new(cui parent, int x, int y, int w, int h, char *s); +void cui_scpanel_init(cui obj, cui parent, int x, int y, int w, int h, char *s); 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); diff -urN cui71/tbar.c cui72/tbar.c --- cui71/tbar.c Thu Jan 1 09:00:00 1970 +++ cui72/tbar.c Mon Feb 10 00:00:00 2014 @@ -0,0 +1,90 @@ +#include "tbar.h" +#include "handler.h" +#include "key.h" +#include + +cui +cui_tbar_new(cui parent, char *s) +{ + cui obj = cui_alloc(sizeof(struct cui_tbar)); + cui_tbar_init(obj, parent, s); + return obj; +} + +void +cui_tbar_init(cui obj, cui parent, char *s) +{ + cui_tbar p = (cui_tbar)obj; + cui_base_init(obj, parent, 0, 0, 0, 0); + p->fl_top = cui_fill_new(obj, 0, 0, 0, 1, "=", CUI_ATTR_NORMAL); + p->sp_top = cui_label_new(obj, 0, 0, " "); + p->lb = cui_label_new(obj, 0, 0, s); + p->sp_end = cui_label_new(obj, 0, 0, " "); + p->fl_end = cui_fill_new(obj, 0, 0, 0, 1, "=", CUI_ATTR_NORMAL); + p->drag = FALSE; + obj->flags |= CUI_FLG_CAN_FOCUS; + cui_bind(obj, CUI_EVT_KEY | CUI_EVT_DRAW | CUI_EVT_RESIZE, cui_tbar_hdr, NULL); + cui_wh_set(obj, parent->w, 1); +} + +int +cui_tbar_hdr(cui obj, int evt, int val, void *prm) +{ + cui_tbar p = (cui_tbar)obj; + int attr, w, n; + + switch(evt){ + case CUI_EVT_KEY: + if(!p->drag){ + if(val != CUI_KEY_ENTER) return FALSE; + p->drag = TRUE; + p->bak_x = obj->parent->x; + p->bak_y = obj->parent->y; + cui_draw(obj); + return TRUE; + }else{ + switch(val){ + case CUI_KEY_ESC: + if(obj->parent->x != p->bak_x || obj->parent->y != p->bak_y){ + cui_xy_set(obj->parent, p->bak_x, p->bak_y); + } + case CUI_KEY_ENTER: + p->drag = FALSE; + cui_draw(obj); + return TRUE; + case CUI_KEY_UP: + cui_y_set(obj->parent, obj->parent->y-1); + return TRUE; + case CUI_KEY_DOWN: + cui_y_set(obj->parent, obj->parent->y+1); + return TRUE; + case CUI_KEY_LEFT: + cui_x_set(obj->parent, obj->parent->x-1); + return TRUE; + case CUI_KEY_RIGHT: + cui_x_set(obj->parent, obj->parent->x+1); + return TRUE; + } + } + break; + case CUI_EVT_DRAW: + attr = p->drag ? CUI_ATTR_REVERSE : (val == CUI_DRAW_FOCUS ? CUI_ATTR_ULINE : CUI_ATTR_NORMAL); + cui_label_attr_set(p->lb, attr); + return TRUE; + case CUI_EVT_RESIZE: + w = obj->parent->w; + n = strlen(cui_label_str_get(p->lb)); + if(n > w - 4) n = w - 4; + cui_w_set(p->fl_top, (w - n - 2) / 2); + cui_x_set(p->sp_top, cui_x2(p->fl_top)); + cui_x_set(p->lb, cui_x2(p->sp_top)); + cui_w_set(p->lb, n); + cui_x_set(p->sp_end, cui_x2(p->lb)); + cui_x_set(p->fl_end, cui_x2(p->sp_end)); + cui_w_set(p->fl_end, w - p->fl_end->x); + return TRUE; + } + return FALSE; +} + +/* EOF */ diff -urN cui71/tbar.h cui72/tbar.h --- cui71/tbar.h Thu Jan 1 09:00:00 1970 +++ cui72/tbar.h Mon Feb 10 00:00:00 2014 @@ -0,0 +1,18 @@ +#ifndef __TBAR_H__ +#define __TBAR_H__ + +#include "fill.h" + +typedef struct cui_tbar{ + struct cui_base base; + cui fl_top, sp_top, lb, sp_end, fl_end; + int drag; + int bak_x, bak_y; +} *cui_tbar; + +cui cui_tbar_new(cui parent, char *s); +void cui_tbar_init(cui obj, cui parent, char *s); +int cui_tbar_hdr(cui obj, int evt, int val, void *prm); + +#endif +