Aggiunti tasti per aprire le maschere dello sheet
git-svn-id: svn://10.65.10.50/trunk@4053 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
b7a5ad9f90
commit
18b4252763
@ -171,6 +171,8 @@ public:
|
|||||||
{ return _str.add(s); }
|
{ return _str.add(s); }
|
||||||
// @cmember Inserisce un record in una posizione stabilita
|
// @cmember Inserisce un record in una posizione stabilita
|
||||||
int insert(int rec);
|
int insert(int rec);
|
||||||
|
// @cmember Inserisce un record (da prgramma) in una posizione stabilita
|
||||||
|
int _insert(int rec, bool update_sheet = TRUE);
|
||||||
// @cmember Elimina il record <p rec>
|
// @cmember Elimina il record <p rec>
|
||||||
bool destroy(int rec = -1, bool update_sheet = TRUE);
|
bool destroy(int rec = -1, bool update_sheet = TRUE);
|
||||||
// @cmember Ritorna l'array di tutte le stringhe delle righe
|
// @cmember Ritorna l'array di tutte le stringhe delle righe
|
||||||
@ -688,34 +690,64 @@ int TSpreadsheet::insert(
|
|||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
if (rec < 0 && items() > 0 && !owner().append() )
|
if (rec < 0 && items() > 0 && !owner().append() )
|
||||||
rec = _cur_rec + 1;
|
{
|
||||||
|
XI_OBJ* itf = get_interface();
|
||||||
|
XI_OBJ* focus = xi_get_focus(itf);
|
||||||
|
if (focus && focus->type == XIT_CELL)
|
||||||
|
rec = _cur_rec + 1;
|
||||||
|
else
|
||||||
|
rec = 0;
|
||||||
|
}
|
||||||
ininsert = TRUE;
|
ininsert = TRUE;
|
||||||
int r = _str.insert(new TToken_string(80), rec);
|
int r = rec < 0 ? items() : rec;
|
||||||
|
|
||||||
const bool ok = notify(r, K_INS);
|
const bool ok = notify(r, K_INS);
|
||||||
if (ok)
|
if (ok)
|
||||||
{
|
{
|
||||||
|
r = _str.insert(new TToken_string(80), rec);
|
||||||
_property.insert(NULL, r);
|
_property.insert(NULL, r);
|
||||||
owner().post_insert(r);
|
|
||||||
xi_insert_row(_obj, INT_MAX);
|
|
||||||
|
|
||||||
// Notifica che l'inserimento h terminato
|
// Notifica che l'inserimento h terminato
|
||||||
notify(r, K_CTRL + K_INS);
|
notify(r, K_CTRL + K_INS);
|
||||||
|
owner().post_insert(r);
|
||||||
|
xi_insert_row(_obj, INT_MAX);
|
||||||
xi_cell_request(_obj);
|
xi_cell_request(_obj);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
|
||||||
_str.destroy(r);
|
|
||||||
r = -1;
|
r = -1;
|
||||||
}
|
|
||||||
|
|
||||||
ininsert = FALSE;
|
ininsert = FALSE;
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @doc INTERNAL
|
// @doc INTERNAL
|
||||||
|
|
||||||
|
// @mfunc Inserisce un record (da programma) in una posizione stabilita
|
||||||
|
//
|
||||||
|
// @rdesc Ritorna la posizione nella quale e' stato inserito il record. Se non riesce ad inserirlo
|
||||||
|
// ritorna -1.
|
||||||
|
int TSpreadsheet::_insert(
|
||||||
|
int rec, // @parm Numero del record da inserire nello spreadsheet
|
||||||
|
bool update_sheet) // @parm Aggiornamento visuale dell sheet
|
||||||
|
|
||||||
|
// @comm Non e' possibile inserire un nuovo record nel caso nello spreadsheet vi siano
|
||||||
|
// almeno 999 righe oppure se lo spreadsheet non e' attivo.
|
||||||
|
{
|
||||||
|
if (items() >= 999)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
int r = _str.insert(new TToken_string(80), rec);
|
||||||
|
|
||||||
|
_property.insert(NULL, r);
|
||||||
|
owner().post_insert(r);
|
||||||
|
xi_insert_row(_obj, INT_MAX);
|
||||||
|
|
||||||
|
if (update_sheet)
|
||||||
|
xi_cell_request(_obj);
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
// @doc INTERNAL
|
||||||
|
|
||||||
// @mfunc Elimina una riga
|
// @mfunc Elimina una riga
|
||||||
//
|
//
|
||||||
// @rdesc Ritorna il risultato dell'operazione:
|
// @rdesc Ritorna il risultato dell'operazione:
|
||||||
@ -1029,43 +1061,38 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
refused = TRUE;
|
refused = TRUE;
|
||||||
break;
|
break;
|
||||||
case XIE_DBL_CELL:
|
case XIE_DBL_CELL:
|
||||||
{
|
|
||||||
_check_enabled = FALSE;
|
|
||||||
|
|
||||||
const int oldrec = _cur_rec;
|
|
||||||
if ( xiev->v.xi_obj != NULL )
|
|
||||||
{
|
{
|
||||||
set_pos(xiev->v.xi_obj->v.cell.row, xiev->v.xi_obj->v.cell.column);
|
_check_enabled = FALSE;
|
||||||
}
|
|
||||||
|
const int oldrec = _cur_rec;
|
||||||
if (oldrec != _cur_rec || !_row_dirty)
|
if ( xiev->v.xi_obj != NULL )
|
||||||
{
|
set_pos(xiev->v.xi_obj->v.cell.row, xiev->v.xi_obj->v.cell.column);
|
||||||
_row_dirty = FALSE;
|
|
||||||
notify_change();
|
if (oldrec != _cur_rec || !_row_dirty)
|
||||||
_cell_dirty = FALSE;
|
{
|
||||||
}
|
_row_dirty = FALSE;
|
||||||
const KEY k = edit(_cur_rec);
|
notify_change();
|
||||||
if (k == K_ENTER)
|
_cell_dirty = FALSE;
|
||||||
{
|
}
|
||||||
// update_rec(_cur_rec);
|
const KEY k = edit(_cur_rec);
|
||||||
_row_dirty = TRUE;
|
if (k == K_ENTER)
|
||||||
} else
|
_row_dirty = TRUE;
|
||||||
|
else
|
||||||
if (k == K_DEL)
|
if (k == K_DEL)
|
||||||
{
|
{
|
||||||
_row_dirty = _cell_dirty = FALSE;
|
_row_dirty = _cell_dirty = FALSE;
|
||||||
|
|
||||||
if (_cur_rec >= items())
|
if (_cur_rec >= items())
|
||||||
{
|
{
|
||||||
_row_dirty = _cell_dirty = FALSE;
|
_row_dirty = _cell_dirty = FALSE;
|
||||||
_cur_rec = items()-1;
|
_cur_rec = items()-1;
|
||||||
_cur_row = 0; _cur_col = 1;
|
_cur_row = 0; _cur_col = 1;
|
||||||
}
|
}
|
||||||
if (_cur_rec >= 0 && _cur_rec < items())
|
if (_cur_rec >= 0 && _cur_rec < items())
|
||||||
set_focus_cell(_cur_row, _cur_col);
|
set_focus_cell(_cur_row, _cur_col);
|
||||||
}
|
}
|
||||||
|
_check_enabled = TRUE;
|
||||||
_check_enabled = TRUE;
|
}
|
||||||
}
|
|
||||||
break;
|
break;
|
||||||
case XIE_ON_LIST:
|
case XIE_ON_LIST:
|
||||||
owner().mask().notify_focus_field(owner().dlg());
|
owner().mask().notify_focus_field(owner().dlg());
|
||||||
@ -1264,6 +1291,7 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
if (owner().mask().id2pos(DLG_DELREC) && notify(_cur_rec, K_DEL))
|
if (owner().mask().id2pos(DLG_DELREC) && notify(_cur_rec, K_DEL))
|
||||||
{
|
{
|
||||||
int rec = _cur_rec;
|
int rec = _cur_rec;
|
||||||
|
_row_dirty = FALSE;
|
||||||
destroy(rec);
|
destroy(rec);
|
||||||
if (rec < items())
|
if (rec < items())
|
||||||
str2mask(rec);
|
str2mask(rec);
|
||||||
@ -1276,11 +1304,65 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
refused = TRUE;
|
refused = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case K_CTRL + '+':
|
case K_CTRL + '+':
|
||||||
owner().mask().notify_focus_field(owner().dlg());
|
owner().mask().notify_focus_field(owner().dlg());
|
||||||
insert(-1);
|
insert(-1);
|
||||||
refused = TRUE;
|
refused = TRUE;
|
||||||
break;
|
break;
|
||||||
|
case K_CTRL + 'A':
|
||||||
|
{
|
||||||
|
_check_enabled = FALSE;
|
||||||
|
if (_cell_dirty)
|
||||||
|
off_cell_handler();
|
||||||
|
|
||||||
|
const KEY k = edit(_cur_rec);
|
||||||
|
if (k == K_ENTER)
|
||||||
|
_row_dirty = TRUE;
|
||||||
|
else
|
||||||
|
if (k == K_DEL)
|
||||||
|
{
|
||||||
|
_row_dirty = _cell_dirty = FALSE;
|
||||||
|
|
||||||
|
if (_cur_rec >= items())
|
||||||
|
{
|
||||||
|
_row_dirty = _cell_dirty = FALSE;
|
||||||
|
_cur_rec = items()-1;
|
||||||
|
_cur_row = 0; _cur_col = 1;
|
||||||
|
}
|
||||||
|
if (_cur_rec >= 0 && _cur_rec < items())
|
||||||
|
set_focus_cell(_cur_row, _cur_col);
|
||||||
|
}
|
||||||
|
_check_enabled = TRUE;
|
||||||
|
refused = TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case K_CTRL + 'B':
|
||||||
|
{
|
||||||
|
_check_enabled = FALSE;
|
||||||
|
if (_cell_dirty)
|
||||||
|
off_cell_handler();
|
||||||
|
|
||||||
|
const int button_pos = sheet_mask().id2pos(FIRST_FIELD-1);
|
||||||
|
if (button_pos >= 0)
|
||||||
|
{
|
||||||
|
TMask & sm = owner().sheet_mask();
|
||||||
|
TMask_field& button = sm.fld(button_pos);
|
||||||
|
if (button.active())
|
||||||
|
{
|
||||||
|
str2mask(_cur_rec);
|
||||||
|
button.on_hit();
|
||||||
|
if (sm.dirty())
|
||||||
|
{
|
||||||
|
notify_change();
|
||||||
|
mask2str(_cur_rec);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_check_enabled = TRUE;
|
||||||
|
owner().highlight();
|
||||||
|
refused = TRUE;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case K_CTRL+K_PREV:
|
case K_CTRL+K_PREV:
|
||||||
xi_scroll(_obj, XI_SCROLL_PGUP);
|
xi_scroll(_obj, XI_SCROLL_PGUP);
|
||||||
break;
|
break;
|
||||||
@ -1379,6 +1461,8 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
refused = TRUE;
|
refused = TRUE;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case K_CTRL + 'A':
|
||||||
|
case K_CTRL + 'B':
|
||||||
case K_CTRL + '-':
|
case K_CTRL + '-':
|
||||||
case K_CTRL + '+':
|
case K_CTRL + '+':
|
||||||
case K_CTRL+K_PREV:
|
case K_CTRL+K_PREV:
|
||||||
@ -1995,6 +2079,12 @@ void TSheet_field::destroy(int r, bool update_sheet)
|
|||||||
((TSpreadsheet*)_ctl)->destroy(r, update_sheet);
|
((TSpreadsheet*)_ctl)->destroy(r, update_sheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Certified 100%
|
||||||
|
int TSheet_field::insert(int r, bool update_sheet)
|
||||||
|
{
|
||||||
|
return ((TSpreadsheet*)_ctl)->_insert(r, update_sheet);
|
||||||
|
}
|
||||||
|
|
||||||
void TSheet_field::parse_head(TScanner& scanner)
|
void TSheet_field::parse_head(TScanner& scanner)
|
||||||
{
|
{
|
||||||
_ctl_data._width = scanner.integer();
|
_ctl_data._width = scanner.integer();
|
||||||
@ -2447,4 +2537,31 @@ void TSheet_field::save_columns_order()
|
|||||||
s.save_columns_order();
|
s.save_columns_order();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TSheet_field::check_row(int n)
|
||||||
|
{
|
||||||
|
TSpreadsheet* s = (TSpreadsheet*)_ctl;
|
||||||
|
const int current = s->_cur_rec;
|
||||||
|
|
||||||
|
s->_cur_rec = n;
|
||||||
|
|
||||||
|
TMask& m = sheet_mask();
|
||||||
|
CHECK(!m.is_running(), "Can't use check_row while sheet mask is running");
|
||||||
|
TToken_string & r = row(n);
|
||||||
|
const int max = m.fields();
|
||||||
|
TMaskmode mask_mode = (TMaskmode) m.mode();
|
||||||
|
|
||||||
|
m.set_mode(MODE_INS);
|
||||||
|
for (int i = max - 1; i >= 0; i--)
|
||||||
|
{
|
||||||
|
TMask_field & f = m.fld(i);
|
||||||
|
|
||||||
|
if (f.has_check())
|
||||||
|
f.set_dirty();
|
||||||
|
}
|
||||||
|
row2mask(n, r);
|
||||||
|
mask2row(n, r);
|
||||||
|
m.set_mode(mask_mode);
|
||||||
|
s->_cur_rec = current;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -97,6 +97,8 @@ public:
|
|||||||
|
|
||||||
// @cmember Elimina una riga
|
// @cmember Elimina una riga
|
||||||
void destroy(int r = -1, bool update_sheet = TRUE);
|
void destroy(int r = -1, bool update_sheet = TRUE);
|
||||||
|
// @cmember Inserisce una riga
|
||||||
|
int insert(int r = -1, bool update_sheet = TRUE);
|
||||||
// @cmember Forza l'aggiornamento dei dati della riga sullo schermo
|
// @cmember Forza l'aggiornamento dei dati della riga sullo schermo
|
||||||
void force_update(int r = -1);
|
void force_update(int r = -1);
|
||||||
|
|
||||||
@ -155,6 +157,9 @@ public:
|
|||||||
// @cmember Funzione eseguita dopo ogni insert
|
// @cmember Funzione eseguita dopo ogni insert
|
||||||
virtual void post_insert(int) { }
|
virtual void post_insert(int) { }
|
||||||
|
|
||||||
|
// @cmember Esegue Tutti i check iniziali sulla riga <p n>
|
||||||
|
void check_row(int n);
|
||||||
|
|
||||||
// @cmember Costruttore
|
// @cmember Costruttore
|
||||||
TSheet_field(TMask* m);
|
TSheet_field(TMask* m);
|
||||||
// @cmember Distruttore
|
// @cmember Distruttore
|
||||||
|
Loading…
x
Reference in New Issue
Block a user