From 1ceeb20a331f212ad060237fa924c3d66b2c528c Mon Sep 17 00:00:00 2001 From: angelo Date: Sat, 13 Jan 1996 10:44:36 +0000 Subject: [PATCH] Sostituito membro _section_mask con metodo section_mask() virtuale. Spostata in protected la exist(); aggiunti metodi pre_edit_checks() e post_edit_checks() per effettuare controlli non standard sull'editing di sezione. Rimossi metodi remove_temp_items(), put_examples() e remove_examples(). Aggiunto membro _ofsvr in TPrint_section per l'offset verticale intestazione colonna. Rimossa la find_first_col(). Corretta visualizzazione esempi data, rimossa la gestione degli specials di default, corretta la gestione della prima colonna COLUMNWISE; corretto metodo TForm_item::x() per COLUMNWISE (ora ritorna la coordinata x + l'ooffset prima colonna); aggiunta la gestione della larghezza campo anche in sezioni non COLUMNWISE. Corretta la visualizzazione delle stringhe di esempio. Corretta la gestione dello sheet di selezione ed edit dei form_items. Ristrutturata la TPrint_section::edit() per effettuare controlli non standard. git-svn-id: svn://10.65.10.50/trunk@2446 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/form.cpp | 432 +++++++++++++++++++---------------------------- include/form.h | 18 +- 2 files changed, 186 insertions(+), 264 deletions(-) diff --git a/include/form.cpp b/include/form.cpp index e71f106f5..4eadd9a13 100755 --- a/include/form.cpp +++ b/include/form.cpp @@ -19,15 +19,14 @@ #endif #include "../ba/bafrm.h" -#include "../sc/sc21pec.h" // per lo sheet di edit campi HIDDEN const int idt_id = 101; HIDDEN const int dsc_id = 102; HIDDEN const int prn_id = 103; HIDDEN const int yps_id = 104; -HIDDEN const int len_id = 105; -HIDDEN const int xps_id = 106; +HIDDEN const int xps_id = 105; +HIDDEN const int len_id = 106; HIDDEN const int col_id = 107; HIDDEN const int int_id = 108; HIDDEN const int spc_id = 109; @@ -207,7 +206,8 @@ HIDDEN bool dateformat_handler(TMask_field& f, KEY k) fmt[4] = m.get(F_DSEP)[0]; fmt[5] = '\0'; - const TFormatted_date ex(TODAY, 0, 0, fmt); + const TDate d(TODAY); + const TFormatted_date ex(d,fmt); m.set(F_DEXAMPLE, ex.string()); } return TRUE; @@ -454,24 +454,6 @@ bool TForm_item::parse(TScanner& scanner) while (ok && scanner.popkey() != "EN") ok = parse_item(scanner); - - if (section().columnwise()) - { - // look for compulsory SPECIALs and fick them in its cul if absent - if (!_special.is_key("XHEAD")) - _special.add("XHEAD",new TToken_string("NUMERO|0|Spostamento orizzontale intestazione in colonna/2/0")); - if (!_special.is_key("YHEAD")) - _special.add("YHEAD",new TToken_string("NUMERO|-1|Spostamento verticale intestazione in testata /2/0")); - if (!_special.is_key("DHEAD")) - { - TToken_string* tt = new TToken_string(128); - TString k(key()); - tt->add("STRINGA"); - tt->add(k); - tt->add("Intestazione colonna corrispondente/40"); - _special.add("DHEAD",tt); - } - } return ok; } @@ -605,7 +587,7 @@ void TForm_item::string_at(int x, int y, const char* s) { if (shown()) { - if (section().columnwise()) x += _ofs + _section->ofspc(); + if (section().columnwise()) x += _ofs; TPrintrow& row = section().row(y-1); // Seleziona riga di stampa if (_width > 0 && strlen(s) > (word)_width) // Tronca testo se necessario @@ -776,9 +758,8 @@ void TForm_item::print_on_sheet_row(TToken_string& tt) const tt.add(_id, idt_id - 101); tt.add(_desc, dsc_id - 101); tt.add(_x, _section->columnwise() ? col_id - 101 : xps_id - 101); - if (_section->columnwise()) - tt.add(_width, len_id - 101); - else + tt.add(_width, len_id - 101); + if (!_section->columnwise()) tt.add(_y, yps_id - 101); tt.add(class_name(), typ_id - 101); tt.add(shown() ? " " : "X", prn_id - 101); @@ -838,15 +819,14 @@ void TForm_item::read_from(TToken_string& s) _id = s.get_int(idt_id - 101); _desc = s.get(dsc_id - 101); _x = _section->columnwise() ? s.get_int(col_id - 101) : s.get_int(xps_id - 101); - if (_section->columnwise()) - _width = s.get_int(len_id - 101); - else + _width = s.get_int(len_id - 101); + if (!_section->columnwise()) _y = s.get_int(yps_id - 101); - _ofs = s.get_int(spc_id - 101); _flag.set_shown(s.get(prn_id - 101)[0] != 'X'); if (_section->columnwise()) { + _ofs = s.get_int(spc_id - 101); _flag.set_finkl(s.get(fnl_id - 101)[0] != 'X'); _flag.set_finkr(s.get(fnr_id - 101)[0] != 'X'); _col_head = s.get(int_id - 101); @@ -878,7 +858,6 @@ bool TForm_item::edit(TMask& m) m.enable(F_ID, godmode); m.enable(F_KEY,godmode); m.enable(F_Y,!_section->columnwise()); - m.enable(F_WIDTH,_section->columnwise()); m.enable(F_INTEST,_section->columnwise()); if (_flag.memo) { @@ -886,8 +865,6 @@ bool TForm_item::edit(TMask& m) m.hide(F_PROMPT); m.enable(F_MEMO); m.show(F_MEMO); - m.enable(F_WIDTH); - m.show(F_WIDTH); m.enable(F_HEIGHT); m.show(F_HEIGHT); } @@ -926,7 +903,7 @@ short TForm_item::x() { if (_section == NULL || !_section->columnwise()) return _x; - return _section->tab(_x-1); + return _section->tab(_x-1) + _section->ofspc(); } /////////////////////////////////////////////////////////// @@ -1394,8 +1371,10 @@ bool TForm_string::update() const char* TForm_string::example() const { - TString prova("Stringa esempio"); + TString prova("XXXXXXXXXXXXXXXXXXXXXXXXXX"); apply_format(prova, picture()); + const int w = width(); + if (prova.size() > w && w > 0) prova.cut(w); return strcpy(__tmp_string, prova); } @@ -1995,7 +1974,7 @@ TMask* TPrint_section::_msk = NULL; TPrint_section::TPrint_section(TForm* f, char st, pagetype pt, bool sub) : _height(0), _form(f), _sec_type(st), _page_type(pt), _dirty(FALSE), - _subsection(sub), _repeat_count(0), _ofspc(0), _nfld(0), _temp(0), + _subsection(sub), _repeat_count(0), _ofspc(0), _ofsvr(0), _nfld(0), _temp(0), _columnwise(FALSE) { reset_tabs(); @@ -2058,7 +2037,7 @@ int TPrint_section::tab(int col) { // compute column offset _nfld = 0; - _tab[0] = 1; + _tab[0] = 2; short maxcolreached = 0; for (word i = 0; i < fields(); i++) { @@ -2088,23 +2067,6 @@ int TPrint_section::tab(int col) return ret; } -int TPrint_section::find_first_col() -{ - int col = MAXCOLUMNS; - int id = -1; - const int items = fields(); - for (int i = 0; i= 0) @@ -2197,6 +2159,7 @@ bool TPrint_section::read_from(const TRectype& prof) bool changed = FALSE; const word h = (word)prof.get_int("HGT"); const word l = (word)prof.get_int("LEN"); + const word y = (word)prof.get_int("Y"); if (_height != h) { _height = h; @@ -2207,6 +2170,11 @@ bool TPrint_section::read_from(const TRectype& prof) _ofspc = l; changed = TRUE; } + if (_ofsvr != y) + { + _ofsvr = y; + changed = TRUE; + } return changed; } @@ -2215,7 +2183,7 @@ void TPrint_section::print_on(TRectype& prof) CHECK(prof.num() == LF_RFORM, "Il record deve essere del file LF_RFORM"); prof.put("ID", 0); prof.put("X", 0); - prof.put("Y", 0); + prof.put("Y", _ofsvr); prof.put("LEN", _ofspc); prof.put("HGT", _height); } @@ -2258,11 +2226,38 @@ bool TPrint_section::detail_field_handler(TMask_field& f, KEY k) { if (k == K_SPACE) { + bool consider_sheet_mask = FALSE; + if (f.mask().is_running()) // Se la maschera di editing dello sheet e' running + consider_sheet_mask = TRUE; // allora deve tener conto anche di essa per l'I/O + // to avoid kasinations with recursion TPrint_section& section = ::section(); - TSheet_field& ms = *f.mask().get_sheet(); + TSheet_field& ms = *f.mask().get_sheet(); int field = ms.selected(); TToken_string& tt = ms.row(field); + TToken_string tt_mask(tt); + if (consider_sheet_mask) + { + TMask& msheet = f.mask(); + tt_mask.add(msheet.get(idt_id), idt_id - 101); + tt_mask.add(msheet.get(dsc_id), dsc_id - 101); + tt_mask.add(msheet.get(len_id), len_id - 101); + tt_mask.add(msheet.get(prn_id), prn_id - 101); + + if (section.columnwise()) + { + tt_mask.add(msheet.get(col_id), col_id - 101); + tt_mask.add(msheet.get(spc_id), spc_id -101); + tt_mask.add(msheet.get(int_id), int_id - 101); + tt_mask.add(msheet.get(fnl_id), fnl_id -101); + tt_mask.add(msheet.get(fnr_id), fnr_id -101); + } + else + { + tt_mask.add(msheet.get(xps_id), xps_id - 101); + tt_mask.add(msheet.get(yps_id), yps_id - 101); + } + } TMask msk("ba2100f"); @@ -2351,8 +2346,11 @@ bool TPrint_section::detail_field_handler(TMask_field& f, KEY k) _special_mask->set(101+k, val); } } - } - + } + if (consider_sheet_mask) + fi.read_from(tt_mask); + else + fi.read_from(tt); fi.edit(msk); // check specials @@ -2384,8 +2382,32 @@ bool TPrint_section::detail_field_handler(TMask_field& f, KEY k) } } - // reset stominchione - fi.print_on_sheet_row(tt); + if (!consider_sheet_mask) + fi.print_on_sheet_row(tt); + else + { + TMask& msheet = f.mask(); + fi.print_on_sheet_row(tt_mask); + msheet.set(idt_id, tt_mask.get_int(idt_id - 101)); + msheet.set(dsc_id, tt_mask.get(dsc_id - 101)); + msheet.set(len_id, tt_mask.get_int(len_id - 101)); + msheet.set(prn_id, tt_mask.get(prn_id - 101)); + msheet.set(frm_id, fi.example()); + + if (section.columnwise()) + { + msheet.set(spc_id, tt_mask.get_int(spc_id - 101)); + msheet.set(col_id, tt_mask.get_int(col_id - 101)); + msheet.set(int_id, tt_mask.get(int_id - 101)); + msheet.set(fnl_id, tt_mask.get(fnl_id - 101)); + msheet.set(fnr_id, tt_mask.get(fnr_id - 101)); + } + else + { + msheet.set(xps_id, tt_mask.get_int(xps_id - 101)); + msheet.set(yps_id, tt_mask.get_int(yps_id - 101)); + } + } ms.force_update(); @@ -2478,8 +2500,8 @@ bool TPrint_section::detail_field_notify (TSheet_field& s, int r, KEY k) bool TPrint_section::edit(const char* title) { - const bool is_ba_editor = _form->section_mask() == "ba"; - bool des_dirty = FALSE; + const bool is_ba_editor = TString(_form->section_mask()).left(2) == "ba"; + bool nstd_dirty = FALSE; _cur_form = _form; _cur_sect = this; @@ -2488,39 +2510,26 @@ bool TPrint_section::edit(const char* title) TMask m(_form->section_mask()); m.set_caption(title); m.set(F_HEIGHT, _height); - m.set(F_X, form().offset_x()); - m.set(F_Y, form().offset_y()); - m.set(F_CTP, format("%c",form().char_to_pos())); - m.set(F_IPX, form().ipx()); - m.set(F_IPY, form().ipy()); - m.set(F_FPX, form().fpx()); - m.set(F_FLEN, printer().formlen()); m.set(F_OFSPC, _ofspc); - // Carica i valori dei campi testo costanti (se non e' il formeditor normale) - if (!is_ba_editor) - { // Se sta editando il body abilita i primi 4, se sta editando il footer abilita l'ultimo - if (_sec_type == 'B') - m.enable(-2); - if (_sec_type == 'F') - m.enable(-3); - if (_form->exist('H', last_page)) - { - m.set(F_DES1,_form->find_field('H',last_page,PEC_SALDO).prompt()); - m.set(F_DES2,_form->find_field('H',last_page,PEC_RITENUTE).prompt()); - m.set(F_DES3,_form->find_field('H',last_page,PEC_ABBUONI).prompt()); - m.set(F_DES4,_form->find_field('H',last_page,PEC_DIFFCAM).prompt()); - m.set(F_DES5,_form->find_field('H',last_page,PEC_RIPORTO).prompt()); - } - } - - // still unused: will need to be shown if section is columnwise; no - // provision for saving yet (should be in form, with a field for each pos) + m.set(F_OFSVR, _ofsvr); + if (is_ba_editor) + { + m.set(F_X, form().offset_x()); + m.set(F_Y, form().offset_y()); + m.set(F_CTP, format("%c",form().char_to_pos())); + m.set(F_IPX, form().ipx()); + m.set(F_IPY, form().ipy()); + m.set(F_FPX, form().fpx()); + m.set(F_FLEN, printer().formlen()); + } + else + _form->pre_edit_checks(m,_cur_sect); TSheet_field& ms = (TSheet_field&)m.field(F_FIELDS); + m.hide(F_OFSVR);//Offset verticale, per _columnwise. Non ancora usato. if (_columnwise) { m.disable(F_HEIGHT); - //ms.delete_column(dsc_id); ms.sheet_mask().hide(dsc_id); ms.delete_column(xps_id); ms.sheet_mask().hide(xps_id); ms.delete_column(yps_id); ms.sheet_mask().hide(yps_id); } @@ -2528,7 +2537,6 @@ bool TPrint_section::edit(const char* title) { m.hide(F_OFSPC); ms.delete_column(int_id); ms.sheet_mask().hide(int_id); - ms.delete_column(len_id); ms.sheet_mask().hide(len_id); ms.delete_column(col_id); ms.sheet_mask().hide(col_id); ms.delete_column(spc_id); ms.sheet_mask().hide(spc_id); ms.delete_column(fnl_id); ms.sheet_mask().hide(fnl_id); @@ -2559,6 +2567,7 @@ bool TPrint_section::edit(const char* title) ms.row(-1) = tt; } + if (is_ba_editor) { const int MAX_FAMILIES = 128; char* family[MAX_FAMILIES]; @@ -2578,10 +2587,10 @@ bool TPrint_section::edit(const char* title) lst.replace_items(pn1, pn2); if (!font_found) warning_box("Il font %s non esiste per la stampante di default.",(const char*) form().fontname()); lst.set(form().fontname()); + printer().set_char_size(form().fontsize()); + m.set_handler(F_FONT,font_handler); } - printer().set_char_size(form().fontsize()); - m.set_handler(F_FONT,font_handler); if(_columnwise) { bool ok = FALSE; @@ -2607,27 +2616,7 @@ bool TPrint_section::edit(const char* title) if (dirty) { - // Salva i valori dei campi testo costanti (se non e' il formeditor normale) - if (!is_ba_editor && _form->exist('H', last_page)) - { - _form->section('H',last_page).set_dirty(); - TForm_item& saldo = _form->find_field('H',last_page,PEC_SALDO); - TForm_item& abbuoni = _form->find_field('H',last_page,PEC_RITENUTE); - TForm_item& diffcam = _form->find_field('H',last_page,PEC_ABBUONI); - TForm_item& ritenute = _form->find_field('H',last_page,PEC_DIFFCAM); - TForm_item& riporto = _form->find_field('H',last_page,PEC_RIPORTO); - saldo.set_prompt(m.get(F_DES1)); - saldo.set_dirty(); - abbuoni.set_prompt(m.get(F_DES2)); - abbuoni.set_dirty(); - diffcam.set_prompt(m.get(F_DES3)); - diffcam.set_dirty(); - ritenute.set_prompt(m.get(F_DES4)); - ritenute.set_dirty(); - riporto.set_prompt(m.get(F_DES5)); - riporto.set_dirty(); - des_dirty = TRUE; - } + // Controlli da fare sempre a prescindere dal form editor if (_height != (word)m.get_int(F_HEIGHT) ) { _height = m.get_int(F_HEIGHT); @@ -2638,72 +2627,80 @@ bool TPrint_section::edit(const char* title) _ofspc = m.get_int(F_OFSPC); _dirty=TRUE; } - if (m.get_int(F_X) != form().offset_x() || m.get_int(F_Y) != form().offset_y()) + if (_ofsvr != (word)m.get_int(F_OFSVR) ) { - form().offset_x() = m.get_int(F_X); - form().offset_y() = m.get_int(F_Y); - form().set_dirty(); - _dirty = TRUE; - } - if (m.get(F_CTP)[0] != form().char_to_pos() || - m.get_int(F_IPX) != form().ipx() || - m.get_int(F_IPY) != form().ipy() || - m.get_int(F_IPX) != form().fpx()) - { - form().char_to_pos() = m.get(F_CTP)[0]; - form().ipx() = m.get_int(F_IPX); - form().ipy() = m.get_int(F_IPY); - form().fpx() = m.get_int(F_FPX); - _dirty = TRUE; + _ofsvr = m.get_int(F_OFSVR); + _dirty=TRUE; } - - TString80 name(m.get(F_FONT)); - int size = m.get_int(F_SIZE); - if (size==0) size = form().fontsize(); - if (name != form().fontname() || size != form().fontsize()) - { - if (!form().dirty()) form().set_dirty(); - _dirty = TRUE; - s_data prm; - prm.size_1=form().fontsize(); - strcpy(prm.name_1,form().fontname()); - prm.size_2=size; - strcpy(prm.name_2,name); - prm.ratio = 1.0; - // Next 3 lines may be changed - xvt_print_open(); - xvt_print_start_thread (wpr, (long)&prm); - xvt_print_close(); - - form().fontname() = name; - form().fontsize() = size; - const char sechar[4] = { 'B', 'F', 'G', 'H' }; - for (int sn = 0; sn < 4 ; sn++) + if (is_ba_editor) + { // Controlli solo se il form editor e' quello base + if (m.get_int(F_X) != form().offset_x() || m.get_int(F_Y) != form().offset_y()) { - const char sc = sechar[sn]; - for (pagetype pt = odd_page; pt <= last_page; pt = pagetype(pt+1)) - { - TPrint_section* sec = form().exist(sc, pt); - if (sec != NULL && !sec->columnwise()) - { - sec->set_dirty(); - for (word i = 0; i < sec->fields() ; i++) - { - TForm_item& fi = sec->field(i); - short value = fi.x(); - if (value > 0 && (prm.ratio != 1.0)) + form().offset_x() = m.get_int(F_X); + form().offset_y() = m.get_int(F_Y); + form().set_dirty(); + _dirty = TRUE; + } + if (m.get(F_CTP)[0] != form().char_to_pos() || + m.get_int(F_IPX) != form().ipx() || + m.get_int(F_IPY) != form().ipy() || + m.get_int(F_IPX) != form().fpx()) + { + form().char_to_pos() = m.get(F_CTP)[0]; + form().ipx() = m.get_int(F_IPX); + form().ipy() = m.get_int(F_IPY); + form().fpx() = m.get_int(F_FPX); + _dirty = TRUE; + } + + TString80 name(m.get(F_FONT)); + int size = m.get_int(F_SIZE); + if (name != form().fontname() || size != form().fontsize()) + { + if (!form().dirty()) form().set_dirty(); + _dirty = TRUE; + s_data prm; + prm.size_1=form().fontsize(); + strcpy(prm.name_1,form().fontname()); + prm.size_2=size; + strcpy(prm.name_2,name); + prm.ratio = 1.0; + // Next 3 lines may be changed + xvt_print_open(); + xvt_print_start_thread (wpr, (long)&prm); + xvt_print_close(); + + form().fontname() = name; + form().fontsize() = size; + const char sechar[4] = { 'B', 'F', 'G', 'H' }; + for (int sn = 0; sn < 4 ; sn++) + { + const char sc = sechar[sn]; + for (pagetype pt = odd_page; pt <= last_page; pt = pagetype(pt+1)) + { + TPrint_section* sec = form().exist(sc, pt); + if (sec != NULL && !sec->columnwise()) + { + sec->set_dirty(); + for (word i = 0; i < sec->fields() ; i++) { - real x_pos; - x_pos = value * prm.ratio; - x_pos.round(); - fi.set_x((short)x_pos.integer()); - fi.set_dirty(); + TForm_item& fi = sec->field(i); + short value = fi.x(); + if (value > 0 && (prm.ratio != 1.0)) + { + real x_pos; + x_pos = value * prm.ratio; + x_pos.round(); + fi.set_x((short)x_pos.integer()); + fi.set_dirty(); + } } } - } - } - } - } + } + } + } + } else // controlli se l'editor non e' quello base + nstd_dirty = _form->post_edit_checks(m,_cur_sect); } } @@ -2734,7 +2731,7 @@ bool TPrint_section::edit(const char* title) _dirty |= field(j).dirty(); set_dirty(_dirty); - return (_dirty || des_dirty); + return (_dirty || nstd_dirty); } void TPrint_section::print_on(ostream& out) const @@ -3346,7 +3343,7 @@ bool TForm::genera_fincatura(pagetype p, int y1, int y2, const int* rows) if (cols[i] != start && cols[i] > 0) { TForm_line* l = new TForm_line(grs); - l->set_x(cols[i]-1 + body->ofspc()); + l->set_x(cols[i]-1); l->y() = (word)y1; l->id() = -1; l->width() = 1; @@ -3361,10 +3358,10 @@ bool TForm::genera_fincatura(pagetype p, int y1, int y2, const int* rows) if (start != 999 && end != 0) { TForm_box* l = new TForm_box(grs); - l->set_x(start + body->ofspc()); + l->set_x(start-1); l->y() = (word)y1; l->id() = -1; - l->width() = (int)(end + wlast - start + 1); + l->width() = (int)(end + wlast - start + 2); l->height() = (int)(y2 - y1 + 1); l->set("@B@R"); l->temp() = TRUE; @@ -3376,10 +3373,10 @@ bool TForm::genera_fincatura(pagetype p, int y1, int y2, const int* rows) for (i = 0; rows[i]; i++) { TForm_line* l = new TForm_line(grs); - l->set_x(start + body->ofspc()); + l->set_x(start-1); l->y() = (word)rows[i]; l->id() = -1; - l->width() = (int)(end + wlast - start + 1); + l->width() = (int)(end + wlast - start + 2); l->height() = 1; l->set("@R"); l->temp() = TRUE; @@ -3396,7 +3393,6 @@ bool TForm::genera_intestazioni(pagetype p, short y) TPrint_section* header = exist('H', p); if (header == NULL) return FALSE; - const int min_col_id = body->find_first_col(); body->reset_tabs(); const word items = body->fields(); for (word j=0;jid() = -1; - int x = fi.x() + body->ofspc(); - if (fi.id() == min_col_id) x++; - s->set_x(x); + s->set_x(fi.x()); s->y() = y; s->set_prompt(fi.col_head()); s->temp() = TRUE; @@ -3417,77 +3411,6 @@ bool TForm::genera_intestazioni(pagetype p, short y) return TRUE; } -void TForm::remove_temp_items(char sec, pagetype p) -{ - TPrint_section* s = exist(sec,p); - if (s!=NULL) - { - const word items = s->fields(); - for (word j=0;jfield(j).temp()) - s->destroy_field(j,FALSE); - } - s->field_array().pack(); - } -} - - -void TForm::put_examples(char sez, pagetype p) -{ - TPrint_section* s = exist(sez,p); - if (s!=NULL) - { - const word items = s->fields(); - for (word i=0;ifield(i); - if (fi.fields()!=0) continue; - if (fi.memo()) - fi.set(fi.memo_info()); - else - if (fi.prompt().empty()) - { - if (fi.class_name() == "DATA") - { - const TDate d(TODAY); - fi.set(d); - } - else - if (fi.class_name() == "NUMERO") - { - fi.set_prompt(fi.example()); - fi.temp() = TRUE; - } - else - fi.set(fi.key()); - } - } - } -} - -void TForm::remove_examples(char sez, pagetype p) -{ - TPrint_section* s = exist(sez,p); - if (s!=NULL) - { - const word items = s->fields(); - for (word i=0;ifield(i); - if (fi.fields()!=0) continue; - if (fi.memo()) - fi.set(""); - else - if (fi.class_name() == "NUMERO" && fi.temp()) - { - fi.set_prompt(""); - fi.temp() = FALSE; - } - } - } -} - // Stampa gli items dal from a to // se to < 0 stampa fino alla fine del file @@ -3797,7 +3720,6 @@ void TForm::init() _isnew= FALSE; _fontname= "Roman 17cpi"; _fontsize= 12; - _section_mask = "ba2100s"; _x= 0; _y= 0; _char_to_pos= '\0'; diff --git a/include/form.h b/include/form.h index 814fa3da4..0506fa087 100755 --- a/include/form.h +++ b/include/form.h @@ -51,7 +51,6 @@ class TForm : public TObject TString _name; // Profile name TString _code; // Profile code TString _fontname; // Font name - TString _section_mask;// Maschera per la sezione int _fontsize; // Font size int _x, _y; // Offset validi per tutte le sezioni char _char_to_pos; // Carattere utilizzato per il posizionamento dei moduli @@ -77,7 +76,6 @@ class TForm : public TObject TString _desc; // form description char _fink[11]; // finkatur characters - TPrint_section* exist(char s, pagetype t, bool create = FALSE); // Can be NULL static void header_handler(TPrinter& p); static void footer_handler(TPrinter& p); @@ -91,6 +89,7 @@ class TForm : public TObject bool ps_change_number_format(TPrint_section& s, int w, int dec, const char* p); protected: + TPrint_section* exist(char s, pagetype t, bool create = FALSE); // Can be NULL void init(); // inizializza il form void read(const char* form, const char* code = "", int editlevel = 0, const char* desc = ""); // carica il form dal file specificato @@ -112,6 +111,9 @@ protected: bool parse_general(TScanner&); void print_general(ostream& out) const; virtual void extended_parse_general(TScanner&) {} // Used to parse non-standard items in general section + // Queste due funzioni vengono chiamate per controlli non standard nell'edit della sezione + virtual void pre_edit_checks(TMask&m, TPrint_section* sec) {} + virtual bool post_edit_checks(TMask& m, TPrint_section* sec) {return FALSE;} bool read_profile(); bool write_profile(); @@ -136,9 +138,6 @@ public: // Genera le righe di intestazione colonna alla riga indicata, vale per COLUMNWISE // I form_items di intestazione vengono aggiunti alla sezione header di tipo p con ID -1 bool genera_intestazioni(pagetype p, short y); - void remove_temp_items(char sec, pagetype p); - void put_examples(char sec, pagetype p); - void remove_examples(char sec, pagetype p); bool print(long from = 0L, long to = -1L); TArray& body() { return _body; } @@ -149,7 +148,7 @@ public: const TString& name() const { return _name; } const TString& code() const { return _code; } - TString& section_mask() { return _section_mask; } + virtual const char* section_mask() { return "ba2100s"; } bool edit_level() const { return _editlevel; } void set_edit_level(int n) { _editlevel = n; } void set_description(const char* s) { _desc = s; } @@ -188,7 +187,7 @@ public: void set_mode(bkg_mode b); bkg_mode mode() { return _background_mode;} // if code == NULL it's a base form - // otherwise it's integrated by a file definition + // otherwise it's integrated by a file definition TForm(); TForm(const char* form, const char * code = "", int editlevel = 0, const char* desc = ""); virtual ~TForm(); @@ -225,7 +224,8 @@ class TPrint_section : public TArray static TMask* _msk; word _height; // Altezza della sezione - word _ofspc; // Offset prima colonna (still ignored) + word _ofspc; // Offset prima colonna + word _ofsvr; // Offset verticale intestazione colonna word _nfld; // number of columns if columnwise bool _dirty; // Flag di modifica parametri bool _columnwise; // Columnwise field specification @@ -276,6 +276,7 @@ public: word columns() { tab(0); return _nfld; } word height() const { return _height; } word ofspc() const { return _ofspc; } + word ofsvr() const { return _ofsvr; } void offset(int& x, int& y); void set_repeat_count(int x) { _repeat_count = x; } @@ -297,7 +298,6 @@ public: bool columnwise() const { return _columnwise; } // ritorna l'offset della colonna corrispondente se columnwise int tab(int col); - int find_first_col(); void reset_tabs(); const TPrint_section& operator=(const TPrint_section& ps) { return copy(ps); }