diff --git a/include/maskfld.cpp b/include/maskfld.cpp index c391da032..9446440cc 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -3284,7 +3284,13 @@ bool TList_field::on_key(KEY key) if (key == K_TAB && class_id() == CLASS_LIST_FIELD) dispacth_e_char(win(), K_F9); #endif - + + if (key == K_TAB || key == K_ENTER) + { + bool ok = ::validate(_validate_func, *this, key, _validate_parms); + if (!ok) return FALSE; + } + if (key == K_SPACE) on_hit(); return TMask_field::on_key(key); diff --git a/include/msksheet.cpp b/include/msksheet.cpp index 9fbbf0dd7..ef6cd822a 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -541,9 +541,9 @@ void TSpreadsheet::set_focus_cell(int riga, int colonna) _cur_row = riga; _cur_col = colonna; _cur_rec = r; - _edit_field = col2field(colonna); _row_dirty = FALSE; } + _edit_field = col2field(colonna); str2mask(_cur_rec); } } @@ -853,7 +853,7 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) _cur_rec = items() - 1; } - if (_cur_rec >= 0 && !cell_disabled(_cur_rec, _cur_col-1)) + if (_cur_rec >= 0) set_focus_cell(_cur_row, _cur_col); _check_enabled = TRUE; } @@ -918,9 +918,14 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) TMask_field* f = cell2field(xiev->v.xi_obj); const int col = (f->dlg()-FIRST_FIELD) % 100; if (cell_disabled(_cur_rec, col)) // If the cell is disabled ... - { - dispatch_e_char(win(), _lastab); // ... skip to the next one. - _edit_field = NULL; + { + if (!cell_disabled(_cur_rec, -1)) // If the row is not disabled ... + { + dispatch_e_char(win(), _lastab); // ... skip to the next one. + _edit_field = NULL; + } + else + xiev->refused = TRUE; } else { @@ -1461,17 +1466,24 @@ void TSpreadsheet::set_column_header(const int col, const TString& header) cons // Certified 99% -// @mfunc Controlla se una cella e' disabilitata -// -// @rdesc Ritorna lo stato della cella indicate: +// @mfunc Controlla se una cella o un'intera riga e' disabilitata +// +// @rdesc Se column e' minore di zero si considera l'intera riga +// @rdesc Ritorna lo stato della cella indicata: // // @flag TRUE | Se la cella e' disabilitata // @flag FALSE| Se la cella e' abilitata bool TSpreadsheet::cell_disabled(int row, int column) const { TBit_array* ba = (TBit_array*)_disabled.objptr(row); - if (ba == NULL) return _column_disabled[column]; // Use default - return (*ba)[column]; + + bool d; + if (column < 0) + d = ba == NULL ? FALSE : (ba->ones() == columns()-1); + else + d = ba == NULL ? _column_disabled[column] : (*ba)[column]; + + return d; } diff --git a/include/validate.cpp b/include/validate.cpp index b95ea3c27..2a224a927 100755 --- a/include/validate.cpp +++ b/include/validate.cpp @@ -12,7 +12,7 @@ #include -typedef bool (*VAL_FUNC)(TEdit_field&, KEY k); +typedef bool (*VAL_FUNC)(TMask_field&, KEY k); HIDDEN const TArray* _parms; HIDDEN int get_val_param_num() { return _parms->items(); } @@ -20,7 +20,7 @@ HIDDEN int get_val_param_num() { return _parms->items(); } HIDDEN const char* get_val_param(int i) { return i < _parms->items() ? (const char*)((const TString&) (*_parms)[i]):"" ; } -HIDDEN bool _expr_val(TEdit_field& f, KEY) +HIDDEN bool _expr_val(TMask_field& f, KEY) { TTypeexp type = atoi(get_val_param(0)) == 0 ? _numexpr :_strexpr; TExpression e(get_val_param(1), type); @@ -50,7 +50,7 @@ HIDDEN bool _expr_val(TEdit_field& f, KEY) } -HIDDEN bool _emptycopy_val(TEdit_field& f, KEY) +HIDDEN bool _emptycopy_val(TMask_field& f, KEY) { if (f.get().empty()) { @@ -100,7 +100,7 @@ bool pi_check(const char * st, const char * paiva) // Controlla la partita iva se e' non vuota ed italiana -HIDDEN bool _pi_val(TEdit_field& f, KEY) +HIDDEN bool _pi_val(TMask_field& f, KEY) { if (f.mask().query_mode()) return TRUE; @@ -197,7 +197,7 @@ bool cf_check (const char * stato, const char * codcf) } -HIDDEN bool _cf_val(TEdit_field& f, KEY key) +HIDDEN bool _cf_val(TMask_field& f, KEY key) { if (f.mask().query_mode()) return TRUE; @@ -227,7 +227,7 @@ HIDDEN bool _cf_val(TEdit_field& f, KEY key) } -HIDDEN bool _xt_pi_val(TEdit_field& f, KEY key) +HIDDEN bool _xt_pi_val(TMask_field& f, KEY key) { TMask& m = f.mask(); @@ -278,7 +278,7 @@ HIDDEN bool _xt_pi_val(TEdit_field& f, KEY key) } -HIDDEN bool _xtz_pi_val(TEdit_field& f, KEY key) +HIDDEN bool _xtz_pi_val(TMask_field& f, KEY key) { if (f.mask().query_mode()) return TRUE; TString16 pi(f.get()); @@ -287,7 +287,7 @@ HIDDEN bool _xtz_pi_val(TEdit_field& f, KEY key) } -HIDDEN bool _xt_cf_val(TEdit_field& f, KEY key) +HIDDEN bool _xt_cf_val(TMask_field& f, KEY key) { if (f.mask().query_mode()) return TRUE; @@ -387,7 +387,7 @@ HIDDEN bool _xt_cf_val(TEdit_field& f, KEY key) } -HIDDEN bool _xtz_cf_val(TEdit_field& f, KEY key) +HIDDEN bool _xtz_cf_val(TMask_field& f, KEY key) { if (f.mask().query_mode()) return TRUE; @@ -396,13 +396,13 @@ HIDDEN bool _xtz_cf_val(TEdit_field& f, KEY key) } -HIDDEN bool _notempty_val(TEdit_field& f, KEY) +HIDDEN bool _notempty_val(TMask_field& f, KEY) { return f.mask().query_mode() || f.get().not_empty(); } -HIDDEN bool _date_cmp(TEdit_field& f, KEY) +HIDDEN bool _date_cmp(TMask_field& f, KEY) { TFixed_string s(f.get()); if (s.empty()) return TRUE; @@ -425,7 +425,7 @@ HIDDEN bool _date_cmp(TEdit_field& f, KEY) } -HIDDEN bool _fixlen_val(TEdit_field& f, KEY) +HIDDEN bool _fixlen_val(TMask_field& f, KEY) { const TFixed_string s(f.get()); @@ -438,7 +438,7 @@ HIDDEN bool _fixlen_val(TEdit_field& f, KEY) } -HIDDEN bool _mtcheck_val(TEdit_field& f, KEY) +HIDDEN bool _mtcheck_val(TMask_field& f, KEY) { const int month = atoi(f.get()); if (month < 1 || month > 13) return FALSE; @@ -453,7 +453,7 @@ HIDDEN bool _mtcheck_val(TEdit_field& f, KEY) } -HIDDEN bool _reqif_val(TEdit_field& f, KEY k) +HIDDEN bool _reqif_val(TMask_field& f, KEY k) { if (k == K_ENTER) { @@ -470,7 +470,7 @@ HIDDEN bool _reqif_val(TEdit_field& f, KEY k) } -HIDDEN bool _autoexit_val(TEdit_field& f, KEY key) +HIDDEN bool _autoexit_val(TMask_field& f, KEY key) { TMask& m = f.mask(); @@ -513,7 +513,7 @@ HIDDEN bool _autoexit_val(TEdit_field& f, KEY key) } -HIDDEN bool _numcalc_val(TEdit_field& f, KEY k) +HIDDEN bool _numcalc_val(TMask_field& f, KEY k) { if (k != K_TAB) return TRUE; TExpression e(get_val_param(0), _numexpr); @@ -536,7 +536,7 @@ HIDDEN bool _numcalc_val(TEdit_field& f, KEY k) } -HIDDEN bool _strcalc_val(TEdit_field& f, KEY k) +HIDDEN bool _strcalc_val(TMask_field& f, KEY k) { if (k != K_TAB) return TRUE; TExpression e(get_val_param(0), _strexpr); @@ -559,7 +559,7 @@ HIDDEN bool _strcalc_val(TEdit_field& f, KEY k) } -HIDDEN bool _onereq_val(TEdit_field& f, KEY k) +HIDDEN bool _onereq_val(TMask_field& f, KEY k) { if (k != K_ENTER) return TRUE; const TMask& m = f.mask(); @@ -574,7 +574,7 @@ HIDDEN bool _onereq_val(TEdit_field& f, KEY k) return FALSE; } -HIDDEN bool _chkfld_val(TEdit_field& f, KEY k) +HIDDEN bool _chkfld_val(TMask_field& f, KEY k) { if (f.to_check(k)) { @@ -596,13 +596,13 @@ HIDDEN bool _chkfld_val(TEdit_field& f, KEY k) return TRUE; } -HIDDEN bool _filename_val(TEdit_field& f, KEY) +HIDDEN bool _filename_val(TMask_field& f, KEY) { const TFilename fn(f.get()); return fn.ok(); } -HIDDEN bool _zerofill_val(TEdit_field& f, KEY k) +HIDDEN bool _zerofill_val(TMask_field& f, KEY k) { if (f.to_check(k)) { @@ -617,7 +617,7 @@ HIDDEN bool _zerofill_val(TEdit_field& f, KEY k) return TRUE; } -HIDDEN bool _alpha_val(TEdit_field& f, KEY k) +HIDDEN bool _alpha_val(TMask_field& f, KEY k) { if (f.to_check(k)) { @@ -629,12 +629,12 @@ HIDDEN bool _alpha_val(TEdit_field& f, KEY k) return TRUE; } -HIDDEN bool _not_empty_chkfld_val(TEdit_field& f, KEY k) +HIDDEN bool _not_empty_chkfld_val(TMask_field& f, KEY k) { bool ok = TRUE; if (f.to_check(k) && f.get().not_empty()) { - TBrowse * b = f.browse(); + TBrowse * b = ((TEdit_field&)f).browse(); if (b != NULL) ok = b->check(k == K_TAB ? RUNNING_CHECK : FINAL_CHECK); } return ok; @@ -669,7 +669,7 @@ HIDDEN VAL_FUNC _global_val_func[MAX_FUNC] = _not_empty_chkfld_val }; -bool validate(int fn, TEdit_field& f, KEY k, const TArray& parms) +bool validate(int fn, TMask_field& f, KEY k, const TArray& parms) { _parms = &parms; return (fn >= 0 && fn < MAX_FUNC) ? _global_val_func[fn](f, k) : TRUE; diff --git a/include/validate.h b/include/validate.h index 146d0c35c..48ddf8184 100755 --- a/include/validate.h +++ b/include/validate.h @@ -5,7 +5,7 @@ #include #endif -bool validate(int fn, TEdit_field& f, KEY k, const TArray& parms); +bool validate(int fn, TMask_field& f, KEY k, const TArray& parms); bool pi_check (const char * stato, const char * cf); bool cf_check (const char * stato, const char * cf);