campo-sirio/include/confapp.cpp
guy 80b7a2bc86 Nuova versione campi a video
git-svn-id: svn://10.65.10.50/trunk@2783 c028cbd2-c16b-5b4b-a496-9718f37d4682
1996-05-08 11:09:13 +00:00

157 lines
3.6 KiB
C++
Executable File

#include <confapp.h>
#include <mask.h>
#include <relation.h>
#include <urldefid.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)
{
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
const int max = m.fields();
for (int i = 0; i < max; i++)
{
TMask_field& f = m.fld(i);
if (f.field() != NULL)
{
const char* fname = f.field()->name();
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 < max; i++)
{
TMask_field& f = m.fld(i);
if (f.dirty() && f.field())
{
const char* fname = f.field()->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;
}
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;
}
// @doc EXTERNAL
// @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 <c TApplication>
const char* oldv, // @parm vedi <c TApplication>
const char* newv) // @parm vedi <c 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;
}