#include #include #include #include bool TConfig_application::create() { TApplication::create(); _last_choice = BAR_ITEM(1); // process args TString arg(16); for (int i = 0; i < argc(); i++) { arg = argv(i); if (arg == "-c") _which_config = atoi(argv(++i)); else if (arg[0] == '-') continue; else { TString* argp = new TString(arg); _paragraphs.add(argp); } } user_create(); dispatch_e_menu(_last_choice); return TRUE; } bool TConfig_application::destroy() { bool b = user_destroy(); TApplication::destroy(); return b; } bool TConfig_application::menu(MENU_TAG m) { // funziona da se' fino a 20 voci della menubar if (m >= BAR_ITEM(1) && m <= BAR_ITEM(20)) { _last_choice = m; do_config((m - BAR_ITEM(0))/100); } return xvt_test_menu_tag(BAR_ITEM(2)); } void TConfig_application::do_config(int m) { TString par(name()); if (m < _paragraphs.items()) par = (TString&)_paragraphs[m]; else par.cut(2); for (;;) { TConfig cnf(_which_config, par); const TFilename maskname(cnf.get("EdMask")); if (!maskname.empty()) { TMask m(maskname); // carica campi const int max = m.fields(); for (int i = 0; i < max; i++) { TMask_field& f = m.fld(i); if (f.field() != NULL) { const TFieldref* fr = f.field(); const char* fname = fr->name(); const int index = fr->to(); TString& oldvl = cnf.get(fname,NULL, index > -1 ? index : -1); if (!oldvl.empty()) f.set(oldvl); } } // run mask if (!preprocess_config(m,cnf)) break; int k = m.run(); if (postprocess_config(m,cnf)) { bool tosave = k == K_ENTER || k == K_SAVE; if (k == K_ENTER || k == K_QUIT) { // aggiusta campi for (i = 0; i < max; i++) { TMask_field& f = m.fld(i); if (f.dirty() && f.field()) { const char* fname = f.field()->name(); const char* value = f.get(); const int index = f.field()->to(); const char* oldvl = cnf.get(fname); if (!tosave) tosave = yesno_box("Modifiche non registrate. Salvare?"); if (!tosave) break; if (postprocess_config_changed(par, fname, oldvl, value)) cnf.set(fname, value, NULL, TRUE, index > -1 ? index : -1); } } } else break; } if (k == K_QUIT) break; } else { warning_box("Nessun parametro da configurare"); break; } } } bool TConfig_application::preprocess_config (TMask& mask, TConfig& config) { return TRUE; } bool TConfig_application::postprocess_config (TMask& mask, TConfig& config) { return TRUE; } // @doc EXTERNAL // @mfunc Simile alla , ma viene usata // dalla maschera principale. // // @rdesc Ritorna i seguenti valori: // // @flag TRUE | Se la modifica viene acettatta (dafault) // @flag FALSE | Se la modifica non viene accettata bool TConfig_application::postprocess_config_changed( const char* par, // @parm Paragrafo in corso di editing const char* var, // @parm vedi const char* oldv, // @parm vedi const char* newv) // @parm vedi // @comm Rispetto alla le viene passato in piu' il paragrafo // in corso di editing. E' chiamata per ogni parametro modificato. { return TRUE; }