Files correlati : tutti Ricompilazione Demo : [ ] Commento : Nuova gestione list-box Windows-like git-svn-id: svn://10.65.10.50/trunk@18316 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			249 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			249 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <confapp.h>
 | |
| #include <mask.h>
 | |
| #include <relation.h>
 | |
| #include <urldefid.h>
 | |
| 
 | |
| bool TConfig_application::create()
 | |
| {
 | |
|   TApplication::create();
 | |
| 
 | |
|   _last_choice = BAR_ITEM_ID(1);
 | |
| 
 | |
|   // process args
 | |
|   TString arg(16);
 | |
|   for (int i = 0; i < argc(); i++)
 | |
|   {
 | |
|     arg = argv(i);
 | |
|     if (arg == "-c")
 | |
|       set_config(atoi(argv(++i)));
 | |
|     else
 | |
|       if (arg[0] == '-')
 | |
|         continue;
 | |
|       else
 | |
|         _paragraphs.add(arg);
 | |
|   }
 | |
| 
 | |
|   user_create();
 | |
|   dispatch_e_menu(_last_choice);
 | |
|   return TRUE;
 | |
| }
 | |
| 
 | |
| bool TConfig_application::destroy()
 | |
| {
 | |
|   _cnf->set_paragraph(""); // Flush
 | |
|   bool b = user_destroy();
 | |
|   if (_m) delete _m;
 | |
|   if (_cnf) delete _cnf;
 | |
|   TApplication::destroy();
 | |
|   return b;
 | |
| }
 | |
| 
 | |
| bool TConfig_application::menu(MENU_TAG m)
 | |
| {
 | |
|   // funziona da se' fino a 20 voci della menubar
 | |
|   if (m >= BAR_ITEM_ID(1) && m <= BAR_ITEM_ID(20))
 | |
|   {
 | |
|     _last_choice = m;
 | |
|     do_config((m - BAR_ITEM_ID(0))/100);
 | |
|   }
 | |
|   return xvtil_test_menu_tag(BAR_ITEM_ID(2));
 | |
| }
 | |
| 
 | |
| bool TConfig_application::user_create()  
 | |
| { 
 | |
|   return TRUE; 
 | |
| }
 | |
| 
 | |
| bool TConfig_application::user_destroy() 
 | |
| { 
 | |
|   return TRUE; 
 | |
| }
 | |
| 
 | |
| 
 | |
| void TConfig_application::save_mask(bool tosave) 
 | |
