#include "tc2.h" #include "tctbico.h" // gestione tabelle IPSOA #include #include #include /////////////////////////////////////////////////////////// // TConti_mask /////////////////////////////////////////////////////////// class TConti_mask : public TMask { private: protected: public: TConti_mask(const char * maskname); ~TConti_mask(); }; TConti_mask::TConti_mask(const char * maskname) : TMask(maskname) { TString disp; int fpos = 0; int pos = 2; TFilename tmp; tmp.tempdir(); tmp.add("tmp.msk"); for (int i = 1; i <= 6; i++) { const int len = ini_get_int(CONFIG_DITTA, "tc", "IPLIVPC", 0, i); const short id = F_CODTAB + i; if (len <= 0) { field(id).hide(); field(id).disable(); } else { ofstream out(tmp); TString prompt = (i == 1) ? "Codice " : ""; TEdit_field & kfld = efield(id); kfld.set_prompt(prompt); pos += prompt.len() + 2; kfld.set_rect(pos, 2, len, 1, len); pos += len + 2; TString80 fld("CODTAB["); fld << ++fpos << ','; fpos += len -1; fld << fpos << "]"; kfld.set_field(fld); out << "US &ICO\n"; if (len > 0) { if (i > 1) out << "CO IN " << id - 1 << '\n'; out << "IN " << fld << ' ' << id << '\n'; disp << "DI \"" << prompt << "@" << max(len, prompt.len()) << "\" " << fld << '\n'; out << disp << "DI \"Descrizione@60\" S0\n"; if (i > 1) out << "CO OU " << id - 1 << '\n'; out << "OU " << id << ' ' << fld << '\n'; } out << "EN" << '\n'; out.close(); TScanner scan(tmp); while (scan.pop() != "EN") kfld.parse_item(scan); } } ofstream out(tmp); TEdit_field & dfld = efield(F_DESC); out << "US &ICO KEY 2\n"; out << "IN S0 " << F_DESC << '\n'; out << "DI \"Descrizione@60\" S0\n" << disp; out << "CO OU " << F_CODTAB1 << '\n'; out << "EN" << '\n'; out.close(); TScanner scan(tmp); while (scan.pop() != "EN") dfld.parse_item(scan); } TConti_mask::~TConti_mask() { } // applicazione per la gestione delle tabelle di magazzino class Tab_app_IPSOA : public TTable_module_application { protected: // TRelation_application virtual bool user_create() ; public: Tab_app_IPSOA() {} virtual ~Tab_app_IPSOA() {} }; HIDDEN inline Tab_app_IPSOA& app() { return (Tab_app_IPSOA&)main_app(); } bool Tab_app_IPSOA::user_create() { /* la Tab_application::user_create() apre la maschera TMask in modo automatico basandosi sul parametro passato sulla linea di comando e sulla convenzione nome = "BATB"+parametro; ORA: - questa convenzione cambierà per separare i programmi (e le maschere) dei vari pacchetti In tal caso ridefinire il metodo virtual mask_name() - secondo il nuovo stile, gli handler vanno posti in maschere derivate dalla TMask (TMask_tabzucc, TMask_tabcau, ecc), pertanto occorre che la maschera aperta sia del tipo corretto per questo motivo la maschera viene creata dalla user_create() */ bool ok = TTable_module_application::user_create(); if (ok) { TMask& mask = *get_mask(MODE_QUERY); TString name = mask.source_file(); name.lower(); if (name.find("ico") >= 0) set_mask(new TConti_mask(name)); } return ok; } int tc2100(int argc, char **argv) { Tab_app_IPSOA a; a.run(argc, argv, TR("Tabella")); return 0; }