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