#include <relapp.h>

#include "ba4.h"
#include "ba4400.h"

class BA4400_application : public TRelation_application
{
  TMask* _msk;
  TRelation* _rel;

  bool user_create() ;                         
  bool user_destroy() ;                        
  virtual TMask* get_mask(int mode) { return _msk;}
  virtual bool changing_mask(int mode) { return FALSE;}
  virtual TRelation* get_relation() const { return _rel;}

public:
  BA4400_application() {}
  virtual ~BA4400_application() {}
};

HIDDEN bool clear_cap(TMask_field& f, KEY key)
{                     
  if (!f.mask().query_mode() && key == K_TAB)
  {
    TMask& msk = f.mask() ;
    const TString16 val(f.get());
    const bool com_ulc = f.dlg() == FLD_UL1_COMULC;

    if (val.empty())
    {                    
      msk.set(com_ulc ? FLD_UL1_CAPULC : FLD_UL2_CAPTRIB, "", TRUE); 
      if (com_ulc)
      {
        msk.reset(-7);
        msk.set(FLD_UL1_COMULC_COMUNI_PROVCOM, "", TRUE);
      }
      msk.set(com_ulc ? FLD_UL1_COMULC_COMUNI_DENCOM : FLD_UL2_COMTRIB_COMUNI_DENCOM, "", TRUE);
    }  
  }
  return TRUE; 
} 

bool BA4400_application::user_create() 
{
  open_files(LF_UNLOC, LF_ANAG, LF_NDITTE, 0);
	_rel = new TRelation(LF_UNLOC) ;
  _msk = new TMask("ba4400a") ;
  _msk->set_handler(FLD_UL1_COMULC, clear_cap);
  _msk->set_handler(FLD_UL2_COMTRIB, clear_cap);
  set_search_field(FLD_UL1_CODULC);
  return TRUE;
}

bool BA4400_application::user_destroy()
{
  delete _msk;
  delete _rel;
  return TRUE;
}

int ba4400(int argc, char* argv[])
{
  
  BA4400_application a;
  a.run(argc, argv, TR("Anagrafica Unita' Locali"));
  return 0;
}