| {
 | |
|   TMask* mask = get_mask();
 | |
|   if (mask==NULL) return;
 | |
|   const int max = mask->dirty() ? mask->fields() : 0;
 | |
|   for (int i = 0; i < max; i++)
 | |
|   {
 | |
|     TMask_field& f = mask->fld(i);
 | |
|     if (f.field())
 | |
|     {
 | |
|       const char* fname = f.field()->name();
 | |
|       const TString& 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(_parag, fname, oldvl, value))
 | |
|       {
 | |
|         if (value[0] == ' ' || value.right(1) == " ")
 | |
|         {
 | |
|           TString val;
 | |
|           val << '"' << value << '"';
 | |
|           _cnf->set(fname, val, NULL, TRUE, index > -1 ? index : -1); 
 | |
|         }
 | |
|         else          
 | |
|           _cnf->set(fname, value, NULL, TRUE, index > -1 ? index : -1); 
 | |
|       }  
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| 
 | |
| void TConfig_application::load_mask()
 | |
| {                    
 | |
|   TMask* mask = get_mask();
 | |
|   if (mask==NULL) return;
 | |
|   const int max = mask->fields();
 | |
|   TString oldvl;
 | |
|   for (int i = 0; i < max; i++)
 | |
|   {                    
 | |
|     TMask_field& f = mask->fld(i);
 | |
|     if (f.field() != NULL)
 | |
|     {
 | |
|       const TFieldref* fr = f.field();
 | |
|       const char* fname = fr->name();
 | |
|       const int index = fr->to();
 | |
|       oldvl = _cnf->get(fname,NULL, index > -1 ? index : -1);
 | |
|       if (oldvl[0] == '"' && oldvl.right(1) == "\"")
 | |
|       {
 | |
|         oldvl.rtrim(1);
 | |
|         oldvl.ltrim(1);  
 | |
|       }
 | |
|       f.set(oldvl);
 | |
|     }  
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TConfig_application::load_config()
 | |
| {
 | |
|   if (_cnf) delete _cnf;
 | |
|   _cnf = new TConfig(_which_config, _parag);
 | |
| }
 | |
| 
 | |
| TMask* TConfig_application::create_mask(const TFilename& f) 
 | |
| { 
 | |
|   if (_m != NULL)
 | |
|     destroy_mask();
 | |
|   _m = new TMask(f); 
 | |
|   return _m;
 | |
| }
 | |
| 
 | |
| const char* TConfig_application::get_mask_name() const
 | |
| {
 | |
|   TString& maskname = get_tmp_string();
 | |
|   maskname = _cnf->get("EdMask"); 
 | |
|   return maskname;
 | |
| }
 | |
| 
 | |
| 
 | |
| void TConfig_application::do_config(int m)
 | |
| {
 | |
|   _parag = name(); 
 | |
|   if (m < _paragraphs.items())
 | |
|     _parag = (TString&)_paragraphs[m];
 | |
|   else 
 | |
|     _parag.cut(2); 
 | |
| 
 | |
|   load_config();
 | |
|   for (;;)
 | |
|   {
 | |
|     TFilename maskname = get_mask_name();
 | |
|     maskname.ext("msk");
 | |
|       
 | |
|     if (maskname.not_empty() && maskname.exist())
 | |
|     {
 | |
|       TMask* mask = get_mask();
 | |
|       if (mask == NULL || mask != _m) 
 | |
|         mask = create_mask(maskname);
 | |
|       
 | |
|       // carica campi
 | |
|       load_mask();
 | |
|       // run mask
 | |
|       if (!preprocess_config(*mask,*_cnf)) 
 | |
|         break;
 | |
| 
 | |
|       int k = mask->run();
 | |
|       if (postprocess_config(*mask,*_cnf))
 | |
|       {
 | |
|         bool tosave = k == K_ENTER || k == K_SAVE;
 | |
|         
 | |
|         if (k == K_ENTER || k == K_QUIT)
 | |
|         {
 | |
|           // aggiusta campi
 | |
|           save_mask(tosave);
 | |
|         }
 | |
|         else break;  
 | |
|       }  
 | |
|       if (k == K_QUIT) 
 | |
|         break;
 | |
|     }
 | |
|     else 
 | |
|     {
 | |
|       warning_box("Nessun parametro da configurare");
 | |
|       break;
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TConfig_application::on_firm_change()
 | |
| {
 | |
|   ((TConfig_application *)this)->save_mask(FALSE);
 | |
|   load_config();
 | |
|   load_mask();
 | |
| }
 | |
| 
 | |
| void TConfig_application::set_config(int which) 
 | |
| {
 | |
|   _which_config= which;
 | |
| 
 | |
| }
 | |
| 
 | |
| 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 <mf TApplication::change_config>, 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 <c TApplication>
 | |
|      const char* oldv, // @parm vedi <c TApplication>
 | |
|      const char* newv) // @parm vedi <c TApplication>
 | |
| 
 | |
| // @comm Rispetto alla <mf TApplication::change_config> le viene passato in piu' il paragrafo
 | |
| //       in corso di editing. E' chiamata per ogni parametro modificato.
 | |
| 
 | |
| {
 | |
|   return TRUE; 
 | |
| }
 | |
| 
 | |
| TConfig_application::TConfig_application(int which_config) 
 | |
|   : _cnf(NULL), _m(NULL)
 | |
| {
 | |
|   set_config(which_config);
 | |
| }
 | |
| 
 | |
| TConfig_application::~TConfig_application() 
 | |
| {
 | |
| }
 |