campo-sirio/include/maskfld.h
guy 3e793a4cab applicat.cpp Gestione semplificata dei bar_item
array.cpp      Corretti TPointer_array
assoc.cpp      Aggiuntta add()
cfiles.c       Corretto salvataggio pathpref.ini
controls.cpp   Aggiunto attributo di read_only
default.url    Aggiunto menu di edit ed help
mask.cpp       Gestione menu edit
maskfld.cpp    Gestione menu edit
msksheet.cpp   Gestione menu edit
progind.cpp    Aggiunto nuova scavatura 3D
sheet.cpp
viswin.cpp     Aggiornati ID del menu edit
window.cpp     Corretta gestione voci di menu standard
xvtility.cpp   Aggiunto metodo per skippare gli errori di XVT


git-svn-id: svn://10.65.10.50/trunk@5791 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-12-24 14:26:25 +00:00

1423 lines
44 KiB
C++
Executable File

#ifndef __MASKFLD_H
#define __MASKFLD_H
#ifndef __DATE_H
#include <date.h>
#endif
#ifndef __REAL_H
#include <real.h>
#endif
#ifndef __SCANNER_H
#include <scanner.h>
#endif
class TControl; // __CONTROL_H
class TText_control;
class TPushbutton_control;
class TRelation; // __RELATION_H
class TCursor;
class TFieldref;
class TArray_sheet; // __SHEET_H
class TMask_field; // Convenience
// @doc EXTERNAL
// @enum Tipo di check da eseguire su un controllo
enum CheckType {
CHECK_NONE, // @emem Nessun controllo
CHECK_NORMAL, // @emem Controllo normale (non e' un campo obbligatorio)
CHECK_REQUIRED, // @emem Controlla se il campo non e' vuoto e fa un check normale
CHECK_SEARCH // @emem Controlla se il campo c'e' ma non da' nessuna segnalazione se e' errato
};
// @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
typedef bool (*CONTROL_HANDLER)(TMask_field& field, KEY key);
// @doc EXTERNAL
// @class TMask_field | Classe per la definizione delle operazioni sui campi di
// una maschera
//
// @base public | TObject
class TMask_field : public TObject
// @author:(INTERNAL)Guido
{
// @cfriend TMask
friend class TMask;
// @cfriend TSheet
friend class TSheet;
// @access:(INTERNAL) Private Member
// @cmember:(INTERNAL) Maschera all'interno del quale e' contenuto il campo
TMask* _mask;
// @cmember:(INTERNAL) Gruppi cui appartiene il campo
TBit_array* _groups;
// @access Protected Member
protected:
// @cmember Controllo vero e proprio
TControl* _ctl;
// @cmember <t TControl_data>
// @comm Struttura usata solo durante la creazione di un controllo
struct TControl_data
{
short _dlg; // Identifier
short _x, _y; // Position
short _width; // Width
short _height; // Height
word _size; // Buffer size
short _decimals; // Precision
TString _prompt; // Prompt
TString _flags; // Flags
short _bmp_up; // Bitmap up
short _bmp_dn; // Bitmap down
TToken_string _park; // Work string
void reset();
};
static TControl_data _ctl_data;
// @cmember <t TField_Flags> | _flags | | Flag indicante lo stato del campo
struct TField_Flags
{
bool automagic : 1;
bool button : 1;
bool dirty : 2; // Modified during run ?
bool enabled : 1; // Is editable
bool enable_default : 1;
bool firm : 1; // Is the current firm ?
bool focusdirty : 1; // Modified during focus ?
bool ghost : 1;
bool password : 1;
bool persistent : 1;
bool rightjust : 1;
bool roman : 1; // Is a Roman number ?
bool shown : 1; // Is visible
bool show_default : 1;
byte trim : 2; // Trim the string
bool uppercase : 1;
bool exchange : 1; // Value exchange
bool zerofilled : 1;
bool pipeallowed : 1;
TField_Flags();
char update(const char*);
} _flags;
// @cmember Costruisce il campo da file
void construct(TScanner& scanner, WINDOW parent);
// @cmember Costruisce il campo con i suoi parametri
void construct(short id, const char* prompt, int x, int y, int len, WINDOW parent, const char* flags = "", int width = 0);
// @cmember Legge la testata del controllo dal file .msk <p scanner>
virtual void parse_head(TScanner& scanner);
// @cmember Legge una riga di definizione del controllo dal file .msk <p scanner>
virtual bool parse_item(TScanner& scanner);
// @cmember Crea il controllo (chiama <mf TMask_field::wincreate>)
virtual void create(WINDOW parent) pure;
// @cmember Setta il focus sul campo
virtual void highlight() const;
// @cmember Manda al campo <p to> un tasto (chiama <mf TMask::send_key>)
void send_key(KEY k, short to);
// @access Public Member
public: // TObject
virtual bool is_kind_of(word cid) const;
public:
// @cmember Converte una stringa in un identificatore di controllo
short atodlg(const char* s) const;
// @cmember Ritorna la finestra padre
virtual WINDOW parent() const;
RCT& get_rect(RCT& r) const;
void set_rect(const RCT& r);
// @cmember Ritorna l'identificatore del controllo
virtual short dlg() const;
// @cmember Controlla se si tratta di un controllo corretto
virtual bool ok() const;
// @cmember Ritorna TRUE se il campo e' stato modificato
bool dirty() const
{ return _flags.dirty; }
// @cmember Ritorna TRUE se il campo e' stato modificato dall'ultima volta che ha ricevuto il focus
bool focusdirty() const
{ return _flags.focusdirty; }
// @cmember Setta lo stato di focusdirty del campo
void set_focusdirty(bool d = TRUE)
{ _flags.focusdirty = d; }
// @cmember Setta lo stato di dirty del campo
void set_dirty(bool d = TRUE);
// @cmember Abilita il trim degli spazi
void set_trim(bool t)
{ _flags.trim = t ? 3 : 0; }
// @cmember Setta la giustificazione a destra del campo
void set_justify(bool r)
{ _flags.rightjust = r; }
// @cmember Verifica la giustificazione a destra del campo
bool right_justified() const
{ return _flags.rightjust; }
// @cmember Ritorna TRUE se il campo e' in maiuscolo
bool uppercase() const
{ return _flags.uppercase; }
// @cmember Ritorna TRUE se il campo e' zerofilled
bool zerofilled() const
{ return _flags.zerofilled; }
// @cmember Verifica se l'inserimento del carattere pipe e' stato abilitato
bool pipe_allowed() const
{ return _flags.pipeallowed; }
// @cmember Consente l'inserimento del carattere pipe
void allow_pipe(bool r = TRUE)
{ _flags.pipeallowed = r; }
// @cmember Ritorna il nome della classe
virtual const char* class_name() const;
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Ritorna TRUE se il campo e' un numero romano
bool roman() const
{ return _flags.roman; }
// @cmember Ritorna TRUE se il campo e' automagic
bool automagic() const
{ return _flags.automagic; }
// @cmember Ritorna TRUE se ha un bottone di campo
bool has_button() const
{ return _flags.button; }
// @cmember Ritorna TRUE se si tratta di campo fantasma
bool ghost() const
{ return _flags.ghost; }
// @cmember Ritorna TRUE se si tratta di campo in valuta
bool exchangeable() const
{ return _flags.exchange; }
// @cmember Controlla se il campo appartiene ad una chiave di ricerca
virtual bool in_key(byte) const
{ return FALSE; }
// @cmember Controlla se il campo ha un check
virtual bool has_check() const
{ return FALSE;}
// @cmember Controlla se il campo ha una richiesta
virtual bool has_query_button() const
{ return FALSE;}
// @cmember Ritorna il campo corrispondente su record
virtual const TFieldref* field() const
{ return NULL; }
// @cmember Imposta il tipo di checktype del campo
virtual void check_type(CheckType);
// @cmember Ritorna lo stato di checktype del campo
virtual CheckType check_type() const
{ return CHECK_NONE; }
// @cmember Ritorna TRUE se il checktype del campo e' <p CHECK_REQUIRED>
bool required() const
{ return check_type() == CHECK_REQUIRED; }
// @cmember Controlla la validita' del campo
virtual bool check(CheckTime = RUNNING_CHECK)
{ return TRUE;}
// @cmember Azzera il contenuto del campo
virtual void reset();
// @cmember Abilita/disabilita il campo (lo rende scrivibile)
virtual void enable(bool on = TRUE);
// @cmember Abilita/disabilita il campo (chiama <mf TMask_field::enable>)
void disable()
{ enable(FALSE); }
// @cmember Controlla se un campo e' abilitato
virtual bool enabled() const
{ return _flags.enabled; }
// @cmember Rimette lo stato di dis/abilitazione del campo a seconda di come era settato sul file
void enable_default();
// @cmember Controlla se il campo e' abilitato di default
bool enabled_default() const
{ return _flags.enable_default; }
// @cmember Permette di rendere visibile/invisibile un campo
virtual void show(bool on = TRUE);
// @cmember Permette di rendere invisibile un campo (chiama <mf TMask_field::enable>)
void hide()
{ show(FALSE); }
// @cmember Ritorna TRUE se il campo e' visibile
bool shown() const
{ return _flags.shown; }
// @cmember Ritorna TRUE se il campo e' nascosto
bool hidden() const
{ return !shown(); }
// @cmember Rimette lo stato di in/visibilta' del campo a seconda di come era
// settato sul file
void show_default();
// @cmember Ritorna TRUE se il campo e' sia visibile che abilitato
bool active() const;
// @cmember Setta l'handler del controllo
virtual void set_handler(CONTROL_HANDLER);
// @cmember Ritorna TRUE se il campo e' di tipo operable
virtual bool is_operable() const { return FALSE; }
// @cmember Ritorna TRUE se il campo e' caricabile da file
virtual bool is_loadable() const { return FALSE; }
// @cmember Ritorna TRUE se il campo e' di tipo editable
virtual bool is_editable() const { return FALSE; }
// @cmember Ritorna TRUE se il campo e' di tipo edit
virtual bool is_edit() const { return FALSE; }
// @cmember Ritorna TRUE se il campo e' di tipo sheet
virtual bool is_sheet() const { return FALSE; }
// @cmember Permette di spedire il check
bool to_check(KEY k, bool checkrun = FALSE) const;
// @cmember Gestisce la chiamata all'handler del campo
virtual bool on_hit();
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
// @cmember Gestisce un'operazione della clipboard (M_EDIT_CUT, M_EDITCOPY, M_EDITPASTE)
virtual bool on_clipboard(MENU_TAG mt);
// @cmember Setta il contenuto del campo inserendo la stringa <p s>
virtual void set(const char* s);
// @cmember Setta il contenuto del campo inserendo il numero <p n>
void set(long n);
// @cmember Ritorna il contenuto del campo
virtual const TString& get() const;
virtual bool empty() const { return FALSE; }
// @cmember Ritorna la dimensione del buffer associato al campo
virtual word size() const
{ return 0; }
// @cmember Ritorna la posizione X del campo
// virtual short x_pos() const {return _ctrl_data._x;} ;
// @cmember Ritorna la posizione Y del campo
// virtual short y_pos() const {return _ctrl_data._y;} ;
// @cmember Ritorna il prompt del campo
virtual const char* prompt() const;
// @cmember Setta il prompt del campo
virtual void set_prompt(const char* p);
// @cmember Controlla se il campo appartiene al gruppo <p group> (TRUE se appartiene)
bool in_group(byte group) const
{ return _groups ? (*_groups)[group] : FALSE; }
// @cmember Assegna il campo al gruppo <p group>
void set_group(byte group);
// @cmember Setta il focus al campo
virtual void set_focus() const;
// @cmember Crea una message-box relativamente al campo (chiama <f message_box>)
bool message_box(const char* fmt, ...) const;
// @cmember Crea una warning-box relativamente al campo (chiama <f warning_box>)
bool warning_box(const char* fmt, ...) const;
// @cmember Crea una error-box relativamente al campo (chiama <f error_box>)
bool error_box(const char* fmt, ...) const;
// @cmember Crea una yesno-box relativamente al campo (chiama <f yesno_box>)
bool yesno_box(const char* fmt, ...) const;
// @cmember Crea una yesnocancel-box relativamente al campo (chiama <f yesnocancel_box>)
KEY yesnocancel_box(const char* fmt, ...) const;
// @cmember Ritorna per riferimento la maschera di appartenenza del campo
TMask& mask() const
{ return *_mask; }
// @cmember Costruttore
TMask_field(TMask* mask);
// @cmember Distruttore
virtual ~TMask_field();
};
// @doc EXTERNAL
// @struct TField_Flags | Flag indicante il settaggio del campo
// @comm ATTENZIONE: Questa struttura e' definita ed utilizzata unicamente nella classe
// <c TMask_field>
// @field bool | automagic: 1 | Indica se il campo e' automagic
// @field bool | dirty: 2 | Indica se il campo e' stato modificato
// @field bool | enabled: 1 | Indica se il campo e' editabile
// @field bool | enable_default: 1 | Indica se il campo e' abilitato di default
// @field bool | firm: 1 | Indica se il campo appartiene alla ditta corrente
// @field bool | focusdirty: 1 | Indica se il campo e' stato modificat mentre aveva il focus
// @field bool | ghost: 1 | Indica se il campo e' ghost
// @field bool | password: 1 | Indica che e' un campo password (no si vede quello che scrivi)
// @field bool | persistent: 1 | Indica se il valore del campo deve rimanere anche quando viene ricaricata la maschera
// @field bool | rightjust: 1 | Indica se il campo e' allineato a destra
// @field bool | roman: 1 | Indica se il campo contiene un numero romano
// @field bool | shown: 1 | Indica se il campo e' visibile
// @field bool | show_default: 1 | Indica se il campo e' visibile di default
// @field bool | trim: 1 | Indica se bisogna fare il trim della stringa (vedi <mf TString::trim>)
// @field bool | uppercase: 1 | Indica se il campo e' maiuscolo
// @field bool | exchange: 1 | Indica se si tratta di un cambio valuta
// @field bool | zerofilled: 1 | Indica se il campo e' zerofilled
// @field bool | pipeallowed: 1 | Indica se il campo e' pipeallowed
// @field void | TField_Flags() | Costruttore
// @field char | update(const char*) | Aggiorna i bit della struttura secondo i valori letti da file
class TText_field : public TMask_field
{
protected:
virtual void create(WINDOW parent);
public: // TObject
word class_id() const;
bool is_kind_of(word cid) const;
public:
TText_field(TMask* m) : TMask_field(m) {}
virtual ~TText_field() {}
};
// @doc EXTERNAL
// @class TGroup_field | Classe per la gestione del disegno dei group box
//
// @base public | TMask_field
class TGroup_field : public TMask_field
// @author:(INTERNAL) Guido
{
// @access Protected Member
protected:
// @cmember Legge un item del controllo dal file <p scanner>
virtual void parse_head(TScanner& scanner);
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @access Public Member
public:
// @cmember Costruttore
TGroup_field(TMask* mask);
virtual ~TGroup_field() {}
};
class TOperable_field : public TMask_field
{
// @cmember Comandi da eseguire in caso di modifica del campo
TString_array* _message;
// @cmember Handler del controllo
CONTROL_HANDLER _handler;
protected: // TMask_field
bool handler(KEY k);
virtual bool parse_item(TScanner& scanner);
virtual bool is_operable() const { return TRUE; }
virtual bool on_hit();
TToken_string* message(int m, bool crea = FALSE);
// @cmember Setta il focus sul campo
virtual void highlight() const;
public:
virtual bool is_kind_of(word cid) const;
// @cmember Esegue processo in background
virtual void on_idle()
{}
// @cmember Esegue il messaggio <p n>-esimo sul campo
bool do_message(int n);
// @cmember Controlla se il campo ha un messaggio
virtual bool has_message() const
{ return _message != NULL; }
// @cmember Setta l'handler del controllo
virtual void set_handler(CONTROL_HANDLER handler)
{ _handler = handler; }
// @cmember Setta il focus al campo
virtual void set_focus() const;
// @cmember Gestisce il tasto <p k>
virtual bool on_key(KEY k);
// @cmember Abilita/disabilita il campo (lo rende scrivibile) (vedi <mf TMask_field::enable>)
virtual void enable(bool on = TRUE);
// @cmember Setta il valore del cambio nel campo
virtual void exchange(bool, const real&)
{ }
TOperable_field(TMask* m);
virtual ~TOperable_field();
};
// @doc EXTERNAL
// @class TButton_field | Classe per la gestione dei campi bottone
//
// @base public | TMask_field
class TButton_field : public TOperable_field
// @author:(INTERNAL) Guido
{
// @access:(INTERNAL) Private Member
// @cmember:(INTERNAL) Valore della combinazione di tasti che sostituisce il bottone
KEY _virtual_key;
// @cmember:(INTERNAL) Tasto generato quando viene premuto il bottone che si sta gestendo
KEY _exit_key;
// @access Protected Member
protected:
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Ritorna TRUE se il controllo deriva dalla classe cid
virtual bool is_kind_of(word cid) const;
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Legge un item del controllo dal file <p scanner>
void parse_head(TScanner& scanner);
// @cmember Legge un item del controllo dal file <p scanner>
bool parse_item(TScanner& scanner);
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
public:
// @cmember Ritorna il valore della combinazione di tasti che sostituiscono il bottone
KEY virtual_key() const
{ return _virtual_key; }
// @cmember Ritorna il valore del tasto di uscita
KEY exit_key() const
{ return _exit_key; }
void set_hot_key(KEY k) { _virtual_key = _exit_key = k; }
void set_bmp(short up, short dn);
void set_icon(word icon);
// @cmember Costruttore
TButton_field(TMask* mask);
virtual ~TButton_field() {}
};
// @doc EXTERNAL
// @class TLoadable_field | Classe per la gestione dei caricabili da DB
//
// @base public | TOperable_field
class TLoadable_field : public TOperable_field
{
public:
// @cmember Legge dalla relazione il valore del campo
virtual bool autoload(const TRelation& r) pure;
// @cmember Scrive sulla relazione il valore del campo
virtual bool autosave(TRelation& r) pure;
// @cmember Ritorna TRUE se il campo e' caricabile da file
virtual bool is_loadable() const { return TRUE; }
// @cmember costruttore
TLoadable_field(TMask* mask): TOperable_field(mask) {};
// @cmember distruttore
virtual ~TLoadable_field() {};
};
class TEditable_field : public TLoadable_field
{
// @cmember Campo su file
TFieldref* _field;
// @cmember:(INTERNAL) Prompt del campo
TText_control* _prompt;
// @cmember:(INTERNAL) Chiave al quale appartiene il campo
TBit_array* _keys;
// @cmember Messaggi da mandare in caso di errore sul campo
TString* _warning;
// @cmember:(INTERNAL) Stringa definibile dall'utilizzatore della classe da utilizzare a piacimento
TToken_string* _userdata;
struct TValidation_data
{
// @cmember Identificatore della funzione di validazione
int _func;
// @cmember Parametri da passare alla funzione di validazione
TArray _parms;
};
TValidation_data* _validate;
protected: // TMask_field
virtual bool parse_item(TScanner& scanner);
protected:
// @cmember Valore corrente del campo
TString _str;
word create_prompt(WINDOW parent, word width, word heigth);
virtual const char* reformat(const char* data) const;
virtual TString& get_window_data() pure;
virtual void set_window_data(const char* data) pure;
int validate_func() const { return _validate ? _validate->_func : -1; }
public: // TMask_field
// @cmember Ritorna il prompt del campo
virtual const char* prompt() const;
public:
bool test_key_complete(bool normal = TRUE) const;
// @cmember Controlla se il campo appartiene alla chiave <p key> (TRUE se appartiene)
bool in_key(byte key) const
{ return _keys ? (*_keys)[key] : FALSE; }
// @cmember Setta il campo alla chiave <p key>
void set_key(byte key);
// @cmember Rimuove il campo dalla chiave <p key>
void reset_key(byte key);
// @cmember Ritorna l'ultima chiave di appartenenza del campo
word last_key() const;
// @cmember Ritorna l'ultima chiave di appartenenza del campo
word first_key() const;
// @cmember Verifica che il campo abbia almeno una chiave in con il campo <p f>
bool has_a_common_key(const TMask_field & f) const;
// @cmember Ritorna il nome del campo corrsipondente sul file
virtual const TFieldref* field() const
{ return _field; }
// @cmember Setta il nome del campo corrsipondente sul file
void set_field(const TString& fr);
// @cmember Chiama l' eventuale funzione di validazione
bool validate(KEY k);
// @cmember Legge dalla relazione il valore del campo
virtual bool autoload(const TRelation& r);
// @cmember Scrive sulla relazione il valore del campo
virtual bool autosave(TRelation& r) ;
bool has_warning() const { return _warning != NULL; }
void set_warning(const char* w);
const char* get_warning() const;
virtual void show(bool on);
virtual void set_prompt(const char* p);
// @cmember Setta il contenuto del campo inserendo la stringa <p s>
virtual void set(const char* s);
// @cmember Ritorna il contenuto del campo
virtual const TString& get() const;
// @cmember Trasforma una stringa su file in una rappresentabile a video
virtual const char* raw2win(const char* r) const;
// @cmember Trasforma una stringa a video in un valore su file
virtual const char* win2raw(const char* w) const;
// @cmember Ritorna TRUE se il campo e' di tipo editable
virtual bool is_editable() const { return TRUE; }
virtual bool on_clipboard(MENU_TAG mt);
TEditable_field(TMask* m);
virtual ~TEditable_field();
};
// @doc EXTERNAL
// @class TBoolean_field | Classe per la gestione dei campi boolean (check box)
//
// @base public | TEditable_field
class TBoolean_field : public TEditable_field
// @author:(INTERNAL) Guido
{
// @access Protected Member
protected: // TMask_field
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Legge un item del controllo dal file <p scanner>
virtual bool parse_item(TScanner& scanner);
protected: // TOperable
// @cmember Gestisce la chiamata all'handler del campo
virtual bool on_hit();
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
protected: // TEditable
// @cmember Riaggiusta una stringa in formato RAW
virtual const char* reformat(const char* raw) const;
virtual TString& get_window_data();
virtual void set_window_data(const char* data);
virtual void set_prompt(const char* p);
// @access Public Members
public:
// @cmember Costruttore
TBoolean_field(TMask* mask);
// @cmember Distruttore
virtual ~TBoolean_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; }
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();
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;
// @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);
// @access Public Member
public:
// @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 Ritorna la lista completa dei campi di output
const char* get_output_fields() const;
// @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 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();
};
// @doc EXTERNAL
// @class TEdit_field | Classe per la definizione dei campi editabili
//
// @base public | TEditable_field
class TEdit_field : public TEditable_field
{
// @access Protected Member
protected:
// @cmember Formato che deve avere il campo
TString _picture;
// @cmember Dimensione del buffer del campo
word _size;
// @cmember Accettabilita' di valori nulli
CheckType _check;
// @cmember Controllo da effettuare anche in <e TMaskmode.MODE_QUERY>
bool _forced;
// @cmember Controllo abilitato
bool _check_enabled;
// @cmember Oggetto che contiene la ricerca e il controllo del campo
TBrowse_button* _browse;
// @cmember Ritorna la browse
const TBrowse* parse_browse(TScanner& scanner) const;
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Legge la testata del controllo dal file <p scanner>
virtual void parse_head(TScanner& scanner);
// @cmember Legge un item del controllo dal file <p scanner>
virtual bool parse_item(TScanner& scanner);
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Ritorna <p data> formattato secondo i flags settati del campo
virtual const char* reformat(const char* data) const;
// @cmember Scrive il valore del campo direttamente sulla finestra del controllo
virtual void set_window_data(const char* data);
// @cmember Mostra un messaggio di errore di default per il campo
bool default_error_box() const;
// @access Public Member
public:
// @cmember Gestisce la chiamata all'handler del campo
virtual bool on_hit();
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
// @cmember Controlla se il campo ha un check
virtual bool has_check() const;
// @cmember Controlla se il campo ha una ricerca
virtual bool has_query_button() const
{ return _browse != NULL || _flags.button; }
// @cmember Imposta la ricerca del campo
virtual void set_query_button(TBrowse_button* ) ;
// @cmember Ritorna TRUE se il campo e' di tipo edit
virtual bool is_edit() const { return TRUE; }
// @cmember Legge il valore del campo direttamente dalla finestra del controllo
virtual TString& get_window_data();
// @cmember Converte da campo a video
virtual const char* raw2win(const char* r) const;
// @cmember Converte da video a campo
virtual const char* win2raw(const char* w) const;
// @cmember Ritorna TRUE se il campo e' vuoto
virtual bool empty() const { return _str.empty(); }
// @cmember Ritorna la dimensione del buffer associato al campo
virtual word size() const { return _size; }
// @cmember Ritorna il tipo di check assegnato al campo (vedi <t Checktype>)
virtual CheckType check_type() const
{ return _check; }
// @cmember Setta il tipo di check da assegnare al campo (vedi <t Checktype>)
virtual void check_type(CheckType c)
{ _check = c; }
// @cmember Controlla se un campo e' forced
bool forced() const
{ return _forced;}
// @cmember Esegue il controllo
virtual bool check(CheckTime = RUNNING_CHECK);
// @cmember Ritorna l'oggetto _browse
TBrowse* browse() const
{ return (_browse && _browse->is_browse()) ? (TBrowse*)_browse : NULL; }
// @cmember Ritorna l'oggetto _sheet
TList_sheet* sheet() const
{ return (_browse && !_browse->is_browse()) ? (TList_sheet*)_browse : NULL;}
// @cmember Permette di abilitare/disabilitare il campo
virtual void enable(bool on = TRUE);
// @cmember Permette di abilitare/disabilitare il check del campo
void enable_check(bool on = TRUE) ;
// @cmember Attiva o no la selezione automatica del testo
void autoselect(bool on);
// @cmember Controlla se un campo ha abilitato o disabilitato il check (TRUE se abilitato)
bool check_enabled() const
{ return _check_enabled;}
// @cmember Ritorna la picture del campo
const char* picture() const
{ return _picture; }
// @cmember Imposta la lunghezza a video del campo
virtual void set_width(short len=-1, short dlen=-1) ;
// @cmember Imposta la lunghezza del campo
virtual void set_len(short l) ;
// @cmember Costruttore
TEdit_field(TMask* mask);
// @cmember Distruttore
virtual ~TEdit_field();
};
// @doc EXTERNAL
// @class TReal_field | Classe per la gestione dei campi di numeri reali
//
// @base public | TEdit_field
class TReal_field : public TEdit_field
// @author:(INTERNAL) Guido
{
// @access:(INTERNAL) Private Member
// @cmember:(INTERNAL) Numero di decimali del campo
int _decimals;
// @access Protected Member
protected: // TMask_field
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
virtual bool is_kind_of(word cid) const;
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Legge un item del controllo dal file .msk <p scanner>
virtual void parse_head(TScanner& scanner);
// @cmember Legge una riga di definizione del controllo dal file .msk <p scanner>
virtual bool parse_item(TScanner& scanner);
protected: // TEditable_field
virtual const char* reformat(const char* data) const;
virtual const char* win2raw(const char* data) const;
virtual const char* raw2win(const char* data) const;
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
protected:
// @cmember Setta il valore del cambio nel campo
virtual void exchange(bool show_value, const real& n);
// @access Public Member
public:
// @cmember Setta la precisione (numero di decimali) del reale e la sua picture
void set_decimals(int d);
// @cmember Ritorna la precisione del reale (numero di decimali)
int decimals() const
{ return _decimals; }
// @cmember Costruttore
TReal_field(TMask* mask);
// @cmember Distruttore
virtual ~TReal_field()
{ }
};
// @doc EXTERNAL
// @class TDate_field | Classe per la gestione dei campi data
//
// @base public | TEdit_field
class TDate_field : public TEdit_field
// @author:(INTERNAL) Guido
{
// @access Protected Member
protected: // TMask_field
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Crea il controllo
virtual void create(WINDOW parent);
protected: // TOperable_field
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
protected: // TEditable_field
// @cmember Converte una eventuale data ANSI in formato gg-mm-aaaa
const char* reformat(const char* str) const;
// @cmember Converte l'input dell'utente in una data
virtual const char* win2raw(const char* data) const;
// @cmember Formatta una data normale o ANSI in gg-mm-aaaa
virtual const char* raw2win(const char* data) const;
// @cmember Scrive sulla relazione il valore del campo gestendo formato ANSI
virtual bool autosave(TRelation& r) ;
// @access Public Member
public:
// @cmember Legge un item del controllo dal file <p scanner>
virtual void parse_head(TScanner& scanner);
virtual bool is_kind_of(word cid) const;
// @cmember Costruttore
TDate_field(TMask* mask);
// @cmember Distruttore
virtual ~TDate_field()
{ }
};
// @doc EXTERNAL
// @class TList_field | Classe per la gestione dei campi lista (list box)
//
// @base public | TEditable_field
class TList_field : public TEditable_field
// @author:(INTERNAL) Guido
{
word _size;
// @access Private Member
// @cmember Crea una lista con i mesi
void add_list();
// @cmember seleziona all'offset dato dal corrente
bool select_by_ofs(int n);
// @access Protected Member
protected:
// @cmember Lista delle voci
TToken_string _values;
// @cmember Lista dei codice delle voci
TToken_string _codes;
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Legge il valore del campo direttamente dalla finestra del controllo
virtual TString& get_window_data();
virtual void set_window_data(const char* data);
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Setta la voce corrente
virtual void current(int n);
// @cmember Ritorna la voce corrente
virtual int current() const;
// @cmember Trasforma la voce nel corrispondente valore
int str2curr(const char* data);
// @cmember Gestisce la chiamata all'handler del campo
virtual bool on_hit();
// @cmember Gestisce la pressione del tasto (TRUE se la gestione ha avuto successo)
virtual bool on_key(KEY key);
// @cmember Legge dal file gli item dello sheet
virtual void read_item(TScanner& scanner);
// @cmember Legge la testata del controllo dal file <p scanner>
virtual void parse_head(TScanner& scanner);
// @cmember Legge un item del controllo dal file <p scanner>
virtual bool parse_item(TScanner& scanner);
// @access Public Member
public:
// @cmember Ritorna la dimensione del buffer associato al campo
virtual word size() const { return _size; }
// @cmember Esegue la ricerca. Torna il tasto che ha terminato la ricerca
virtual bool has_query_button() const
{ return TRUE; }
// @cmember Conversione da formato visuale a valore
virtual const char* win2raw(const char* data) const;
// @cmember Conversione da valore a formato visuale
virtual const char* raw2win(const char* data) const;
// @cmember Scrive il valore del campo direttamente dalla finestra del controllo
virtual void set(const char* data);
// @cmember Ritorna la tokenstring dei codici ammessi
const char* get_codes() const { return _codes; }
// @cmember Ritorna la tokenstring dei valori ammessi
const char* get_values() const { return _values; }
// @cmember Sostituisce alle voci correnti quelle passate come parametri
virtual void replace_items(const char* codes, const char* values);
// @cmember Aggiunge una voce
virtual void add_item(const char* code_value);
// @cmember Elimina la voce con codice <p code>
virtual void delete_item(const char* code);
// @cmember Ritorna il numero di voci presenti
int items() const;
// @cmember Tipo
virtual bool is_kind_of(word cid) const;
// @cmember Seleziona sulla base dell'iniziale
bool select_by_initial(char c);
// @cmember Seleziona il prossimo se possibile (no wrap)
bool select_next() { return select_by_ofs(1); }
// @cmember Seleziona il precedente se possibile (no wrap)
bool select_prev() { return select_by_ofs(-1); }
// @cmember Azzera il contenuto del campo
virtual void reset();
// @cmember Costruttore
TList_field(TMask* mask);
virtual ~TList_field() {}
};
// @doc EXTERNAL
// @class TRadio_field | Classe per la gestione dei campi lista (list box)
//
// @base public | TList_field
class TRadio_field : public TList_field
// @author:(INTERNAL) Guido
{
// @access Protected Member
protected:
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Setta la voce corrente
virtual void current(int n);
// @cmember Ritorna la voce corrente
virtual int current() const;
// @access Public Member
public:
// @cmember Costruttore
TRadio_field(TMask* mask);
// @cmember Distruttore
virtual ~TRadio_field();
};
// @doc EXTERNAL
// @class TMemo_field | Classe per la gestione dei campi memo
//
// @base public | TMask_field
class TMemo_field : public TEdit_field
// @author:(INTERNAL) Guido
{
// @access:(INTERNAL) Private Member
// @access Protected Member
protected: // TObject
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const
{ return CLASS_MEMO_FIELD; }
// @cmember Ritorna il nome della classe
virtual const char* class_name() const
{ return "MEMO"; }
protected: // TMask_field
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Legge un item del controllo dal file <p scanner>
virtual void parse_head(TScanner& scanner);
protected: // TEditable_field
// Gestisce solo l'acquisto e la perdita del focus
virtual bool on_key(KEY k);
// @cmember Non fa' nulla
virtual const char* reformat(const char* data) const;
// @cmember Trasforma i '/n' in '/r'
virtual const char* raw2win(const char* data) const;
// @cmember Trasforma i '/r' in '/n'
virtual const char* win2raw(const char* data) const;
// @access Public Member
public:
// @cmember Costruttore
TMemo_field(TMask* mask);
// @cmember Distruttore
virtual ~TMemo_field();
};
// @doc EXTERNAL
// @class TZoom_field | Come <c TEdit_field> ma zooma per l'editing dei campi memo
//
// @base public | TEdit_field
class TZoom_field : public TEdit_field
// @author:(INTERNAL) Guido
{
// @access Protected Member
protected:
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const
{ return CLASS_ZOOM_FIELD; };
// @cmember Ritorna il nome della classe
virtual const char* class_name() const
{ return "ZOOM"; }
protected:
// @cmember Crea il controllo
virtual void create(WINDOW parent);
// @cmember Gestisce tasti inviati al controllo
virtual bool on_key(KEY key);
protected:
// @cmember Non fa nulla
virtual const char* reformat(const char* data) const;
// @cmember Trasforma <p data> in una riga sola
virtual const char* raw2win(const char* data) const;
// @cmember Trasforma la riga <p data> nell'intero memo
virtual const char* win2raw(const char* data) const;
// @access Public Member
public:
const char* get_first_line() const;
// @cmember Costruttore
TZoom_field(TMask* mask);
// @cmember Distruttore
virtual ~TZoom_field();
};
class TGolem_field : public TEditable_field
{
TToken_string _old_value;
protected: // TEditable_field
virtual TString& get_window_data();
virtual void set_window_data(const char* data);
virtual bool on_key(KEY k);
// @cmember Ritorna FALSE in quanto il campo non e' realmente editable
virtual bool is_editable() const;
virtual void parse_head(TScanner& scanner);
virtual void create(WINDOW parent);
// @cmember Legge dalla relazione il valore del campo
virtual bool autoload(const TRelation& r);
// @cmember Scrive sulla relazione il valore del campo
virtual bool autosave(TRelation& r);
public:
TGolem_field(TMask* m);
virtual ~TGolem_field();
};
#endif // __MASKFLD_H