Files correlati : Ricompilazione Demo : [ ] Commento : Riportata la versione 3.1 patch 766 git-svn-id: svn://10.65.10.50/trunk@14628 c028cbd2-c16b-5b4b-a496-9718f37d4682
		
			
				
	
	
		
			277 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			277 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| #ifndef __RELAPP_H
 | ||
| #define __RELAPP_H
 | ||
| 
 | ||
| #ifndef __APPLICAT_H
 | ||
| #include <applicat.h>
 | ||
| #endif
 | ||
| 
 | ||
| #ifndef __CONFIG_H
 | ||
| #include <config.h>
 | ||
| #endif
 | ||
| 
 | ||
| #ifndef __RELATION_H
 | ||
| #include <relation.h>
 | ||
| #endif
 | ||
| 
 | ||
| #ifndef __MASK_H
 | ||
| #include <mask.h>
 | ||
| #endif
 | ||
| 
 | ||
| #define TRANSACTION_RUN "RUN"       // Run application (eventually sets firm)
 | ||
| #define TRANSACTION_INSERT "INSERT" // Create a new record and fill it
 | ||
| #define TRANSACTION_MODIFY "MODIFY" // Load and modify an existing record
 | ||
| #define TRANSACTION_DELETE "DELETE" // Delete an existing record
 | ||
| #define TRANSACTION_LINK "LINK"     // Load an existing record and interactively edit it
 | ||
| #define TM_INTERACTIVE 'I'
 | ||
| #define TM_AUTOMATIC 'A'
 | ||
| #define TM_REMAIN 'R'
 | ||
| // @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 TSkeleton_application
 | ||
| 
 | ||
| // @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
 | ||
|   byte _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) Nomi dei file .ini con la transazione da eseguire
 | ||
|   TString_array _trans_ini;
 | ||
|   // @cmember:(INTERNAL) Numero di file .ini di transazioni
 | ||
|   int _ntransactions;
 | ||
|   // @cmember:(INTERNAL) Indice del file .ini di _ini con la transazione da eseguire
 | ||
|   int _trans_counter;
 | ||
|   // @cmember:(INTERNAL) Azione della transazione corrente
 | ||
|   TString _curr_transaction;
 | ||
|   // @cmember:(INTERNAL) Modalit<69> di esecuzione della transazione corrente (Automatica o interattiva)
 | ||
|   char _curr_trans_mode;
 | ||
|   // @cmember:(INTERNAL) Transazione ricevuta da .....
 | ||
|   TString _curr_trans_from;
 | ||
|   // @cmember:(INTERNAL) Flag di cancellazione automatica veloce
 | ||
|   int _autodelete;
 | ||
|   // @cmember:(INTERNAL) Flag di navigazione tramite toolbar
 | ||
|   bool _navigating;
 | ||
| 
 | ||
| private:
 | ||
|   // @cmember:(INTERNAL) Carica la transazione corrente (protocollo via .ini)
 | ||
|   bool load_transaction() ;
 | ||
|   
 | ||
|   // @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(word k, bool err);
 | ||
|   // @cmember:(INTERNAL) Abilita la ricerca sulla maschera
 | ||
|   void enable_query();
 | ||
|     // @cmember:(INTERNAL) Setta i limiti
 | ||
|   void set_limits(byte what = 0x3);
 | ||
|   // @cmember:(INTERNAL) Abilita i vari bottoni di ricerca della toolbar
 | ||
|   void set_toolbar();
 | ||
|   
 | ||
|   // @Setta i filtri di lettura
 | ||
|   void set_key_filter();
 | ||
|   // @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
 | ||
|   virtual bool has_filtered_cursor() const 
 | ||
|   { return filtered(); }
 | ||
|   virtual TCursor& get_filtered_cursor() const;
 | ||
| 
 | ||
|   // @cmember:(INTERNAL) Sistema il bottone ricerca se necessario
 | ||
| 	void set_find_button();
 | ||
| 
 | ||
| // @access Protected Member
 | ||
| protected:  // TApplication
 | ||
|   // @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;
 | ||
|   // @cmember Aggiorna i limiti di ricerca sul cambio ditta
 | ||
|   virtual void on_firm_change();
 | ||
| 
 | ||
| // @access Protected Member
 | ||
| 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:(INTERNAL) Seleziona il nuovo modo e ritorna il vecchio
 | ||
|   int set_mode(int mode);
 | ||
| 
 | ||
|   // @cmember Ciclo principale
 | ||
|   virtual void 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 Attiva la maschera di eliminazione
 | ||
|   int delete_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) { return false; }
 | ||
|   // @cmember Richiede la maschera da usare
 | ||
|   virtual TMask* get_mask(int mode) pure;
 | ||
| 
 | ||
|   // @cmember:(INTERNAL) Salva i contenuti della maschera su file
 | ||
|   virtual bool save(bool check_dirty);
 | ||
|   // @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 Deve ritornare 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 ""; }
 | ||
|   virtual bool get_next_key(TToken_string& key)
 | ||
|   { return FALSE; }
 | ||
|   
 | ||
|   // @cmember Richiede se il record corrente e' protetto (non cancellabile)
 | ||
|   virtual bool protected_record(TRectype&)
 | ||
|   { return FALSE; }
 | ||
| 
 | ||
|   // @cmember Richiede se il record corrente e' protetto (non cancellabile)
 | ||
|   virtual bool protected_record(TRelation &);
 | ||
|   
 | ||
|   // @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 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;}  
 | ||
|   byte autodeleting() const { return _autodelete; }
 | ||
|   bool navigating() const { return _navigating; }
 | ||
|   bool parse_command_line();
 | ||
|   void ini2query_mask();
 | ||
|   void ini2insert_mask();
 | ||
|   void edit_mask2ini();
 | ||
|   virtual void ini2sheet(TConfig& ini, TSheet_field &sheet);
 | ||
|   virtual void sheet2ini(TSheet_field &sheet,TConfig& ini);
 | ||
|   virtual void ini2mask(TConfig& ini, TMask& m, bool query);
 | ||
|   virtual void mask2ini(const TMask& m, TConfig& ini);
 | ||
|   virtual bool mask2mail(const TMask& m);
 | ||
| 
 | ||
| // @access Public Member  
 | ||
| public:
 | ||
|   // @cmember Ritorna la relazione da modificare
 | ||
|   virtual TRelation* get_relation() const pure;
 | ||
| 
 | ||
|   // @cmember Ricalcola l'attivazione dei bottoni di navigazione
 | ||
|   void update_navigation_bar();
 | ||
| 
 | ||
|   // @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(word key = 0);
 | ||
|   // @cmember Costruisce il membro <md TRelation_application::_fixed>
 | ||
|   void set_link(TMask & m, const char * keyexpr);
 | ||
|   // @cmember Ritorna TRUE se e' stato chiamato col messaggio di link
 | ||
|   bool lnflag() const 
 | ||
|   { return _lnflag != 0;} // qui
 | ||
| 
 | ||
|   virtual word class_id() const { return CLASS_RELATION_APPLICATION; }
 | ||
| 
 | ||
|   // @cmember Ritorna TRUE se e' una transazione
 | ||
|   bool is_transaction() const { return _curr_transaction.not_empty(); }
 | ||
| 
 | ||
|   // @cmember Costruttore
 | ||
|   TRelation_application();
 | ||
|   // @cmember Distruttore
 | ||
|   virtual ~TRelation_application();
 | ||
| };
 | ||
| 
 | ||
| #endif
 | ||
| 
 | ||
| 
 |