controls.cpp Abbassati legermente i checkbox mask.cpp Corretto controllo sulle maschere multipagina non a tutto schermo maskfld.cpp Corretto passaggio al campo successivo doppo un tasto F9 msksheet.cpp Corretta gestione del messaggio di inizializzazione in modo da cercare di andare sempre sulla prima riga progind.cpp Corretto calcolo della percentuale (arrotondato e non troncato) relapp.h Reso pubblico il metoto TRelation_application::lnflag() const git-svn-id: svn://10.65.10.50/trunk@3573 c028cbd2-c16b-5b4b-a496-9718f37d4682
213 lines
7.7 KiB
C++
Executable File
213 lines
7.7 KiB
C++
Executable File
#ifndef __RELAPP_H
|
|
#define __RELAPP_H
|
|
|
|
#ifndef __APPLICAT_H
|
|
#include <applicat.h>
|
|
#endif
|
|
|
|
#ifndef __RELATION_H
|
|
#include <relation.h>
|
|
#endif
|
|
|
|
#ifndef __MASK_H
|
|
#include <mask.h>
|
|
#endif
|
|
|
|
// @doc EXTERNAL
|
|
|
|
// @class TRelation_application | Classe per la gestione di una applicazione di manutenzione di uno
|
|
// o piu' archivi utilizzando una relazione
|
|
//
|
|
// @base public | TApplication
|
|
class TRelation_application : public TApplication
|
|
|
|
// @author:(INTERNAL) Guido
|
|
|
|
// @access:(INTERNAL) Private Member
|
|
{
|
|
// @cmember:(INTERNAL) Maschera corrente dell'applicazione
|
|
TMask* _mask;
|
|
// @cmember:(INTERNAL) Primo record
|
|
TRecnotype _first;
|
|
// @cmember:(INTERNAL) Ultimo record
|
|
TRecnotype _last;
|
|
// @cmember:(INTERNAL) Campo da utilizzare col bottone Ricerca
|
|
int _search_id;
|
|
|
|
// @cmember:(INTERNAL) Nome del programma chiamante
|
|
TString _autoins_caller;
|
|
// @cmember:(INTERNAL) Numero del record nuovo/editato
|
|
long _recins;
|
|
|
|
// @cmember:(INTERNAL) Indica se e' stato chiamato col messaggio di link
|
|
bool _lnflag;
|
|
// @cmember:(INTERNAL) Contiene il codice del campo e il valore fisso
|
|
TToken_string _fixed;
|
|
// @cmember:(INTERNAL) Messaggio da passare all'utente per indicare che e' stata fatta la rinumerazione
|
|
TString _renum_message;
|
|
|
|
// @cmember:(INTERNAL) Setta i campi fissati da <md TRelation_application::_fixed>
|
|
bool filter();
|
|
// @cmember:(INTERNAL) Controlla se una chiave e' completa ed esiste su file
|
|
bool test_key(byte k, bool err);
|
|
// @cmember:(INTERNAL) Salva i contenuti della maschera su file
|
|
bool save(bool check_dirty);
|
|
// @cmember:(INTERNAL) Abilita la ricerca sulla maschera
|
|
void enable_query();
|
|
// @cmember:(INTERNAL) UNUSED
|
|
void set_toolbar(bool all);
|
|
|
|
// @cmember:(INTERNAL) Seleziona il nuovo modo e ritorna il vecchio
|
|
int set_mode(int mode);
|
|
// @cmember:(INTERNAL) Setta i limiti
|
|
void set_limits(byte what = 0x3);
|
|
// @cmember:(INTERNAL) Posiziona l'applicazione in modo richiesta/inserimento (chiama <mf TRelation_application::query_mode>)
|
|
void query_insert_mode()
|
|
{ query_mode(TRUE); }
|
|
// @cmember:(INTERNAL) Entra in modo inserimento
|
|
void insert_mode();
|
|
// @cmember:(INTERNAL) Cancella il record corrente
|
|
bool relation_remove();
|
|
// @cmember:(INTERNAL) Ritorna il campo di ricerca della maschera
|
|
TEdit_field& get_search_field() const;
|
|
|
|
// @cmember:(INTERNAL) Permette di autonumerare un record
|
|
bool autonum(TMask* m, bool rec);
|
|
// @cmember:(INTERNAL) Controlla se il <c TCursor> ha un filtro
|
|
bool has_filtered_cursor() const
|
|
{ return filtered() || force_cursor_usage();}
|
|
|
|
// @access Protected Member
|
|
protected:
|
|
// @cmember Effettua i controlli all'inizio dell'applicazione
|
|
virtual bool create();
|
|
// @cmember Effettua i controlli alla fine dell'applicazione
|
|
virtual bool destroy();
|
|
// @cmember Controlla se e' possibile modificare la ditta corrente durante l'esecuzione dell'applicazione
|
|
virtual bool firm_change_enabled() const;
|
|
|
|
protected:
|
|
// @cmember Ritorna il descrittore del file principale della relazione
|
|
TLocalisamfile& file() const
|
|
{ return get_relation()->lfile(); }
|
|
// @cmember Ritorna il primo record
|
|
TRecnotype first() const
|
|
{ return _first;}
|
|
// @cmember Ritorna l'ultimo record
|
|
TRecnotype last() const
|
|
{ return _last;}
|
|
// @cmember Ritorna il nome del programma chiamante
|
|
const TString& autoins_caller() const
|
|
{ return _autoins_caller;}
|
|
|
|
// @cmember Gestisce la barra dei menu' (chiama <mf TRelation_application::main_loop>)
|
|
virtual bool menu(MENU_TAG m);
|
|
// @cmember Ciclo principale
|
|
virtual bool main_loop();
|
|
|
|
// @cmember Inizializzazione dei dati dell'utente
|
|
virtual bool user_create() pure;
|
|
// @cmember Distruzione dei dati dell'utente
|
|
virtual bool user_destroy() pure;
|
|
|
|
// @cmember Fissa i campi non modificabili
|
|
void set_fixed();
|
|
// @cmember Attiva la maschera di ricerca
|
|
bool search_mode();
|
|
// @cmember Entra in modo di ricerca
|
|
void query_mode(bool pre_ins = FALSE);
|
|
// @cmember Entra in modo modifica
|
|
bool modify_mode();
|
|
// @cmember Legge i campi chiave della maschera e setta il cursore relativo
|
|
void setkey();
|
|
// @cmember Indica se la futura <mf TRelation_application::get_mask> ritornera' una maschera diversa
|
|
// dalla corrente.
|
|
// <nl>La richiesta della maschera da utilizzare per ogni fase di lavoro
|
|
// (ricerca, inserimento, modifica) avviene sempre in due tempi: <mf TRelation_application::changing_mask> e
|
|
// <mf TRelation_application::get_mask>. Cio' serve per gestire correttamente le applicazioni
|
|
// con maschere multiple.
|
|
virtual bool changing_mask(int mode) pure;
|
|
// @cmember Richiede la maschera da usare
|
|
virtual TMask* get_mask(int mode) pure;
|
|
|
|
// @cmember Ritorna la relazione da modificare
|
|
virtual TRelation* get_relation() const pure;
|
|
// @cmember Legge dalla relazione i valori nella maschera <p m>
|
|
virtual int read(TMask& m);
|
|
// @cmember Scrive sulla relazione i valori dalla maschera <p m>
|
|
virtual int write(const TMask& m);
|
|
// @cmember Riscrive sulla relazione i valori dalla maschera <p m>
|
|
virtual int rewrite(const TMask& m);
|
|
// @cmember Cancella il record corrente
|
|
virtual bool remove();
|
|
|
|
// @cmember Richiede una stringa nella forma CAMPO1<pipe>VALORE1<pipe>CAMPO2<pipe>VALORE2<pipe>...
|
|
// <pipe>CAMPOn<pipe>VALOREn contenente le coppie NUMERO_CAMPO_MASCHERA - VALORE_DA_ASSEGNARE
|
|
// che descrivono il prossimo codice libero da utilizzare per la autonumerazione.
|
|
// <nl>Nel caso di banale numerazione progressiva potrebbe essere implementata come
|
|
// return format("%d<pipe>%s", F_NUM, get_relation()-<gt>items());
|
|
virtual const char* get_next_key()
|
|
{ return ""; }
|
|
|
|
// @cmember Richiede se il record corrente e' protetto (non cancellabile)
|
|
virtual bool protected_record(TRectype&)
|
|
{ return FALSE; }
|
|
|
|
// @cmember Inizializza la maschera per il modo ricerca
|
|
virtual void init_query_mode(TMask&)
|
|
{ }
|
|
// @cmember Inizializza la maschera per il modo ricerca ed inserimento (chiama <mf TRelation_application::init_query_mode>)
|
|
virtual void init_query_insert_mode(TMask& m)
|
|
{ init_query_mode(m); }
|
|
// @cmember Inizializza la maschera per il modo inserimento
|
|
virtual void init_insert_mode(TMask&)
|
|
{ }
|
|
// @cmember Inizializza la maschera per il modo modifica
|
|
virtual void init_modify_mode(TMask&)
|
|
{ }
|
|
|
|
// @cmember Simula l'utilizzo di un filtro da un'altra applicazione
|
|
virtual bool force_cursor_usage() const
|
|
{ return FALSE;}
|
|
// @cmember Indica se abilitare/disabilitare la scrittura sul file
|
|
// principale (vedi <mf TRealtion::write_enable>)
|
|
virtual void write_enable(bool on = TRUE)
|
|
{ get_relation()->write_enable(0, on); }
|
|
// @cmember Indica se disabilitare la scrittura sul file principale (vedi <mf TRealtion::write_enable>)
|
|
void write_disable()
|
|
{ write_enable(FALSE); }
|
|
|
|
// @cmember Salva il record corrente e si predispone per un nuovo inserimento
|
|
virtual bool save_and_new() const;
|
|
|
|
// @cmember Impone il campo da utilizzare col bottone Ricerca
|
|
void set_search_field(short id)
|
|
{ _search_id = id;}
|
|
|
|
// @access Public Member
|
|
public:
|
|
// @cmember Ritorna la maschera corrente
|
|
TMask& curr_mask() const
|
|
{ return *_mask; }
|
|
|
|
// @cmember Ritorna se sono stati posti dei filtri sul file corrente
|
|
bool filtered() const
|
|
{ return _fixed.not_empty(); }
|
|
// @cmember Cerca un record corrispondente alla chiave <p key> (0 prima chiave completa)
|
|
bool find(byte key = 0);
|
|
// @cmember Costruisce il membro <md TRelation_application::_fixed>
|
|
void set_link(TMask & m, const char * keyexpr);
|
|
// @cmember Ritorna se e' stato chiamato col messaggio di link
|
|
bool lnflag() const
|
|
{ return _lnflag;}
|
|
|
|
// @cmember Costruttore
|
|
TRelation_application();
|
|
// @cmember Distruttore
|
|
virtual ~TRelation_application();
|
|
};
|
|
|
|
#endif
|
|
|
|
|