#include "calib01.h" /////////////////////////////////////////////////////////// // TAnal_msk /////////////////////////////////////////////////////////// bool TAnal_msk::on_field_event(TOperable_field& o, TField_event e, long jolly) { return true; } void TAnal_msk::offset_fields() { const WINDOW tw = toolwin(); RCT rct; xvt_vobj_get_client_rect(win(), &rct); const int width = rct.right; int rightmost = 0; for (int i = fields()-1; i > 0; i--) { TMask_field& f = fld(i); if (f.dlg() < 1000 && f.parent() != tw) { f.get_rect(rct); if (rct.right > rightmost) rightmost = rct.right; } } const int delta = width - rightmost; if (delta > 0) { for (int i = fields()-1; i >= 0; i--) { TMask_field& f = fld(i); if (f.dlg() < 1000 && f.parent() != tw) { f.get_rect(rct); xvt_rect_offset(&rct, delta, 0); f.set_rect(rct); } } } } TAnal_msk::TAnal_msk(const char* name) { read_mask(name, 0, 0); } /////////////////////////////////////////////////////////// // TSimple_anal_msk /////////////////////////////////////////////////////////// void TSimple_anal_msk::get_key_fields(TString& key1, TString& key2) const { const RecDes& des = prefix().get_recdes(get_logicnum()); const KeyDes k1 = des.Ky[0]; key1 = des.Fd[k1.FieldSeq[0] % MaxFields].Name; const KeyDes k2 = des.Ky[1]; key2 = des.Fd[k2.FieldSeq[0] % MaxFields].Name; } void TSimple_anal_msk::create_key_browse(TEdit_field& kfld, int level, TConfig& cfg) { TString16 key1, key2; get_key_fields(key1, key2); TFilename tmp; tmp.temp(); ofstream out(tmp); out << "US " << get_logicnum() << endl; out << "KE 1" << endl; int from = 1, to = 1; for (int i = 0; i < level; i++) { const TString& picture = cfg.get(get_key_var(), NULL, i); const TString& prompt = cfg.get(get_des_var(), NULL, i); to = from + picture.len()-1; TString field; field.format("%s[%d,%d]", (const char*)key1, from, to); out << "IN " << field << ' ' << get_key_id(i) << endl; out << "DI \"" << prompt << '@' << (from-to+1) << "\" " << field << endl; out << "OU " << get_key_id(i) << ' ' << field << endl; from = to+1; } out << "DI \"Descrizione@50\" " << key2 << endl; out << "OU " << get_des_id(level-1) << ' ' << key2 << endl; out << "CH " << (level == 1 ? "RE" : "NO") << endl; out << "EN" << endl; out.close(); TScanner scan(tmp); while (scan.pop() != "EN") kfld.parse_item(scan); xvt_fsys_removefile(tmp); } int TSimple_anal_msk::create_key_fields() { TConfig cfg(CONFIG_DITTA, "ca"); const char* keyvar = get_key_var(); const char* desvar = get_des_var(); int maxkeylen = 0, maxdeslen = 0; int level; for (level = 1; ; level++) { const TString& prompt = cfg.get(desvar, NULL, level); if (prompt.blank()) break; const TString& picture = cfg.get(keyvar, NULL, level); const int keylen = picture.len(); const int deslen = prompt.len(); if (keylen > maxkeylen) maxkeylen = keylen; if (deslen > maxdeslen) maxdeslen = deslen; } maxdeslen++; const int tab0 = 2; const int tab1 = tab0 + maxdeslen + maxkeylen + 3; for (int i = 1; i < level; i++) { const short kid = get_key_id(i-1); CHECKD(kid > 100, "Invalid field id:", kid); const TString& picture = cfg.get(keyvar, NULL, i); TString80 prompt = cfg.get(desvar, NULL, i); prompt.left_just(maxdeslen); TEdit_field& kfld = add_string(kid, 0, prompt, tab0, i, picture.len(), "B"); create_key_browse(kfld, i, cfg); const short did = get_des_id(i-1); if (did > kid) { add_string(did, 0, "", tab1, i, 50, "", 76-tab1); } } return level; } TSimple_anal_msk::TSimple_anal_msk(const char* name) : TAnal_msk(name) { } /////////////////////////////////////////////////////////// // TAnal_app /////////////////////////////////////////////////////////// TRelation* TAnal_app::create_relation() const { return new TRelation(_msk->get_logicnum()); } bool TAnal_app::user_create() { _msk = create_mask(); _rel = create_relation(); return true; } bool TAnal_app::user_destroy() { if (_msk != NULL) delete _msk; if (_rel != NULL) delete _rel; return true; }