Modificata gestione focus negli sheet.

git-svn-id: svn://10.65.10.50/trunk@40 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 1994-08-19 10:43:57 +00:00
parent 617fd7e074
commit 5479720988
6 changed files with 2322 additions and 2320 deletions

View File

@ -390,8 +390,6 @@ void TMask::start_run()
else
{
f.set_dirty(FALSE);
if (sheets() && f.class_id() == CLASS_SHEET_FIELD)
((TSheet_field&)f).force_update();
}
}

View File

@ -375,8 +375,7 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev)
case XIE_GET_PREV:
case XIE_GET_NEXT:
{
const long n = xiev->v.rec_request.spec_rec +
(xiev->type == XIE_GET_NEXT ? +1 : -1) ;
const long n = xiev->v.rec_request.spec_rec + (xiev->type == XIE_GET_NEXT ? +1 : -1) ;
if (n < 0 || n >= items())
xiev->refused = TRUE;
else
@ -481,7 +480,6 @@ break;
if (row_dirty && check_enabled)
{
check_enabled = FALSE; // Avoid recursion!
set_dirty();
str2mask(cur_row); // It shouldn't have to be necessary
bool ok = _mask.check_fields();
if (ok)
@ -489,11 +487,15 @@ break;
mask2str(cur_row);
ok = notify(cur_row, K_ENTER); // Notify edit
}
else
if (!ok)
{
xiev->refused = TRUE;
set_dirty(2); // Set error status
set_focus_cell(cur_row, cur_col);
}
else
{
xvt_statbar_set("");
set_dirty();
}
check_enabled = TRUE;
}
@ -511,16 +513,17 @@ break;
else
{
xiev->refused = TRUE; // Refuse focus on disabled cells
/*
const int r = xiev->v.xi_obj->v.cell.row;
int c = xiev->v.xi_obj->v.cell.column;
c += cur_col > col ? -1 : +1;
if (c < 0) c = _columns-1; else
if (c >= _columns) c = 0;
if (c < 1) c = _columns-1; else
if (c >= _columns) c = 1;
XI_OBJ cell;
XI_MAKE_CELL(&cell, _list, r, c);
xi_set_focus(&cell);
xi_move_focus(&cell);
*/
}
}
break;
@ -543,18 +546,17 @@ break;
if (c->on_key(K_TAB) == FALSE) // Test it
{
c->set(old);
XI_OBJ* itf = xi_get_itf(win());
// xi_set_focus(xiev->v.xi_obj);
xiev->refused = TRUE;
}
else
{
xiev->refused = TRUE;
mask2str(cur_row); // Update sheet row
edit_field = NULL; // Reset current field
xi_set_color(xiev->v.xi_obj, XIC_BACK, NORMAL_BACK_COLOR);
}
check_enabled = TRUE;
}
if (!xiev->refused)
xi_set_color(xiev->v.xi_obj, XIC_BACK, NORMAL_BACK_COLOR);
}
break;
case XIE_GET_PERCENT:
@ -843,9 +845,11 @@ void TSpreadsheet::str2mask(int riga)
TMask_field& f = _mask.fld(pos);
f.set(val);
f.enable(!cell_disabled(riga, id-FIRST_FIELD));
if (f.active() || f.ghost())
{
if (f.has_check()) f.check(STARTING_CHECK);
f.set_dirty(FALSE);
f.on_hit();
}
f.set_dirty(FALSE);
@ -989,18 +993,6 @@ void TSheet_field::force_update(int r)
}
void TSheet_field::set_window_data(const char*)
{
_sheet->set_dirty(FALSE);
set_dirty(FALSE);
}
void TSheet_field::set_field_data(const char*)
{
set_dirty(_sheet->dirty());
}
int TSheet_field::items() const
{
return (int)_sheet->items();
@ -1030,6 +1022,15 @@ TMask& TSheet_field::sheet_mask() const
return _sheet->mask();
}
bool TSheet_field::on_hit()
{
if (!mask().is_running())
{
force_update();
_sheet->set_dirty(FALSE);
}
return TRUE;
}
bool TSheet_field::on_key(KEY k)
{
@ -1037,8 +1038,9 @@ bool TSheet_field::on_key(KEY k)
{
const bool spork = _sheet->dirty();
if (spork < FALSE || spork > TRUE)
return error_box("Tabella inconsistente: correggere i valori errati prima di uscirne");
return error_box("Tabella inconsistente: correggere le celle errate");
set_dirty(spork);
}
return TMask_field::on_key(k);
}

View File

@ -17,13 +17,12 @@ class TSheet_field : public TMask_field
protected:
virtual word class_id() const;
virtual bool on_hit();
virtual bool on_key(KEY k);
virtual void parse_head(TScanner& scanner);
virtual bool parse_item(TScanner& scanner);
virtual void create(WINDOW parent);
virtual void set_window_data(const char*);
virtual void set_field_data(const char*);
public:
TToken_string& row(int n); // Get/Create a new row

View File

@ -1 +1 @@
#define VERSION 1.7
#define VERSION 1.8

View File

@ -1,4 +1,4 @@
// $Id: relation.cpp,v 1.1.1.1 1994-08-12 10:52:01 alex Exp $
// $Id: relation.cpp,v 1.2 1994-08-19 10:43:55 guy Exp $
// relation.cpp
// fv 12/8/93
// relation class for isam files
@ -662,11 +662,11 @@ HIDDEN bool __evalcondition(const TRectype& r,TExpression* cond)
FILE* TCursor::open_index(bool create) const
{
#if XVT_OS == XVT_OS_SCOUNIX
const char* r = "r";
const char* w = "w";
const char* const ";
const char* const w = "w";
#else
const char* r = "rb";
const char* w = "wb";
const char* const r = "rb";
const char* const w = "wb";
#endif
FILE* f = fopen(_indexname, create ? w : r);
@ -1186,9 +1186,9 @@ TFieldref& TFieldref::operator =(const TString& s)
if (par > 0)
{
pos = par+1;
par = s.find(',', pos);
_from = atoi(&s[pos]);
if (_from > 0) _from--; else _from = 0;
par = s.find(',', pos);
if (par > 0) _to = atoi(&s[par+1]); else _to = -1;
}
else
@ -1280,7 +1280,8 @@ void TFieldref::write(const char* val, TRectype& rec) const
campo.overwrite(val, _from);
rec.put(_name, campo);
}
else rec.put(_name, val);
else
rec.put(_name, val);
}
int TFieldref::len(TRectype &rec) const

View File

@ -156,7 +156,6 @@ HIDDEN BOOLEAN event_hook(HWND hwnd,
GetClassName(hwnd, name, 15);
if (stricmp(name, "Edit") == 0)
{
WINDOW w = xvtwi_hwnd_to_window(GetParent(hwnd));
switch(wparam)
{
case VK_PRIOR:wparam = K_PREV; break;
@ -166,10 +165,13 @@ HIDDEN BOOLEAN event_hook(HWND hwnd,
default:wparam = 0; break;
}
if (wparam)
{
WINDOW w = xvtwi_hwnd_to_window(GetParent(hwnd));
dispatch_e_char(w, wparam);
}
}
}
}
return FALSE;
@ -700,7 +702,7 @@ WINDOW xvt_create_statbar()
void xvt_statbar_set(const char* text)
{
TString80 t(text);
TString t(text); t.cut(60);
const TDate oggi(TODAY);
t << '\t' << oggi.string() << " - " << MainApp()->title();
#if XVT_OS == XVT_OS_WIN