Patch level :
Files correlati : agalib Ricompilazione Demo : [ ] Commento : Aggiunto supporto per chiavi software SSA Aggiunto supporto per ricerche alternative con prefisso % git-svn-id: svn://10.65.10.50/branches/R_10_00@22582 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
36b5a19596
commit
6ac7b50cda
@ -317,7 +317,7 @@ TInfo_mask::TInfo_mask() : TProperty_sheet(TR("Informazioni"))
|
|||||||
case _dongle_hardlock: prot = "Hardlock"; break;
|
case _dongle_hardlock: prot = "Hardlock"; break;
|
||||||
case _dongle_eutron : prot = "Eutron"; break;
|
case _dongle_eutron : prot = "Eutron"; break;
|
||||||
case _dongle_network : prot = dongle().server_name(); break;
|
case _dongle_network : prot = dongle().server_name(); break;
|
||||||
case _dongle_aladdin : prot = "Aladdin"; break;
|
case _dongle_ssa : prot = "SSA"; break;
|
||||||
default : prot = TR("Nessuna"); break;
|
default : prot = TR("Nessuna"); break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -373,37 +373,27 @@ const char* TApplication::get_module_name() const
|
|||||||
if (module.empty())
|
if (module.empty())
|
||||||
{
|
{
|
||||||
const TDongle& d = dongle();
|
const TDongle& d = dongle();
|
||||||
const word aut = d.module_name2code(_name.left(2));
|
const TString4 modname = _name.left(2);
|
||||||
|
const word aut = d.module_name2code(modname);
|
||||||
module = d.module_code2desc(aut);
|
module = d.module_code2desc(aut);
|
||||||
bool ok = module.full();
|
bool ok = module.full();
|
||||||
if (ok && check_autorization())
|
if (ok && check_autorization())
|
||||||
ok = has_module(aut);
|
ok = dongle().login(modname);
|
||||||
|
|
||||||
if (!ok)
|
if (!ok)
|
||||||
{
|
{
|
||||||
if (module.empty())
|
if (module.empty())
|
||||||
module = "Tools";
|
module = modname;
|
||||||
TToken_string em(extra_modules());
|
TToken_string em(extra_modules());
|
||||||
if (!em.empty_items())
|
if (!em.empty_items())
|
||||||
{
|
{
|
||||||
if (em != "*")
|
ok = em == "*";
|
||||||
{
|
FOR_EACH_TOKEN(em, cod) if (!ok)
|
||||||
FOR_EACH_TOKEN(em, cod)
|
ok = dongle().login(cod);
|
||||||
{
|
|
||||||
const word alt = d.module_name2code(cod);
|
|
||||||
if (has_module(alt))
|
|
||||||
{
|
|
||||||
ok = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
ok = true;
|
|
||||||
}
|
}
|
||||||
if (!ok)
|
if (!ok)
|
||||||
{
|
{
|
||||||
error_box(TR("Il modulo '%s' non e' autorizzato per l'utente %s"), (const char*)module, ((const char*)user()));
|
error_box(FR("Il modulo '%s' non e' autorizzato per l'utente %s"), (const char*)module, ((const char*)user()));
|
||||||
module.cut(0);
|
module.cut(0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -522,7 +512,7 @@ void TApplication::run(
|
|||||||
const int sn = get_serial_number();
|
const int sn = get_serial_number();
|
||||||
if (sn > 0 && !test_assistance_year())
|
if (sn > 0 && !test_assistance_year())
|
||||||
{
|
{
|
||||||
error_box(TR("E' necessario attivare il contratto di assistenza per l'anno in corso"));
|
error_box(FR("E' necessario attivare il contratto di assistenza per la chiave %d"), sn);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -607,11 +597,11 @@ void TApplication::uncheck_menu_item(MENU_TAG item)
|
|||||||
|
|
||||||
// @mfunc Permette di abilitare/disabilitare una voce di menu'
|
// @mfunc Permette di abilitare/disabilitare una voce di menu'
|
||||||
void TApplication::enable_menu_item(
|
void TApplication::enable_menu_item(
|
||||||
MENU_TAG item, // @parm Voce del menu' da abilitare/disabilitare
|
MENU_TAG item, // @parm Voce del menu da abilitare/disabilitare
|
||||||
bool on) // @parm Operazione da svolgere sulla voce del menu':
|
bool on) // @parm Operazione da svolgere sulla voce del menu
|
||||||
//
|
//
|
||||||
// @flag TRUE | Viene abilitata la voce del menu'
|
// @flag TRUE | Viene abilitata la voce del menu
|
||||||
// @flag FALSE | Viene disabilitata la voce del menu'
|
// @flag FALSE| Viene disabilitata la voce del menu
|
||||||
{
|
{
|
||||||
xvt_menu_set_item_enabled(TASK_WIN, item, on);
|
xvt_menu_set_item_enabled(TASK_WIN, item, on);
|
||||||
xvt_menu_update(TASK_WIN);
|
xvt_menu_update(TASK_WIN);
|
||||||
|
@ -6,8 +6,7 @@ bool TAutomask::error_box(const char* fmt, ...)
|
|||||||
char* msg = message.get_buffer();
|
char* msg = message.get_buffer();
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
va_start(argptr, fmt);
|
va_start(argptr, fmt);
|
||||||
int len = vsprintf(msg, fmt, argptr);
|
vsnprintf_s(msg, message.size(), _TRUNCATE, fmt, argptr);
|
||||||
CHECKD(len <= message.size(), "Error message too long: ", len);
|
|
||||||
va_end(argptr);
|
va_end(argptr);
|
||||||
|
|
||||||
if (is_sheetmask() && !is_running())
|
if (is_sheetmask() && !is_running())
|
||||||
|
1765
include/brwbut.cpp
Normal file
1765
include/brwbut.cpp
Normal file
File diff suppressed because it is too large
Load Diff
406
include/brwbut.h
Normal file
406
include/brwbut.h
Normal file
@ -0,0 +1,406 @@
|
|||||||
|
#ifndef __BRWBUT_H
|
||||||
|
#define __BRWBUT_H
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TBrowse_button
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
class TEdit_field;
|
||||||
|
class TEditable_field;
|
||||||
|
|
||||||
|
class TBrowse_button : public TObject
|
||||||
|
{
|
||||||
|
TEdit_field* _fld;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
// @cmember Ritorna il primo valore di <p _fld>
|
||||||
|
TEdit_field& field() const { return *_fld; }
|
||||||
|
|
||||||
|
// @cmember Ritorna il campo <p n>-esimo
|
||||||
|
TEditable_field& field(short id) const;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
|
virtual void parse_input(TScanner& scanner) pure;
|
||||||
|
|
||||||
|
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
||||||
|
virtual void parse_output(TScanner& scanner) pure;
|
||||||
|
|
||||||
|
virtual KEY run() pure;
|
||||||
|
|
||||||
|
// @cmember Controlla la validita' del campo
|
||||||
|
virtual bool check(CheckTime = RUNNING_CHECK) pure;
|
||||||
|
|
||||||
|
virtual bool is_browse() const { return false; }
|
||||||
|
virtual bool is_sheet() const { return false; }
|
||||||
|
virtual bool is_filesel() const { return false; }
|
||||||
|
virtual bool is_profile() const { return false; }
|
||||||
|
|
||||||
|
TBrowse_button(TEdit_field* f);
|
||||||
|
virtual ~TBrowse_button();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TBrowse
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
// @class TList_sheet | Classe per la gestione dei list sheet
|
||||||
|
class TList_sheet : public TBrowse_button
|
||||||
|
// @author:(INTERNAL) Guido
|
||||||
|
{
|
||||||
|
// @access:(INTERNAL) Private Memeber
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Numero di riga corrente dello sheet
|
||||||
|
int _row;
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Titolo dello sheet
|
||||||
|
TString _caption;
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Testate delle colonne dello sheet
|
||||||
|
TToken_string _head;
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Righe dello sheet
|
||||||
|
TString_array _data;
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Campi di input sulla maschera
|
||||||
|
TToken_string _inp_id;
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Campi di output sulla maschera
|
||||||
|
TToken_string _out_id;
|
||||||
|
|
||||||
|
// @access Protected Member
|
||||||
|
protected:
|
||||||
|
// @cmember Ritorna il numero di riga selezionata
|
||||||
|
int do_input();
|
||||||
|
// @cmember Scrive l'output della ricerca sulla maschera
|
||||||
|
void do_output(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
|
void parse_input(TScanner& scanner);
|
||||||
|
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
||||||
|
void parse_output(TScanner& scanner);
|
||||||
|
|
||||||
|
// @access Public Memeber
|
||||||
|
public:
|
||||||
|
// @cmember Legge dal file gli item dello sheet
|
||||||
|
void parse_item(TScanner& scanner);
|
||||||
|
|
||||||
|
// @cmember Controlla la validita' del campo
|
||||||
|
virtual bool check(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
// @cmember Esegue la ricerca. Torna il tasto che ha terminato la ricerca
|
||||||
|
virtual KEY run();
|
||||||
|
|
||||||
|
virtual bool is_sheet() const { return true; }
|
||||||
|
|
||||||
|
TString_array& rows_array() { return _data; }
|
||||||
|
|
||||||
|
// @cmember Costruttore
|
||||||
|
TList_sheet(TEdit_field* f, const char* caption, const char* head);
|
||||||
|
// @cmember Distruttore
|
||||||
|
virtual ~TList_sheet();
|
||||||
|
};
|
||||||
|
|
||||||
|
// @doc INTERNAL
|
||||||
|
|
||||||
|
// @class TBrowse | Classe per la definizione dei campi con ricerca
|
||||||
|
class TBrowse : public TBrowse_button
|
||||||
|
// @author:(INTERNAL) Guido
|
||||||
|
{
|
||||||
|
// @access:(INTERNAL) Private Member
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Relazione della ricerca
|
||||||
|
TRelation* _relation;
|
||||||
|
// @cmember:(INTERNAL) Cursore sulla relazione
|
||||||
|
TCursor* _cursor;
|
||||||
|
// @cmember:(INTERNAL) Comando da eseguire alla pressione del tasto Gestione
|
||||||
|
TString _insert;
|
||||||
|
// @cmember:(INTERNAL) Filtro sul cursore
|
||||||
|
TString _filter;
|
||||||
|
// @cmember:(INTERNAL) Record selezionato
|
||||||
|
long _rec;
|
||||||
|
// @cmember:(INTERNAL) Indica se e' presente un campo secondario nella ricerca
|
||||||
|
bool _secondary;
|
||||||
|
// @cmember:(INTERNAL) Indica se sul campo e' gia' stato effettuato il check
|
||||||
|
bool _checked;
|
||||||
|
// @cmember:(INTERNAL) Chiave di ricerca alternativa (quando il testo del campo comincia con %)
|
||||||
|
TBrowse_button* _alt_browse;
|
||||||
|
|
||||||
|
// @cmember:(INTERNAL) Testate della maschera di ricerca
|
||||||
|
TToken_string _head;
|
||||||
|
// @cmember:(INTERNAL) Campi visualizzati dalla maschera di ricerca
|
||||||
|
TToken_string _items;
|
||||||
|
// @cmember:(INTERNAL) Campi di input sulla maschera
|
||||||
|
TToken_string _inp_id;
|
||||||
|
// @cmember:(INTERNAL) Campi di input sul file
|
||||||
|
TToken_string _inp_fn;
|
||||||
|
// @cmember:(INTERNAL) Campi di output sulla maschera
|
||||||
|
TToken_string _out_id;
|
||||||
|
// @cmember:(INTERNAL) Campi di output sul file
|
||||||
|
TToken_string _out_fn;
|
||||||
|
// @cmember:(INTERNAL) handler di filtro custom
|
||||||
|
CONTROL_HANDLER _custom_filter_handler;
|
||||||
|
|
||||||
|
// @access Protected Member
|
||||||
|
protected:
|
||||||
|
// @cmember Azzera i campi di output sulla maschera
|
||||||
|
void do_clear(CheckTime t);
|
||||||
|
// @cmember Chiama la maschera di gestione della ricerca
|
||||||
|
bool do_link(bool insert);
|
||||||
|
|
||||||
|
// @cmember Modifica il cursore
|
||||||
|
void custom_cursor();
|
||||||
|
|
||||||
|
// @cmember Crea lista identificatori di ricerca
|
||||||
|
TToken_string& create_siblings(TToken_string& siblings) const;
|
||||||
|
|
||||||
|
// @access Public Member
|
||||||
|
public:
|
||||||
|
// @cmember Modifica il display
|
||||||
|
void custom_display();
|
||||||
|
|
||||||
|
// @cmember Ritorna il numero di inputs senza contare quelli che funzionano
|
||||||
|
// solo da filtro
|
||||||
|
int input_fields();
|
||||||
|
|
||||||
|
// @cmember Ritorna la lista completa degli identificatori dei campi di input
|
||||||
|
const char* get_input_fields() const;
|
||||||
|
|
||||||
|
// @cmember Ritorna la lista completa dei nomi dei campi di input
|
||||||
|
const char* get_input_field_names() const;
|
||||||
|
|
||||||
|
// @cmember Aggiorna la lista completa degli identificatori dei campi di input
|
||||||
|
void set_input_fields(const char * inp_id) { _inp_id = inp_id;}
|
||||||
|
|
||||||
|
// @cmember Aggiorna la lista completa degli identificatori dei campi di input da un campo
|
||||||
|
void copy_input(const TBrowse * b);
|
||||||
|
|
||||||
|
// @cmember Aggiorna la lista completa dei nomi dei campi di input
|
||||||
|
void set_input_field_names(const char * inp_names) { _inp_fn = inp_names;}
|
||||||
|
|
||||||
|
// @cmember Aggiunge un campo di input alla posizione <pos>
|
||||||
|
void add_input_field(const char * id, const char * name, const int pos = - 1, bool select = false);
|
||||||
|
|
||||||
|
// @cmember Elimina un campo di display alla posizione <pos>
|
||||||
|
void remove_display_field(const int pos = -1);
|
||||||
|
|
||||||
|
// @cmember Aggiorna la lista completa degli identificatori dei campi di output
|
||||||
|
void set_display_fields(const char * hds, const char * names) { _head = hds; _items = names;}
|
||||||
|
int get_display_fields(TToken_string& hds, TToken_string& names) const { hds =_head; names = _items; return names.items(); }
|
||||||
|
|
||||||
|
// @cmember Aggiorna la display da un campo
|
||||||
|
void copy_display(const TBrowse * b);
|
||||||
|
|
||||||
|
// @cmember Aggiunge un campo di diplay alla posizione <pos>
|
||||||
|
void add_display_field(const char * hd, const char * name, const int pos = -1);
|
||||||
|
|
||||||
|
// @cmember Elimina un campo di input alla posizione <pos>
|
||||||
|
void remove_input_field(const int pos = -1);
|
||||||
|
|
||||||
|
// @cmember Ritorna la lista completa dei campi di output
|
||||||
|
const char* get_output_fields() const;
|
||||||
|
|
||||||
|
// @cmember Ritorna la lista completa dei nomi dei campi di output
|
||||||
|
const char* get_output_field_names() const;
|
||||||
|
|
||||||
|
// @cmember Aggiorna la lista completa degli identificatori dei campi di output
|
||||||
|
void set_output_fields(const char * out_id) { _out_id = out_id;}
|
||||||
|
|
||||||
|
// @cmember Aggiorna la lista completa dei nomi dei campi di input
|
||||||
|
void set_output_field_names(const char * out_names) { _out_fn = out_names;}
|
||||||
|
|
||||||
|
// @cmember Aggiorna la lista completa degli identificatori dei campi di output da un campo
|
||||||
|
void copy_output(const TBrowse * b);
|
||||||
|
|
||||||
|
// @cmember Aggiunge un campo di output alla posizione <pos>
|
||||||
|
void add_output_field(const char * id, const char * name, const int pos = -1);
|
||||||
|
|
||||||
|
// @cmember Elimina un campo di output alla posizione <pos>
|
||||||
|
void remove_output_field(const int pos = -1);
|
||||||
|
|
||||||
|
// @cmember Ritorna il numero di campi non vuoti e non filtrati
|
||||||
|
int do_input(bool filter = false);
|
||||||
|
|
||||||
|
// @cmember Scrive l'output della ricerca sulla maschera
|
||||||
|
void do_output(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
// @cmember Costruttore
|
||||||
|
TBrowse(TEdit_field* f, TRelation* r, int key = 1, const char* filter = "");
|
||||||
|
// @cmember Costruttore
|
||||||
|
TBrowse(TEdit_field* f, TCursor* c);
|
||||||
|
// @cmember Distruttore
|
||||||
|
~TBrowse();
|
||||||
|
|
||||||
|
// @cmember Controlla la sintassi della join del campo e ne setta i membri
|
||||||
|
void parse_join(TScanner& scanner);
|
||||||
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
|
void parse_input(TScanner& scanner);
|
||||||
|
// @cmember Controlla la sintassi della display del campo e ne setta i membri
|
||||||
|
void parse_display(TScanner& scanner);
|
||||||
|
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
||||||
|
void parse_output(TScanner& scanner);
|
||||||
|
// @cmember Controlla la sintassi della insert del campo e ne setta i membri
|
||||||
|
void parse_insert(TScanner& scanner);
|
||||||
|
// @cmember Controlla la sintassi della copy del campo e ne setta i membri
|
||||||
|
bool parse_copy(const TString& what, const TBrowse& b);
|
||||||
|
|
||||||
|
// @cmember Permette di settare il comando alla pressione del tasto Gestione
|
||||||
|
void set_insert(const char* s)
|
||||||
|
{ _insert = s;}
|
||||||
|
// @cmember Ritorna il valore di <p _insert>
|
||||||
|
const TString& get_insert() const
|
||||||
|
{ return _insert;}
|
||||||
|
|
||||||
|
// @cmember Ritorna il valore di <p _filter>
|
||||||
|
const TString& get_filter() const
|
||||||
|
{ return _filter;}
|
||||||
|
|
||||||
|
// @cmember Cambia il filtro della browse
|
||||||
|
void set_filter(const char * filter)
|
||||||
|
{ _filter = filter;}
|
||||||
|
|
||||||
|
// @cmember Cambia il cursore della browse
|
||||||
|
void set_cursor(TCursor * c);
|
||||||
|
|
||||||
|
// @cmember Cambia il filtro della browse
|
||||||
|
void set_custom_filter_handler(CONTROL_HANDLER custom_filter_handler) { _custom_filter_handler = custom_filter_handler;}
|
||||||
|
|
||||||
|
// @cmember Controlla la validita' del campo
|
||||||
|
bool check(CheckTime = RUNNING_CHECK);
|
||||||
|
// @cmember Controlla se il campo puo' essere vuoto
|
||||||
|
bool empty_check();
|
||||||
|
// @cmember Ritorna il valore di <p _head>
|
||||||
|
const TToken_string& head() const
|
||||||
|
{ return _head;}
|
||||||
|
// @cmember Ritorna il valore di <p _items>
|
||||||
|
const TToken_string& items() const
|
||||||
|
{ return _items;}
|
||||||
|
// @cmember Ritorna il valore di <p _cursor>
|
||||||
|
TCursor* cursor() const
|
||||||
|
{ return _cursor;}
|
||||||
|
// @cmember Ritorna il valore di <p _checked>
|
||||||
|
bool checked() const
|
||||||
|
{ return _checked;}
|
||||||
|
// @cmember Ritorna il valore di <p _secondary>
|
||||||
|
bool secondary() const
|
||||||
|
{ return _secondary;}
|
||||||
|
|
||||||
|
bool set_alt_browse(int altkey);
|
||||||
|
|
||||||
|
virtual bool is_browse() const { return true; }
|
||||||
|
|
||||||
|
// @cmember Esegue la ricerca. Torna il tasto che ha terminato la ricerca
|
||||||
|
virtual KEY run();
|
||||||
|
};
|
||||||
|
|
||||||
|
class TAlternative_browse : public TBrowse_button
|
||||||
|
{
|
||||||
|
int _altkey;
|
||||||
|
TString16 _altfld, _outfld;
|
||||||
|
TCursor* _cursor;
|
||||||
|
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void parse_input(TScanner& scanner) {}
|
||||||
|
virtual void parse_output(TScanner& scanner) {}
|
||||||
|
virtual bool check(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
public:
|
||||||
|
TCursor& cursor();
|
||||||
|
virtual KEY run();
|
||||||
|
TAlternative_browse(TEdit_field* ef, int altkey);
|
||||||
|
~TAlternative_browse();
|
||||||
|
};
|
||||||
|
|
||||||
|
class TFile_select : public TBrowse_button
|
||||||
|
{
|
||||||
|
TFilename _filter;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
|
virtual void parse_input(TScanner& scanner);
|
||||||
|
|
||||||
|
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
||||||
|
virtual void parse_output(TScanner& scanner);
|
||||||
|
|
||||||
|
virtual KEY run();
|
||||||
|
|
||||||
|
// @cmember Controlla la validita' del campo
|
||||||
|
virtual bool check(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
virtual bool is_filesel() const { return true; }
|
||||||
|
|
||||||
|
TFile_select(TEdit_field* ef, const char* filter);
|
||||||
|
virtual ~TFile_select() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
class TDir_select : public TBrowse_button
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
|
virtual void parse_input(TScanner& scanner);
|
||||||
|
|
||||||
|
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
||||||
|
virtual void parse_output(TScanner& scanner);
|
||||||
|
|
||||||
|
virtual KEY run();
|
||||||
|
|
||||||
|
// @cmember Controlla la validita' del campo
|
||||||
|
virtual bool check(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
virtual bool is_filesel() const { return TRUE; }
|
||||||
|
|
||||||
|
TDir_select(TEdit_field* ef);
|
||||||
|
virtual ~TDir_select() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
class TReport_select : public TBrowse_button
|
||||||
|
{
|
||||||
|
TString _classe;
|
||||||
|
|
||||||
|
public:
|
||||||
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
|
virtual void parse_input(TScanner& scanner);
|
||||||
|
|
||||||
|
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
||||||
|
virtual void parse_output(TScanner& scanner);
|
||||||
|
|
||||||
|
virtual KEY run();
|
||||||
|
|
||||||
|
// @cmember Controlla la validita' del campo
|
||||||
|
virtual bool check(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
virtual bool is_filesel() const { return true; }
|
||||||
|
|
||||||
|
TReport_select(TEdit_field* ef, const char* classe);
|
||||||
|
virtual ~TReport_select() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
class TProfile_select : public TBrowse_button
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
||||||
|
virtual void parse_input(TScanner& scanner);
|
||||||
|
|
||||||
|
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
||||||
|
virtual void parse_output(TScanner& scanner);
|
||||||
|
|
||||||
|
public:
|
||||||
|
virtual KEY run();
|
||||||
|
|
||||||
|
// @cmember Controlla la validita' del campo
|
||||||
|
virtual bool check(CheckTime = RUNNING_CHECK);
|
||||||
|
|
||||||
|
// @cmember E' un campo profilo
|
||||||
|
virtual bool is_profile() const { return true; }
|
||||||
|
|
||||||
|
// @cmember Estrae dal .ini tutti i profili
|
||||||
|
int get_descriptions(TString_array& a) const;
|
||||||
|
|
||||||
|
TProfile_select(TEdit_field* ef);
|
||||||
|
virtual ~TProfile_select() { }
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@ -20,22 +20,20 @@ class TDowJones : public TFile_cache
|
|||||||
int _dec_prices; // Decimali per i prezzi unitari
|
int _dec_prices; // Decimali per i prezzi unitari
|
||||||
int _dec_change; // Decimali per i cambi
|
int _dec_change; // Decimali per i cambi
|
||||||
bool _is_euro; // E' l'EURO in persona
|
bool _is_euro; // E' l'EURO in persona
|
||||||
exchange_type _et; // Il cambio e' espresso contro EURO
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const TExchangeData& operator=(const TExchangeData& d)
|
const TExchangeData& operator=(const TExchangeData& d)
|
||||||
{
|
{
|
||||||
_chg = d._chg; _dec = d._dec; _dec_prices = d._dec_prices;
|
_chg = d._chg; _dec = d._dec; _dec_prices = d._dec_prices;
|
||||||
_is_euro = d._is_euro; _et = d._et;
|
_is_euro = d._is_euro;
|
||||||
return d;
|
return d;
|
||||||
}
|
}
|
||||||
TExchangeData()
|
TExchangeData()
|
||||||
: _chg(UNO), _dec(0), _dec_prices(0), _is_euro(false), _et(_exchange_base) { }
|
: _chg(UNO), _dec(0), _dec_prices(0), _is_euro(false) { }
|
||||||
};
|
};
|
||||||
|
|
||||||
long _codditta;
|
long _codditta;
|
||||||
TString4 _base_val, _firm_val, _euro_val;
|
TString4 _firm_val, _euro_val;
|
||||||
real _euro_chg;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual TObject* rec2obj(const TRectype& rec) const;
|
virtual TObject* rec2obj(const TRectype& rec) const;
|
||||||
@ -44,24 +42,21 @@ protected:
|
|||||||
const TExchangeData& get(const char* key);
|
const TExchangeData& get(const char* key);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const TString& get_base_val();
|
|
||||||
const TString& get_firm_val();
|
const TString& get_firm_val();
|
||||||
const TString& get_euro_val();
|
const TString& get_euro_val();
|
||||||
void force_firm_val(const char* val);
|
void force_firm_val(const char* val);
|
||||||
const char* expand_value(const char* val);
|
const char* expand_value(const char* val);
|
||||||
const char* normalize_value(const char* val, const real& chg, exchange_type& et);
|
const char* normalize_value(const char* val, const real& chg);
|
||||||
|
|
||||||
real exchange(const real& num,
|
real exchange(const real& num,
|
||||||
const char* fromval, const real& fromchg, exchange_type fromeuro,
|
const char* fromval, const real& fromchg,
|
||||||
const char* toval, const real& tochg, exchange_type toeuro,
|
const char* toval, const real& tochg,
|
||||||
int price = 0);
|
int price = 0);
|
||||||
|
|
||||||
real exchange(const real& num, const TExchange& frval, const TExchange& toval, int price = 0);
|
real exchange(const real& num, const TExchange& frval, const TExchange& toval, int price = 0);
|
||||||
|
|
||||||
int get_dec(const char* val, bool prices = FALSE);
|
int get_dec(const char* val, bool prices = FALSE);
|
||||||
const real& get_change(const char* val, exchange_type& contro_euro);
|
const real& get_change(const char* val);
|
||||||
real get_base_change(const char* val);
|
|
||||||
real get_contro_change(const char* val);
|
|
||||||
|
|
||||||
virtual void flush();
|
virtual void flush();
|
||||||
|
|
||||||
@ -92,7 +87,7 @@ TObject* TDowJones::rec2obj(const TRectype& rec) const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (codval.not_empty())
|
if (codval.full())
|
||||||
{
|
{
|
||||||
data->_dec = rec.get_int("I0");
|
data->_dec = rec.get_int("I0");
|
||||||
data->_dec_prices = rec.get_int("I1");
|
data->_dec_prices = rec.get_int("I1");
|
||||||
@ -100,7 +95,6 @@ TObject* TDowJones::rec2obj(const TRectype& rec) const
|
|||||||
data->_dec_prices = data->_dec;
|
data->_dec_prices = data->_dec;
|
||||||
data->_dec_change = rec.get_int("I2");
|
data->_dec_change = rec.get_int("I2");
|
||||||
data->_is_euro = rec.get_bool("B0");
|
data->_is_euro = rec.get_bool("B0");
|
||||||
data->_et = rec.get_bool("B1") ? _exchange_contro : _exchange_base;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
@ -108,7 +102,6 @@ TObject* TDowJones::rec2obj(const TRectype& rec) const
|
|||||||
|
|
||||||
void TDowJones::flush()
|
void TDowJones::flush()
|
||||||
{
|
{
|
||||||
_base_val.cut(0);
|
|
||||||
_firm_val.cut(0);
|
_firm_val.cut(0);
|
||||||
_euro_val.cut(0);
|
_euro_val.cut(0);
|
||||||
kill_file();
|
kill_file();
|
||||||
@ -124,14 +117,12 @@ void TDowJones::test_cache()
|
|||||||
_firm_val = prefix().firm().codice_valuta();
|
_firm_val = prefix().firm().codice_valuta();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_base_val.empty())
|
if (_euro_val.empty())
|
||||||
{
|
{
|
||||||
fill();
|
fill();
|
||||||
FOR_EACH_ASSOC_OBJECT(_cache, hash, key, obj) if (*key)
|
FOR_EACH_ASSOC_OBJECT(_cache, hash, key, obj) if (*key)
|
||||||
{
|
{
|
||||||
const TExchangeData& data = *(const TExchangeData*)obj;
|
const TExchangeData& data = *(const TExchangeData*)obj;
|
||||||
if ((_base_val.empty() || strcmp(key, "LIT") == 0) && data._chg == UNO)
|
|
||||||
_base_val = key;
|
|
||||||
if (data._is_euro && _euro_val.empty())
|
if (data._is_euro && _euro_val.empty())
|
||||||
_euro_val = key;
|
_euro_val = key;
|
||||||
}
|
}
|
||||||
@ -139,22 +130,13 @@ void TDowJones::test_cache()
|
|||||||
if (_euro_val.empty()) // Si son dimenticati dell'EURO?
|
if (_euro_val.empty()) // Si son dimenticati dell'EURO?
|
||||||
{
|
{
|
||||||
TExchangeData* euro = new TExchangeData;
|
TExchangeData* euro = new TExchangeData;
|
||||||
euro->_chg = 1936.27; euro->_dec = euro->_dec_prices = 2;
|
euro->_chg = UNO; euro->_dec = euro->_dec_prices = 2;
|
||||||
euro->_is_euro = TRUE; euro->_et = _exchange_base;
|
euro->_is_euro = true;
|
||||||
_euro_val = "EUR";
|
_euro_val = "EUR";
|
||||||
_cache.add(_euro_val, euro);
|
_cache.add(_euro_val, euro);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_base_val.empty()) // Si son dimenticati delle LIRE?
|
|
||||||
{
|
|
||||||
TExchangeData* lira = new TExchangeData;
|
|
||||||
lira->_chg = UNO; lira->_dec = lira->_dec_prices = 0;
|
|
||||||
lira->_is_euro = FALSE; lira->_et = _exchange_base;
|
|
||||||
_base_val = "LIT";
|
|
||||||
_cache.add(_base_val, lira);
|
|
||||||
}
|
|
||||||
_firm_val = prefix().firm().codice_valuta();
|
_firm_val = prefix().firm().codice_valuta();
|
||||||
_euro_chg = get_base_change(_euro_val);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -167,9 +149,7 @@ const char* TDowJones::expand_value(const char* val)
|
|||||||
if (xvt_str_compare_ignoring_case(val, "_FIRM") == 0)
|
if (xvt_str_compare_ignoring_case(val, "_FIRM") == 0)
|
||||||
val = get_firm_val(); else
|
val = get_firm_val(); else
|
||||||
if (xvt_str_compare_ignoring_case(val, "_EURO") == 0)
|
if (xvt_str_compare_ignoring_case(val, "_EURO") == 0)
|
||||||
val = get_euro_val(); else
|
val = get_euro_val();
|
||||||
if (xvt_str_compare_ignoring_case(val, "_BASE") == 0)
|
|
||||||
val = get_base_val();
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -188,12 +168,6 @@ const TDowJones::TExchangeData& TDowJones::get(const char* val)
|
|||||||
return (const TExchangeData&)query(expand_value(val));
|
return (const TExchangeData&)query(expand_value(val));
|
||||||
}
|
}
|
||||||
|
|
||||||
const TString& TDowJones::get_base_val()
|
|
||||||
{
|
|
||||||
test_cache();
|
|
||||||
return _base_val;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TString& TDowJones::get_firm_val()
|
const TString& TDowJones::get_firm_val()
|
||||||
{
|
{
|
||||||
test_cache();
|
test_cache();
|
||||||
@ -215,10 +189,8 @@ void TDowJones::force_firm_val(const char* val)
|
|||||||
real TDowJones::exchange(const real& num, // Importo da convertire
|
real TDowJones::exchange(const real& num, // Importo da convertire
|
||||||
const char* frval, // Dalla valuta
|
const char* frval, // Dalla valuta
|
||||||
const real& frchg, // Dal cambio
|
const real& frchg, // Dal cambio
|
||||||
exchange_type freur, // Dal cambio in euro
|
|
||||||
const char* toval, // Alla valuta
|
const char* toval, // Alla valuta
|
||||||
const real& tochg, // Al cambio
|
const real& tochg, // Al cambio
|
||||||
exchange_type toeur, // Al cambio in euro
|
|
||||||
int price) // e' un prezzo ?
|
int price) // e' un prezzo ?
|
||||||
{
|
{
|
||||||
real n = num;
|
real n = num;
|
||||||
@ -228,27 +200,12 @@ real TDowJones::exchange(const real& num, // Importo da convertire
|
|||||||
const TExchangeData& datato = get(toval);
|
const TExchangeData& datato = get(toval);
|
||||||
|
|
||||||
real fr = frchg;
|
real fr = frchg;
|
||||||
if (fr <= ZERO) { fr = datafr._chg; freur = datafr._et; }
|
if (fr <= ZERO) fr = datafr._chg;
|
||||||
|
|
||||||
real to = tochg;
|
real to = tochg;
|
||||||
if (to <= ZERO) { to = datato._chg; toeur = datato._et; }
|
if (to <= ZERO) to = datato._chg;
|
||||||
|
|
||||||
const int mode = (freur == _exchange_contro ? 1 : 0) + (toeur == _exchange_contro ? 2 : 0);
|
n = n * to / fr; // Nuovo modo
|
||||||
switch (mode)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
n = (n * _euro_chg) / (fr * to); // Modo misto 1
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
n = n * (fr * to) / _euro_chg; // Modo misto 2
|
|
||||||
break;
|
|
||||||
case 3:
|
|
||||||
n = n * to / fr; // Nuovo modo
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
n = n * fr / to; // Vecchio modo
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (price == 0 || price == 1) // Arrotonda solo in caso normale
|
if (price == 0 || price == 1) // Arrotonda solo in caso normale
|
||||||
n.round(price ? datato._dec_prices : datato._dec);
|
n.round(price ? datato._dec_prices : datato._dec);
|
||||||
}
|
}
|
||||||
@ -260,10 +217,9 @@ real TDowJones::exchange(const real& num, // Importo da convertire
|
|||||||
const TExchange& toval, // Alla valuta
|
const TExchange& toval, // Alla valuta
|
||||||
int price) // e' un prezzo ?
|
int price) // e' un prezzo ?
|
||||||
{
|
{
|
||||||
exchange_type fret, toet;
|
const real& frch = frval.get_change();
|
||||||
const real& frch = frval.get_change(fret);
|
const real& toch = toval.get_change();
|
||||||
const real& toch = toval.get_change(toet);
|
return exchange(num, frval.get_value(), frch, toval.get_value(), toch, price);
|
||||||
return exchange(num, frval.get_value(), frch, fret, toval.get_value(), toch, toet, price);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int TDowJones::get_dec(const char* val, bool price)
|
int TDowJones::get_dec(const char* val, bool price)
|
||||||
@ -272,56 +228,15 @@ int TDowJones::get_dec(const char* val, bool price)
|
|||||||
return price ? data._dec_prices : data._dec;
|
return price ? data._dec_prices : data._dec;
|
||||||
}
|
}
|
||||||
|
|
||||||
const real& TDowJones::get_change(const char* val, exchange_type& et)
|
const real& TDowJones::get_change(const char* val)
|
||||||
{
|
{
|
||||||
const TExchangeData& data = get(val);
|
const TExchangeData& data = get(val);
|
||||||
et = data._et;
|
|
||||||
return data._chg;
|
return data._chg;
|
||||||
}
|
}
|
||||||
|
|
||||||
real TDowJones::get_base_change(const char* val)
|
const char* TDowJones::normalize_value(const char* val, const real& /*exch*/)
|
||||||
{
|
{
|
||||||
exchange_type et;
|
return expand_value(val);
|
||||||
real c = get_change(val, et);
|
|
||||||
if (et == _exchange_contro)
|
|
||||||
{
|
|
||||||
c = _euro_chg / c;
|
|
||||||
c.round(6);
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
real TDowJones::get_contro_change(const char* val)
|
|
||||||
{
|
|
||||||
exchange_type et;
|
|
||||||
real c = get_change(val, et);
|
|
||||||
if (et == _exchange_base)
|
|
||||||
{
|
|
||||||
c = _euro_chg / c;
|
|
||||||
c.round(6);
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char* TDowJones::normalize_value(const char* val, const real& exch, exchange_type& et)
|
|
||||||
{
|
|
||||||
val = expand_value(val);
|
|
||||||
if (et == _exchange_undefined)
|
|
||||||
{
|
|
||||||
if (exch > ZERO)
|
|
||||||
{
|
|
||||||
real base_diff = get_base_change(val) - exch;
|
|
||||||
base_diff = abs(base_diff);
|
|
||||||
|
|
||||||
real contro_diff = get_contro_change(val) - exch;
|
|
||||||
contro_diff = abs(contro_diff);
|
|
||||||
|
|
||||||
et = base_diff < contro_diff ? _exchange_base : _exchange_contro;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
get_change(val, et);
|
|
||||||
}
|
|
||||||
return val;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -332,60 +247,23 @@ void TExchange::copy(const TExchange& exc)
|
|||||||
{
|
{
|
||||||
strcpy(_val, exc._val);
|
strcpy(_val, exc._val);
|
||||||
_exchange = exc._exchange;
|
_exchange = exc._exchange;
|
||||||
_et = exc._et;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const real& TExchange::get_change(exchange_type& et) const
|
const real& TExchange::get_change() const
|
||||||
{
|
{
|
||||||
if (_exchange.is_zero())
|
if (_exchange.is_zero())
|
||||||
return DowJones.get_change(_val, et);
|
return DowJones.get_change(_val);
|
||||||
et = _et;
|
|
||||||
return _exchange;
|
return _exchange;
|
||||||
}
|
}
|
||||||
|
|
||||||
real TExchange::get_base_change() const
|
|
||||||
{
|
|
||||||
exchange_type et;
|
|
||||||
real c = get_change(et);
|
|
||||||
if (et != _exchange_base)
|
|
||||||
{
|
|
||||||
c = DowJones.get_base_change("_EURO") / c;
|
|
||||||
c.round(6);
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
real TExchange::get_contro_change() const
|
|
||||||
{
|
|
||||||
exchange_type et;
|
|
||||||
real c = get_change(et);
|
|
||||||
if (et != _exchange_contro)
|
|
||||||
{
|
|
||||||
c = DowJones.get_base_change("_EURO") / c;
|
|
||||||
c.round(6);
|
|
||||||
}
|
|
||||||
return c;
|
|
||||||
}
|
|
||||||
|
|
||||||
int TExchange::compare(const TSortable& obj) const
|
int TExchange::compare(const TSortable& obj) const
|
||||||
{
|
{
|
||||||
const TExchange& exc = (const TExchange&)obj;
|
const TExchange& exc = (const TExchange&)obj;
|
||||||
int cmp = strcmp(_val, exc._val);
|
int cmp = strcmp(_val, exc._val);
|
||||||
if (cmp == 0)
|
if (cmp == 0)
|
||||||
{
|
{
|
||||||
if (_et == exc._et)
|
const real diff = get_change() - exc.get_change();
|
||||||
{
|
cmp = diff.sign();
|
||||||
exchange_type dummy;
|
|
||||||
const real diff = get_change(dummy) - exc.get_change(dummy);
|
|
||||||
cmp = diff.sign();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
real chg1 = get_contro_change();
|
|
||||||
real chg2 = exc.get_contro_change();
|
|
||||||
const real diff = chg1 - chg2;
|
|
||||||
cmp = diff.sign();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return cmp;
|
return cmp;
|
||||||
}
|
}
|
||||||
@ -410,28 +288,24 @@ int TExchange::decimals(bool price) const
|
|||||||
return DowJones.get_dec(_val, price);
|
return DowJones.get_dec(_val, price);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TExchange::set(const char* val, const real& chg, exchange_type et)
|
void TExchange::set(const char* val, const real& chg)
|
||||||
{
|
{
|
||||||
val = DowJones.normalize_value(val, chg, et);
|
val = DowJones.normalize_value(val, chg);
|
||||||
strncpy(_val, val, 4);
|
strncpy(_val, val, 4);
|
||||||
_val[3] = '\0';
|
_val[3] = '\0';
|
||||||
_exchange = chg;
|
_exchange = chg;
|
||||||
_et = et;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TExchange::set(const TRectype& rec)
|
void TExchange::set(const TRectype& rec)
|
||||||
{
|
{
|
||||||
const TString4 codval = rec.get("CODVAL");
|
const TString4 codval = rec.get("CODVAL");
|
||||||
const real chg = rec.get_real("CAMBIO");
|
const real chg = rec.get_real("CAMBIO");
|
||||||
exchange_type et = _exchange_undefined;
|
set(codval, chg);
|
||||||
if (rec.exist("CONTROEURO"))
|
|
||||||
et = rec.get_bool("CONTROEURO") ? _exchange_contro : _exchange_base;
|
|
||||||
set(codval, chg, et);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TExchange::TExchange(const char* val, const real& chg, exchange_type et)
|
TExchange::TExchange(const char* val, const real& chg)
|
||||||
{
|
{
|
||||||
set(val, chg, et);
|
set(val, chg);
|
||||||
}
|
}
|
||||||
|
|
||||||
TExchange::TExchange(const TRectype& rec)
|
TExchange::TExchange(const TRectype& rec)
|
||||||
@ -443,11 +317,6 @@ TExchange::TExchange(const TRectype& rec)
|
|||||||
// TCurrency
|
// TCurrency
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
const TString& TCurrency::get_base_val()
|
|
||||||
{
|
|
||||||
return DowJones.get_base_val();
|
|
||||||
}
|
|
||||||
|
|
||||||
const TString& TCurrency::get_firm_val()
|
const TString& TCurrency::get_firm_val()
|
||||||
{
|
{
|
||||||
return DowJones.get_firm_val();
|
return DowJones.get_firm_val();
|
||||||
@ -458,11 +327,6 @@ const TString& TCurrency::get_euro_val()
|
|||||||
return DowJones.get_euro_val();
|
return DowJones.get_euro_val();
|
||||||
}
|
}
|
||||||
|
|
||||||
int TCurrency::get_base_dec(bool price)
|
|
||||||
{
|
|
||||||
return DowJones.get_dec(NULL, price);
|
|
||||||
}
|
|
||||||
|
|
||||||
int TCurrency::get_firm_dec(bool price)
|
int TCurrency::get_firm_dec(bool price)
|
||||||
{
|
{
|
||||||
return DowJones.get_dec(get_firm_val(), price);
|
return DowJones.get_dec(get_firm_val(), price);
|
||||||
@ -473,16 +337,6 @@ int TCurrency::get_euro_dec(bool price)
|
|||||||
return DowJones.get_dec(get_euro_val(), price);
|
return DowJones.get_dec(get_euro_val(), price);
|
||||||
}
|
}
|
||||||
|
|
||||||
const real& TCurrency::get_firm_change(exchange_type& ce)
|
|
||||||
{
|
|
||||||
return DowJones.get_change("_FIRM", ce);
|
|
||||||
}
|
|
||||||
|
|
||||||
const real& TCurrency::get_euro_change()
|
|
||||||
{
|
|
||||||
exchange_type dummy;
|
|
||||||
return DowJones.get_change("_EURO", dummy);
|
|
||||||
}
|
|
||||||
|
|
||||||
void TCurrency::force_firm_val(const char* val)
|
void TCurrency::force_firm_val(const char* val)
|
||||||
{
|
{
|
||||||
@ -494,9 +348,9 @@ void TCurrency::force_cache_update()
|
|||||||
DowJones.flush();
|
DowJones.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCurrency::force_value(const char* newval, const real& newchange, exchange_type newet)
|
void TCurrency::force_value(const char* newval, const real& newchange)
|
||||||
{
|
{
|
||||||
_chg.set(newval, newchange, newet);
|
_chg.set(newval, newchange);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCurrency::change_value(const TExchange& exc)
|
void TCurrency::change_value(const TExchange& exc)
|
||||||
@ -506,9 +360,9 @@ void TCurrency::change_value(const TExchange& exc)
|
|||||||
_chg = exc;
|
_chg = exc;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TCurrency::change_value(const char* val, const real& newchange, exchange_type to_euro)
|
void TCurrency::change_value(const char* val, const real& newchange)
|
||||||
{
|
{
|
||||||
const TExchange exc(val, newchange, to_euro);
|
const TExchange exc(val, newchange);
|
||||||
change_value(exc);
|
change_value(exc);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -616,20 +470,15 @@ TCurrency TCurrency::abs() const
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TCurrency::is_base_value() const
|
|
||||||
{
|
|
||||||
return get_base_val() == get_value();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TCurrency::is_firm_value() const
|
bool TCurrency::is_firm_value() const
|
||||||
{
|
{
|
||||||
return _chg.is_firm_value();
|
return _chg.is_firm_value();
|
||||||
}
|
}
|
||||||
|
|
||||||
TCurrency::TCurrency(const real& num, const char* val, const real& exchg, exchange_type et, bool price)
|
TCurrency::TCurrency(const real& num, const char* val, const real& exchg, bool price)
|
||||||
: _num(num), _price(price)
|
: _num(num), _price(price)
|
||||||
{
|
{
|
||||||
force_value(val, exchg, et);
|
force_value(val, exchg);
|
||||||
_num.round(decimals());
|
_num.round(decimals());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -651,9 +500,9 @@ bool same_values(const char * valuea, const char * valueb)
|
|||||||
|
|
||||||
|
|
||||||
real change_currency(const real& num,
|
real change_currency(const real& num,
|
||||||
const char* fromval, const real& fromchg, exchange_type fromeuro,
|
const char* fromval, const real& fromchg,
|
||||||
const char* toval, const real& tochg, exchange_type toeuro,
|
const char* toval, const real& tochg,
|
||||||
int price)
|
int price)
|
||||||
{
|
{
|
||||||
return DowJones.exchange(num, fromval, fromchg, fromeuro, toval, tochg, toeuro, price);
|
return DowJones.exchange(num, fromval, fromchg, toval, tochg, price);
|
||||||
}
|
}
|
||||||
|
@ -14,13 +14,10 @@
|
|||||||
class TRectype;
|
class TRectype;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum exchange_type { _exchange_base, _exchange_contro, _exchange_undefined };
|
|
||||||
|
|
||||||
class TExchange : public TSortable
|
class TExchange : public TSortable
|
||||||
{
|
{
|
||||||
char _val[4]; // Codice valuta
|
char _val[4]; // Codice valuta
|
||||||
real _exchange; // Cambio personalizzato
|
real _exchange; // Cambio personalizzato
|
||||||
exchange_type _et;// Cambio normale o contro euro
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void copy(const TExchange& exc);
|
void copy(const TExchange& exc);
|
||||||
@ -32,20 +29,17 @@ public:
|
|||||||
TExchange& operator=(const TExchange& exc) { copy(exc); return *this; }
|
TExchange& operator=(const TExchange& exc) { copy(exc); return *this; }
|
||||||
TExchange& operator=(const TRectype& rec) { set(rec); return *this; }
|
TExchange& operator=(const TRectype& rec) { set(rec); return *this; }
|
||||||
|
|
||||||
void set(const char* val = NULL, const real& exc = ZERO, exchange_type et = _exchange_undefined);
|
void set(const char* val = NULL, const real& exc = ZERO);
|
||||||
void set(const TRectype& rec);
|
void set(const TRectype& rec);
|
||||||
|
|
||||||
exchange_type get_type() const { return _et; }
|
|
||||||
bool is_firm_value() const;
|
bool is_firm_value() const;
|
||||||
bool is_euro_value() const;
|
bool is_euro_value() const;
|
||||||
|
|
||||||
const char* get_value() const { return _val; }
|
const char* get_value() const { return _val; }
|
||||||
const real& get_change(exchange_type& et) const;
|
const real& get_change() const;
|
||||||
real get_base_change() const;
|
|
||||||
real get_contro_change() const;
|
|
||||||
int decimals(bool price = false) const;
|
int decimals(bool price = false) const;
|
||||||
|
|
||||||
TExchange(const char* val = NULL, const real& exc = ZERO, exchange_type et = _exchange_undefined);
|
TExchange(const char* val = NULL, const real& exc = ZERO);
|
||||||
TExchange(const TExchange& exc) { copy(exc); }
|
TExchange(const TExchange& exc) { copy(exc); }
|
||||||
TExchange(const TRectype& rec);
|
TExchange(const TRectype& rec);
|
||||||
virtual ~TExchange() { }
|
virtual ~TExchange() { }
|
||||||
@ -63,14 +57,14 @@ protected:
|
|||||||
TCurrency(bool price) : _price(price) { } // Internal use only
|
TCurrency(bool price) : _price(price) { } // Internal use only
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static const TString& get_base_val();
|
//static const TString& get_base_val();
|
||||||
static const TString& get_firm_val();
|
static const TString& get_firm_val();
|
||||||
static const TString& get_euro_val();
|
static const TString& get_euro_val();
|
||||||
static int get_base_dec(bool price = false);
|
//static int get_base_dec(bool price = false);
|
||||||
static int get_firm_dec(bool price = false);
|
static int get_firm_dec(bool price = false);
|
||||||
static int get_euro_dec(bool price = false);
|
static int get_euro_dec(bool price = false);
|
||||||
static const real& get_firm_change(exchange_type& ce);
|
//static const real& get_firm_change(exchange_type& ce);
|
||||||
static const real& get_euro_change();
|
//static const real& get_euro_change();
|
||||||
|
|
||||||
// serve per la personalizzazione cgp4, per stampare il bilancio in euro
|
// serve per la personalizzazione cgp4, per stampare il bilancio in euro
|
||||||
static void force_firm_val(const char* val);
|
static void force_firm_val(const char* val);
|
||||||
@ -79,15 +73,15 @@ public:
|
|||||||
void set_price(bool p) { _price = p; }
|
void set_price(bool p) { _price = p; }
|
||||||
bool is_price() const { return _price; }
|
bool is_price() const { return _price; }
|
||||||
|
|
||||||
void force_value(const char* newval, const real& newchange = ZERO, exchange_type et = _exchange_undefined);
|
void force_value(const char* newval, const real& newchange = ZERO);
|
||||||
void change_value(const TExchange& exc);
|
void change_value(const TExchange& exc);
|
||||||
void change_value(const char* newval, const real& newchange = ZERO, exchange_type et = _exchange_undefined);
|
void change_value(const char* newval, const real& newchange = ZERO);
|
||||||
void change_to_base_val() { change_value(get_base_val()); }
|
//void change_to_base_val() { change_value(get_base_val()); }
|
||||||
void change_to_firm_val() { change_value(get_firm_val()); }
|
void change_to_firm_val() { change_value(get_firm_val()); }
|
||||||
void change_to_euro_val() { change_value(get_euro_val()); }
|
void change_to_euro_val() { change_value(get_euro_val()); }
|
||||||
|
|
||||||
const char* get_value() const { return _chg.get_value(); }
|
const char* get_value() const { return _chg.get_value(); }
|
||||||
bool is_base_value() const;
|
//bool is_base_value() const;
|
||||||
bool is_firm_value() const;
|
bool is_firm_value() const;
|
||||||
bool same_value_as(const TCurrency& cur) const { return _chg.same_value_as(cur._chg); }
|
bool same_value_as(const TCurrency& cur) const { return _chg.same_value_as(cur._chg); }
|
||||||
|
|
||||||
@ -97,9 +91,10 @@ public:
|
|||||||
void set_exchange(const TExchange& exc) { _chg = exc; }
|
void set_exchange(const TExchange& exc) { _chg = exc; }
|
||||||
const TExchange& get_exchange() const { return _chg; }
|
const TExchange& get_exchange() const { return _chg; }
|
||||||
|
|
||||||
const real& get_change(exchange_type& et) const { return _chg.get_change(et); }
|
//const real& get_change(exchange_type& et) const { return _chg.get_change(et); }
|
||||||
real get_base_change() const { return _chg.get_base_change(); }
|
//real get_base_change() const { return _chg.get_base_change(); }
|
||||||
real get_contro_change() const { return _chg.get_contro_change(); }
|
//real get_contro_change() const { return _chg.get_contro_change(); }
|
||||||
|
const real& get_change() const { return _chg.get_change(); }
|
||||||
|
|
||||||
const TCurrency& operator=(const TCurrency& cur) { copy(cur); return *this; }
|
const TCurrency& operator=(const TCurrency& cur) { copy(cur); return *this; }
|
||||||
|
|
||||||
@ -123,7 +118,8 @@ public:
|
|||||||
|
|
||||||
TCurrency() : _price(false) {}
|
TCurrency() : _price(false) {}
|
||||||
TCurrency(const TCurrency& cur) { copy(cur); }
|
TCurrency(const TCurrency& cur) { copy(cur); }
|
||||||
TCurrency(const real& num, const char* val = "", const real& exchg = ZERO, exchange_type et = _exchange_undefined, bool price = false);
|
//TCurrency(const real& num, const char* val = "", const real& exchg = ZERO, exchange_type et = _exchange_undefined, bool price = false);
|
||||||
|
TCurrency(const real& num, const char* val = "", const real& exchg = ZERO, bool price = false);
|
||||||
TCurrency(const real& num, const TExchange& chg, bool price = false);
|
TCurrency(const real& num, const TExchange& chg, bool price = false);
|
||||||
virtual ~TCurrency() { }
|
virtual ~TCurrency() { }
|
||||||
};
|
};
|
||||||
@ -135,8 +131,8 @@ public:
|
|||||||
|
|
||||||
TPrice() : TCurrency(true) { }
|
TPrice() : TCurrency(true) { }
|
||||||
TPrice(const TPrice& price) { copy(price); }
|
TPrice(const TPrice& price) { copy(price); }
|
||||||
TPrice(const real& num, const char* val = "", const real& exc = ZERO, exchange_type ext = _exchange_undefined)
|
TPrice(const real& num, const char* val = "", const real& exc = ZERO)
|
||||||
: TCurrency(num, val, exc, ext, true) { }
|
: TCurrency(num, val, exc) { set_price(true); }
|
||||||
virtual ~TPrice() { }
|
virtual ~TPrice() { }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -147,8 +143,8 @@ bool same_values(const char * valuea, const char * valueb);
|
|||||||
|
|
||||||
// Funzione di levello super-basso: usate solo se sapete bene cosa state facendo
|
// Funzione di levello super-basso: usate solo se sapete bene cosa state facendo
|
||||||
real change_currency(const real& num,
|
real change_currency(const real& num,
|
||||||
const char* fromval, const real& fromchg, exchange_type fromeuro,
|
const char* fromval, const real& fromchg,
|
||||||
const char* toval, const real& tochg, exchange_type toeuro = _exchange_undefined,
|
const char* toval, const real& tochg,
|
||||||
int price_round = 0);
|
int price_round = 0);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -124,8 +124,8 @@ void TDongle::garble(word* data) const
|
|||||||
case _dongle_eutron:
|
case _dongle_eutron:
|
||||||
xvt_dongle_sl_crypt(data);
|
xvt_dongle_sl_crypt(data);
|
||||||
break;
|
break;
|
||||||
case _dongle_aladdin:
|
case _dongle_ssa:
|
||||||
// xvt_dongle_al_crypt(data);
|
xvt_dongle_sa_crypt(data); // Reversible XOR encryption
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -303,9 +303,9 @@ bool TDongle::eutron_login(bool test_all_keys)
|
|||||||
{
|
{
|
||||||
bool ok = false;
|
bool ok = false;
|
||||||
|
|
||||||
const char* labels[3] = { "AGA.INFORMATICA", "AGA.CAMPO", "25EBAI" };
|
const char* labels[2] = { "AGA.CAMPO", "25EBAI" };
|
||||||
TDongleType types[3] = { _aga_dongle, _user_dongle, _developer_dongle };
|
TDongleType types[2] = { _user_dongle, _developer_dongle };
|
||||||
for (int k = test_all_keys ? 0 : 1; k < 3; k++)
|
for (int k = test_all_keys ? 0 : 1; k < 2; k++)
|
||||||
{
|
{
|
||||||
const unsigned char* pwd = (const unsigned char*)::encode(labels[k]);
|
const unsigned char* pwd = (const unsigned char*)::encode(labels[k]);
|
||||||
ok = xvt_dongle_sl_login((const unsigned char*)labels[k], pwd) != 0;
|
ok = xvt_dongle_sl_login((const unsigned char*)labels[k], pwd) != 0;
|
||||||
@ -365,13 +365,50 @@ bool TDongle::eutron_login(bool test_all_keys)
|
|||||||
_module.set(0, true); // Forza l'attivazione della base
|
_module.set(0, true); // Forza l'attivazione della base
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
set_developer_permissions();
|
set_developer_permissions();
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TDongle::aladdin_login(bool test_all_dongles)
|
bool TDongle::ssa_login(const char* mod)
|
||||||
{ return false; }
|
{
|
||||||
|
if (mod && *mod)
|
||||||
|
{
|
||||||
|
return xvt_dongle_sa_login(mod) == 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
_max_users = 1;
|
||||||
|
_last_update = TDate(TODAY);
|
||||||
|
_year_assist = _last_update.year();
|
||||||
|
|
||||||
|
_module.reset(); // Disattiva tutti i moduli
|
||||||
|
_module.set(0L); // Attiva la base
|
||||||
|
|
||||||
|
const int err = xvt_dongle_sa_login(NULL);
|
||||||
|
_serno = (err >= 0) ? err : 0xFFFF;
|
||||||
|
if (_serno != 0xFFFF)
|
||||||
|
{
|
||||||
|
_hardware =_dongle_ssa;
|
||||||
|
_type = _serno ? _user_dongle : _developer_dongle;
|
||||||
|
if (_serno)
|
||||||
|
{
|
||||||
|
Tdninst dn;
|
||||||
|
if (dn.find_serno())
|
||||||
|
_year_assist = dn.assist_year();
|
||||||
|
else
|
||||||
|
_year_assist = 2121;
|
||||||
|
for (word m = BAAUT; m < ENDAUT; m++)
|
||||||
|
{
|
||||||
|
const TString& name = module_code2name(m);
|
||||||
|
if (xvt_dongle_sa_test(name) == 0)
|
||||||
|
_module.set(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
set_developer_permissions();
|
||||||
|
}
|
||||||
|
return _serno != 0xFFFF;
|
||||||
|
}
|
||||||
|
|
||||||
bool TDongle::network_login(bool test_all_keys)
|
bool TDongle::network_login(bool test_all_keys)
|
||||||
{
|
{
|
||||||
@ -446,7 +483,7 @@ bool TDongle::login(bool test_all_keys)
|
|||||||
case _dongle_hardlock: ok = hardlock_login(test_all_keys); break;
|
case _dongle_hardlock: ok = hardlock_login(test_all_keys); break;
|
||||||
case _dongle_eutron : ok = eutron_login(test_all_keys); break;
|
case _dongle_eutron : ok = eutron_login(test_all_keys); break;
|
||||||
case _dongle_network : ok = network_login(test_all_keys); break;
|
case _dongle_network : ok = network_login(test_all_keys); break;
|
||||||
case _dongle_aladdin : ok = aladdin_login(test_all_keys); break;
|
case _dongle_ssa : ok = ssa_login(NULL); break;
|
||||||
default : ok = false; break;
|
default : ok = false; break;
|
||||||
}
|
}
|
||||||
if (!ok)
|
if (!ok)
|
||||||
@ -459,8 +496,8 @@ bool TDongle::login(bool test_all_keys)
|
|||||||
ok = eutron_login(test_all_keys);
|
ok = eutron_login(test_all_keys);
|
||||||
if (!ok && hw != _dongle_hardlock)
|
if (!ok && hw != _dongle_hardlock)
|
||||||
ok = hardlock_login(test_all_keys);
|
ok = hardlock_login(test_all_keys);
|
||||||
if (!ok && hw != _dongle_aladdin)
|
if (!ok && hw != _dongle_ssa)
|
||||||
ok = aladdin_login(test_all_keys);
|
ok = ssa_login(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ok)
|
if (ok)
|
||||||
@ -469,7 +506,7 @@ bool TDongle::login(bool test_all_keys)
|
|||||||
{ // DEMO
|
{ // DEMO
|
||||||
_hardware = _dongle_unknown;
|
_hardware = _dongle_unknown;
|
||||||
_type = _no_dongle;
|
_type = _no_dongle;
|
||||||
_serno = 0xFFFF; //numero di serie più alto possibile (65535 in exadecimals: non sarà mai raggiunto da chiavi clienti...magari!)
|
_serno = 0xFFFF; //numero di serie più alto possibile (65535 in esadecimale: non sarà mai raggiunto da chiavi clienti...magari!)
|
||||||
_max_users = 1;
|
_max_users = 1;
|
||||||
_last_update = TDate(TODAY);
|
_last_update = TDate(TODAY);
|
||||||
_year_assist = 3000; // anno di assistenza a 3000 per non avere problemi con le versioni nei vari anni
|
_year_assist = 3000; // anno di assistenza a 3000 per non avere problemi con le versioni nei vari anni
|
||||||
@ -482,6 +519,15 @@ bool TDongle::login(bool test_all_keys)
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TDongle::login(const char* module)
|
||||||
|
{
|
||||||
|
const word code = module_name2code(module);
|
||||||
|
bool ok = active(code);
|
||||||
|
if (ok && _hardware == _dongle_ssa)
|
||||||
|
ok = ssa_login(module);
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
bool TDongle::logout()
|
bool TDongle::logout()
|
||||||
{
|
{
|
||||||
switch (_hardware)
|
switch (_hardware)
|
||||||
@ -495,8 +541,8 @@ bool TDongle::logout()
|
|||||||
case _dongle_network:
|
case _dongle_network:
|
||||||
rpc_UserLogout(main_app().name());
|
rpc_UserLogout(main_app().name());
|
||||||
break;
|
break;
|
||||||
case _dongle_aladdin:
|
case _dongle_ssa:
|
||||||
// xvt_dongle_al_logout();
|
xvt_dongle_sa_logout(NULL);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
@ -643,12 +689,11 @@ int TDongle::oem() const
|
|||||||
if (campo.blank())
|
if (campo.blank())
|
||||||
campo = "Campo Enterprise";
|
campo = "Campo Enterprise";
|
||||||
if (firm.blank())
|
if (firm.blank())
|
||||||
firm = "AGA informatica s.r.l.";
|
firm = "Sirio Informatica e Sistemi s.p.a.";
|
||||||
if (breve.blank())
|
if (breve.blank())
|
||||||
breve = "Campo";
|
breve = "Campo";
|
||||||
|
|
||||||
if (oem < 0)
|
if (oem < 0) oem = 1;
|
||||||
oem = firm.starts_with("AGA ") ? 0 : 1;
|
|
||||||
}
|
}
|
||||||
return _OEM;
|
return _OEM;
|
||||||
}
|
}
|
||||||
@ -798,11 +843,6 @@ bool TDongle::burn_eutron()
|
|||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TDongle::burn_aladdin()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool TDongle::burn()
|
bool TDongle::burn()
|
||||||
{
|
{
|
||||||
bool ok = local() && _type == _user_dongle;
|
bool ok = local() && _type == _user_dongle;
|
||||||
@ -811,10 +851,9 @@ bool TDongle::burn()
|
|||||||
{
|
{
|
||||||
switch(_hardware)
|
switch(_hardware)
|
||||||
{
|
{
|
||||||
case _dongle_hardlock: ok = burn_hardlock(); break;
|
case _dongle_hardlock: ok = burn_hardlock(); break;
|
||||||
case _dongle_eutron : ok = burn_eutron(); break;
|
case _dongle_eutron : ok = burn_eutron(); break;
|
||||||
case _dongle_aladdin : ok = burn_aladdin(); break;
|
default : ok = false; break;
|
||||||
default : break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1258,7 +1297,6 @@ bool Tdninst::find_serno() const
|
|||||||
{
|
{
|
||||||
if (em.year_assist() > 2100)
|
if (em.year_assist() > 2100)
|
||||||
{
|
{
|
||||||
TToken_string l(80, '=');
|
|
||||||
good = em.find_serno(serno);
|
good = em.find_serno(serno);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
#include <strings.h>
|
#include <strings.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum TDongleHardware { _dongle_unknown, _dongle_hardlock, _dongle_eutron, _dongle_network, _dongle_aladdin };
|
enum TDongleHardware { _dongle_unknown, _dongle_hardlock, _dongle_eutron, _dongle_network, _dongle_ssa };
|
||||||
enum TDongleType { _no_dongle, _user_dongle, _developer_dongle, _aga_dongle };
|
enum TDongleType { _no_dongle, _user_dongle, _developer_dongle, _aga_dongle };
|
||||||
|
|
||||||
class TDongle : public TObject
|
class TDongle : public TObject
|
||||||
@ -39,11 +39,13 @@ protected:
|
|||||||
bool hardlock_login(bool test_all_dongles);
|
bool hardlock_login(bool test_all_dongles);
|
||||||
bool eutron_login(bool test_all_dongles);
|
bool eutron_login(bool test_all_dongles);
|
||||||
bool network_login(bool test_all_dongles);
|
bool network_login(bool test_all_dongles);
|
||||||
bool aladdin_login(bool test_all_dongles);
|
|
||||||
|
bool ssa_login(const char* mod);
|
||||||
|
bool ssa_test_module(const char* mod);
|
||||||
|
bool ssa_logout();
|
||||||
|
|
||||||
bool burn_hardlock();
|
bool burn_hardlock();
|
||||||
bool burn_eutron();
|
bool burn_eutron();
|
||||||
bool burn_aladdin();
|
|
||||||
|
|
||||||
int can_try_server() const;
|
int can_try_server() const;
|
||||||
const TString_array& info() const; // Array di coppie modulo|descrizione
|
const TString_array& info() const; // Array di coppie modulo|descrizione
|
||||||
@ -54,6 +56,7 @@ public: // TObject
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
bool login(bool test_all_dongles = false);
|
bool login(bool test_all_dongles = false);
|
||||||
|
bool login(const char* module);
|
||||||
bool logout();
|
bool logout();
|
||||||
|
|
||||||
word number() const { return _serno; }
|
word number() const { return _serno; }
|
||||||
|
@ -1464,7 +1464,7 @@ TCurrency TForm_currency::get_currency() const
|
|||||||
{
|
{
|
||||||
const char * codval = _driver ? _driver->get() : (const char *) form().get_curr_codval();
|
const char * codval = _driver ? _driver->get() : (const char *) form().get_curr_codval();
|
||||||
const real n(get());
|
const real n(get());
|
||||||
return TCurrency(n, codval, ZERO, _exchange_undefined, _flag.price != 0);
|
return TCurrency(n, codval, ZERO, _flag.price != 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TForm_currency::update()
|
bool TForm_currency::update()
|
||||||
@ -1555,7 +1555,7 @@ bool TForm_currency::update()
|
|||||||
int d = 0;
|
int d = 0;
|
||||||
if (_driver)
|
if (_driver)
|
||||||
{
|
{
|
||||||
const TCurrency z(ZERO, _driver->get(), ZERO, _exchange_base, _flag.price != 0);
|
const TCurrency z(ZERO, _driver->get(), ZERO, _flag.price != 0);
|
||||||
d = z.decimals();
|
d = z.decimals();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -4743,11 +4743,11 @@ int TForm::matches_done(int file)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TForm::set_output_exchange(const char* codval, real exchange, exchange_type et)
|
void TForm::set_output_exchange(const char* codval, real exchange)
|
||||||
{
|
{
|
||||||
if (_exchange == NULL)
|
if (_exchange == NULL)
|
||||||
_exchange = new TExchange;
|
_exchange = new TExchange;
|
||||||
_exchange->set(codval, exchange, et);
|
_exchange->set(codval, exchange);
|
||||||
}
|
}
|
||||||
|
|
||||||
TForm::TForm()
|
TForm::TForm()
|
||||||
|
@ -336,7 +336,7 @@ public:
|
|||||||
const bool magic_currency() const
|
const bool magic_currency() const
|
||||||
{ return _magic_currency; }
|
{ return _magic_currency; }
|
||||||
|
|
||||||
void set_output_exchange(const char* codval, real exchange = ZERO, exchange_type et = _exchange_undefined);
|
void set_output_exchange(const char* codval, real exchange = ZERO);
|
||||||
const TExchange* output_exchange() const { return _exchange; }
|
const TExchange* output_exchange() const { return _exchange; }
|
||||||
|
|
||||||
void enable_message_add(bool on) { _msg_add_enabled = on; }
|
void enable_message_add(bool on) { _msg_add_enabled = on; }
|
||||||
|
@ -972,11 +972,11 @@ bool TMail_message::send(TMAPI_session& lhSession, bool hide_ui)
|
|||||||
int i;
|
int i;
|
||||||
for (i = 0; i < items(); i++)
|
for (i = 0; i < items(); i++)
|
||||||
tot += row(i).len();
|
tot += row(i).len();
|
||||||
char * buffer = new char[tot + 1];
|
char* buffer = new char[tot + 16];
|
||||||
long b = 0;
|
long b = 0;
|
||||||
for (i = 0; i < items(); i++)
|
for (i = 0; i < items(); i++)
|
||||||
{
|
{
|
||||||
strcpy(&buffer[b], row(i));
|
strcpy_s(&buffer[b], tot-b+1, row(i));
|
||||||
b += row(i).len();
|
b += row(i).len();
|
||||||
}
|
}
|
||||||
buffer[b] = '\0';
|
buffer[b] = '\0';
|
||||||
@ -1065,7 +1065,7 @@ void TMail_message::set_date_time(const char* str)
|
|||||||
|
|
||||||
int anno, mese, giorno;
|
int anno, mese, giorno;
|
||||||
int ora = 12, minuto = 0, secondo = 0;
|
int ora = 12, minuto = 0, secondo = 0;
|
||||||
const int num = sscanf(str, "%d/%d/%d %d:%d:%d",
|
const int num = sscanf_s(str, "%d/%d/%d %d:%d:%d",
|
||||||
&anno, &mese, &giorno, &ora, &minuto, &secondo);
|
&anno, &mese, &giorno, &ora, &minuto, &secondo);
|
||||||
if (num >= 3)
|
if (num >= 3)
|
||||||
{
|
{
|
||||||
|
1584
include/maskfld.cpp
1584
include/maskfld.cpp
File diff suppressed because it is too large
Load Diff
@ -36,6 +36,14 @@ class TCurrency; // __CURRENCY_H
|
|||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
|
// @enum Momento di richiesta del check
|
||||||
|
enum CheckTime
|
||||||
|
{
|
||||||
|
RUNNING_CHECK, // @emem Check chiamato mentra la maschera sta andando
|
||||||
|
STARTING_CHECK, // @emem Check chiamato al caricamento della maschera
|
||||||
|
FINAL_CHECK // @emem Check chiamato quando la maschera si sta fermando
|
||||||
|
};
|
||||||
|
|
||||||
// @enum Tipo di check da eseguire su un controllo
|
// @enum Tipo di check da eseguire su un controllo
|
||||||
enum CheckType {
|
enum CheckType {
|
||||||
CHECK_NONE, // @emem Nessun controllo
|
CHECK_NONE, // @emem Nessun controllo
|
||||||
@ -46,11 +54,6 @@ enum CheckType {
|
|||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
// @enum Momento di richiesta del check
|
|
||||||
enum CheckTime {
|
|
||||||
RUNNING_CHECK, // @emem Check chiamato mentra la maschera sta andando
|
|
||||||
STARTING_CHECK, // @emem Check chiamato al caricamento della maschera
|
|
||||||
FINAL_CHECK }; // @emem Check chiamato quando la maschera si sta fermando
|
|
||||||
|
|
||||||
// @type CONTROL_HANDLER | Prototipo funzione per gestire i tasti speciali all'interno di un controllo
|
// @type CONTROL_HANDLER | Prototipo funzione per gestire i tasti speciali all'interno di un controllo
|
||||||
typedef bool (*CONTROL_HANDLER)(TMask_field& field, KEY key);
|
typedef bool (*CONTROL_HANDLER)(TMask_field& field, KEY key);
|
||||||
@ -264,21 +267,17 @@ public:
|
|||||||
virtual bool has_query_button() const
|
virtual bool has_query_button() const
|
||||||
{ return false;}
|
{ return false;}
|
||||||
// @cmember Ritorna il campo corrispondente su record
|
// @cmember Ritorna il campo corrispondente su record
|
||||||
virtual const TFieldref* field() const
|
virtual const TFieldref* field() const { return NULL; }
|
||||||
{ return NULL; }
|
|
||||||
|
|
||||||
// @cmember Imposta il tipo di checktype del campo
|
// @cmember Imposta il tipo di checktype del campo
|
||||||
virtual void check_type(CheckType);
|
virtual void check_type(CheckType);
|
||||||
// @cmember Ritorna lo stato di checktype del campo
|
// @cmember Ritorna lo stato di checktype del campo
|
||||||
virtual CheckType check_type() const
|
virtual CheckType check_type() const { return CHECK_NONE; }
|
||||||
{ return CHECK_NONE; }
|
|
||||||
// @cmember Ritorna true se il checktype del campo e' <p CHECK_REQUIRED>
|
// @cmember Ritorna true se il checktype del campo e' <p CHECK_REQUIRED>
|
||||||
bool required() const
|
bool required() const { return check_type() == CHECK_REQUIRED; }
|
||||||
{ return check_type() == CHECK_REQUIRED; }
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
// @cmember Controlla la validita' del campo
|
||||||
virtual bool check(CheckTime = RUNNING_CHECK)
|
virtual bool check(CheckTime = RUNNING_CHECK) { return true;}
|
||||||
{ return true;}
|
|
||||||
|
|
||||||
// @cmember Azzera il contenuto del campo
|
// @cmember Azzera il contenuto del campo
|
||||||
virtual void reset();
|
virtual void reset();
|
||||||
@ -793,386 +792,13 @@ public:
|
|||||||
virtual ~TCheckbutton_field() {}
|
virtual ~TCheckbutton_field() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TBrowse_button
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
class TEdit_field;
|
|
||||||
|
|
||||||
class TBrowse_button : public TObject
|
|
||||||
{
|
|
||||||
TEdit_field* _fld;
|
|
||||||
|
|
||||||
protected:
|
|
||||||
// @cmember Ritorna il primo valore di <p _fld>
|
|
||||||
TEdit_field& field() const
|
|
||||||
{ return *_fld; }
|
|
||||||
|
|
||||||
// @cmember Ritorna il campo <p n>-esimo
|
|
||||||
TEditable_field& field(short id) const;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
|
||||||
virtual void parse_input(TScanner& scanner) pure;
|
|
||||||
|
|
||||||
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
|
||||||
virtual void parse_output(TScanner& scanner) pure;
|
|
||||||
|
|
||||||
virtual KEY run() pure;
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
|
||||||
virtual bool check(CheckTime = RUNNING_CHECK) pure;
|
|
||||||
|
|
||||||
virtual bool is_browse() const { return false; }
|
|
||||||
virtual bool is_sheet() const { return false; }
|
|
||||||
virtual bool is_filesel() const { return false; }
|
|
||||||
virtual bool is_profile() const { return false; }
|
|
||||||
|
|
||||||
TBrowse_button(TEdit_field* f);
|
|
||||||
virtual ~TBrowse_button();
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
// TBrowse
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
// @class TList_sheet | Classe per la gestione dei list sheet
|
|
||||||
class TList_sheet : public TBrowse_button
|
|
||||||
// @author:(INTERNAL) Guido
|
|
||||||
{
|
|
||||||
// @access:(INTERNAL) Private Memeber
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Numero di riga corrente dello sheet
|
|
||||||
int _row;
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Titolo dello sheet
|
|
||||||
TString _caption;
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Testate delle colonne dello sheet
|
|
||||||
TToken_string _head;
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Righe dello sheet
|
|
||||||
TString_array _data;
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Campi di input sulla maschera
|
|
||||||
TToken_string _inp_id;
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Campi di output sulla maschera
|
|
||||||
TToken_string _out_id;
|
|
||||||
|
|
||||||
// @access Protected Member
|
|
||||||
protected:
|
|
||||||
// @cmember Ritorna il numero di riga selezionata
|
|
||||||
int do_input();
|
|
||||||
// @cmember Scrive l'output della ricerca sulla maschera
|
|
||||||
void do_output(CheckTime = RUNNING_CHECK);
|
|
||||||
|
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
|
||||||
void parse_input(TScanner& scanner);
|
|
||||||
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
|
||||||
void parse_output(TScanner& scanner);
|
|
||||||
|
|
||||||
// @access Public Memeber
|
|
||||||
public:
|
|
||||||
// @cmember Legge dal file gli item dello sheet
|
|
||||||
void parse_item(TScanner& scanner);
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
|
||||||
virtual bool check(CheckTime = RUNNING_CHECK);
|
|
||||||
|
|
||||||
// @cmember Esegue la ricerca. Torna il tasto che ha terminato la ricerca
|
|
||||||
virtual KEY run();
|
|
||||||
|
|
||||||
virtual bool is_sheet() const { return true; }
|
|
||||||
|
|
||||||
TString_array& rows_array() { return _data; }
|
|
||||||
|
|
||||||
// @cmember Costruttore
|
|
||||||
TList_sheet(TEdit_field* f, const char* caption, const char* head);
|
|
||||||
// @cmember Distruttore
|
|
||||||
virtual ~TList_sheet();
|
|
||||||
};
|
|
||||||
|
|
||||||
// @doc INTERNAL
|
|
||||||
|
|
||||||
// @class TBrowse | Classe per la definizione dei campi con ricerca
|
|
||||||
class TBrowse : public TBrowse_button
|
|
||||||
// @author:(INTERNAL) Guido
|
|
||||||
{
|
|
||||||
// @access:(INTERNAL) Private Member
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Relazione della ricerca
|
|
||||||
TRelation* _relation;
|
|
||||||
// @cmember:(INTERNAL) Cursore sulla relazione
|
|
||||||
TCursor* _cursor;
|
|
||||||
// @cmember:(INTERNAL) Comando da eseguire alla pressione del tasto Gestione
|
|
||||||
TString _insert;
|
|
||||||
// @cmember:(INTERNAL) Filtro sul cursore
|
|
||||||
TString _filter;
|
|
||||||
// @cmember:(INTERNAL) Record selezionato
|
|
||||||
long _rec;
|
|
||||||
// @cmember:(INTERNAL) Indica se e' presente un campo secondario nella ricerca
|
|
||||||
bool _secondary;
|
|
||||||
// @cmember:(INTERNAL) Indica se sul campo e' gia' stato effettuato il check
|
|
||||||
bool _checked;
|
|
||||||
|
|
||||||
// @cmember:(INTERNAL) Testate della maschera di ricerca
|
|
||||||
TToken_string _head;
|
|
||||||
// @cmember:(INTERNAL) Campi visualizzati dalla maschera di ricerca
|
|
||||||
TToken_string _items;
|
|
||||||
// @cmember:(INTERNAL) Campi di input sulla maschera
|
|
||||||
TToken_string _inp_id;
|
|
||||||
// @cmember:(INTERNAL) Campi di input sul file
|
|
||||||
TToken_string _inp_fn;
|
|
||||||
// @cmember:(INTERNAL) Campi di output sulla maschera
|
|
||||||
TToken_string _out_id;
|
|
||||||
// @cmember:(INTERNAL) Campi di output sul file
|
|
||||||
TToken_string _out_fn;
|
|
||||||
// @cmember:(INTERNAL) handler di filtro custom
|
|
||||||
CONTROL_HANDLER _custom_filter_handler;
|
|
||||||
|
|
||||||
// @access Protected Member
|
|
||||||
protected:
|
|
||||||
// @cmember Azzera i campi di output sulla maschera
|
|
||||||
void do_clear(CheckTime t);
|
|
||||||
// @cmember Chiama la maschera di gestione della ricerca
|
|
||||||
bool do_link(bool insert);
|
|
||||||
|
|
||||||
// @cmember Crea lista identificatori di ricerca
|
|
||||||
TToken_string& create_siblings(TToken_string& siblings);
|
|
||||||
|
|
||||||
// @cmember Modifica il cursore
|
|
||||||
void custom_cursor();
|
|
||||||
|
|
||||||
// @access Public Member
|
|
||||||
public:
|
|
||||||
// @cmember Modifica il display
|
|
||||||
void custom_display();
|
|
||||||
|
|
||||||
// @cmember Ritorna il numero di inputs senza contare quelli che funzionano
|
|
||||||
// solo da filtro
|
|
||||||
int input_fields();
|
|
||||||
|
|
||||||
// @cmember Ritorna la lista completa degli identificatori dei campi di input
|
|
||||||
const char* get_input_fields() const;
|
|
||||||
|
|
||||||
// @cmember Ritorna la lista completa dei nomi dei campi di input
|
|
||||||
const char* get_input_field_names() const;
|
|
||||||
|
|
||||||
// @cmember Aggiorna la lista completa degli identificatori dei campi di input
|
|
||||||
void set_input_fields(const char * inp_id) { _inp_id = inp_id;}
|
|
||||||
|
|
||||||
// @cmember Aggiorna la lista completa degli identificatori dei campi di input da un campo
|
|
||||||
void copy_input(const TBrowse * b);
|
|
||||||
|
|
||||||
// @cmember Aggiorna la lista completa dei nomi dei campi di input
|
|
||||||
void set_input_field_names(const char * inp_names) { _inp_fn = inp_names;}
|
|
||||||
|
|
||||||
// @cmember Aggiunge un campo di input alla posizione <pos>
|
|
||||||
void add_input_field(const char * id, const char * name, const int pos = - 1, bool select = false);
|
|
||||||
|
|
||||||
// @cmember Elimina un campo di display alla posizione <pos>
|
|
||||||
void remove_display_field(const int pos = -1);
|
|
||||||
|
|
||||||
// @cmember Aggiorna la lista completa degli identificatori dei campi di output
|
|
||||||
void set_display_fields(const char * hds, const char * names) { _head = hds; _items = names;}
|
|
||||||
|
|
||||||
// @cmember Aggiorna la il display da un campo
|
|
||||||
void copy_display(const TBrowse * b);
|
|
||||||
|
|
||||||
// @cmember Aggiunge un campo di diplay alla posizione <pos>
|
|
||||||
void add_display_field(const char * hd, const char * name, const int pos = -1);
|
|
||||||
|
|
||||||
// @cmember Elimina un campo di input alla posizione <pos>
|
|
||||||
void remove_input_field(const int pos = -1);
|
|
||||||
|
|
||||||
// @cmember Ritorna la lista completa dei campi di output
|
|
||||||
const char* get_output_fields() const;
|
|
||||||
|
|
||||||
// @cmember Ritorna la lista completa dei nomi dei campi di output
|
|
||||||
const char* get_output_field_names() const;
|
|
||||||
|
|
||||||
// @cmember Aggiorna la lista completa degli identificatori dei campi di output
|
|
||||||
void set_output_fields(const char * out_id) { _out_id = out_id;}
|
|
||||||
|
|
||||||
// @cmember Aggiorna la lista completa dei nomi dei campi di input
|
|
||||||
void set_output_field_names(const char * out_names) { _out_fn = out_names;}
|
|
||||||
|
|
||||||
// @cmember Aggiorna la lista completa degli identificatori dei campi di output da un campo
|
|
||||||
void copy_output(const TBrowse * b);
|
|
||||||
|
|
||||||
// @cmember Aggiunge un campo di output alla posizione <pos>
|
|
||||||
void add_output_field(const char * id, const char * name, const int pos = -1);
|
|
||||||
|
|
||||||
// @cmember Elimina un campo di output alla posizione <pos>
|
|
||||||
void remove_output_field(const int pos = -1);
|
|
||||||
|
|
||||||
// @cmember Ritorna il numero di campi non vuoti e non filtrati
|
|
||||||
int do_input(bool filter = false);
|
|
||||||
|
|
||||||
// @cmember Scrive l'output della ricerca sulla maschera
|
|
||||||
void do_output(CheckTime = RUNNING_CHECK);
|
|
||||||
|
|
||||||
// @cmember Costruttore
|
|
||||||
TBrowse(TEdit_field* f, TRelation* r, int key = 1, const char* filter = "");
|
|
||||||
// @cmember Costruttore
|
|
||||||
TBrowse(TEdit_field* f, TCursor* c);
|
|
||||||
// @cmember Distruttore
|
|
||||||
~TBrowse();
|
|
||||||
|
|
||||||
// @cmember Controlla la sintassi della join del campo e ne setta i membri
|
|
||||||
void parse_join(TScanner& scanner);
|
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
|
||||||
void parse_input(TScanner& scanner);
|
|
||||||
// @cmember Controlla la sintassi della display del campo e ne setta i membri
|
|
||||||
void parse_display(TScanner& scanner);
|
|
||||||
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
|
||||||
void parse_output(TScanner& scanner);
|
|
||||||
// @cmember Controlla la sintassi della insert del campo e ne setta i membri
|
|
||||||
void parse_insert(TScanner& scanner);
|
|
||||||
// @cmember Controlla la sintassi della copy del campo e ne setta i membri
|
|
||||||
bool parse_copy(const TString& what, const TBrowse& b);
|
|
||||||
|
|
||||||
// @cmember Permette di settare il comando alla pressione del tasto Gestione
|
|
||||||
void set_insert(const char* s)
|
|
||||||
{ _insert = s;}
|
|
||||||
// @cmember Ritorna il valore di <p _insert>
|
|
||||||
const TString& get_insert() const
|
|
||||||
{ return _insert;}
|
|
||||||
|
|
||||||
// @cmember Ritorna il valore di <p _filter>
|
|
||||||
const TString& get_filter() const
|
|
||||||
{ return _filter;}
|
|
||||||
|
|
||||||
// @cmember Cambia il filtro della browse
|
|
||||||
void set_filter(const char * filter)
|
|
||||||
{ _filter = filter;}
|
|
||||||
|
|
||||||
// @cmember Cambia il cursore della browse
|
|
||||||
void set_cursor(TCursor * c);
|
|
||||||
|
|
||||||
// @cmember Cambia il filtro della browse
|
|
||||||
void set_custom_filter_handler(CONTROL_HANDLER custom_filter_handler) { _custom_filter_handler = custom_filter_handler;}
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
|
||||||
bool check(CheckTime = RUNNING_CHECK);
|
|
||||||
// @cmember Controlla se il campo puo' essere vuoto
|
|
||||||
bool empty_check();
|
|
||||||
// @cmember Ritorna il valore di <p _head>
|
|
||||||
const TToken_string& head() const
|
|
||||||
{ return _head;}
|
|
||||||
// @cmember Ritorna il valore di <p _items>
|
|
||||||
const TToken_string& items() const
|
|
||||||
{ return _items;}
|
|
||||||
// @cmember Ritorna il valore di <p _cursor>
|
|
||||||
TCursor* cursor() const
|
|
||||||
{ return _cursor;}
|
|
||||||
// @cmember Ritorna il valore di <p _checked>
|
|
||||||
bool checked() const
|
|
||||||
{ return _checked;}
|
|
||||||
// @cmember Ritorna il valore di <p _secondary>
|
|
||||||
bool secondary() const
|
|
||||||
{ return _secondary;}
|
|
||||||
|
|
||||||
virtual bool is_browse() const { return true; }
|
|
||||||
|
|
||||||
// @cmember Esegue la ricerca. Torna il tasto che ha terminato la ricerca
|
|
||||||
virtual KEY run();
|
|
||||||
};
|
|
||||||
|
|
||||||
class TFile_select : public TBrowse_button
|
|
||||||
{
|
|
||||||
TFilename _filter;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
|
||||||
virtual void parse_input(TScanner& scanner);
|
|
||||||
|
|
||||||
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
|
||||||
virtual void parse_output(TScanner& scanner);
|
|
||||||
|
|
||||||
virtual KEY run();
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
|
||||||
virtual bool check(CheckTime = RUNNING_CHECK);
|
|
||||||
|
|
||||||
virtual bool is_filesel() const { return true; }
|
|
||||||
|
|
||||||
TFile_select(TEdit_field* ef, const char* filter);
|
|
||||||
virtual ~TFile_select() { }
|
|
||||||
};
|
|
||||||
|
|
||||||
class TDir_select : public TBrowse_button
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
|
||||||
virtual void parse_input(TScanner& scanner);
|
|
||||||
|
|
||||||
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
|
||||||
virtual void parse_output(TScanner& scanner);
|
|
||||||
|
|
||||||
virtual KEY run();
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
|
||||||
virtual bool check(CheckTime = RUNNING_CHECK);
|
|
||||||
|
|
||||||
virtual bool is_filesel() const { return TRUE; }
|
|
||||||
|
|
||||||
TDir_select(TEdit_field* ef);
|
|
||||||
virtual ~TDir_select() { }
|
|
||||||
};
|
|
||||||
|
|
||||||
class TReport_select : public TBrowse_button
|
|
||||||
{
|
|
||||||
TString _classe;
|
|
||||||
|
|
||||||
public:
|
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
|
||||||
virtual void parse_input(TScanner& scanner);
|
|
||||||
|
|
||||||
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
|
||||||
virtual void parse_output(TScanner& scanner);
|
|
||||||
|
|
||||||
virtual KEY run();
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
|
||||||
virtual bool check(CheckTime = RUNNING_CHECK);
|
|
||||||
|
|
||||||
virtual bool is_filesel() const { return true; }
|
|
||||||
|
|
||||||
TReport_select(TEdit_field* ef, const char* classe);
|
|
||||||
virtual ~TReport_select() { }
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
class TProfile_select : public TBrowse_button
|
|
||||||
{
|
|
||||||
protected:
|
|
||||||
// @cmember Controlla la sintassi della input del campo e ne setta i membri
|
|
||||||
virtual void parse_input(TScanner& scanner);
|
|
||||||
|
|
||||||
// @cmember Controlla la sintassi della output del campo e ne setta i membri
|
|
||||||
virtual void parse_output(TScanner& scanner);
|
|
||||||
|
|
||||||
public:
|
|
||||||
virtual KEY run();
|
|
||||||
|
|
||||||
// @cmember Controlla la validita' del campo
|
|
||||||
virtual bool check(CheckTime = RUNNING_CHECK);
|
|
||||||
|
|
||||||
// @cmember E' un campo profilo
|
|
||||||
virtual bool is_profile() const { return true; }
|
|
||||||
|
|
||||||
// @cmember Estrae dal .ini tutti i profili
|
|
||||||
int get_descriptions(TString_array& a) const;
|
|
||||||
|
|
||||||
TProfile_select(TEdit_field* ef);
|
|
||||||
virtual ~TProfile_select() { }
|
|
||||||
};
|
|
||||||
|
|
||||||
// @doc EXTERNAL
|
// @doc EXTERNAL
|
||||||
|
|
||||||
|
#ifndef __BRWBUT_H
|
||||||
|
#include <brwbut.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
// @class TEdit_field | Classe per la definizione dei campi editabili
|
// @class TEdit_field | Classe per la definizione dei campi editabili
|
||||||
//
|
//
|
||||||
// @base public | TEditable_field
|
// @base public | TEditable_field
|
||||||
|
@ -1158,7 +1158,7 @@ bool TSpreadsheet::event_handler(XI_OBJ* itf, XI_EVENT *xiev)
|
|||||||
const real r(src); // Memorizzo valore numerico
|
const real r(src); // Memorizzo valore numerico
|
||||||
const int pos = driver->dlg() - FIRST_FIELD;
|
const int pos = driver->dlg() - FIRST_FIELD;
|
||||||
const TString4 codval = rowrec.get(pos); // Codice valuta
|
const TString4 codval = rowrec.get(pos); // Codice valuta
|
||||||
const TCurrency c(r, codval, ZERO, _exchange_undefined, e->uppercase());
|
const TCurrency c(r, codval, ZERO, e->uppercase());
|
||||||
src = c.string(true);
|
src = c.string(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -1683,7 +1683,7 @@ bool TBrowse_sheet::browse_field_handler(TMask_field& f, KEY k)
|
|||||||
TBrowse* b = e.browse();
|
TBrowse* b = e.browse();
|
||||||
if (b != NULL)
|
if (b != NULL)
|
||||||
{
|
{
|
||||||
b->do_input(FALSE);
|
b->do_input(false);
|
||||||
rec = b->cursor()->read(_isgteq);
|
rec = b->cursor()->read(_isgteq);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
#include <diction.h>
|
#include <diction.h>
|
||||||
#include <expr.h>
|
#include <expr.h>
|
||||||
#include <isam.h>
|
|
||||||
#include <mask.h>
|
#include <mask.h>
|
||||||
|
#include <recarray.h>
|
||||||
#include <validate.h>
|
#include <validate.h>
|
||||||
#include <defmask.h>
|
#include <defmask.h>
|
||||||
|
|
||||||
@ -17,9 +17,7 @@ HIDDEN int get_val_param_count()
|
|||||||
HIDDEN const TString& get_val_param(int i)
|
HIDDEN const TString& get_val_param(int i)
|
||||||
{
|
{
|
||||||
const TString* str = (const TString*)_parms->objptr(i);
|
const TString* str = (const TString*)_parms->objptr(i);
|
||||||
if (str && *str)
|
return str ? *str : EMPTY_STRING;
|
||||||
return *str;
|
|
||||||
return EMPTY_STRING;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
HIDDEN int get_int_val_param(int i)
|
HIDDEN int get_int_val_param(int i)
|
||||||
@ -524,7 +522,7 @@ HIDDEN bool _mtcheck_val(TMask_field& f, KEY)
|
|||||||
const int month = atoi(f.get());
|
const int month = atoi(f.get());
|
||||||
if (month < 1 || month > 13)
|
if (month < 1 || month > 13)
|
||||||
return false;
|
return false;
|
||||||
|
/*
|
||||||
TLocalisamfile d(LF_NDITTE);
|
TLocalisamfile d(LF_NDITTE);
|
||||||
d.put(NDT_CODDITTA, prefix().get_codditta());
|
d.put(NDT_CODDITTA, prefix().get_codditta());
|
||||||
if (d.read() != NOERR)
|
if (d.read() != NOERR)
|
||||||
@ -532,6 +530,11 @@ HIDDEN bool _mtcheck_val(TMask_field& f, KEY)
|
|||||||
if (d.get_char(NDT_FREQVIVA) == 'M')
|
if (d.get_char(NDT_FREQVIVA) == 'M')
|
||||||
return true;
|
return true;
|
||||||
return month == 13 || (month % 3) == 0;
|
return month == 13 || (month % 3) == 0;
|
||||||
|
*/
|
||||||
|
if (month == 13 || (month % 3) == 0)
|
||||||
|
return true;
|
||||||
|
const TRectype& ndt = cache().get(LF_NDITTE, prefix().get_codditta());
|
||||||
|
return ndt.get_char(NDT_FREQVIVA) == 'M';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -547,7 +547,9 @@ void TViswin::shift_screen(scroll dir)
|
|||||||
case down:
|
case down:
|
||||||
xvt_rect_set(&r, 0, taby(Y_OFFSET)/*+1*/,
|
xvt_rect_set(&r, 0, taby(Y_OFFSET)/*+1*/,
|
||||||
tabx(int(_textcolumns) + X_OFFSET), taby(int(_textrows) + Y_OFFSET));
|
tabx(int(_textcolumns) + X_OFFSET), taby(int(_textrows) + Y_OFFSET));
|
||||||
|
|
||||||
xvt_dwin_scroll_rect (win(), &r, 0, dir == down ? taby(1) : -taby(1));
|
xvt_dwin_scroll_rect (win(), &r, 0, dir == down ? taby(1) : -taby(1));
|
||||||
|
|
||||||
paint_row (dir == up ? origin ().y + _textrows - 1 : origin ().y);
|
paint_row (dir == up ? origin ().y + _textrows - 1 : origin ().y);
|
||||||
break;
|
break;
|
||||||
case left:
|
case left:
|
||||||
@ -1554,18 +1556,6 @@ long TViswin::handler (WINDOW win, EVENT * ep)
|
|||||||
break;
|
break;
|
||||||
case E_MOUSE_MOVE:
|
case E_MOUSE_MOVE:
|
||||||
{
|
{
|
||||||
/*
|
|
||||||
if (!_selecting && !_iscross) // no buttons pressed
|
|
||||||
{
|
|
||||||
p = ep->v.mouse.where;
|
|
||||||
if (in_text (p))
|
|
||||||
{
|
|
||||||
p.x += (origin ().x - 6);
|
|
||||||
p.y += (origin ().y - 1);
|
|
||||||
check_link (&p);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
if (_selecting || _iscross)
|
if (_selecting || _iscross)
|
||||||
{
|
{
|
||||||
autoscroll(FALSE);
|
autoscroll(FALSE);
|
||||||
@ -1722,7 +1712,9 @@ long TViswin::handler (WINDOW win, EVENT * ep)
|
|||||||
erase_selection ();
|
erase_selection ();
|
||||||
check_link ();
|
check_link ();
|
||||||
update_thumb (origin().x, origin().y - 1l);
|
update_thumb (origin().x, origin().y - 1l);
|
||||||
_need_scroll = down;
|
//_need_scroll = down;
|
||||||
|
update (); // AAAARGH!
|
||||||
|
check_link (&_point);
|
||||||
}
|
}
|
||||||
else scroll_error(-1, 0);
|
else scroll_error(-1, 0);
|
||||||
}
|
}
|
||||||
@ -1785,7 +1777,10 @@ long TViswin::handler (WINDOW win, EVENT * ep)
|
|||||||
check_link ();
|
check_link ();
|
||||||
update_thumb (origin ().x, origin ().y + 1l);
|
update_thumb (origin ().x, origin ().y + 1l);
|
||||||
_point.y++;
|
_point.y++;
|
||||||
_need_scroll = up;
|
|
||||||
|
// _need_scroll = up;
|
||||||
|
update (); // AAAARGH!
|
||||||
|
check_link (&_point);
|
||||||
}
|
}
|
||||||
else scroll_error(-1, _txt.lines()-_textrows/*-1*/);
|
else scroll_error(-1, _txt.lines()-_textrows/*-1*/);
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user