efb0bd7ab7
estratto conto. Effettuate alcune correzioni all'editor standard dei profili di stampa - Cambiato il tipo profilo da numerico a stringa - Correzione comportamento tasto FINE - Correzione gestione della query del tipo profilo - Correzione eliminazione ed inserimento nuovi profili - Cambiata descrizione "Nascosto" in "Non stampare" nella maschera ba2100f - Reso hidden il testo fisso in ba2100f git-svn-id: svn://10.65.10.50/trunk@1964 c028cbd2-c16b-5b4b-a496-9718f37d4682
407 lines
9.2 KiB
C++
Executable File
407 lines
9.2 KiB
C++
Executable File
#include "baformed.h"
|
|
#include "ba2100.h"
|
|
|
|
|
|
TForm_editor::TForm_editor() : _form(NULL), _extra(FALSE)
|
|
{}
|
|
|
|
TForm_editor::~TForm_editor()
|
|
{}
|
|
|
|
bool TForm_editor::create()
|
|
{
|
|
TApplication::create();
|
|
|
|
const char* form = NULL;
|
|
long code = 0;
|
|
|
|
for (int a = 2; a < argc(); a++)
|
|
{
|
|
if (stricmp(argv(a), "-E") == 0)
|
|
{
|
|
_extra = TRUE;
|
|
continue;
|
|
}
|
|
|
|
if (form == NULL)
|
|
form = argv(a);
|
|
else
|
|
if (code == 0)
|
|
code = atol(argv(a));
|
|
}
|
|
|
|
bool go = FALSE;
|
|
|
|
if ((form && code) || (form && code == 0 && _extra))
|
|
{
|
|
_form = new TForm(form, (code!=0) ? format("%05ld",code) : "", _extra ? 2 : 1);
|
|
enable_menu_item(M_FILE_PRINT);
|
|
if (!_extra) dispatch_e_menu(MENU_ITEM(31));
|
|
}
|
|
else
|
|
{
|
|
TMask m("ba2100b");
|
|
|
|
m.set_handler(F_CODE, cod_handler);
|
|
if (form)
|
|
{
|
|
m.set(F_BASE, form);
|
|
m.disable(F_BASE);
|
|
}
|
|
|
|
if (code) m.set(F_CODE, code);
|
|
|
|
// choose form from mask
|
|
KEY k;
|
|
while ((k = m.run()) != K_QUIT)
|
|
{
|
|
TString16 fform = m.get(F_BASE);
|
|
TString80 fdesc = m.get(F_DESC);
|
|
long fcode = m.get_long(F_CODE);
|
|
|
|
if (k == K_ENTER)
|
|
{
|
|
_form = new TForm(fform, (fcode!=0) ? format("%05ld",fcode) : "", _extra ? 2 :1, fdesc);
|
|
form = fform;
|
|
go = TRUE;
|
|
break;
|
|
}
|
|
else if (k == K_DEL)
|
|
{
|
|
if (yesno_box("Confermare la cancellazione del profilo %05ld", fcode))
|
|
{
|
|
TLocalisamfile frm(LF_FORM);
|
|
frm.zero();
|
|
frm.put("TIPOPROF", fform);
|
|
frm.put("CODPROF", format("%05ld",fcode));
|
|
if (frm.read() == NOERR)
|
|
frm.remove();
|
|
TLocalisamfile rfr(LF_RFORM);
|
|
rfr.zero();
|
|
rfr.put("TIPOPROF", fform);
|
|
rfr.put("CODPROF", format("%05ld",fcode));
|
|
if (rfr.read() == NOERR)
|
|
{
|
|
for ( ; atol(rfr.get("CODPROF")) == fcode && rfr.get("TIPOPROF") == fform; rfr.next())
|
|
rfr.remove();
|
|
}
|
|
m.set(F_CODE,"");
|
|
m.set(F_BASE,"");
|
|
m.set(F_DESC,"");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (go)
|
|
{
|
|
enable_menu_item(M_FILE_PRINT);
|
|
if (!_extra) dispatch_e_menu(MENU_ITEM(31));
|
|
}
|
|
|
|
return form != NULL;
|
|
}
|
|
|
|
bool TForm_editor::destroy()
|
|
{
|
|
if (_form) delete _form;
|
|
return TApplication::destroy();
|
|
}
|
|
|
|
|
|
bool TForm_editor::menu(MENU_TAG tag)
|
|
{
|
|
char sec = 'B';
|
|
pagetype pt = odd_page;
|
|
|
|
switch(tag)
|
|
{
|
|
case MENU_ITEM(11):
|
|
sec = 'R'; pt = odd_page; break;
|
|
case MENU_ITEM(12):
|
|
sec = 'D'; pt = odd_page; break;
|
|
case MENU_ITEM(21):
|
|
sec = 'H'; pt = odd_page; break;
|
|
case MENU_ITEM(22):
|
|
sec = 'H'; pt = even_page; break;
|
|
case MENU_ITEM(23):
|
|
sec = 'H'; pt = first_page; break;
|
|
case MENU_ITEM(24):
|
|
sec = 'H'; pt = last_page; break;
|
|
case MENU_ITEM(31):
|
|
sec = 'B'; pt = odd_page; break;
|
|
case MENU_ITEM(32):
|
|
sec = 'B'; pt = even_page; break;
|
|
case MENU_ITEM(33):
|
|
sec = 'B'; pt = first_page; break;
|
|
case MENU_ITEM(34):
|
|
sec = 'B'; pt = last_page; break;
|
|
case MENU_ITEM(41):
|
|
sec = 'F'; pt = odd_page; break;
|
|
case MENU_ITEM(42):
|
|
sec = 'F'; pt = even_page; break;
|
|
case MENU_ITEM(43):
|
|
sec = 'F'; pt = first_page; break;
|
|
case MENU_ITEM(44):
|
|
sec = 'F'; pt = last_page; break;
|
|
case MENU_ITEM(51):
|
|
sec = 'G'; pt = odd_page; break;
|
|
case MENU_ITEM(52):
|
|
sec = 'G'; pt = even_page; break;
|
|
case MENU_ITEM(53):
|
|
sec = 'G'; pt = first_page; break;
|
|
case MENU_ITEM(54):
|
|
sec = 'G'; pt = last_page; break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
edit(sec, pt);
|
|
return _extra;
|
|
}
|
|
|
|
void TForm_editor::print()
|
|
{
|
|
_form->print();
|
|
}
|
|
|
|
bool TForm_editor::file_handler(TMask_field& f, KEY k)
|
|
{
|
|
bool ok = TRUE;
|
|
|
|
if (k == K_TAB && f.dirty())
|
|
{
|
|
const char* n = f.get();
|
|
if (*n > ' ')
|
|
{
|
|
const char* d = prefix().description(n);
|
|
if (*d == '\0') ok = error_box("Nome di file o tabella errato");
|
|
f.mask().set(f.dlg()+1, d);
|
|
}
|
|
}
|
|
|
|
return ok;
|
|
}
|
|
|
|
bool TForm_editor::cod_handler(TMask_field& f, KEY k)
|
|
{
|
|
bool ok = TRUE;
|
|
|
|
if (k==K_TAB && f.dirty())
|
|
{
|
|
TLocalisamfile frm(LF_FORM);
|
|
frm.zero();
|
|
frm.put("TIPOPROF",f.mask().get(F_BASE));
|
|
frm.put("CODPROF",f.mask().get(F_CODE));
|
|
if (frm.read() == NOERR)
|
|
f.mask().set(F_DESC,frm.get("DESC"));
|
|
}
|
|
return ok;
|
|
}
|
|
|
|
bool TForm_editor::edit_relation()
|
|
{
|
|
TMask m("ba2100r");
|
|
TSheet_field& s = (TSheet_field&)m.field(F_ITEMS);
|
|
s.sheet_mask().set_handler(101, file_handler);
|
|
|
|
TRelation* & rel = _form->_relation;
|
|
TCursor* & cur = _form->_cursor;
|
|
|
|
if (rel)
|
|
{
|
|
s.rows_array() = _form->rel_desc().get_all_desc();
|
|
// Disable meaningless fields for main file
|
|
s.disable_cell(0, 2); // Join
|
|
s.disable_cell(0, 4); // Alias
|
|
}
|
|
|
|
if (m.run() != K_ENTER || !m.dirty())
|
|
return FALSE;
|
|
|
|
if (rel)
|
|
{
|
|
delete cur; cur = NULL;
|
|
delete rel; rel = NULL;
|
|
}
|
|
|
|
TToken_string& r = s.row(0);
|
|
TString16 name = r.get(0);
|
|
|
|
if (name.not_empty())
|
|
{
|
|
int logicnum = atoi(name);
|
|
|
|
int alias = 0, to = 0, key = r.get_int(3);
|
|
TString80 exp = r.get(5);
|
|
|
|
rel = (logicnum > 0) ? new TRelation(logicnum) : new TRelation(name);
|
|
cur = new TCursor(rel, exp, key);
|
|
|
|
for (int i = 1; i < s.items(); i++)
|
|
{
|
|
TToken_string& r = s.row(i);
|
|
name = r.get(0); logicnum = atoi(name);
|
|
r.get(); // Skip description
|
|
to = name2log(r.get()); // Join
|
|
key = r.get_int(); // Key
|
|
alias = r.get_int(); // Alias
|
|
exp = r.get(); // Expression
|
|
|
|
const int l = exp.len();
|
|
for (int j = 0; j < l; j++)
|
|
if (exp[j] == ' ') exp[j] = '|';
|
|
|
|
if (logicnum > 0)
|
|
rel->add(logicnum, exp, key, to, alias); // join file
|
|
else
|
|
rel->add(name, exp, key, to, alias); // join table
|
|
}
|
|
|
|
_form->rel_desc().change_relation(*rel, s.rows_array());
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
bool TForm_editor::edit(char s, pagetype t)
|
|
{
|
|
bool dirty = FALSE;
|
|
|
|
if (s == 'R')
|
|
dirty = edit_relation();
|
|
else
|
|
if (s == 'D')
|
|
form_config();
|
|
else
|
|
{
|
|
TString80 caption;
|
|
switch(s)
|
|
{
|
|
case 'F':
|
|
caption << "Piede"; break;
|
|
case 'G':
|
|
caption << "Sfondo"; break;
|
|
case 'H':
|
|
caption << "Testa"; break;
|
|
default:
|
|
caption << "Corpo"; break;
|
|
}
|
|
|
|
switch(t)
|
|
{
|
|
case first_page:
|
|
caption << " della prima pagina"; break;
|
|
case even_page:
|
|
caption << " delle pagine pari"; break;
|
|
case last_page:
|
|
caption << " dell'ultima pagina"; break;
|
|
default:
|
|
caption << " standard"; break;
|
|
}
|
|
|
|
dirty = TRUE;
|
|
if (!_form->exist(s, t))
|
|
{
|
|
const KEY k = yesnocancel_box("La sezione %s non esiste:\n"
|
|
"si desidera generare quella standard?",
|
|
(const char*)caption);
|
|
if (k == K_ESC)
|
|
dirty = FALSE;
|
|
else
|
|
{
|
|
TPrint_section* sec = _form->exist(s, t, TRUE);
|
|
if (k == K_YES)
|
|
{
|
|
const TPrint_section* def = _form->exist(s, odd_page);
|
|
if (def) *sec = *def;
|
|
else dirty = FALSE;
|
|
}
|
|
}
|
|
}
|
|
if (dirty)
|
|
dirty = _form->section(s, t).edit(caption);
|
|
}
|
|
|
|
if (dirty && yesno_box("Salvare le modifiche?"))
|
|
{
|
|
if (_form->code() == "")
|
|
{
|
|
TFilename n(_form->name()); n.ext("frm");
|
|
TFilename bak(n); bak.ext("bak");
|
|
rename(n, bak);
|
|
ofstream out(n);
|
|
_form->print_on(out);
|
|
}
|
|
else
|
|
_form->write_profile();
|
|
}
|
|
|
|
return dirty;
|
|
}
|
|
|
|
|
|
bool TForm_editor::form_config() const
|
|
{
|
|
TFilename cnfnam(_form->name()); cnfnam.ext("ini");
|
|
|
|
TString16 cnfpar;
|
|
if (_form->code() != "")
|
|
cnfpar << _form->code();
|
|
else
|
|
cnfpar << "Main";
|
|
|
|
TConfig cnf(cnfnam, cnfpar);
|
|
bool ok = FALSE;
|
|
|
|
const TFilename maskname(cnf.get("EdMask"));
|
|
if (maskname.empty())
|
|
return warning_box("Nessun parametro da configurare");
|
|
|
|
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)
|
|
{
|
|
const TString& oldvl = cnf.get(fname);
|
|
if (!oldvl.empty())
|
|
f.set(oldvl);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (m.run() == K_ENTER && m.dirty())
|
|
{
|
|
// 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)
|
|
cnf.set(fref->name(), f.get(), NULL, TRUE);
|
|
}
|
|
}
|
|
ok = TRUE;
|
|
}
|
|
|
|
return ok;
|
|
}
|
|
|
|
|
|
int ba2100(int argc, char* argv[])
|
|
{
|
|
TForm_editor a;
|
|
a.run(argc, argv, "Parametrizzazione stampa");
|
|
return 0;
|
|
}
|