campo-sirio/include/confapp.cpp

144 lines
2.7 KiB
C++
Executable File

#include <confapp.h>
#include <urldefid.h>
#include <utility.h>
#include <mask.h>
#include <maskfld.h>
#include <relation.h>
#include <xvtility.h>
bool TConfig_application::create()
{
TApplication::create();
_last_choice = BAR_ITEM(1);
// process args
TString arg(16);
for (int i = 0; i < argc(); i++)
{
arg = argv(i);
if (arg == "-c")
_which_config = atoi(argv(++i));
else
if (arg[0] == '-')
continue;
else
{
TString* argp = new TString(arg);
_paragraphs.add(argp);
}
}
user_create();
dispatch_e_menu(_last_choice);
return TRUE;
}
bool TConfig_application::destroy()
{
bool b = user_destroy();
TApplication::destroy();
return b;
}
bool TConfig_application::menu(MENU_TAG m)
{
// funziona da se' fino a 20 voci della menubar
if (m >= BAR_ITEM(1) && m <= BAR_ITEM(20))
{
_last_choice = m;
do_config((m - BAR_ITEM(0))/100);
}
return xvt_test_menu_tag(BAR_ITEM(2));
}
void TConfig_application::do_config(int m)
{
for (;;)
{
TString par = name();
if (m < _paragraphs.items())
par = (TString&)_paragraphs[m];
else par.cut(2);
TConfig cnf(_which_config, par);
TString maskname(cnf.get("EdMask"));
if (!maskname.empty())
{
TMask m(maskname);
// carica campi
for (int i = 0; i < m.fields(); i++)
{
TMask_field& f = m.fld(i);
const TFieldref* fref = f.field();
if (fref != NULL)
{
const char* fname = fref->name();
if (fname != NULL)
{
TString& oldvl = cnf.get(fname);
if (!oldvl.empty())
f.set(oldvl);
}
}
}
// run mask
if (!preprocess_config(m,cnf))
break;
int k = m.run();
if (!postprocess_config(m,cnf))
break;
if (k == K_ENTER)
{
// aggiusta campi
for (i = 0; i < m.fields(); i++)
{
TMask_field& f = m.fld(i);
if (f.dirty())
{
const TFieldref* fref = f.field();
if (fref != NULL)
{
const char* fname = fref->name();
const char* value = f.get();
const char* oldvl = cnf.get(fname);
if (postprocess_config_changed(par,fname,
oldvl,value))
cnf.set(fname, value, NULL, TRUE);
}
}
}
}
else break;
}
else
{
warning_box("Nessun parametro da configurare");
break;
}
}
}
bool TConfig_application::preprocess_config (TMask& mask, TConfig& config)
{
return TRUE;
}
bool TConfig_application::postprocess_config (TMask& mask, TConfig& config)
{
return TRUE;
}
bool TConfig_application::postprocess_config_changed(const char* par,
const char* var,
const char* oldv,
const char* newv)
{
return TRUE;
}