Aggiunti ad elenco moduli IC

git-svn-id: svn://10.65.10.50/branches/R_10_00@22742 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2012-10-26 08:34:07 +00:00
parent b7b44916a5
commit 54fad7d162
14 changed files with 521 additions and 444 deletions

View File

@ -1645,14 +1645,11 @@ static void clean_string(TString& str)
str.upper();
}
TRecnotype TFuzzy_browse::find(const TString& raw_val)
TRecnotype TFuzzy_browse::find_magic(const TString& magic_val, double& best)
{
const TBrowse& b = *field().browse();
TCursor& c = cursor();
TString80 magic_val = raw_val;
clean_string(magic_val);
c = 0L;
TRecnotype recno = -1;
TRectype& curr = c.curr();
@ -1663,11 +1660,11 @@ TRecnotype TFuzzy_browse::find(const TString& raw_val)
return recno;
recno = -1;
best = 0.66;
const int testlen = magic_val.len()+1;
if (testlen > 3)
{
double best = 0.66;
for (c = 0L; c.ok(); ++c)
{
TString80 val = curr.get(_altfld);
@ -1690,6 +1687,40 @@ TRecnotype TFuzzy_browse::find(const TString& raw_val)
if (recno >= 0)
c = recno;
else
best = 0;
return recno;
}
TRecnotype TFuzzy_browse::find(const TString& raw_val)
{
TString80 magic_val = raw_val;
clean_string(magic_val);
double best = 0;
TRecnotype recno = find_magic(magic_val, best);
if (best < 0.8 && raw_val.find(' ') > 0)
{
magic_val = raw_val;
magic_val.strip_double_spaces();
const int spc = magic_val.find(' ');
if (spc > 0)
{
const TString& left = magic_val.left(spc);
const TString& right = magic_val.mid(spc+1);
magic_val.cut(0) << right << ' ' << left;
clean_string(magic_val);
double altbest = 0;
const TRecnotype altrecno = find_magic(magic_val, altbest);
if (altbest > best)
{
best = altbest;
recno = altrecno;
}
}
}
return recno;
}
@ -1760,7 +1791,8 @@ KEY TFuzzy_browse::run()
if (k == K_ENTER)
{
c = sheet.selected();
field().set(c.curr().get(_outfld));
const TFieldref fr(_outfld, 0);
field().set(fr.read(*c.relation()));
}
return k;
}

View File

@ -1,420 +1,421 @@
#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 TFuzzy_browse : public TBrowse_button
{
protected:
virtual void parse_input(TScanner& scanner) {}
virtual void parse_output(TScanner& scanner) {}
protected:
const int _altkey;
TString16 _altfld, _outfld;
virtual TCursor& cursor();
public:
virtual bool check(CheckTime = RUNNING_CHECK);
virtual KEY run();
virtual long find(const TString& val);
TFuzzy_browse (TEdit_field* ef, int key);
};
class TAlternative_browse : public TFuzzy_browse
{
TCursor* _cursor;
protected:
virtual TCursor& cursor();
public:
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
#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 TFuzzy_browse : public TBrowse_button
{
protected:
virtual void parse_input(TScanner& scanner) {}
virtual void parse_output(TScanner& scanner) {}
long find_magic(const TString& magic_val, double& best);
protected:
const int _altkey;
TString16 _altfld, _outfld;
virtual TCursor& cursor();
public:
virtual bool check(CheckTime = RUNNING_CHECK);
virtual KEY run();
virtual long find(const TString& val);
TFuzzy_browse (TEdit_field* ef, int key);
};
class TAlternative_browse : public TFuzzy_browse
{
TCursor* _cursor;
protected:
virtual TCursor& cursor();
public:
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

View File

@ -22,7 +22,7 @@ ab Analisi di bilancio
gv Gestione versamenti F24
ca Contabilita' Analitica
vd Vendita al dettaglio
af Autoformazione
ic IVA per cassa
pe Preventivazione
ep Effetti Passivi
tc Trasferimento altre Contabilita'

View File

@ -4,7 +4,6 @@
#include <config.h>
#include <dongle.h>
#include <isamrpc.h>
#include <modaut.h>
#include <scanner.h>
#include <utility.h>
#include <xvtility.h>
@ -383,8 +382,8 @@ bool TDongle::ssa_login(const char* mod)
_last_update = TDate(TODAY);
_year_assist = _last_update.year();
_module.reset(); // Disattiva tutti i moduli
_module.set(0L); // Attiva la base
_module.reset(); // Disattiva tutti i moduli ...
_module.set(long(BAAUT)); // ... tranne la base
const int err = xvt_dongle_sa_login(NULL);
_serno = (err >= 0) ? err : 0xFFFF;
@ -403,7 +402,7 @@ bool TDongle::ssa_login(const char* mod)
{
const TString& name = module_code2name(m);
if (xvt_dongle_sa_test(name) == 0)
_module.set(m);
_module.set(long(m));
}
}
else

View File

@ -188,6 +188,7 @@
#define LF_LVCONDV 168
#define LF_LVRCONDV 169
#define LF_CONTACT 170
#define LF_IVADIFF 171
#define LF_EXTERNAL 1000 // Files with id >= are considered to be externals

View File

@ -25,7 +25,7 @@
#define GVAUT 21
#define CAAUT 22
#define VDAUT 23
#define AFAUT 24
#define ICAUT 24
#define PEAUT 25
#define EPAUT 26
#define TCAUT 27

View File

@ -47,6 +47,7 @@
#define MOV_DNDOC "DNDOC"
#define MOV_DATAINC "DATAINC"
#define MOV_LIQDIFF "LIQDIFF"
#define MOV_IVAXCASSA "IVAXCASSA"
#define MOV_MODPAG "MODPAG"
#define MOV_CONTRATTO "CONTRATTO"
#define MOV_DATARETT "DATARETT"

View File

@ -2534,6 +2534,8 @@ bool TSpreadsheet::notify(int rec, KEY k)
KEY TSpreadsheet::edit(int n)
{
str2mask(n);
if (_needs_update == n) // Altrimenti grossi problemi chiamando edit() durante editing cella
_needs_update = -1;
KEY k = owner().run_editmask(n);
if (active())
{

View File

@ -119,7 +119,7 @@ void TRecord_info::translate_key(TToken_string& t) const// Traduce l'espressione
int paren2,last,from = 0,to = 0;
if (paren1 >= 0 && is_sub && is_upper)
paren1 = ws.find('('); // Trova la seconda parentesi (in questo caso c'e' per forza)
paren1 = ws.find('(', paren1+1); // Trova la seconda parentesi (in questo caso c'e' per forza)
if (paren1 >= 0) // Trova la prima virgola o parentesi chiusa (per qualsiasi espressione)
{
@ -170,7 +170,7 @@ void TRecord_info::compute_len()
for (int f = _recdes.NFields-1; f >= 0; f--)
_len += _recdes.Fd[f].Len;
if (_len > 0)
_len++;
_len++; // Deleted record flag
}
TToken_string & TRecord_info::relation(int logicnum)

View File

@ -227,6 +227,11 @@ bool TIndwin::setstatus(long l)
_status = l > _max ? _max : l;
if (_can_cancel && !xvt_vobj_is_valid(win()))
{
_gauge = NULL_WIN;
on_key(K_ESC);
}
if (_gauge != NULL_WIN)
xvt_sbar_set_pos(_gauge, HVGAUGE, _status);

View File

@ -83,8 +83,9 @@ const TToken_string& TRecordset::sheet_head() const
case _boolfld: head << 'C'; break;
case _wordfld:
case _intfld:
case _longfld:
case _realfld: head << 'R'; break;
case _longfld: head << 'R'; break;
case _datefld: head << 'D'; break;
case _realfld: head << 'V'; break;
default: break;
}
}
@ -136,6 +137,7 @@ bool TRecordset::save_as_html(const char* path)
case _longfld:
case _realfld: out << "align=\"right\""; break;
case _boolfld: out << "align=\"center\""; break;
case _datefld: out << "style=\"mso-number-format:\\Short Date\""; break;
default : out << "style=\"mso-number-format:\\@\""; break; // Stringa!
}
out << " />" << endl;

View File

@ -166,7 +166,9 @@ TSheet_control::TSheet_control(
if (wi.find('M') >= 0)
_type[i] = 'M'; else
if (wi.find('C') >= 0)
_type[i] = 'C';
_type[i] = 'C'; else
if (wi.find('D') >= 0)
_type[i] = 'D';
if (i == 0 && v <= 1)
{
@ -1390,6 +1392,7 @@ bool TSheet::export_handler(TMask_field& f, KEY k)
switch (ct)
{
case 'C': col.SetAttr("align", "center"); break;
case 'D': col.SetAttr("style", "mso-number-format:\\Short Date"); break;
case 'P':
case 'R':
case 'V': col.SetAttr("align", "right"); break;
@ -1426,8 +1429,22 @@ bool TSheet::export_handler(TMask_field& f, KEY k)
if (str.full())
{
const char ct = s._sheet->column_type(idx);
if (ct == 'P' || ct == 'V')
switch (ct)
{
case 'D':
if (str.len() == 8)
{
const TDate d(atol(str));
str = d.stringa();
}
break;
case 'P':
case 'V':
xvt_str_number_format(str.get_buffer(), str.size());
break;
default:
break;
}
xls << str;
}
xls << "</td>" << endl;
@ -1564,7 +1581,7 @@ TCursor_sheet::TCursor_sheet(TCursor* cursor, const char* fields,
const TFieldtypes tipo = rf->type();
if (tipo == _intfld || tipo == _longfld || tipo == _realfld)
{
byte c = sheet().column_type(campo);
const byte c = sheet().column_type(campo);
if (c == ' ')
sheet().align_column(campo, TRUE);
}

View File

@ -429,7 +429,19 @@ int TSQL_recordset::on_get_items(int argc, char** values, char** columns)
{
const int len = strlen(values[i]);
if (len > info._width)
{
info._width = len;
if (info._type == _alfafld)
{
if (len == 8 && atol(values[i]) > 19000000)
{
info._type = _datefld;
info._width = 10;
} else
if (real::is_real(values[i]))
info._type = _realfld;
}
}
}
}
}

View File

@ -779,23 +779,25 @@ COLOR trans_color(
// @doc INTERNAL
// @func HIDDEN void | set_cursor | Cambia il cursore del mouse
HIDDEN void set_cursor(
HIDDEN void set_wait_cursor(
bool w) // @parm Indica il tipo di cursore da utilizzare:
//
// @flag TRUE | Cursore a clessidra per le wait
// @flag FALSE | Cursore a frecca normale
{
static int _count = 0;
static WINDOW _win = NULL_WIN;
// static WINDOW _win = NULL_WIN;
if (w)
{
if (_count == 0)
{
_win = cur_win();
/* _win = cur_win();
if (_win == NULL_WIN)
_win = TASK_WIN;
xvt_win_set_cursor(_win, CURSOR_WAIT);
*/
xvt_win_set_cursor(TASK_WIN, CURSOR_WAIT);
}
_count++;
}
@ -805,20 +807,23 @@ HIDDEN void set_cursor(
CHECK(_count >= 0, "end_wait without matching begin_wait");
if (_count == 0)
{
/*
WINDOW cur = cur_win();
if (cur == _win)
xvt_win_set_cursor(_win, CURSOR_ARROW);
else
xvt_win_set_cursor(TASK_WIN, CURSOR_ARROW);
*/
xvt_win_set_cursor(TASK_WIN, CURSOR_ARROW);
}
}
}
void begin_wait()
{ set_cursor(TRUE); }
{ set_wait_cursor(true); }
void end_wait()
{ set_cursor(FALSE); }
{ set_wait_cursor(false); }
// @doc INTERNAL