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;
 | 
						|
} |