#ifndef __BA1100_H
#define __BA1100_H  

#ifndef __SHEET_H                 
#include <sheet.h>                 
#endif

#ifndef __CONFIG_H                 
#include <config.h>                 
#endif

#ifndef __MASKFLD_H
class TMask_field;
#endif

#include "ba1100a.h"

///////////////////////////////////////////////////////////
// TDir_sheet  
///////////////////////////////////////////////////////////

class TDir_sheet : public TSheet
{
  TTrec  *_rec;
  TDir  *_dir;
  FileDes  _s_dir;
  long  _items;

protected:  
  virtual long get_items() const { return _items; }
  virtual void get_row(long n, TToken_string& r);

  virtual bool on_key(KEY k);

public:
  TDir* dir() const { return _dir; }
  TTrec* rec() const { return _rec; }
  void set_items(long items) { _items = items; }
  void add();
  void rebuild() { _items = _dir->items();}

  TDir_sheet(const char* title,byte buttons=0x8,const char* col = "N.@5|Nome@20|EOD@7|EOX@7|Lung.  |Descrizione@43|Formula@33|Flags@7");
  ~TDir_sheet();
};

class TRec_sheet : public TObject
{
  TTrec         *_rec;
  TTrec         *_rec_old;
  TDir          *_dir;
  bool          _comfile;
  TConfig       *_descr;
  static TMask  *_mask;
  TFilename     _descfname;
  TString16     _tab;

protected:
  bool check_key_expr(int key, const char* key_expr);
  static bool key_notify(TSheet_field& s, int r, KEY k);
  static bool fld_notify(TSheet_field& s, int r, KEY k);
  void save();
  void save_desc();
  
  virtual long get_items() const { return _rec->fields(); }

public:
  TDir* dir() const { return _dir; }
  TTrec* rec() const { return _rec; }
  const char * descfname() const { return _descfname;}
  const char * tab() const { return _tab; }
  void edit();

  TRec_sheet(int logicnum, const char * tab);
  virtual ~TRec_sheet();
};

class TEdit_file : public TObject
{
protected:
  KEY  edit_record(TRectype& rec, bool readonly = FALSE);

public:
  bool browse(int logicnum, const TFilename& name, const TString& tab);
  TEdit_file() {} 
  virtual ~TEdit_file() {}
};

#endif
