#include <applicat.h>
#include <automask.h>
#include <relation.h>

#include <multirel.h>
#include "../mg/anamag.h"

#include "ps0430200a.h"

///////////////////////////////////////////////////////////
// TUser_mask maschera
///////////////////////////////////////////////////////////

class TUser_mask : public TAutomask
{
protected:
  virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);

public:
	bool get_user_ini(TFilename& name) const;
  TUser_mask() : TAutomask("ps0430200a") {}
};

bool TUser_mask::get_user_ini(TFilename& name) const
{
	name = prefix().get_studio();
	name.add("config");
	name.add(get(F_USER));
	name.ext("ini");
	return name.exist();
}

bool TUser_mask::on_field_event(TOperable_field& o, TField_event e, long jolly)
{
	switch (o.dlg())
	{
	case F_USER:
		if (e == fe_modify)
		{
			const char* const defpar = "or";
			TFilename inipath; get_user_ini(inipath);
			TConfig userconf(inipath, defpar);

			for (int i = o.mask().fields()-1; i >= 0; i--)
			{
				TMask_field& f = o.mask().fld(i);
				const TFieldref* fr = f.field();

				if (fr != NULL)
				{
					f.set(fr->read(userconf, defpar));
				  f.check();
				}
			}
		}
		break;
	default:
		break;
	}
  return true;
}

class TUser_set_app : public TSkeleton_application
{
protected:
  virtual const char * extra_modules() const {return "ba";}
  virtual void main_loop();
};

void  TUser_set_app::main_loop()
{
	TUser_mask mask;

	while (mask.run() == K_ENTER)
	{
		const char* const defpar = "or";
		TFilename inipath; mask.get_user_ini(inipath);
		TConfig userconf(inipath, defpar);

		for (int i = mask.fields()-1; i >= 0; i--)
		{
			const TMask_field& f = mask.fld(i);
			const TFieldref* fr = f.field();
			if (fr != NULL)
				fr->write(userconf, defpar, f.get());
		}
		mask.reset();
	}
}

int ps0430200(int argc, char* argv[])
{
  TUser_set_app a;
  a.run(argc, argv, TR("Configurazione campi per utente"));
  return 0;
}