Files correlati : Ricompilazione Demo : [ ] Commento : Corretto supoorto per stampa di campi ad altezza dinamica con font proporzionali Aggiunte ricerche filtrate git-svn-id: svn://10.65.10.50/trunk@13369 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			185 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			185 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include <stdio.h>
 | |
| #include <automask.h>
 | |
| 
 | |
| bool TAutomask::error_box(const char* fmt, ...)
 | |
| { 
 | |
|   TString message(1024);
 | |
|   char* msg = message.get_buffer();
 | |
|   va_list argptr;
 | |
|   va_start(argptr, fmt);
 | |
|   int len = vsprintf(msg, fmt, argptr);
 | |
|   CHECKD(len <= message.size(), "Error message too long: ", len);
 | |
|   va_end(argptr);
 | |
| 
 | |
|   if (is_sheetmask() && !is_running())
 | |
|   {             
 | |
|     xvtil_statbar_set(msg);
 | |
|     beep();
 | |
|   }  
 | |
|   else
 | |
|   {
 | |
|     post_error_message(msg, 3);
 | |
|   }
 | |
| 
 | |
|   return FALSE;
 | |
| }
 | |
| 
 | |
| TField_event TAutomask::key2event(TMask_field& f, KEY key) const
 | |
| {
 | |
|   TField_event fe = fe_null;
 | |
|   switch (key)
 | |
|   {
 | |
|   case K_TAB:
 | |
|     if (f.is_edit())
 | |
|     {
 | |
|       const TMask& wm = f.mask();
 | |
|       if (wm.get_sheet())
 | |
|       {
 | |
|         if (wm.is_running())
 | |
|         {
 | |
|           if (f.focusdirty())
 | |
|             fe = fe_modify;
 | |
|         }
 | |
|         else
 | |
|         {
 | |
|           fe = f.focusdirty() ? fe_modify : fe_init;
 | |
|         }
 | |
|       }
 | |
|       else
 | |
|       {
 | |
|         if (wm.is_running())
 | |
|         {
 | |
|           if (f.focusdirty())
 | |
|             fe = fe_modify;
 | |
|         }
 | |
|         else
 | |
|           fe = fe_init;
 | |
|       }
 | |
|     }
 | |
|     break;
 | |
|   case K_SPACE:
 | |
|     if (!f.is_edit())
 | |
|     {
 | |
|       if (f.is_kind_of(CLASS_BUTTON_FIELD))
 | |
|         fe = fe_button; else
 | |
|       if (f.is_kind_of(CLASS_TREE_FIELD))
 | |
|         fe = fe_modify;
 | |
|       else
 | |
|         fe = f.focusdirty() ? fe_modify : fe_init;
 | |
|     }  
 | |
|     break;
 | |
|   case K_SHIFT+K_SPACE:
 | |
|     if (f.is_kind_of(CLASS_TREE_FIELD))
 | |
|       fe = fe_button;
 | |
|     break;
 | |
|   case K_CTRL+K_SPACE:
 | |
|     if (f.is_kind_of(CLASS_TREE_FIELD))
 | |
|       fe = fe_select;
 | |
|     break;
 | |
|   case K_ENTER:
 | |
|     fe = fe_close;
 | |
|     break;  
 | |
|   case K_F9:
 | |
|     if (f.is_edit())
 | |
|       fe = fe_button;
 | |
|     break;
 | |
|   default:        
 | |
|     fe = fe_null;
 | |
|     break;
 | |
|   }
 | |
|   return fe;
 | |
| }
 | |
| 
 | |
| bool TAutomask::universal_handler(TMask_field& f, KEY key)
 | |
| {
 | |
|   TOperable_field& of = (TOperable_field&)f;
 | |
|   TAutomask& am = (TAutomask&)of.mask();
 | |
|   TField_event fe = am.key2event(of, key);
 | |
|   return fe == fe_null ? TRUE : am.on_field_event(of, fe, 0);
 | |
| }
 | |
| 
 | |
| bool TAutomask::insheet_universal_handler(TMask_field& f, KEY key)
 | |
| {
 | |
|   TMask& m = f.mask();
 | |
|   TSheet_field& s = *m.get_sheet();
 | |
|   TAutomask& am = (TAutomask&)s.mask();
 | |
|   
 | |
|   TOperable_field& of = (TOperable_field&)f;
 | |
|   TField_event fe = am.key2event(of, key);
 | |
|   return fe == fe_null ? TRUE : am.on_field_event(of, fe, m.number());
 | |
| }
 | |
| 
 | |
| 
 | |
| bool TAutomask::universal_notifier(TSheet_field& s, int row, KEY key)
 | |
| {
 | |
|   TField_event fe = fe_null;
 | |
|   switch (key)
 | |
|   {       
 | |
|   case K_INS:
 | |
|     fe = se_query_add;
 | |
|     break;
 | |
|   case K_CTRL+K_INS:
 | |
|     fe = se_notify_add;
 | |
|     break;
 | |
|   case K_DEL:
 | |
|     fe = se_query_del;
 | |
|     break;
 | |
|   case K_CTRL+K_DEL:
 | |
|     fe = se_notify_del;
 | |
|     break;
 | |
|   case K_TAB:  
 | |
|     fe = se_enter;
 | |
|     break;  
 | |
|   case K_CTRL+K_TAB:  
 | |
|     fe = se_leave;
 | |
|     break;  
 | |
|   case K_SPACE:
 | |
|     fe = se_query_modify;
 | |
|     break;  
 | |
|   case K_ENTER:
 | |
|     fe = se_notify_modify;
 | |
|     break;  
 | |
|   default:
 | |
|     break;
 | |
|   }
 | |
|   
 | |
|   TAutomask& wm = (TAutomask&)s.mask();
 | |
|   return fe == fe_null ? TRUE : wm.on_field_event(s, fe, row);
 | |
| }
 | |
| 
 | |
| void TAutomask::set_handlers()
 | |
| {
 | |
|   for (int i = fields()-1; i >= 0; i--)
 | |
|   {
 | |
|     TMask_field& f = fld(i);
 | |
|     if (f.is_operable())
 | |
|     {
 | |
|       f.set_handler(universal_handler);
 | |
|       if (f.is_sheet())
 | |
|       {
 | |
|         ((TSheet_field&)f).set_notify(universal_notifier);
 | |
| 
 | |
|         TMask& m = ((TSheet_field&)f).sheet_mask();
 | |
|         for (int j = m.fields()-1; j >= 0; j--)
 | |
|         {
 | |
|           TMask_field& g = m.fld(j);
 | |
|           if (g.is_operable())
 | |
|             g.set_handler(insheet_universal_handler);
 | |
|         }
 | |
|       }
 | |
|     }
 | |
|   }  
 | |
| }
 | |
| 
 | |
| 
 | |
| TAutomask::TAutomask(const char* name, int num)
 | |
|          : TMask(name, num)
 | |
| {
 | |
|   set_handlers();
 | |
| }
 | |
| 
 | |
| TAutomask::TAutomask(const char* title, int pages, int cols, int rows, int xpos, int ypos)
 | |
|          : TMask(title, pages, cols, rows, xpos, ypos)
 | |
| {
 | |
| }
 |