diff --git a/ba/ba1100.h b/ba/ba1100.h index a0bdd6309..1c5aa520a 100755 --- a/ba/ba1100.h +++ b/ba/ba1100.h @@ -59,6 +59,7 @@ protected: static bool key_notify(TSheet_field& s, int r, KEY k); static bool fld_notify(TSheet_field& s, int r, KEY k); void save(); + void save_desc(); virtual long get_items() const { return _rec->fields(); } diff --git a/ba/ba1101.cpp b/ba/ba1101.cpp index e723fe5b7..049f3cd13 100755 --- a/ba/ba1101.cpp +++ b/ba/ba1101.cpp @@ -177,13 +177,8 @@ bool TRec_sheet::key_notify(TSheet_field& f, int r, KEY k) return TRUE; } -void TRec_sheet::save() - +void TRec_sheet::save_desc() { - if ((*_rec == *_rec_old && !_descr) || - !yesnocancel_box("Salvare le modifiche")) return; - TSystemisamfile f(_rec->num()); - if (_descr) { TSheet_field& f1 = (TSheet_field&) _mask->field(F_FIELDS); @@ -195,6 +190,15 @@ void TRec_sheet::save() delete _descr; _descr = new TConfig(_descfname, DESCPAR); } +} + +void TRec_sheet::save() + +{ + if ((*_rec == *_rec_old && !_descr) || + !yesnocancel_box("Salvare le modifiche")) return; + TSystemisamfile f(_rec->num()); + save_desc(); f.update(*_rec); *_rec_old = *_rec; } @@ -203,6 +207,7 @@ void TRec_sheet::save() void TRec_sheet::edit() { + bool import_dirty = FALSE; TSheet_field& f1 = (TSheet_field&) _mask->field(F_FIELDS); TSheet_field& f2 = (TSheet_field&) _mask->field(F_KEYS); @@ -246,6 +251,7 @@ void TRec_sheet::edit() f2.disable_cell(0, 1); while (TRUE) { + f1.force_update(0); // Non togliere, serve per fare l'update della descrizione quando si fa l'import!! switch (_mask->run()) { case K_SAVE: @@ -271,8 +277,22 @@ void TRec_sheet::edit() _rec->update_keydef(i, s); } save(); + return; } case K_ESC: + if (_descr && (_mask->dirty() || import_dirty)) + { + // Se viene premuto Annulla NON deve salvare le descrizioni! Altrimenti che annulla e'? + // Salva il vecchio file di descrizione con un altro nome... + if (!import_dirty) + fcopy(_descfname,"des.xxx"); + // libera _descr (scrivendo il file) + delete _descr; + _descr = NULL; + // Ripristina il vecchio file e rimuove il file temporaneo + fcopy("des.xxx",_descfname); + } + remove("des.xxx"); return; case K_ENTER: dispatch_e_menu(TASK_WIN, M_FILE_PRINT); @@ -281,7 +301,7 @@ void TRec_sheet::edit() { TMask m("ba1100f"); TFilename nout(_dir->name()); - + nout.strip("$%"); nout.ext("trr"); m.set(F_NOMEF, nout); @@ -290,8 +310,11 @@ void TRec_sheet::edit() const TFilename nf(m.get(F_NOMEF)); if (nf.not_empty()) { + save_desc(); + _rec->set_des(_descr,_tab.upper()); ofstream out(nf); out << *_rec; + _rec->set_des(); } } } @@ -309,12 +332,15 @@ void TRec_sheet::edit() const TFilename nf(m.get(F_NOMEF)); if (nf.not_empty()) { + import_dirty = TRUE; + _rec->set_des(_descr,_tab.upper()); ifstream in(nf); in >> *_rec; - nfields = _rec->fields(); - f1.reset(); + nfields = _rec->fields(); + fcopy(_descfname,"des.xxx"); // salva il vecchio file di descrizioni + f1.destroy(-1); for (int i = 0; i < nfields; i++) - { + { f1.row(i) = _rec->fielddef(i); if (_descr) f1.row(i).add(_descr->get(_rec->rec()->Fd[i].Name)); @@ -338,7 +364,7 @@ void TRec_sheet::edit() default: break; } - } + } nkeys = _rec->keys(); f2.reset(); for (i = 0; i < nkeys; i++) f2.row(i) = _rec->keydef(i);