#ifndef __TABAPP_H
#define __TABAPP_H

#ifndef __RELAPP_H
#include <relapp.h>
#endif
#ifndef __DEFTABAP_H
#include <deftabap.h>
#endif

#define FPC "FPC"

#define TTable_application Tab_application
// @doc EXTERNAL

// @class Tab_application | Classe per la definizione della <c TRelation_application> per le tabelle
//
// @base public | TRelation_application
class TTable_application : public TRelation_application

// @author:(INTERNAL) Nicola
// @access:(INTERNAL) Private Member
{
  // @cmember:(INTERNAL) Maschera corrente dell'applicazione
  TMask* _msk;
  // @cmember:(INTERNAL) Relazione corrente dell'applicazione
  TRelation* _rel;
  // @cmember:(INTERNAL) Nome della tabella da utilizzare
  TString _tabname;

// @access Protected Member
protected:
  
  // @cmember Richiede se il record corrente e' protetto (non cancellabile)
  virtual bool protected_record(TRectype& rec);
  // @cmember Richiede la maschera da usare
  virtual TMask* get_mask(int mode = MODE_QUERY);
  // @cmember Indica se la futura <mf Tab_application::get_mask> ritornera' una maschera diversa
  //        dalla corrente.
  virtual bool changing_mask(int mode);
  // @cmember Ritorna la relazione da modificare
  virtual TRelation* get_relation() const;
  // @cmember Inizializza la maschera per il modo ricerca
  virtual void  init_query_mode(TMask& m);
  // @cmember Inizializza la maschera per il modo modifica
  virtual void  init_modify_mode(TMask& m);
  // @cmember Inizializzazione dei dati dell'utente
  virtual bool user_create() ;
  // @cmember Distruzione dei dati dell'utente
  virtual bool user_destroy() ;
  // @cmember Chiama il programma di stampa
  virtual void print();
  // Nuovi membri:
  // @cmember Ritorna il nome della maschera associata
  virtual TString& get_mask_name(TString& name) const;
  // @cmember imposta la maschera (se non indicata, usa le convenzioni di default) ed eventualmente disalloca quella usata in precedenza
  virtual TMask* set_mask(TMask* mask = NULL);

// @access Public Member
public:
  // @cmember Ritorna il nome della tabella
  const TString& get_tabname() const 
  { return _tabname; }

  // @cmember Costruttore
  TTable_application();
  // @cmember Distruttore
  virtual ~TTable_application();
};

///////////////////////////////////////////////////////////////
//	Tabelle multirel
///////////////////////////////////////////////////////////////
// @class TMultirel_application | Classe per la definizione della <c TRelation_application> per le tabelle
//
// @base public | TRelation_application
class TMultirel_application : public TRelation_application

// @author:(INTERNAL) Vari
// @access:(INTERNAL) Private Member
{
  // @cmember:(INTERNAL) Maschera corrente dell'applicazione
  TMask* _msk;
  // @cmember:(INTERNAL) Relazione corrente dell'applicazione
  TRelation* _rel;
  // @cmember:(INTERNAL) Nome della tabella da utilizzare
  TString _tabname;
  // @cmember:(INTERNAL) valore iniziale campo collegato
	TString _second;

// @access Protected Member
protected:
  
	virtual void get_mask_name(TString& tabname) const;
  // @cmember Richiede la maschera da usare
  virtual TMask* get_mask(int mode = MODE_QUERY);
  // @cmember Indica se la futura <mf Tab_application::get_mask> ritornera' una maschera diversa
  //        dalla corrente.
  virtual bool changing_mask(int mode);
  // @cmember Ritorna la relazione da modificare
  virtual TRelation* get_relation() const;
  // @cmember Inizializza la maschera per il modo inserimento
  virtual void  init_insert_mode(TMask& m);
  // @cmember Inizializza la maschera per il modo modifica
  virtual void  init_modify_mode(TMask& m);
  // @cmember Inizializzazione dei dati dell'utente
  virtual bool user_create() ;
  // @cmember Distruzione dei dati dell'utente
  virtual bool user_destroy() ;
  // @cmember Chiama il programma di stampa
  virtual void print();
  // @cmember Riscrive sulla relazione i valori dalla maschera <p m>
  virtual int rewrite(const TMask& m);
  // @cmember imposta sulla maschera la descrizione
	virtual void set_descr(TMask & m, const TString & desc) {}

// @access Public Member
public:
  // @cmember Ritorna il nome della tabella
  const TString& get_tabname() const 
  { return _tabname; }
  virtual bool find(word key = 0);

  // @cmember Costruttore
  TMultirel_application();
  // @cmember Distruttore
  virtual ~TMultirel_application();
};

#endif