diff --git a/include/mask.cpp b/include/mask.cpp index 3d0600fa2..bacfe8b95 100755 --- a/include/mask.cpp +++ b/include/mask.cpp @@ -1465,17 +1465,14 @@ void TMask::reset(short fld_id) if (fld_id <= 0) { const int gr = -fld_id; - for (int f = fields()-1; f >= 0; f--) + FOR_EACH_MASK_FIELD(*this, i, c) if (gr == 0 || c->in_group(gr)) { - TMask_field& c = fld(f); - if (gr == 0 || c.in_group(gr)) - { - c._flags.dirty = c._flags.focusdirty = false; - c.reset(); - } + c->reset(); + c->set_dirty(false); } } - else field(fld_id).reset(); + else + field(fld_id).reset(); } const TString& TMask::get(short fld_id) const diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 4817b7ef9..ff8492fb9 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -525,10 +525,6 @@ void TMask_field::set_dirty(byte d) if (d == false) // Non permette di annullare il dirty dei campi errati return; } -#ifdef DBG - if (d == 3) - _flags.dirty = d; // Riga per breakpoint -#endif _flags.dirty = d; set_focusdirty(d != 0); } @@ -1748,7 +1744,7 @@ void TEditable_field::set_field(const TString& fr) } else { - if (!fr.blank()) + if (fr.full()) _field = new TFieldref(fr, 0); } } diff --git a/include/msksheet.cpp b/include/msksheet.cpp index b46b8656b..0024a61e0 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -3203,7 +3203,9 @@ void TSheet_field::mask2row(int n, TToken_string & rec) void TSheet_field::row2mask(int n, TToken_string& r, int mode) { TMask& m = sheet_row_mask(n); - const int campi = m.fields(); + m.reset(); // Azzera tutti i campi, soprattutto quelli con (id > _last_column_id) + + //const int campi = m.fields(); const TSpreadsheet& s = (const TSpreadsheet&)*_ctl; TString val; for (short id = FIRST_FIELD; id <= _last_column_id; id++) @@ -3223,29 +3225,27 @@ void TSheet_field::row2mask(int n, TToken_string& r, int mode) if (mode > 0) { - for (int i = 0; i < campi; i++) + FOR_EACH_MASK_FIELD(m, i, f) { - TMask_field& f = m.fld(i); - const short id = f.dlg(); + const short id = f->dlg(); if (id >= FIRST_FIELD && - !f.is_kind_of(CLASS_BUTTON_FIELD) && !f.is_kind_of(CLASS_BUTTON_TOOL) && - (f.active() || f.ghost())) + !f->is_kind_of(CLASS_BUTTON_FIELD) && !f->is_kind_of(CLASS_BUTTON_TOOL) && + (f->active() || f->ghost())) { - if (f.has_check() && (mode & 0x1)) - f.check(STARTING_CHECK); - f.set_dirty(false); + if (f->has_check() && (mode & 0x1)) + f->check(STARTING_CHECK); + f->set_dirty(false); if (mode & 0x2) - f.on_hit(); + f->on_hit(); } } } - for (int i = 0; i < campi; i++) + FOR_EACH_MASK_FIELD(m, i, f) { - TMask_field& f = m.fld(i); - if (f.dirty() == 1) - f.set_dirty(false); + if (f->dirty() == 1) + f->set_dirty(false); } // Imposta titolo se pagina singola diff --git a/include/recarray.cpp b/include/recarray.cpp index 7eda12f46..7d8395ac9 100755 --- a/include/recarray.cpp +++ b/include/recarray.cpp @@ -961,6 +961,10 @@ const TString_array& user_and_groups() void TDB_cache::discard(int file) { - rec_cache(file).flush(); - rec_cache(file).destroy(); + TRecord_cache* rc = (TRecord_cache*)objptr(file); + if (rc != NULL) + { + rc->flush(); + rc->destroy(); + } }