#ifndef __TABAPP_H
#define __TABAPP_H

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

#define GR_SEARCH 29
#define GR_MODIFY_PROTECTED 30
#define GR_RECORD_PROTECTED 31

#define FPC "FPC"

// @doc EXTERNAL

// @class Tab_application | Classe per la definizione della <c TRelation_application> per le tabelle
//
// @base public | TRelation_application
class Tab_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 mask_name();
  // @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 Costruttore
  Tab_application();
  // @cmember Distruttore
  virtual ~Tab_application();
  // @cmember Ritorna il nome della tabella
  const TString& get_tabname() const 
  { return _tabname; }
};

#endif