diff --git a/src/include/sheet.cpp b/src/include/sheet.cpp index a5b83e000..835f1f67b 100755 --- a/src/include/sheet.cpp +++ b/src/include/sheet.cpp @@ -15,6 +15,9 @@ #include #include +#define DAFILTRO "DA_" +#define AFILTRO "A_" + /////////////////////////////////////////////////////////// // TSheet_control /////////////////////////////////////////////////////////// @@ -1671,40 +1674,51 @@ bool TCursor_sheet::filter_dialog() TMask m(TR("Filtro"), 1, 78, kfields+5); m.add_button_tool(DLG_OK, "", TOOL_OK); m.add_button_tool(DLG_CANCEL, "", TOOL_CANCEL); - for (int i = 0; i < kfields; i++) - { - const int nf = k0.FieldSeq[i] % MaxFields; - const char* fname = rec.fieldname(nf); - const TFieldtypes ft = rec.type(fname); - TString16 prompt = fname; prompt.left_just(12); - TString4 flags; - switch (ft) - { - case _alfafld: - case _charfld: - m.add_string(101+i, 0, prompt, 1, i+1, rec.length(fname), flags).set_field(fname); - break; - case _intzerofld: - case _longzerofld: - flags << "Z"; - case _wordfld: - case _intfld: - case _longfld: - m.add_number(101+i, 0, prompt, 1, i+1, rec.length(fname), flags).set_field(fname); - break; - case _datefld: - m.add_date(101+i, 0, prompt, 1, i+1, flags).set_field(fname); - break; - default: - break; - } - } + int max_len = 0; + for (int j = 0; j < 2; j++) + { + for (int i = 0; i < kfields; i++) + { + const int nf = k0.FieldSeq[i] % MaxFields; + const char* fname = rec.fieldname(nf); + const TFieldtypes ft = rec.type(fname); + TString16 prompt = fname; prompt.left_just(12); + TString4 flags; + TString ffname = get_tmp_string() << (j ? AFILTRO : DAFILTRO) << fname; + switch (ft) + { + case _alfafld: + case _charfld: + m.add_string(101 + i + j * 20, 0, prompt, 1 + (j * max_len), i + 1, rec.length(fname), flags).set_field(ffname); + break; + case _intzerofld: + case _longzerofld: + flags << "Z"; + case _wordfld: + case _intfld: + case _longfld: + m.add_number(101 + i + j * 20, 0, prompt, 1 + (j * max_len), i + 1, rec.length(fname), flags).set_field(ffname); + break; + case _datefld: + m.add_date(101 + i + j * 20, 0, prompt, 1 + (j * max_len), i + 1, flags).set_field(ffname); + break; + default: + break; + } + max_len = max_len < rec.length(fname) + strlen(prompt) ? rec.length(fname) + strlen(prompt) : max_len; + } + max_len += 10; + } for (int i = 0; i < kfields-1; i++) { const int nf = k0.FieldSeq[i] % MaxFields; - const char* fname = rec.fieldname(nf); - TMask_field* f = m.find_by_fieldname(fname); + const char * fname = rec.fieldname(nf); + TString ffname = DAFILTRO; ffname << fname; + TMask_field* f = &m.field(101 + i); + // Non dovrebbe succedere ma lascio il codice vecchio in caso di errori + if(f == NULL) + f = m.find_by_fieldname(ffname); if (f) f->set(rec.get(fname)); } @@ -1712,17 +1726,26 @@ bool TCursor_sheet::filter_dialog() if (m.run() == K_ENTER) { rec.zero(); - for (int i = 0; i < kfields; i++) - { - const int nf = k0.FieldSeq[i] % MaxFields; - const char* fname = rec.fieldname(nf); - const TMask_field* f = m.find_by_fieldname(fname); - if (f) rec.put(fname, f->get()); - } + TRectype torec = _cursor->curr(); + torec.zero(); + TRectype* prec = &rec; + + for (int j = 0; j < 2; j++) + { + for (int i = 0; i < kfields; i++) + { + const int nf = k0.FieldSeq[i] % MaxFields; + const char* fname = rec.fieldname(nf); + TString ffname = (j ? AFILTRO : DAFILTRO); ffname << fname; + const TMask_field* f = m.find_by_fieldname(ffname); + if (f) prec->put(fname, f->get()); + } + prec = &torec; + } TWait_cursor hourglass; _cursor->freeze(false); - _cursor->setregion(rec, rec); + _cursor->setregion(rec, torec); _cursor->items(); _cursor->freeze(true); force_update(); diff --git a/src/include/strings.cpp b/src/include/strings.cpp index 05d155842..d15c4fda7 100755 --- a/src/include/strings.cpp +++ b/src/include/strings.cpp @@ -1013,6 +1013,14 @@ TString& TString::insert( strcpy_s(&_str[pos+l], _size-(pos+l)+1, spark); // Aggiungi spark } return *this; +} + +TString & TString::add_front(const char * s) +{ + const int l = strlen(s); + lpad(len() + l); + overwrite(s); + return *this; } // Certified 90% diff --git a/src/include/strings.h b/src/include/strings.h index 0823624e6..c91b72d07 100755 --- a/src/include/strings.h +++ b/src/include/strings.h @@ -153,6 +153,8 @@ public: TString& overwrite(const char* s, int pos = 0, int len = 0); // @cmember Inserisce la stringa s dalla posizione pos TString& insert(const char* s, int pos = 0); + // @cmember Aggiunge la stringa passata davanti + TString& add_front(const char* s); // @cmember Elimina tutti i caratteri contenuti in k TString& strip(const char* k);