Files correlati : ba0.exe Ricompilazione Demo : [ ] Commento : Aggiunta opzione per eseguire programmi a schermo intero quando si hanno piccoli monitor 4:3, per cui il menu outlook sia troppo ingombrante git-svn-id: svn://10.65.10.50/trunk@19099 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			166 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			166 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #include "ba8.h"
 | |
| #include "ba8700a.h"
 | |
| 
 | |
| #include <applicat.h>
 | |
| #include <automask.h>
 | |
| #include <config.h>
 | |
| #include <defmask.h>
 | |
| #include <dongle.h>
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TSignature_mask
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TSignature_mask : public TAutomask
 | |
| {
 | |
|   TString _host, _user;
 | |
|   bool _admin;
 | |
| 
 | |
| protected:
 | |
|   virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
 | |
| 
 | |
| public:
 | |
|   void load();
 | |
|   void save();
 | |
| 
 | |
|   TSignature_mask();
 | |
| };
 | |
| 
 | |
| bool TSignature_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
 | |
| {
 | |
|   switch (o.dlg())
 | |
|   {
 | |
|   case F_LIST:
 | |
|     {
 | |
|       TSheet_field& s = (TSheet_field&)o;
 | |
|       switch (e)
 | |
|       {
 | |
|       case se_enter: 
 | |
|         // Solo l'amministratore puo' cancellare: abilito il bottone di elimina solo per lui
 | |
|         s.sheet_mask().enable(DLG_DELREC, _admin && s.cell_enabled(jolly, 0)); 
 | |
|         break; 
 | |
|       case se_query_add: 
 | |
|         return _admin; // Solo l'amministratore puo' aggiungere utenti
 | |
|       case se_notify_add: 
 | |
|         {
 | |
|           // Copia i contenuti dalla eventuae riga di default (Guest)
 | |
|           int g;
 | |
|           for (g = s.items()-1; g >= 0; g--)
 | |
|           {
 | |
|             if (xvt_str_compare_ignoring_case(s.row(g).get(0), "Guest") == 0)
 | |
|               break;
 | |
|           }
 | |
|           if (g >= 0)
 | |
|           {
 | |
|             TToken_string& row = s.row(jolly);
 | |
|             row = s.row(g);  // Copia riga Guest
 | |
|             row.add(" ", 0); // Svuota nome utente
 | |
|           }
 | |
|         }
 | |
|         break;
 | |
|       case se_query_del: 
 | |
|         return _admin && s.cell_enabled(jolly, 0); // Solo l'amministratore puo' eliminare utenti
 | |
|       default: 
 | |
|         break;
 | |
|       }
 | |
|     }
 | |
|     break;
 | |
|   default: 
 | |
|     break;
 | |
|   }
 | |
|   return true;
 | |
| }
 | |
| 
 | |
| void TSignature_mask::load()
 | |
| {
 | |
|   TConfig ini(CONFIG_WST, "fd");
 | |
|   TAssoc_array& ass = ini.list_variables();
 | |
|   
 | |
|   TSheet_field& sheet = sfield(F_LIST);
 | |
|   bool guest_found = false;
 | |
|   FOR_EACH_ASSOC_STRING(ass, h, key, val)
 | |
|   {
 | |
|     if (_admin || _user.compare(key, -1, true) == 0)
 | |
|     {
 | |
|       TToken_string& row = sheet.row(-1);
 | |
|       row = key;    // "Cert_USER"
 | |
|       row.ltrim(5); // remove "Cert_"
 | |
|       if (row == "Guest")
 | |
|       {
 | |
|         guest_found = true;
 | |
|         sheet.disable_cell(sheet.items()-1, 0);
 | |
|       }
 | |
|       row.add(val); // add "pkxxx.dll,certificate"
 | |
|       row.replace(',', row.separator());
 | |
|     }
 | |
|   }
 | |
|   sheet.sort();
 | |
| 
 | |
|   if (_admin && !guest_found)
 | |
|   {
 | |
|     TToken_string& row = sheet.row(-1);
 | |
|     row = "Guest";
 | |
|     sheet.disable_cell(sheet.items()-1, 0);
 | |
|   }
 | |
| }
 | |
| 
 | |
| void TSignature_mask::save()
 | |
| {
 | |
|   TConfig ini(CONFIG_WST, "fd");
 | |
|   
 | |
|   if (_admin)
 | |
|     ini.remove_all();
 | |
| 
 | |
|   TSheet_field& sheet = sfield(F_LIST);
 | |
|   TString usr;
 | |
|   TToken_string data(255, ',');
 | |
|   FOR_EACH_SHEET_ROW(sheet, i, row)
 | |
|   {
 | |
|     row->get(0, usr);
 | |
|     if (usr.full())
 | |
|     {
 | |
|       usr.insert("Cert_");
 | |
|       data = (const char*)*row;            // Copia la riga dello spreadsheet      
 | |
|       data.replace(row->separator(), ','); // Cambia il separatore da | a ,
 | |
|       data.add(" ", 0); data.ltrim(2);     // Elimina il nome dell'utente
 | |
|       ini.set(usr, data);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| TSignature_mask::TSignature_mask() : TAutomask("ba8700a")
 | |
| {
 | |
|   _admin = user() == dongle().administrator();
 | |
|   xvt_sys_get_host_name(_host.get_buffer(), _host.size());
 | |
|   xvt_sys_get_user_name(_user.get_buffer(), _user.size());
 | |
|   set(F_HOST, _host);
 | |
|   set(F_NAME, _user);
 | |
|   load();  
 | |
| }
 | |
| 
 | |
| ///////////////////////////////////////////////////////////
 | |
| // TSignature_app
 | |
| ///////////////////////////////////////////////////////////
 | |
| 
 | |
| class TSignature_app : public TSkeleton_application
 | |
| {
 | |
| protected:
 | |
|   virtual const char* extra_modules() const { return "fd"; }
 | |
| 
 | |
| public:
 | |
|   virtual void main_loop();
 | |
| };
 | |
| 
 | |
| void TSignature_app::main_loop()
 | |
| {
 | |
|   TSignature_mask m;
 | |
|   while (m.run() == K_ENTER)
 | |
|     m.save();
 | |
| }
 | |
| 
 | |
| int ba8700(int argc, char* argv[])
 | |
| {
 | |
|   TSignature_app app;
 | |
|   app.run(argc, argv, TR("Firma digitale"));
 | |
|   return 0;
 | |
| } |