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
include
@ -171,6 +171,8 @@ public:
|
||||
{ return _str.add(s); }
|
||||
// @cmember Inserisce un record in una posizione stabilita
|
||||
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>
|
||||
bool destroy(int rec = -1, bool update_sheet = TRUE);
|
||||
// @cmember Ritorna l'array di tutte le stringhe delle righe
|
||||
@ -688,34 +690,64 @@ int TSpreadsheet::insert(
|
||||
return -1;
|
||||
|
||||
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;
|
||||
int r = _str.insert(new TToken_string(80), rec);
|
||||
int r = rec < 0 ? items() : rec;
|
||||
|
||||
const bool ok = notify(r, K_INS);
|
||||
if (ok)
|
||||
{
|
||||
{
|
||||
r = _str.insert(new TToken_string(80), rec);
|
||||
_property.insert(NULL, r);
|
||||
owner().post_insert(r);
|
||||
xi_insert_row(_obj, INT_MAX);
|
||||
|
||||
// Notifica che l'inserimento h terminato
|
||||
notify(r, K_CTRL + K_INS);
|
||||
owner().post_insert(r);
|
||||
xi_insert_row(_obj, INT_MAX);
|
||||
xi_cell_request(_obj);
|
||||
}
|
||||
else
|
||||
{
|
||||
_str.destroy(r);
|
||||
r = -1;
|
||||
}
|
||||
|
||||
ininsert = FALSE;
|
||||
return r;
|
||||
}
|
||||
|
||||
// @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
|
||||
//
|
||||
// @rdesc Ritorna il risultato dell'operazione:
|
||||
@ -1029,43 +1061,38 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
refused = TRUE;
|
||||
break;
|
||||
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);
|
||||
}
|
||||
|
||||
if (oldrec != _cur_rec || !_row_dirty)
|
||||
{
|
||||
_row_dirty = FALSE;
|
||||
notify_change();
|
||||
_cell_dirty = FALSE;
|
||||
}
|
||||
const KEY k = edit(_cur_rec);
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
// update_rec(_cur_rec);
|
||||
_row_dirty = TRUE;
|
||||
} else
|
||||
_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);
|
||||
|
||||
if (oldrec != _cur_rec || !_row_dirty)
|
||||
{
|
||||
_row_dirty = FALSE;
|
||||
notify_change();
|
||||
_cell_dirty = FALSE;
|
||||
}
|
||||
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);
|
||||
|
||||
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;
|
||||
}
|
||||
_check_enabled = TRUE;
|
||||
}
|
||||
break;
|
||||
case XIE_ON_LIST:
|
||||
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))
|
||||
{
|
||||
int rec = _cur_rec;
|
||||
_row_dirty = FALSE;
|
||||
destroy(rec);
|
||||
if (rec < items())
|
||||
str2mask(rec);
|
||||
@ -1276,11 +1304,65 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
refused = TRUE;
|
||||
}
|
||||
break;
|
||||
case K_CTRL + '+':
|
||||
case K_CTRL + '+':
|
||||
owner().mask().notify_focus_field(owner().dlg());
|
||||
insert(-1);
|
||||
refused = TRUE;
|
||||
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:
|
||||
xi_scroll(_obj, XI_SCROLL_PGUP);
|
||||
break;
|
||||
@ -1379,6 +1461,8 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
||||
refused = TRUE;
|
||||
}
|
||||
break;
|
||||
case K_CTRL + 'A':
|
||||
case K_CTRL + 'B':
|
||||
case K_CTRL + '-':
|
||||
case K_CTRL + '+':
|
||||
case K_CTRL+K_PREV:
|
||||
@ -1995,6 +2079,12 @@ void TSheet_field::destroy(int r, bool 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)
|
||||
{
|
||||
_ctl_data._width = scanner.integer();
|
||||
@ -2447,4 +2537,31 @@ void TSheet_field::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
|
||||
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
|
||||
void force_update(int r = -1);
|
||||
|
||||
@ -155,6 +157,9 @@ public:
|
||||
// @cmember Funzione eseguita dopo ogni insert
|
||||
virtual void post_insert(int) { }
|
||||
|
||||
// @cmember Esegue Tutti i check iniziali sulla riga <p n>
|
||||
void check_row(int n);
|
||||
|
||||
// @cmember Costruttore
|
||||
TSheet_field(TMask* m);
|
||||
// @cmember Distruttore
|
||||
|
Loading…
x
Reference in New Issue
Block a user