diff --git a/include/maskfld.cpp b/include/maskfld.cpp index f2f38d504..c78636849 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -102,7 +102,7 @@ char TMask_field::TField_Flags::update(const char* f) case 'Z': zerofilled = TRUE; break; default : - CHECKS(0, "FLAG sconosciuto in ", f); + CHECKS(*s == 'B', "FLAG sconosciuto in ", f); break; } return *s; @@ -848,7 +848,7 @@ bool TOperable_field::do_message(int num) case 0: modify_list(TRUE, mask().field(fld), msg); continue; case 1: - mask().disable(fld); + mask().disable(fld); mask().reset(fld); continue; case 2: @@ -1214,14 +1214,32 @@ word TEditable_field::last_key() const return (word)u; } -// Certified 90% +// Certified 70% word TEditable_field::first_key() const { - long u = _keys ? _keys->first_one() : 0; - if (u < 0) u = 0; - return (word)u; + if (_keys == NULL) + return 0; + const int last = last_key(); + for (long i = 1; i <= last; i++) + if ((*_keys)[i] == TRUE) + break; + return (word)i; } +// Certified 70% +bool TEditable_field::has_a_common_key(const TEditable_field & e) const + +{ + if (_keys != NULL && e._keys != NULL) + { + const int last = last_key(); + for (long i = 1; i <= last; i++) + if ((*_keys)[i] == TRUE && (*e._keys)[i] == TRUE) + return TRUE; + } + return FALSE; +} + bool TEditable_field::test_key_complete(bool normal) const { TMask& m = mask(); @@ -1357,6 +1375,8 @@ void TEditable_field::set(const char* data) _str = reformat(data); const TString& val = raw2win(_str); set_window_data(val); + if (mask().is_running()) + set_dirty(); } // Certified 100% @@ -3567,10 +3587,18 @@ int TList_field::str2curr(const char* data) } +void TList_field::reset() +{ + if (!_flags.persistent) + current(0); +} + void TList_field::set(const char* data) { const int i = str2curr(data); current(i); + if (mask().is_running()) + set_dirty(); } void TList_field::set_window_data(const char* data) @@ -3653,7 +3681,6 @@ word TRadio_field::class_id() const return CLASS_RADIO_FIELD; } - void TRadio_field::create(WINDOW parent) { const int items = _codes.items(); @@ -3667,7 +3694,7 @@ void TRadio_field::create(WINDOW parent) _ctl_data._x + 1, _ctl_data._y + 1, _ctl_data._width - 2, _flags.zerofilled ? 1 : items, _ctl_data._flags, _values); - reset(); + current(0); } @@ -3681,6 +3708,7 @@ int TRadio_field::current() const void TRadio_field::current(int n) { ((TRadiobutton_control*)_ctl)->check_button(n); + _str = _codes.get(n); } diff --git a/include/maskfld.h b/include/maskfld.h index 62bba1322..073c976ee 100755 --- a/include/maskfld.h +++ b/include/maskfld.h @@ -569,7 +569,9 @@ public: word last_key() const; // @cmember Ritorna l'ultima chiave di appartenenza del campo word first_key() const; - + // @cmember Verifica che il campo abbia almeno una chiave in con il campo

+ bool has_a_common_key(const TEditable_field & e) const; + // @cmember Ritorna il nome del campo corrsipondente sul file virtual const TFieldref* field() const { return _field; } @@ -1196,6 +1198,9 @@ public: // @cmember Seleziona il precedente se possibile (no wrap) void select_prev() { select_by_ofs(-1); } + + // @cmember Azzera il contenuto del campo + virtual void reset(); // @cmember Costruttore TList_field(TMask* mask);