diff --git a/sc/sc2100.cpp b/sc/sc2100.cpp index 2eff02d4d..7e13ffaef 100755 --- a/sc/sc2100.cpp +++ b/sc/sc2100.cpp @@ -223,8 +223,9 @@ void TEC_row::set_imp(TForm_item& fi, const real& imp, bool valuta) const else new_picture << ",@@@"; } - int exceed = fi.width() - new_picture.len(); - if (exceed<0) + const int w = fi.width(); + int exceed = w - new_picture.len(); + if (exceed<0 && w>0) { exceed=::abs(exceed); new_picture = new_picture.mid(exceed,new_picture.len()-exceed); @@ -768,23 +769,36 @@ void TEC_form::change_magic_footer(const THash_object& o, TString& s) void TEC_form::modify_picture(TForm_item& fi, TString_array& op, const bool in_valuta) { + TString pic(20); + pic = fi.picture(); + op.add(pic); + const int w = fi.width(); if (in_valuta && _in_valuta) { - TString pic(20); - pic = fi.picture(); - op.add(pic); if (pic.find(',') > 0) pic << ".###"; else pic << ",@@@"; - int exceed = fi.width() - pic.len(); - if (exceed<0) + int exceed = w - pic.len(); + if (exceed<0 && w>0) { exceed=::abs(exceed); pic = pic.mid(exceed,pic.len()-exceed); } - fi.set_picture(pic); } + // oltre a cio' deve correggere la picture, in modo che tutti gli importi del + // footer risultino incolonnati correttamente. + // (nel body cio' e' fatto in TForm_number::put_paragraph()) + const int l = pic.len(); + if (w>l) + { + int gap = w-l; + TString stmp(gap); // cosi' mette gli spazi necessari davanti alla picture + stmp.fill(' '); // in modo da colmare il vuoto + pic.insert(stmp); + } + + fi.set_picture(pic); } void TEC_form::print_total(int riga, const THash_object& o) @@ -820,16 +834,18 @@ void TEC_form::print_total(int riga, const THash_object& o) TForm_item& avere = foot.find_field(PEC_AVERE); TString_array old_pictures;//pictures da rippristinare dopo aver stampato - modify_picture(dare,old_pictures,in_valuta); - modify_picture(avere,old_pictures,in_valuta); if (dare.x() <= 0 || avere.x() <= 0) { TForm_item& bdare = body.find_field(PEC_DARE); dare.set_x(bdare.x()); + dare.width() = bdare.width(); TForm_item& bavere = body.find_field(PEC_AVERE); avere.set_x(bavere.x()); + avere.width() = bavere.width(); } + modify_picture(dare,old_pictures,in_valuta); + modify_picture(avere,old_pictures,in_valuta); char sez = imp.sezione(); real num = imp.valore(); @@ -853,21 +869,23 @@ void TEC_form::print_total(int riga, const THash_object& o) } TForm_item& scaduto = foot.find_field(PEC_SCADUTO); - modify_picture(scaduto,old_pictures,in_valuta); if (scaduto.x() <= 0) { TForm_item& bscaduto = body.find_field(PEC_SCADUTO); scaduto.set_x(bscaduto.x()); + scaduto.width() = bscaduto.width(); } + modify_picture(scaduto,old_pictures,in_valuta); scaduto.set(t.scaduto().string()); TForm_item& esposto = foot.find_field(PEC_ESPOSTO); - modify_picture(esposto,old_pictures,in_valuta); if (esposto.x() <= 0) { TForm_item& besposto = body.find_field(PEC_ESPOSTO); esposto.set_x(besposto.x()); + esposto.width() = besposto.width(); } + modify_picture(esposto,old_pictures,in_valuta); esposto.set(t.esposto().string()); TForm_item& implire = foot.find_field(PEC_IMPLIRE); @@ -875,7 +893,9 @@ void TEC_form::print_total(int riga, const THash_object& o) { TForm_item& bimplire = body.find_field(PEC_IMPLIRE); implire.set_x(bimplire.x()); + esposto.width() = bimplire.width(); } + modify_picture(implire,old_pictures,FALSE); implire.set(t.importo_lire().string()); foot.update(); @@ -891,12 +911,13 @@ void TEC_form::print_total(int riga, const THash_object& o) } } - if (in_valuta)//restore old pictures + if (old_pictures.items() > 0)//restore old pictures { dare.set_picture(old_pictures.row(0)); avere.set_picture(old_pictures.row(1)); scaduto.set_picture(old_pictures.row(2)); esposto.set_picture(old_pictures.row(3)); + implire.set_picture(old_pictures.row(4)); } for (word r = 0; r < _total_rows; r++) printer().setfooterline(riga + r, foot.row(r)); diff --git a/sc/sc2401.cpp b/sc/sc2401.cpp index 3f3d377dc..5d06f35e9 100755 --- a/sc/sc2401.cpp +++ b/sc/sc2401.cpp @@ -129,8 +129,9 @@ void TESSL_row::set_imp(TForm_item& fi, const real& imp, bool valuta) const else new_picture << ",@@@"; } - int exceed = fi.width() - new_picture.len(); - if (exceed<0) + const int w = fi.width(); + int exceed = w - new_picture.len(); + if (exceed<0 && w>0) { exceed=::abs(exceed); new_picture = new_picture.mid(exceed,new_picture.len()-exceed); @@ -653,23 +654,36 @@ void TESSL_form::change_magic_footer(const THash_object& o, TString& s) void TESSL_form::modify_picture(TForm_item& fi, TString_array& op, const bool in_valuta) { + TString pic(20); + pic = fi.picture(); + op.add(pic); + const int w = fi.width(); if (in_valuta && _in_valuta) { - TString pic(20); - pic = fi.picture(); - op.add(pic); if (pic.find(',') > 0) pic << ".###"; else pic << ",@@@"; - int exceed = fi.width() - pic.len(); - if (exceed<0) + int exceed = w - pic.len(); + if (exceed<0 && w>0) { exceed=::abs(exceed); pic = pic.mid(exceed,pic.len()-exceed); } - fi.set_picture(pic); } + // oltre a cio' deve correggere la picture, in modo che tutti gli importi del + // footer risultino incolonnati correttamente. + // (nel body cio' e' fatto in TForm_number::put_paragraph()) + const int l = pic.len(); + if (w>l) + { + int gap = w-l; + TString stmp(gap); // cosi' mette gli spazi necessari davanti alla picture + stmp.fill(' '); // in modo da colmare il vuoto + pic.insert(stmp); + } + + fi.set_picture(pic); } void TESSL_form::print_total(int riga, const THash_object& o) @@ -705,16 +719,18 @@ void TESSL_form::print_total(int riga, const THash_object& o) TForm_item& avere = foot.find_field(PEC_AVERE); TString_array old_pictures;//pictures da rippristinare dopo aver stampato - modify_picture(dare,old_pictures,in_valuta); - modify_picture(avere,old_pictures,in_valuta); if (dare.x() <= 0 || avere.x() <= 0) { TForm_item& bdare = body.find_field(PEC_DARE); dare.set_x(bdare.x()); + dare.width() = bdare.width(); TForm_item& bavere = body.find_field(PEC_AVERE); avere.set_x(bavere.x()); + avere.width() = bavere.width(); } + modify_picture(dare,old_pictures,in_valuta); + modify_picture(avere,old_pictures,in_valuta); char sez = imp.sezione(); real num = imp.valore(); if (sez=='D' && num<0) @@ -737,21 +753,23 @@ void TESSL_form::print_total(int riga, const THash_object& o) } TForm_item& scaduto = foot.find_field(PEC_SCADUTO); - modify_picture(scaduto,old_pictures,in_valuta); if (scaduto.x() <= 0) { TForm_item& bscaduto = body.find_field(PEC_SCADUTO); scaduto.set_x(bscaduto.x()); + scaduto.width() = bscaduto.width(); } + modify_picture(scaduto,old_pictures,in_valuta); scaduto.set(t.scaduto().string()); TForm_item& esposto = foot.find_field(PEC_ESPOSTO); - modify_picture(esposto,old_pictures,in_valuta); if (esposto.x() <= 0) { TForm_item& besposto = body.find_field(PEC_ESPOSTO); esposto.set_x(besposto.x()); + esposto.width() = besposto.width(); } + modify_picture(esposto,old_pictures,in_valuta); esposto.set(t.esposto().string()); TForm_item& implire = foot.find_field(PEC_IMPLIRE); @@ -759,16 +777,19 @@ void TESSL_form::print_total(int riga, const THash_object& o) { TForm_item& bimplire = body.find_field(PEC_IMPLIRE); implire.set_x(bimplire.x()); + implire.width() = bimplire.width(); } + modify_picture(implire,old_pictures,FALSE); implire.set(t.importo_lire().string()); TForm_item& unreferenced = foot.find_field(PEC_UNASSIGNED); - modify_picture(unreferenced,old_pictures,in_valuta); if (unreferenced.x() <= 0) { TForm_item& uns = body.find_field(PEC_AVERE); unreferenced.set_x(uns.x()); + unreferenced.width() = avere.width(); } + modify_picture(unreferenced,old_pictures,in_valuta); unreferenced.set(t.unassigned().valore().string()); foot.update(); @@ -783,13 +804,14 @@ void TESSL_form::print_total(int riga, const THash_object& o) desc_field.set_prompt(*p); } } - if (in_valuta)//restore old pictures + if (old_pictures.items() > 0)//restore old pictures { dare.set_picture(old_pictures.row(0)); avere.set_picture(old_pictures.row(1)); scaduto.set_picture(old_pictures.row(2)); esposto.set_picture(old_pictures.row(3)); - unreferenced.set_picture(old_pictures.row(4)); + implire.set_picture(old_pictures.row(4)); + unreferenced.set_picture(old_pictures.row(5)); } for (word r = 0; r < _total_rows; r++) printer().setfooterline(riga + r, foot.row(r));