Corrette selezioni sugli sheet

git-svn-id: svn://10.65.10.50/trunk@3014 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
alex 1996-06-18 15:37:36 +00:00
parent b507cb2c35
commit 51b94ca2eb

View File

@ -191,7 +191,7 @@ TSheet_control::TSheet_control(
for (h = new_header.get(0), i = 0; h; h = new_header.get(), i++) for (h = new_header.get(0), i = 0; h; h = new_header.get(), i++)
{ {
const int cid = FIRST_FIELD+i; // Column & Field ID const int cid = FIRST_FIELD+i; // Column & Field ID
long attr = XI_ATR_VISIBLE | XI_ATR_ENABLED | XI_ATR_AUTOSCROLL; long attr = XI_ATR_VISIBLE | XI_ATR_ENABLED | XI_ATR_AUTOSCROLL | XI_ATR_READONLY;
if (_type[i] == 'C') if (_type[i] == 'C')
attr |= XI_ATR_SELECTABLE; attr |= XI_ATR_SELECTABLE;
if (_type[i] == 'R') if (_type[i] == 'R')
@ -572,42 +572,6 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
xiev->v.get_percent.percent = int(rec * 100L / n); xiev->v.get_percent.percent = int(rec * 100L / n);
} }
break; break;
case XIE_CHAR_CELL:
{
long rec = -1;
switch (xiev_to_key(xiev))
{
case K_LHOME:
rec = 0;
break;
case K_PREV:
rec = _cur_rec - visible_rows();
if (rec < 0) rec = 0;
break;
case K_NEXT:
rec = _cur_rec + visible_rows();
if (rec >= items())
rec = items()-1;
break;
case K_LEND:
rec = items()-1;
break;
case K_TAB:
case K_BTAB:
case K_LEFT:
case K_RIGHT:
break;
default:
refused = TRUE;
break;
}
if (rec >= 0)
{
_sheet->post_select(rec);
refused = TRUE;
}
}
break;
case XIE_SELECT: case XIE_SELECT:
if (xiev->v.xi_obj->type == XIT_ROW) if (xiev->v.xi_obj->type == XIT_ROW)
{ {
@ -623,17 +587,14 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
if (check_enabled()) if (check_enabled())
toggle(rec); toggle(rec);
} }
else else
{ {
if (_cur_rec == rec) if (_cur_rec == rec)
_sheet->on_key(K_CTRL+'G'); _sheet->on_key(K_CTRL+'C');
else
{
const int c = _type[0] == 'C' ? 2 : 1;
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, c);
xi_set_focus(&cell);
}
} }
const int c = _type[0] == 'C' ? 2 : 1;
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, c);
xi_set_focus(&cell);
make_current(rec); make_current(rec);
} }
refused = TRUE; refused = TRUE;
@ -641,11 +602,12 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
case XIE_BUTTON: case XIE_BUTTON:
if (xiev->v.xi_obj->type == XIT_LIST) if (xiev->v.xi_obj->type == XIT_LIST)
_sheet->on_key(K_INS); _sheet->on_key(K_INS);
break; break;
case XIE_XVT_EVENT: case XIE_XVT_EVENT:
if (xiev->v.xvte.type == E_CHAR) if (xiev->v.xvte.type == E_CHAR)
{ {
const KEY k = e_char_to_key(&xiev->v.xvte); const KEY k = e_char_to_key(&xiev->v.xvte);
long rec = -1;
switch (k) switch (k)
{ {
case K_ENTER: case K_ENTER:
@ -654,10 +616,30 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
case K_ESC: case K_ESC:
_sheet->stop_run(k); _sheet->stop_run(k);
break; break;
default: case K_LHOME:
break; rec = 0;
break;
case K_PREV:
rec = _cur_rec - visible_rows();
if (rec < 0) rec = 0;
break;
case K_NEXT:
rec = _cur_rec + visible_rows();
if (rec >= items())
rec = items()-1;
break;
case K_LEND:
rec = items()-1;
break;
default:
break;
} }
} if (rec >= 0)
{
_sheet->post_select(rec);
refused = TRUE;
}
}
break; break;
default: default:
break; break;
@ -897,12 +879,10 @@ void TSheet::on_idle()
if (_select_row >= 0) if (_select_row >= 0)
{ {
const short focus_id = get_focus_id(win()); const short focus_id = get_focus_id(win());
_sheet->select(_select_row);
if (focus_id == _sheet->id()) if (focus_id == _sheet->id())
{
_sheet->select(_select_row);
_sheet->set_focus_rec(-1); _sheet->set_focus_rec(-1);
_select_row = -1; _select_row = -1;
}
} }
} }
@ -1068,16 +1048,16 @@ bool TBrowse_sheet::browse_field_handler(TMask_field& f, KEY k)
rec = b->cursor()->read(_isgteq); rec = b->cursor()->read(_isgteq);
} else } else
if (k == K_F2) if (k == K_F2)
rec = 0; rec = 0;
if (rec >= 0 && rec != _cur_browse->selected()) if (rec >= 0 && rec != _cur_browse->selected())
_cur_browse->select(rec); _cur_browse->post_select(rec);
return TRUE; return TRUE;
} }
bool TBrowse_sheet::last_browse_field_handler(TMask_field& f, KEY k) bool TBrowse_sheet::last_browse_field_handler(TMask_field& f, KEY k)
{ {
const bool ok = browse_field_handler(f, k); const bool ok = browse_field_handler(f, k);
if (ok && k == K_TAB && f.focusdirty()) if (ok && k == K_TAB)
_cur_browse->post_select(_cur_browse->selected()); _cur_browse->post_select(_cur_browse->selected());
return ok; return ok;
} }