167 lines
3.8 KiB
C++
Executable File
167 lines
3.8 KiB
C++
Executable File
#include <confapp.h>
|
|
#include <urldefid.h>
|
|
#include <utility.h>
|
|
#include <mask.h>
|
|
#include <relation.h>
|
|
|
|
#define comunque
|
|
|
|
// @doc EXTERNAL
|
|
|
|
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)
|
|
{
|
|
TString par(name());
|
|
if (m < _paragraphs.items())
|
|
par = (TString&)_paragraphs[m];
|
|
else par.cut(2);
|
|
|
|
for (;;)
|
|
{
|
|
TConfig cnf(_which_config, par);
|
|
|
|
const TFilename 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))
|
|
{
|
|
bool tosave = k == K_ENTER || k == K_SAVE;
|
|
|
|
if (k == K_ENTER || k == K_QUIT)
|
|
{
|
|
// 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 (!tosave)
|
|
tosave = yesno_box("Modifiche non registrate. Salvare?");
|
|
|
|
if (!tosave) break;
|
|
|
|
if (postprocess_config_changed(par,fname, oldvl,value))
|
|
cnf.set(fname, value, NULL, TRUE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else break;
|
|
}
|
|
if (k == K_QUIT)
|
|
break comunque;
|
|
}
|
|
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;
|
|
}
|
|
|
|
// @mfunc Simile alla <mf TApplication::change_config>, ma viene usata
|
|
// dalla maschera principale.
|
|
//
|
|
// @rdesc Ritorna i seguenti valori:
|
|
//
|
|
// @flag TRUE | Se la modifica viene acettatta (dafault)
|
|
// @flag FALSE | Se la modifica non viene accettata
|
|
bool TConfig_application::postprocess_config_changed(
|
|
const char* par, // @parm Paragrafo in corso di editing
|
|
const char* var, // @parm vedi TApplication!!!
|
|
const char* oldv, // @parm vedi TApplication!!!
|
|
const char* newv) // @parm vedi TApplication!!!
|
|
|
|
// @comm Rispetto alla <mf TApplication::change_config> le viene passato in piu' il paragrafo
|
|
// in corso di editing. E' chiamata per ogni parametro modificato
|
|
|
|
{
|
|
return TRUE;
|
|
}
|