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);
break;
case a_xvt:
if (xiev->v.xvte.type == E_CHAR)
{
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);
}
break;
@ -481,7 +482,7 @@ void TControl::set_tab_cid(short cid)
case XIT_BTN:
_obj->v.btn->tab_cid = cid; break;
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)
_obj->children[_obj->nbr_children-1]->v.btn->tab_cid = cid;
break;
@ -508,7 +509,7 @@ TControl& TControl::find_operable_ctl(bool forward) const
for (int c = first; c != last && obj == NULL; c += delta)
{
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];
}
TControl* ctl = obj == NULL ? (TControl*)this : (TControl*)xi_get_app_data(obj);
@ -1130,10 +1131,10 @@ TPushbutton_control::TPushbutton_control(WINDOW win, short cid,
short bmp_up, short bmp_dn)
: _bmp_up(bmp_up), _bmp_dn(bmp_dn)
{
{
if (bmp_up > 0)
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);
}

View File

@ -224,16 +224,20 @@ TSheet_control::TSheet_control(
// Se la finestra e' troppo grande riducila
RCT cli; xvt_vobj_get_client_rect(parent, &cli);
xi_get_rect(_obj, &rct);
if (rct.right < cli.right - 2*XI_FU_MULTIPLE)
XI_RCT xc = cli; xi_pu_to_fu(itf, (PNT*)&xc, 2);
if (xc.right > 45 * XI_FU_MULTIPLE) // Deve contenere almeno 4 bottoni
{
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);
}
xi_get_rect(_obj, &rct);
if (rct.right < cli.right - 2*XI_FU_MULTIPLE)
{
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);
}
}
}
void TSheet_control::set_rect(const RCT& r)
@ -309,7 +313,7 @@ void TSheet_control::update(long n)
if (scroll_first)
xi_scroll(_obj, XI_SCROLL_FIRST);
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)
{
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);
}
@ -349,8 +353,10 @@ void TSheet_control::set_focus_rec(long rec)
{
select(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);
}
@ -496,7 +502,7 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
{
const bool on = checked(rec);
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;
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)
{
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 row = xiev->v.select.xi_obj->v.row;
const long rec = row2rec(row);
if (column[col]->cid >= FIRST_FIELD)
const short cid = column[col]->cid;
if (cid >= FIRST_FIELD)
{
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);
}
else
@ -622,7 +628,8 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
_sheet->on_key(K_CTRL+'G');
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);
}
}
@ -705,9 +712,7 @@ void TSheet::repos_buttons() const
if (buttons == 0)
c.get_rect(br);
buttons++;
} else
if (c.is_edit())
((TEdit_field&)c).autoselect(FALSE);
}
}
RCT wr; xvt_vobj_get_client_rect(win(), &wr);