#include <msksheet.h>
#include <relapp.h>
#include <urldefid.h>

///////////////////////////////////////////////////////////
// Test Relapp
///////////////////////////////////////////////////////////

class TTestrel_application : public TRelation_application
{
  const char* _maskname;
  const char* _num;

  TRelation* _rel;
  TMask* _msk;

protected:
  virtual bool user_create();
  virtual bool user_destroy();
  virtual TMask* get_mask(int) { return _msk; }
  virtual bool changing_mask(int) { return FALSE;}
  virtual TRelation* get_relation() const { return _rel; }
  virtual int read(TMask& m) { m.autoload(_rel); return NOERR; }
  virtual int write(const TMask&) { return NOERR; }
  virtual int rewrite(const TMask&) { return NOERR; }

public:
  TTestrel_application(const char* name, const char* num);
};

TTestrel_application::TTestrel_application(const char* name, const char* num)
: _maskname(name), _num(num),
  _msk(NULL), _rel(NULL)
{}


bool TTestrel_application::user_create()
{
  _msk = new TMask(_maskname);

  int id = atoi(_num);
  if (id > 0) _rel = new TRelation(id);
  else _rel = new TRelation(_num);

  return TRUE;
}

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

///////////////////////////////////////////////////////////
// Testmask
///////////////////////////////////////////////////////////

class TTest_application : public TApplication
{
  TFilename _maskname;

protected:
  bool create() { dispatch_e_menu(BAR_ITEM(1)); return TRUE; }
  bool destroy() { return TRUE; }
  bool menu(MENU_TAG);

public:
  TTest_application(const char* name) : _maskname(name) {}
};

bool TTest_application::menu(MENU_TAG)
{ 
  KEY k;
  if (_maskname.empty())
  {
    TMask m("Inserire il nome della maschera", 1, 42, 4);
    m.add_string(101, 0, "", 1, 1, 40);
    m.efield(101).check_type(CHECK_REQUIRED);
    m.add_button(DLG_OK, 0, "", -12, -1, 10, 2);
    m.add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2);
    k = m.run();
    if (k == K_ENTER)
      _maskname = m.get(101);
    else
      return FALSE;  
  } 

  TMask m(_maskname);
  k = m.run();
  if (k == K_QUIT) stop_run();

  return k != K_QUIT;
}

///////////////////////////////////////////////////////////


int main(int argc, char** argv)
{
  TApplication::check_parameters(argc, argv);
  
  if (argc > 1)
  {
    if (argc < 3)
    {
      TTest_application a(argv[1]);
      TString80 title("Test Mask "); title << argv[1];
      a.run(argc, argv, title);
    }
    else
    {
      TTestrel_application a(argv[1], argv[2]);
      a.run(argc, argv, "Test Relation Application");
    }
  }  
  return 0;
}

