sheet : corretta dimenzione e selezione degli sheet

controls.cpp : corretta update_tabcid


git-svn-id: svn://10.65.10.50/trunk@2857 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1996-05-20 13:25:01 +00:00
parent 7685566cd8
commit 44bc94a92c
2 changed files with 33 additions and 27 deletions

View File

@ -410,9 +410,10 @@ HIDDEN void xi_event_handler(XI_OBJ* itf, XI_EVENT* xiev)
ctl = (TControl*)xi_get_app_data(xiev->v.xi_obj->parent); ctl = (TControl*)xi_get_app_data(xiev->v.xi_obj->parent);
break; break;
case a_xvt: case a_xvt:
if (xiev->v.xvte.type == E_CHAR)
{ {
XI_OBJ* fo = xi_get_focus(itf); XI_OBJ* fo = xi_get_focus(itf);
if (xiev->v.xvte.type == E_CHAR && fo != NULL && fo->type == XIT_CELL) if (fo != NULL && fo->type == XIT_CELL)
ctl = (TControl*)xi_get_app_data(fo->parent); ctl = (TControl*)xi_get_app_data(fo->parent);
} }
break; break;
@ -481,7 +482,7 @@ void TControl::set_tab_cid(short cid)
case XIT_BTN: case XIT_BTN:
_obj->v.btn->tab_cid = cid; break; _obj->v.btn->tab_cid = cid; break;
case XIT_CONTAINER: case XIT_CONTAINER:
_obj->v.container->tab_cid = _obj->cid; _obj->v.container->tab_cid = cid > 1000 ? (cid % 1000) : (1000 + cid);
if (_obj->nbr_children > 0) if (_obj->nbr_children > 0)
_obj->children[_obj->nbr_children-1]->v.btn->tab_cid = cid; _obj->children[_obj->nbr_children-1]->v.btn->tab_cid = cid;
break; break;
@ -508,7 +509,7 @@ TControl& TControl::find_operable_ctl(bool forward) const
for (int c = first; c != last && obj == NULL; c += delta) for (int c = first; c != last && obj == NULL; c += delta)
{ {
const XI_OBJ_TYPE t = child[c]->type; const XI_OBJ_TYPE t = child[c]->type;
if (t == XIT_FORM || t == XIT_BTN || t == XIT_LIST || t == XIT_CONTAINER) if (t == XIT_FORM || t == XIT_LIST || t == XIT_CONTAINER)
obj = child[c]; obj = child[c];
} }
TControl* ctl = obj == NULL ? (TControl*)this : (TControl*)xi_get_app_data(obj); TControl* ctl = obj == NULL ? (TControl*)this : (TControl*)xi_get_app_data(obj);
@ -1133,7 +1134,7 @@ TPushbutton_control::TPushbutton_control(WINDOW win, short cid,
{ {
if (bmp_up > 0) if (bmp_up > 0)
text = ""; text = "";
create(win, cid, left, top, width, height, flags, text, WC_PUSHBUTTON, NULL); create(win, cid, left, top, width, height, flags, text, WC_PUSHBUTTON, cnt);
set_bmp(bmp_up, bmp_dn); set_bmp(bmp_up, bmp_dn);
} }

View File

@ -224,15 +224,19 @@ TSheet_control::TSheet_control(
// Se la finestra e' troppo grande riducila // Se la finestra e' troppo grande riducila
RCT cli; xvt_vobj_get_client_rect(parent, &cli); RCT cli; xvt_vobj_get_client_rect(parent, &cli);
xi_get_rect(_obj, &rct); XI_RCT xc = cli; xi_pu_to_fu(itf, (PNT*)&xc, 2);
if (xc.right > 45 * XI_FU_MULTIPLE) // Deve contenere almeno 4 bottoni
if (rct.right < cli.right - 2*XI_FU_MULTIPLE)
{ {
const int width = rct.right + 2*XI_FU_MULTIPLE; xi_get_rect(_obj, &rct);
cli.left = (cli.right - width) / 2;
cli.right = cli.left + width; if (rct.right < cli.right - 2*XI_FU_MULTIPLE)
xvt_vobj_translate_points(parent, xvt_vobj_get_parent(parent), (PNT*)&cli, 2); {
xvt_vobj_move(parent, &cli); const int width = rct.right + 2*XI_FU_MULTIPLE;
cli.left = (cli.right - width) / 2;
cli.right = cli.left + width;
xvt_vobj_translate_points(parent, xvt_vobj_get_parent(parent), (PNT*)&cli, 2);
xvt_vobj_move(parent, &cli);
}
} }
} }
@ -309,7 +313,7 @@ void TSheet_control::update(long n)
if (scroll_first) if (scroll_first)
xi_scroll(_obj, XI_SCROLL_FIRST); xi_scroll(_obj, XI_SCROLL_FIRST);
else else
xi_scroll_rec(_obj, n, NORMAL_COLOR, XI_ATR_ENABLED | XI_ATR_AUTOSELECT, 0); xi_scroll_rec(_obj, n, NORMAL_COLOR, XI_ATR_ENABLED, 0);
} }
} }
@ -336,7 +340,7 @@ void TSheet_control::make_current(long rec)
void TSheet_control::select(long rec) void TSheet_control::select(long rec)
{ {
if (rec >= 0 && rec < items()) if (rec >= 0 && rec < items())
xi_scroll_rec(_obj, rec, FOCUS_COLOR, XI_ATR_ENABLED, 0); xi_scroll_rec(_obj, rec, NORMAL_COLOR, XI_ATR_ENABLED, 0);
make_current(rec); make_current(rec);
} }
@ -350,7 +354,9 @@ void TSheet_control::set_focus_rec(long rec)
select(rec); select(rec);
r = rec2row(rec); r = rec2row(rec);
} }
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, r, 1);
const int c = _type[0] == 'C' ? 2 : 1;
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, r, c);
xi_set_focus(&cell); xi_set_focus(&cell);
} }
@ -496,7 +502,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
{ {
const bool on = checked(rec); const bool on = checked(rec);
xiev->v.cell_request.icon_rid = on ? ICO_CHECK_ON : ICO_CHECK_OFF; xiev->v.cell_request.icon_rid = on ? ICO_CHECK_ON : ICO_CHECK_OFF;
if (on) src = "X"; // if (on) src = "X"; // A volte visualizza la X!
} }
break; break;
case 'M': // Set value for "roman" cell case 'M': // Set value for "roman" cell
@ -604,16 +610,16 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
if (xiev->v.xi_obj->type == XIT_ROW) if (xiev->v.xi_obj->type == XIT_ROW)
{ {
int num; int num;
XI_OBJ ** column = xi_get_member_list(_obj, &num); XI_OBJ** column = xi_get_member_list(_obj, &num);
const int col = xiev->v.select.column; const int col = xiev->v.select.column;
const int row = xiev->v.select.xi_obj->v.row; const int row = xiev->v.select.xi_obj->v.row;
const long rec = row2rec(row); const long rec = row2rec(row);
const short cid = column[col]->cid;
if (column[col]->cid >= FIRST_FIELD) if (cid >= FIRST_FIELD)
{ {
toggle(rec); toggle(rec);
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, col); // XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, col);
// xi_cell_request(&cell); // xi_cell_request(&cell);
} }
else else
@ -622,7 +628,8 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
_sheet->on_key(K_CTRL+'G'); _sheet->on_key(K_CTRL+'G');
else else
{ {
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row,1); const int c = _type[0] == 'C' ? 2 : 1;
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, c);
xi_set_focus(&cell); xi_set_focus(&cell);
} }
} }
@ -705,9 +712,7 @@ void TSheet::repos_buttons() const
if (buttons == 0) if (buttons == 0)
c.get_rect(br); c.get_rect(br);
buttons++; buttons++;
} else }
if (c.is_edit())
((TEdit_field&)c).autoselect(FALSE);
} }
RCT wr; xvt_vobj_get_client_rect(win(), &wr); RCT wr; xvt_vobj_get_client_rect(win(), &wr);