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++)
{
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')
attr |= XI_ATR_SELECTABLE;
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);
}
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:
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())
toggle(rec);
}
else
else
{
if (_cur_rec == rec)
_sheet->on_key(K_CTRL+'G');
else
{
const int c = _type[0] == 'C' ? 2 : 1;
XI_OBJ cell; XI_MAKE_CELL(&cell, _obj, row, c);
xi_set_focus(&cell);
}
_sheet->on_key(K_CTRL+'C');
}
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);
}
refused = TRUE;
@ -641,11 +602,12 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
case XIE_BUTTON:
if (xiev->v.xi_obj->type == XIT_LIST)
_sheet->on_key(K_INS);
break;
break;
case XIE_XVT_EVENT:
if (xiev->v.xvte.type == E_CHAR)
{
const KEY k = e_char_to_key(&xiev->v.xvte);
long rec = -1;
switch (k)
{
case K_ENTER:
@ -654,10 +616,30 @@ bool TSheet_control::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
case K_ESC:
_sheet->stop_run(k);
break;
default:
break;
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;
default:
break;
}
}
if (rec >= 0)
{
_sheet->post_select(rec);
refused = TRUE;
}
}
break;
default:
break;
@ -897,12 +879,10 @@ void TSheet::on_idle()
if (_select_row >= 0)
{
const short focus_id = get_focus_id(win());
_sheet->select(_select_row);
if (focus_id == _sheet->id())
{
_sheet->select(_select_row);
_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);
} else
if (k == K_F2)
rec = 0;
rec = 0;
if (rec >= 0 && rec != _cur_browse->selected())
_cur_browse->select(rec);
_cur_browse->post_select(rec);
return TRUE;
}
bool TBrowse_sheet::last_browse_field_handler(TMask_field& f, KEY 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());
return ok;
}