// gestione tabelle di magazzino #include #include #include // applicazione per la gestione delle tabelle di lavanderia class Tab_app_lav : public TTable_application { protected: // TRelation_application virtual bool user_destroy() ; virtual bool user_create() ; virtual TMask * set_mask(TMask * _m=NULL); public: Tab_app_lav() {} virtual ~Tab_app_lav() {} }; HIDDEN inline Tab_app_lav& app() { return (Tab_app_lav&)main_app(); } // costruttore // alloca/cambia la maschera dell'applicazione TMask * Tab_app_lav::set_mask(TMask * _m) { if (_m != NULL) return Tab_application::set_mask(_m); else { const TString& tabname = get_tabname(); TString maskname; get_mask_name(maskname); return Tab_application::set_mask(new TMask_tabmag(maskname, tabname)); } } bool Tab_app_lav::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_tabmag, 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 = Tab_application::user_create(); if (ok) TMask& mask = *set_mask(); return ok; } bool Tab_app_lav::user_destroy() { return Tab_application::user_destroy(); } int mg0100(int argc, char* argv[]) { Tab_app_lav a; a.run(argc, argv, TR("Tabella")); return 0; }