diff --git a/include/msksheet.cpp b/include/msksheet.cpp index d93096459..a233e3179 100755 --- a/include/msksheet.cpp +++ b/include/msksheet.cpp @@ -385,7 +385,8 @@ void TSpreadsheet::update_rec(int rec) XI_OBJ row; XI_MAKE_ROW(&row, _list, riga); xi_cell_request(&row); // Update internal values - xi_set_row_height(&row, CHARY+1); // Force row updating + if (_update) + xi_set_row_height(&row, CHARY+1); // Force row updating } } @@ -568,7 +569,6 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) else { src = format("%d", rec+1); - xiev->v.cell_request.color = COLOR_RED; } char* dst = xiev->v.cell_request.s; @@ -681,13 +681,13 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) if (_row_dirty && _check_enabled) { _check_enabled = FALSE; // Avoid recursion! - str2mask(_cur_rec); // It shouldn't have to be necessary + // str2mask(_cur_rec); // It shouldn't have to be necessary bool ok = sheet_mask().check_fields(); if (ok) { const int next = _cur_rec + (_lastab == K_TAB ? +1 : -1); _update = rec2row(next) >= 0; // Disable update if next record is not visible - mask2str(_cur_rec); // Update sheet for with mask contents + mask2str(_cur_rec); // Update sheet with mask contents ok = notify(_cur_rec, K_ENTER); // Notify edit _update = TRUE; // Reenable update } @@ -722,7 +722,7 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) _check_enabled = FALSE; if (_cell_dirty) { - TMask_field* c = _edit_field; // Save field, it could turn out to be NULL on error + TMask_field* c = _edit_field; // Save field, it could turn out to be NULL on error const char* nuo = c->picture_data(xi_get_text(xiev->v.xi_obj, NULL, -1), TRUE); c->set(nuo); // Set new mask value c->set_dirty(); // Get it dirty! @@ -792,24 +792,18 @@ void TSpreadsheet::list_handler(XI_EVENT *xiev) { _check_enabled = FALSE; // Disable checks notify_change(); - if (_edit_field->on_key(k)) + if (_edit_field->on_key(k) == FALSE && k == K_F9) { - mask2str(_cur_rec); - } - else - { - if (k == K_F9) + _edit_field = &_mask.fld(_mask.focus_field()); + const short foca = _edit_field->dlg(); + const int col = (foca - FIRST_FIELD) % 100 +1; + if (col > 0 && col != _cur_col) { - _edit_field = &_mask.fld(_mask.focus_field()); - const short foca = _edit_field->dlg(); - const int col = (foca - FIRST_FIELD) % 100 +1; - if (col > 0 && col != _cur_col) - { - _cur_col = col; - dispatch_e_char(win(), K_F9); - } + _cur_col = col; + dispatch_e_char(win(), K_F9); } } + mask2str(_cur_rec); set_focus_cell(_cur_row, _cur_col); _check_enabled = TRUE; // Enable checks } @@ -1123,42 +1117,50 @@ void TSpreadsheet::str2mask(int riga) mask2str(riga); return; } + TToken_string& r = row(riga); - r.restart(); + TString val(80); - TString val(80); - for (short id = FIRST_FIELD; ; id++) + for (int i = 0; i < sheet_mask().fields(); i++) { - int pos = sheet_mask().id2pos(id); - if (pos < 0) break; - - val = r.get(); // Value to set - - int rid = id; - while (pos >= 0) + TMask_field& f = sheet_mask().fld(i); + const short id = f.dlg(); + if (id >= FIRST_FIELD) { - TMask_field& f = sheet_mask().fld(pos); - f.set(val); - const bool on = active() ? !cell_disabled(riga, id-FIRST_FIELD) : FALSE; - f.enable(on); - - if (f.dirty() <= TRUE) - { - if (f.active() || f.ghost()) - { - if (f.has_check()) f.check(STARTING_CHECK); - f.set_dirty(FALSE); - f.on_hit(); - } - f.set_dirty(FALSE); + const char* v = r.get((id % 100)-1); + if (v) + { + val = v; // Save the value, f.set(v) could use TString methods + f.set(val); + const bool on = active() ? !cell_disabled(riga, id-FIRST_FIELD) : FALSE; + f.enable(on); } - else - sheet_mask().first_focus(-rid); - - rid += 100; - pos = sheet_mask().id2pos(rid); } } + + for (i = 0; i < sheet_mask().fields(); i++) + { + TMask_field& f = sheet_mask().fld(i); + const short id = f.dlg(); + if (id >= FIRST_FIELD && (f.active() || f.ghost())) + { + if (f.has_check()) + f.check(STARTING_CHECK); + f.set_dirty(FALSE); + f.on_hit(); + } + } + + for (i = 0; i < sheet_mask().fields(); i++) + { + TMask_field& f = sheet_mask().fld(i); + const short id = f.dlg(); + if (id > FIRST_FIELD) + { + if (f.dirty() == TRUE) + f.set_dirty(FALSE); + } + } sheet_mask().set_caption(format("Riga %d", riga+1)); } @@ -1187,7 +1189,9 @@ KEY TSpreadsheet::edit(int n, KEY tasto) if (k == K_ENTER) { +#if XVT_OS != XVT_OS_WIN mask2str(n); +#endif } else if (k == K_DEL) {