guy 2a3e35827d Patch level : 10.0 200
Files correlati     : ba1.exe
Ricompilazione Demo : [ ]
Commento            :
0001036: installazione cd patch 180
Installando ex novo ed indicando una società esistente di dati su una cartella diversa viene segnalato l'errore ba1.exe in fase di conversione archivi, richiamando da manutenzione archivi la conversione vengono generati gli errori allegati. Nell'area ftp di Aga, cartella Ilaria allego l'area dati SIDA per il test.


git-svn-id: svn://10.65.10.50/trunk@17971 c028cbd2-c16b-5b4b-a496-9718f37d4682
2008-12-23 09:05:22 +00:00

505 lines
20 KiB
C++
Executable File

#ifndef __MASK_H
#define __MASK_H
#ifndef __MASKFLD_H
#include <maskfld.h>
#endif
class TSheet_field;
class TTree_field;
class TCurrency;
class TButton_tool;
// @doc EXTERNAL
// @type MASK_HANDLER | Prototipo funzione per gestire i tasti speciali all'interno di una maschera.
typedef bool (*MASK_HANDLER)(TMask& mask, KEY key);
// @doc EXTERNAL
// @enum Modalita' di utilizzo della maschera corrente
enum TMaskmode {
NO_MODE, // @emem Nessun modo
MODE_QUERY, // @emem Modalita' di richiesta chiave
MODE_QUERYINS, // @emem Modalita' di richiesta chiave e inserimento dati
MODE_INS , // @emem Modalita' di inserimento dati
MODE_MOD // @emem Modalita' di modifca dati
};
// @doc EXTERNAL
// @class TMask | Classe per la gestione delle maschere video
//
// @base public | TWindow
class TMask : public TWindow
{
// @author:(INTERNAL) Guido
// @access Protected Member
protected:
// @ccost:(INTERNAL) MAX_PAGES | 16 | Massimo numero di pagine nella maschera
enum { MAX_PAGES = 16 };
// @cmember Gestisce gli eventi della finestra
virtual void handler(WINDOW win, EVENT* ep);
// @access:(INTERNAL) Private Member
private:
// @cmember:(INTERNAL) Windows delle pagine
WINDOW _toolwin, _notebook, _single, _toolbar;
WINDOW _pagewin[MAX_PAGES];
// @cmember:(INTERNAL) Numero della maschera all'interno del file sorgente
int _mask_num;
// @cmember:(INTERNAL) Numero di pagine della maschera
int _pages;
// @cmember:(INTERNAL) Pagina corrente
int _page;
// @cmember:(INTERNAL) Controlla le pagine abilitate
TBit_array _enabled;
// @cmember:(INTERNAL) Modalita' di utilizzo della maschera
int _mode;
// @cmember:(INTERNAL) Numero di campi della maschera
TArray _field;
// @cmember:(INTERNAL) Primo controllo che deve ricevere il focus
int _first_focus;
// @cmember:(INTERNAL) Numero del controllo con il focus
int _focus;
// @cmember:(INTERNAL) Puntatore allo sheet che contiene la maschera (puo' essere NULL)
TSheet_field* _sheet;
// @cmember:(INTERNAL) Handler per gestire i tasti speciali nelle maschere
MASK_HANDLER _handler;
// @cmember:(INTERNAL) Nome del file sorgente contenente la maschera
TFilename _source_file;
// @cmember:(INTERNAL) Nome del file di salvataggio in cui sono scaricati i valori della maschera
TFilename _workfile;
// @cmember:(INTERNAL) Ultimo offset letto nel file di salvataggio
long _lastpos;
// @cmember:(INTERNAL) Array per convertire da id a posizione
TPointer_array _position;
// @cmember:(INTERNAL) Controlla se la maschera deve fare i controlli iniziali di validita' dei campi
bool _should_check;
int _error_severity;
TString _error_message;
short _msg_field;
KEY _msg_key;
// @cmember:(INTERNAL) identificatore del campo da testare per l'autopremimento
short _test_fld;
// @cmember:(INTERNAL) posizione del campo che per ultimo ha testato l'autopremimento
int _last_test;
// @access Protected Member
protected:
TArray& fields_array() { return _field; }
// @cmember Legge i controlli relativi ad un campo
void load_checks() const;
// @cmember Inizializza la maschera (Chiamata quando la maschera parte)
virtual void start_run();
// @cmember Aggiunge una toolbar alla maschera (top or bottom only)
void insert_bar(WINDOW bar);
WINDOW create_book(bool single);
WINDOW create_bar(int height); // if height < 0 then BottomBar else TopBar
// @cmember Aggiunge una pagina alla maschera
void insert_page(WINDOW page, int pos);
WINDOW create_page(const char* title, int pos); // -1 <= pos < MAX_PAGES
// @cmember Inizializza la maschera
void init_mask();
// @cmember Legge la pagina da file
void read_page(TScanner& scanner, bool toolbar);
// @cmember Aggiunge alla maschera tutti i bottoni per la navigazione tra le pagine
void set_tab_buttons(TToken_string& tabs);
// @cmember Ritorna il numero del primo campo attivo della pagina con finestra <p w>
int find_first_active(WINDOW w) const;
// @cmember Ritorna il numero della finestra padre del campo <p f>
int find_parent_page(const TMask_field& f) const;
// @cmember Esegue i check del campo corrente
bool check_current_field() const;
// @cmember Mostra la prossima/precedente pagina
virtual void next_page(int p);
// @cmember Cambia arbitrariamente il nome del file (uso molto raro)
void set_source_file(const char* name) { _source_file = name; }
WINDOW notebook() const { return _notebook; }
// @access Public Member
public:
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
TMask(const char* filename, int num = 0, int max = MAX_PAGES);
// @cmember Costruttore (crea una maschera vuota con i parametri dati)
TMask(const char* title, int pages, int cols, int rows, int xpos = -1, int ypos = -1, WINDOW parent = NULL_WIN);
// @cmember Costruttore (crea una maschera vuota per leggerla con read_mask)
TMask();
// @cmember Distruttore
virtual ~TMask();
// @cmember Imposta i bit di read_only
void set_locking(TBit_array & read_only, TToken_string & fields, bool on);
// @cmember Legge la maschera da file
void read_mask(const char* name, int num, int max);
// @cmember Legge il campo da file
virtual TMask_field* parse_field(TScanner& scanner);
// @cmember Legge il bottone della toolbar da file
virtual TMask_field* parse_tool(TScanner& scanner);
// Aggiunge un campo all'array _field
void add_field(TMask_field* f);
// @cmember Ritorna l'identificatore della classe maschera
virtual word class_id() const;
// @cmember Ritorna TRUE se la maschera deriva dalla classe <p c>
virtual bool is_kind_of(word c) const;
// @cmember Ritorna il numero della pagina corrente
int curr_page() const { return _page; }
// @cmember Ritorna la finestra della pagina <p> (Usare con attenzione)
WINDOW page_win(int p) const;
// @cmember Ritorna la finestra della pagina corrente
WINDOW curr_win() const;
// @cmember Ritorna il nome del file contentente la maschera
const TFilename& source_file() const { return _source_file; }
// @cmember Ritorna il numero della maschera nel file (> 0 se spreadsheet)
int number() const { return _mask_num; }
// @cmember Aggiunge alla maschera tutti i bottoni Pag.n
void set_default_tab_buttons();
// @cmember Aggiunge runtime un campo testo alla maschera
TMask_field& add_static (short id, int page, const char* prompt, int x, int y, const char* flags = "");
// @cmember Aggiunge runtime un campo stringa alla maschera
TEdit_field& add_string (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", int width = 0);
// @cmember Aggiunge runtime un campo numerico alla maschera
TReal_field& add_number (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", int ndec = 0);
// @cmember Aggiunge runtime un campo importo alla maschera
TCurrency_field& add_currency (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", short driver = 0);
// @cmember Aggiunge runtime un campo data alla maschera
TDate_field& add_date (short id, int page, const char* prompt, int x, int y, const char* flags = "");
// @cmember Aggiunge runtime un campo bottone alla maschera
TButton_field& add_button (short id, int page, const char* prompt, int x, int y, int dx = 9, int dy = 1, const char* flags = "", short bmpup = 0, short bmpdn = 0);
// @cmember Aggiunge runtime un campo boolean alla maschera
TBoolean_field& add_boolean (short id, int page, const char* prompt, int x, int y, const char* flags = "");
TCheckbutton_field& add_checkbutton (short id, int page, const char* prompt, int x, int y, int dx = 9, int dy = 1, const char* flags = "", short bmpup = 0, short bmpdn = 0);
// @cmember Aggiunge runtime un campo radio button alla maschera
TRadio_field& add_radio(short id, int page, const char* prompt, int x, int y, int dx, const char* codes, const char* items, const char* flags = "");
// @cmember Aggiunge runtime un campo memo alla maschera
TMemo_field& add_memo (short id, int page, const char* prompt, int x, int y, int dx = 78, int dy = 4, const char* flags = "");
// @cmember Aggiunge runtime un campo zoom alla maschera
TZoom_field& add_zoom (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", int width = 0);
// @cmember Aggiunge runtime un campo lista alla maschera
TList_field& add_list (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", const char* codes = NULL, const char* items = NULL);
// @cmember Aggiunge runtime un campo albero
TTree_field& add_tree (short id, int page, int x, int y, int dx, int dy, const char* flags = "");
// @cmember Aggiunge runtime un group box alla maschera
TGroup_field& add_groupbox (short id, int page, const char* prompt, int x, int y, int dx = 78, int dy = 3, const char* flags = "");
// @cmember Aggiunge runtime un bottone alla toolbar
TButton_tool& add_button_tool(short id, const char* prompt, short bmpup);
// @cmember Ritorna il numero di campi della maschera
int fields() const
{ return _field.items(); }
// @cmember Ritorna il numero di sheet della maschera
int sheets() const;
// @cmember Setta la modalita' di utilizzo della maschera
void set_mode(int m)
{ _mode = m; }
// @cmember Ritorna la modalita' corrente di utilizzo della maschera
int mode() const
{ return _mode; }
// @cmember Setta la chiave da testare per l'autopremimento
void set_test_field(short id)
{ if (_test_fld < 0) _test_fld = id; }
void set_focus_field(short id);
virtual void notify_focus_field(short id);
// @cmember Controlla i campi di una maschera (TRUE se tutti validi)
bool check_fields();
// @cmember Esegue il check e i messaggi sul campo <p fld_id> della maschera
virtual void check_field( short fld_id );
// @cmember Forza la chiusura della maschera
virtual bool stop_run(KEY key);
// @cmember Controlla se la maschera puo' essere chiusa (TRUE se puo' esserlo)
virtual bool can_be_closed() const;
// @cmember Permette di aprire una maschera
virtual void open();
// @cmember Permette di chiudere una maschera
virtual void close();
// @cmember Permette di attivare/disattivare tutta la pagina
virtual void activate(bool on = TRUE);
virtual void set_focus();
// @cmember Converte un identificatore di campo nella sua posizione
int id2pos(short id) const;
// @cmember Cerca la posizione di un campo per nome
int field2pos(const char* fieldname) const;
// @cmember Ritorna il campo i-esimo della maschera
TMask_field& fld(int i) const
{ return (TMask_field&)_field[i]; }
// @cmember Ritorna il campo contraddistinto dall'identificatore passato
TMask_field& field(short id) const;
// @cmember Ritorna il campo corrispondente ad id se c'e'
TMask_field* find_by_id(short id) const;
// @cmember Ritorna il campo corrispondente al FIELD fieldname
TMask_field* find_by_fieldname(const char* fieldname) const;
// @cmember Ritorna il campo di edit contraddistinto dall'identificatore passato
TEdit_field& efield(short id) const;
// @cmember Ritorna il campo listbox contraddistinto dall'identificatore passato
TList_field& lfield(short id) const;
// @cmember Ritorna il campo sheet contraddistinto dall'identificatore passato
TSheet_field& sfield(short id) const;
// @cmember Ritorna il campo tree contraddistinto dall'identificatore passato
TTree_field& tfield(short id) const;
// @cmember Setta il campo con una stringa
virtual void set(short fld_id, const char* str, byte hit=0x0);
// @cmember Setta il campo con un reale
void set(short fld_id, const real& num, byte hit=0x0);
// @cmember Setta il campo con una data
void set(short fld_id, const TDate& day, byte hit=0x0);
// @cmember Setta il campo con un valore
void set(short fld_id, long num, byte hit=0x0);
// @cmember Setta il campo con un currency
void set(short fld_id, const TCurrency& num, byte hit=0x0);
// @cmember Setta una tutti i campi che hanno come FIELD <p fld_id>
void set(const char * fld_id, const char * str, byte hit=0x0);
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di stringa
virtual const TString& get(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di long
long get_long(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di int
// (chiama <mf TMask::get_long>)
int get_int(short fld_id) const
{ return (int)get_long(fld_id); }
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di bool
bool get_bool(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di real
real get_real(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di data
TDate get_date(short fld_id) const;
// @cmember Ritorna il contenuto del campo <p fld_id> sotto forma di currency
TCurrency& get_currency(short fld_id, TCurrency& curr) const;
// @cmember Ritorna il contenuto del primo campo attivo campo che ha come FIELD <p fld_id>
const TString& get(const char * fld_id) const;
// @cmember Indica quale campo deve ricevere per primo il focus nella maschera
int first_focus(short id, bool dirty = true);
// @cmember Ritorna il numero del controllo che possiede il focus
TOperable_field& focus_field() const;
// @cmember Disabilita la lettura dei check della maschera
void disable_starting_check()
{ _should_check = false;}
// @cmember Evita che venga chiamata la TWindow
virtual void on_button(short);
// @cmember Assegna una azione al tasto non standard
virtual bool on_key(KEY key);
// @cmember Aggiorna i campi con i valori salvati una volta che non ci sono processi attivi
virtual void on_idle();
// @cmember Aggiorna in tutti campi della maschera, che fanno riferimento ad una ditta,
// con il riferimento alla ditta attuale
virtual void on_firm_change();
// @cmember Abilita/disabilita un campo
virtual void enable(short fld_id, bool on = TRUE);
// @cmember Disabilita un campo (chiama <mf TMask::enable>)
void disable(short fld_id)
{ enable(fld_id, false); }
// @cmember Riporta il cmpo allo stato di abilitazione iniziale
void enable_default(short fld_id = 0);
// @cmember Forza la visualizzazione della pagina p
void show_page(int p);
// @cmember Abilita/disabilita una pagina e tutte le successive
void enable_page(byte p, bool on = true);
// @cmember Disabilita una pagina e tutte le successive (chiama <mf TMask::enable_page>)
void disable_page(byte p)
{ enable_page(p, false); }
// @cmember Controlla se una pagina e' disabilitata (TRUE se disabilitata)
bool page_enabled(byte p) const;
// @cmember Ritorna il numero di chiavi utilizzate nei campi della maschera
word num_keys() const;
// @cmember Abilita/disabilita i campi di una chiave sulla maschera
void enable_key(word key, bool on = TRUE);
// @cmember Disabilita i campi di una chiave sulla maschera (chiama <mf TMask::enable_key>)
void disable_key(word key)
{ enable_key(key, false); }
// @cmember Ritorna il l'identificatore di un campo della chiave <p key>
TEditable_field* get_key_field(word key, bool first) const;
// @cmember Controlla se la chiave <p key> ha un valore significativo
// (TRUE se il valore e' valido)
bool key_valid(word key) const;
// @cmember Permette di mostrare/nascondere un campo (chiama <mf TMask_field::show>)
virtual void show(short fld_id = -1, bool on = TRUE);
// @cmember Permette di nascondere un campo (chiama <mf TMask::show>)
void hide(short fld_id = 0)
{ show(fld_id, false); }
// @cmember Rimette lo stato di default del campo
void show_default(short fld_id = 0);
// @cmember Azzera il campo
void reset(short fld_id = 0);
// @cmember Azzera il campo
void reset(const char * fld_id) {set(fld_id, "");}
// @cmember Legge, dalla relazione <p Trelation>, i valori del campo con specifica FIELD
void autoload(const TRelation& r);
// @cmember Scrive, dalla relazione <p Trelation>, i valori del campo con specifica FIELD
void autosave(TRelation& r) const;
// @cmember Permette di mandare un tasto ad un campo
void send_key(KEY key, short id, TMask_field* from = NULL);
// @cmember Permette di mandare un handler ad un controllo
virtual void set_handler(short fld_id, CONTROL_HANDLER handler);
// @cmember Permette di mandare un handler ad una maschera
void set_handler(MASK_HANDLER handler);
// @cmember Permette di settare il nome del file di salvataggio
void set_workfile(const char* workfile)
{ _workfile = workfile; _lastpos = 0L;}
// @cmember Salva i valori dei campi della maschera sul file di salvataggio
bool save(bool append = false) const;
// @cmember Legge i valori dei campi della maschera da file di salvataggio
bool load(bool reset = false);
// @cmember Copia i valori dei campi dalla maschera <p m>
void copy_values(const TMask &m);
// @cmember Crea il nome del file dei profili in <p f>
bool make_profile_name(TFilename& f) const;
// @cmember Salva il profilo <p num>
int save_profile(int num = 0, const char* desc = NULL) const;
// @cmember Carica il profilo <p num>
int load_profile(int num = 0, bool reset = TRUE);
// @cmember Elimina il profilo <p num>
bool kill_profile(int num);
// @cmember Carica il defaults dei campi
virtual void load_defaults();
// @cmember Ritorna il primo campo dirty
short dirty() const;
// @cmember Setta lo sheet di cui la maschera gestisce le righe
void set_sheet(TSheet_field* s)
{ _sheet = s; }
// @cmember Ritorna lo sheet che gestisce la maschera
TSheet_field* get_sheet() const
{ return _sheet; }
// @cmember Ritorna se la maschera e' contenuta in uno sheet (TRUE se contenuta)
bool is_sheetmask() const
{ return _sheet != NULL; }
// @cmember Ritorna TRUE se la maschera non ha modalita' di utilizzo (vedi <t TMaskmode>)
bool no_mode() const
{ return _mode == NO_MODE; }
// @cmember Ritorna TRUE se la maschera e' in modalita' di richiesta (vedi <t TMaskmode>)
bool query_mode() const
{ return _mode == MODE_QUERY || _mode == MODE_QUERYINS; }
// @cmember Ritorna TRUE se la maschera e' in modalita' di modifica (vedi <t TMaskmode>)
bool edit_mode() const
{ return _mode == MODE_MOD; }
// @cmember Ritorna TRUE se la maschera e' in modalita' di inserimento (vedi <t TMaskmode>)
bool insert_mode() const
{ return _mode == MODE_QUERYINS || _mode == MODE_INS; }
// @cmember Ritorna il titolo della maschera
virtual const char* get_caption(TString& str) const;
// @cmember Setta il titolo della maschera
virtual void set_caption(const char* c);
// @cmember Mostra un messaggio d'errore appena possibile
void post_error_message(const char* msg, int severity);
// @cmember Viene eseguita se il campo viene modificato
virtual bool on_dirty(TMask_field& c);
// @cmember Ritorna la pagina identificata da <p w>
int win2page(WINDOW p) const ;
// @cmember Ritorna la finestra della toolbar
WINDOW toolwin() const
{ return _toolwin; }
WINDOW toolbar() const
{ return _toolbar; }
};
// @doc EXTERNAL
// @class TTimed_box | Classe per la gestione dei box di richiesta temporizzati
//
// @base public | TMask
class TTimed_box: public TMask
{
long _timer_delay;
long _timer_id;
short _button_id;
protected:
virtual void handler(WINDOW win, EVENT* ep);
virtual void start_run();
public:
TTimed_box(const char * header,const char * message,int seconds,short button_id,int x,int y);
~TTimed_box();
};
// @doc EXTERNAL
// @class TTimed_breakbox | Classe per la gestione dei box di richiesta interruzione
//
// @base public | TTimed_box
class TTimed_breakbox: public TTimed_box
{
public:
TTimed_breakbox(const char * message,int seconds,int x=40,int y=10);
~TTimed_breakbox();
};
class TYesnoallnone_box: public TMask
{
public:
TYesnoallnone_box(const char * message, int default_key = K_YES);
~TYesnoallnone_box();
};
#define FOR_EACH_MASK_FIELD(__m, __i, __f) \
TMask_field* __f = NULL; \
for (int __i = 0; __i < __m.fields() && (__f=&__m.fld(__i))!=NULL; __i++)
#define FOR_EACH_MASK_SHEET(__m, __i, __s) \
TSheet_field* __s = NULL; \
for (int __i = 0; __i < __m.fields() && (__s=(TSheet_field*)&__m.fld(__i))!= NULL; __i++) if (__m.fld(__i).is_sheet())
#endif // __MASK_H