Patch level : 10.0 272

Files correlati     : mg4.exe
Ricompilazione Demo : [ ]
Commento            :
Migliorata gestione righe di spreadsheet completamente disabilitate


git-svn-id: svn://10.65.10.50/trunk@18621 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2009-03-27 10:36:34 +00:00
parent e5c46ac873
commit b50b89232f
3 changed files with 41 additions and 21 deletions

View File

@ -292,7 +292,7 @@ public:
// @cmember Trova un record abilitato a partire da rec // @cmember Trova un record abilitato a partire da rec
int find_enabled_record(int rec, int direction) const; int find_enabled_record(int rec, int direction) const;
// @cmember Permette di mettere il focus su una cella // @cmember Permette di mettere il focus su una cella
void set_focus_cell(int riga, int colonna); bool set_focus_cell(int riga, int colonna);
// @cmember Abilita/disabilita tutto lo spreadsheet (vedi <mf TMask::activate>) // @cmember Abilita/disabilita tutto lo spreadsheet (vedi <mf TMask::activate>)
void activate(bool on); void activate(bool on);
// @cmember Permette di abilitare/disabilitare una colonna // @cmember Permette di abilitare/disabilitare una colonna
@ -822,13 +822,15 @@ int TSpreadsheet::find_enabled_record(int rec, int direction) const
} }
// riga (da 0), colonna (0 = numero, 1 = prima cella, ...) // riga (da 0), colonna (0 = numero, 1 = prima cella, ...)
void TSpreadsheet::set_focus_cell(int riga, int colonna) bool TSpreadsheet::set_focus_cell(int riga, int colonna)
{ {
// xi_set_focus(get_interface()); // xi_set_focus(get_interface());
const int rec = row2rec(riga); const int rec = row2rec(riga);
colonna = find_enabled_column(rec, colonna, +1); if (rec < 0 || rec >= items())
return false;
colonna = find_enabled_column(rec, colonna, +1);
if (colonna > 0) if (colonna > 0)
{ {
WINDOW win = xvt_scr_get_focus_vobj(); // Puo' essere NULL per cui poi non funziona ... WINDOW win = xvt_scr_get_focus_vobj(); // Puo' essere NULL per cui poi non funziona ...
@ -850,6 +852,8 @@ void TSpreadsheet::set_focus_cell(int riga, int colonna)
} }
_edit_field = col2field(_cur_col = colonna); // qui _edit_field = col2field(_cur_col = colonna); // qui
} }
return colonna > 0;
} }
// @doc INTERNAL // @doc INTERNAL
@ -985,6 +989,8 @@ void TSpreadsheet::update(
void TSpreadsheet::notify_change() void TSpreadsheet::notify_change()
{
if (_cur_rec >= 0)
{ {
if (!_row_dirty) if (!_row_dirty)
{ {
@ -997,6 +1003,7 @@ void TSpreadsheet::notify_change()
} }
_row_dirty = _cell_dirty = true; // Era tra le graffe _row_dirty = _cell_dirty = true; // Era tra le graffe
} }
}
const char* TSpreadsheet::copy_cell2field(XI_OBJ* cell) const char* TSpreadsheet::copy_cell2field(XI_OBJ* cell)
{ {
@ -1101,6 +1108,11 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
{ {
const long& rec = xiev->v.cell_request.rec; const long& rec = xiev->v.cell_request.rec;
const short& maxlen = xiev->v.cell_request.len; const short& maxlen = xiev->v.cell_request.len;
if (rec < 0 || rec >= items() || maxlen <= 0) // Puo' succedere: strano ma vero!
{
refused = TRUE;
return false;
}
const char* src = NULL; const char* src = NULL;
int nm; int nm;
@ -1336,7 +1348,13 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
{ {
// set_pos(xiev->v.xi_obj->v.cell.row, xiev->v.xi_obj->v.cell.column); // set_pos(xiev->v.xi_obj->v.cell.row, xiev->v.xi_obj->v.cell.column);
const XI_CELL_DATA& cell = xiev->v.xi_obj->v.cell; const XI_CELL_DATA& cell = xiev->v.xi_obj->v.cell;
set_focus_cell(cell.row, cell.column); const bool ok = set_focus_cell(cell.row, cell.column);
if (!ok)
{
_check_enabled = TRUE;
refused = TRUE;
return false;
}
} }
if (oldrec != _cur_rec || !_row_dirty) if (oldrec != _cur_rec || !_row_dirty)
@ -3080,13 +3098,13 @@ void TSheet_field::post_select(int r)
s->post_select(r); s->post_select(r);
} }
void TSheet_field::set_focus_cell(int riga, int colonna) bool TSheet_field::set_focus_cell(int riga, int colonna)
{ {
TSpreadsheet* s = (TSpreadsheet*)_ctl; TSpreadsheet* s = (TSpreadsheet*)_ctl;
s->set_focus_cell(riga, colonna); return s->set_focus_cell(riga, colonna);
} }
void TSheet_field::set_focus_cell_id(long rec, short cid) bool TSheet_field::set_focus_cell_id(long rec, short cid)
{ {
TSpreadsheet* s = (TSpreadsheet*)_ctl; TSpreadsheet* s = (TSpreadsheet*)_ctl;
@ -3098,10 +3116,12 @@ void TSheet_field::set_focus_cell_id(long rec, short cid)
xi_get_visible_columns(s->_obj, &first_col, &last_col); xi_get_visible_columns(s->_obj, &first_col, &last_col);
xi_get_visible_rows(s->_obj, &first_row, &last_row); xi_get_visible_rows(s->_obj, &first_row, &last_row);
bool ok = false;
if (col >= first_col && col <= last_col && row >= first_row && row <= last_row) if (col >= first_col && col <= last_col && row >= first_row && row <= last_row)
s->set_focus_cell(row, col); ok = s->set_focus_cell(row, col);
else else
s->select(rec, col, true); s->select(rec, col, true);
return ok;
} }
bool TSheet_field::on_key(KEY k) bool TSheet_field::on_key(KEY k)

View File

@ -101,13 +101,13 @@ protected:
// @cmember Ricopia i campi del record <p n>-esimo nella maschera // @cmember Ricopia i campi del record <p n>-esimo nella maschera
virtual void row2mask(int n, TToken_string & rec, int mode = 0x3); virtual void row2mask(int n, TToken_string & rec, int mode = 0x3);
// @cmember Permette di mettere il focus su una cella // @cmember Permette di mettere il focus su una cella
void set_focus_cell(int riga, int colonna); bool set_focus_cell(int riga, int colonna);
// @access Public Member // @access Public Member
public: public:
// @cmember Permette di mettere il focus su una cella // @cmember Permette di mettere il focus su una cella
void set_focus_cell_id(long rec, short cid); bool set_focus_cell_id(long rec, short cid);
// @cmember Gestisce la pressione del tasto (true se la gestione ha avuto successo) // @cmember Gestisce la pressione del tasto (true se la gestione ha avuto successo)
virtual bool on_key(KEY k); virtual bool on_key(KEY k);

View File

@ -195,7 +195,7 @@ protected:
// @cmember Richiede se il record corrente e' protetto (non cancellabile) // @cmember Richiede se il record corrente e' protetto (non cancellabile)
virtual bool protected_record(TRectype&) virtual bool protected_record(TRectype&)
{ return FALSE; } { return false; }
// @cmember Richiede se il record corrente e' protetto (non cancellabile) // @cmember Richiede se il record corrente e' protetto (non cancellabile)
virtual bool protected_record(TRelation &); virtual bool protected_record(TRelation &);