guy c09ac8f7a7 mask.h Tolto membro int _sheets che teneva il conto degli
spreadsheets contenuti in una maschera che richiedeva di
             essere aggiornato da tutte le maschere derivate
mask.cpp     Modificato metodo sheets() che conta gli sheet presenti
             semplificando la vita alle maschere derivate
             Gestione menu di modifica
msksheet.cpp Adeguato uso del metodo TMask::sheets()
varmask.h    Modificata indentazione
varmask.cpp  Adeguato uso del metodo TMask::sheets()
             Tolta stringa statica var_mask_str
maskfld.*    Tolti metodi obsoleti on_clipboard


git-svn-id: svn://10.65.10.50/trunk@6042 c028cbd2-c16b-5b4b-a496-9718f37d4682
1998-01-28 08:45:59 +00:00

446 lines
17 KiB
C++
Executable File

#ifndef __MASK_H
#define __MASK_H
#ifndef __WINDOW_H
#include <window.h>
#endif
#ifndef __MASKFLD_H
#include <maskfld.h>
#endif
class TSheet_field;
// @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 _pagewin[MAX_PAGES+1];
// @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) Cambio attuale per i cambi in valuta
real _exchange;
// @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) Tempo totale di caricamento della maschera
long _total_time;
// @cmember:(INTERNAL) Tempo di compilazione della maschera
long _build_time;
// @cmember:(INTERNAL) Tempo di inizializzazione della maschera
long _init_time;
// @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; }
// Aggiunge un campo all'array _field
void add_field(TMask_field* f);
// @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 Legge il campo da file
virtual TMask_field* parse_field(TScanner& scanner);
// @cmember Inizializza la maschera
void init_mask();
// @cmember Legge la pagina da file
WINDOW read_page(TScanner& scanner, bool toolbar = FALSE);
// @cmember Legge la maschera da file
void read_mask(const char* name, int num, int max);
// @cmember Aggiunge i tags ad una pagina
void add_tag_button(byte pag, TToken_string& tags, byte sel);
// @cmember Aggiunge alla maschera tutti i bottoni per la navigazione tra le pagine
void add_tag_buttons(TToken_string& tags);
// @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 Ritorna il numero della pagina corrente
int curr_page() const
{ return _page; }
// @cmember Costruttore (crea una maschera vuota)
TMask();
// @access Public Member
public:
// @cmember Costruttore (crea la maschera leggendo la descrizione dal file .msk)
TMask(const char* title, 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);
// @cmember Distruttore
virtual ~TMask();
// @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 la finestra della pagina corrente (Usare con attenzione)
WINDOW win() const
{ return _page < 0 ? _pagewin[0] : _pagewin[_page]; }
// @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 add_default_tag_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 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 = "");
// @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 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(int id)
{ if (_test_fld < 0) _test_fld = id; }
void set_focus_field(short id);
void notify_focus_field(short id);
// @cmember Setta il valore attuale della valuta
void set_exchange(bool show_value, const real& nuo);
// @cmember Ritorna il valore attuale del cambio
const real& exchange() const
{ return _exchange; }
// @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);
// @cmember Converte un identificatore di campo nella sua posizione
int id2pos(short id) 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 di edit contraddistinto dall'identificatore passato
TEdit_field& efield(short id) const;
// @cmember Ritorna il campo sheet contraddistinto dall'identificatore passato
TSheet_field& sfield(short id) const;
// @cmember Setta il campo con una stringa
virtual void set(short fld_id, const char* str, bool hit=FALSE);
// @cmember Setta il campo con un reale
void set(short fld_id, const real& num, bool hit=FALSE);
// @cmember Setta il campo con una data
void set(short fld_id, const TDate& day, bool hit=FALSE);
// @cmember Setta il campo con un valore
void set(short fld_id, long num, bool hit=FALSE);
// @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 Indica quale campo deve ricevere per primo il focus nella maschera
int first_focus(short id);
// @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
byte num_keys() const;
// @cmember Abilita/disabilita i campi di una chiave sulla maschera
void enable_key(byte key, bool on = TRUE);
// @cmember Disabilita i campi di una chiave sulla maschera (chiama <mf TMask::enable_key>)
void disable_key(byte key)
{ enable_key(key, FALSE); }
// @cmember Ritorna il l'identificatore di un campo della chiave <p key>
TEditable_field* get_key_field(byte key, bool first) const;
// @cmember Controlla se la chiave <p key> ha un valore significativo
// (TRUE se il valore e' valido)
bool key_valid(int 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 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 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() 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 finestra della toolbar
WINDOW toolwin() const
{ return _pagewin[MAX_PAGES]; }
};
// @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();
};
#endif // __MASK_H