#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
  TString16 _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 = NO_MODE) 
  { return _msk;}
  // @cmember Indica se la futura <mf Tab_application::get_mask> ritornera' una maschera diversa
  //	      dalla corrente.
  virtual bool changing_mask(int mode) 
  { return FALSE;}
  // @cmember Ritorna la relazione da modificare
  virtual TRelation* get_relation() const 
  { return _rel;}
  // @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();

// @access Public Member
public:
  // @cmember Costruttore
  Tab_application() : _msk(NULL), _rel(NULL) 
  {}
  // @cmember Distruttore
  virtual ~Tab_application() 
  {}
  // @cmember Ritorna il nome della tabella
  const TString& get_tabname() const 
  { return _tabname; }
};

#endif