Megamodifica form editor
git-svn-id: svn://10.65.10.50/trunk@2285 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
506e99c7d1
commit
c163b8e1e7
@ -4,7 +4,7 @@
|
||||
|
||||
#include "ba2.h"
|
||||
|
||||
#define usage "Error - usage : %s -[0,1,2,3,4]"
|
||||
#define usage "Error - usage : %s -[0,1,2,3]"
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
@ -23,8 +23,6 @@ int main(int argc, char** argv)
|
||||
#endif
|
||||
case 3:
|
||||
rt = ba2400(argc, argv) ; break;
|
||||
case 4:
|
||||
rt = ba2500(argc, argv) ; break;
|
||||
default:
|
||||
error_box(usage, argv[0]) ; rt = 1; break;
|
||||
}
|
||||
|
1
ba/ba2.h
1
ba/ba2.h
@ -5,7 +5,6 @@ int ba2100(int argc, char* argv[]);
|
||||
int ba2200(int argc, char* argv[]);
|
||||
int ba2300(int argc, char* argv[]);
|
||||
int ba2400(int argc, char* argv[]);
|
||||
int ba2500(int argc, char* argv[]);
|
||||
|
||||
#endif // __BA2_H
|
||||
|
||||
|
32
ba/ba2.url
32
ba/ba2.url
@ -74,35 +74,3 @@ MENU BAR_ITEM(1)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
|
||||
|
||||
MENUBAR MENU_BAR(4)
|
||||
|
||||
MENU MENU_BAR(4)
|
||||
SUBMENU MENU_FILE "~File"
|
||||
SUBMENU BAR_ITEM(1) "~Dati"
|
||||
SUBMENU BAR_ITEM(2) "~Testa"
|
||||
SUBMENU BAR_ITEM(3) "~Corpo"
|
||||
SUBMENU BAR_ITEM(4) "~Piede"
|
||||
SUBMENU BAR_ITEM(5) "~Sfondo"
|
||||
|
||||
MENU BAR_ITEM(1)
|
||||
ITEM MENU_ITEM(11) "~Relazione"
|
||||
ITEM MENU_ITEM(12) "~Parametri"
|
||||
ITEM MENU_ITEM(13) "Caratteri ~fincatura"
|
||||
|
||||
MENU BAR_ITEM(2)
|
||||
ITEM MENU_ITEM(21) "~Normale"
|
||||
ITEM MENU_ITEM(22) "~Pari"
|
||||
ITEM MENU_ITEM(23) "~Prima"
|
||||
ITEM MENU_ITEM(24) "~Ultima"
|
||||
|
||||
MENU BAR_ITEM(3)
|
||||
ITEM MENU_ITEM(31) "~Normale"
|
||||
ITEM MENU_ITEM(32) "~Pari"
|
||||
ITEM MENU_ITEM(33) "~Primo"
|
||||
ITEM MENU_ITEM(34) "~Ultimo"
|
||||
|
||||
MENU BAR_ITEM(4)
|
||||
ITEM MENU_ITEM(41) "~Normale"
|
||||
ITEM MENU_ITEM(42) "~Pari"
|
||||
ITEM MENU_ITEM(43) "~Primo"
|
||||
ITEM MENU_ITEM(44) "~Ultimo"
|
||||
|
668
ba/ba2100.cpp
668
ba/ba2100.cpp
@ -1,671 +1,5 @@
|
||||
#include "ba2.h"
|
||||
#include "baformed.h"
|
||||
#include "ba2100.h"
|
||||
#include <colors.h>
|
||||
// -----------------------------------------------------------------
|
||||
// maschera per le finkature
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
#include "ba21fn.h"
|
||||
|
||||
class TFink_mask : public TMask
|
||||
{
|
||||
TToken_string _chars;
|
||||
|
||||
enum pos { // posizioni scatoletta
|
||||
xl = 1,
|
||||
xm = 15,
|
||||
xr = 29,
|
||||
yt = 1,
|
||||
ym = 5,
|
||||
yb = 9,
|
||||
ofs = 36
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
void paint_example();
|
||||
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
static bool char_handler(TMask_field& f, KEY k);
|
||||
virtual void start_run();
|
||||
virtual bool stop_run(KEY k);
|
||||
virtual PNT log2dev(long x, long y) const;
|
||||
|
||||
public:
|
||||
|
||||
TToken_string& get_chars() { return _chars; }
|
||||
|
||||
TFink_mask(const char* def) : TMask("ba21fn"), _chars(def,',')
|
||||
{
|
||||
set_handler(C_TR, char_handler);
|
||||
set_handler(C_TL, char_handler);
|
||||
set_handler(C_TM, char_handler);
|
||||
set_handler(C_BR, char_handler);
|
||||
set_handler(C_BL, char_handler);
|
||||
set_handler(C_BM, char_handler);
|
||||
set_handler(C_CM, char_handler);
|
||||
set_handler(C_CR, char_handler);
|
||||
set_handler(C_CL, char_handler);
|
||||
set_handler(C_HR, char_handler);
|
||||
set_handler(C_VR, char_handler);
|
||||
}
|
||||
virtual ~TFink_mask() {}
|
||||
};
|
||||
|
||||
PNT TFink_mask::log2dev(long x, long y) const
|
||||
{
|
||||
PNT p;
|
||||
p.h = ((short)x+1)*CHARX;
|
||||
p.v = (short)y*ROWY;
|
||||
return p;
|
||||
}
|
||||
|
||||
void TFink_mask::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
TMask::handler(win, ep);
|
||||
if (ep->type == E_UPDATE)
|
||||
{
|
||||
// pittura le righette
|
||||
rect(xl, yt, xr+1, yb+1);
|
||||
line(xl, ym, xr, ym);
|
||||
line(xm, yt, xm, yb);
|
||||
paint_example();
|
||||
}
|
||||
}
|
||||
|
||||
void TFink_mask::paint_example()
|
||||
{
|
||||
// pittura un'immaginetta finculata
|
||||
// on the right of the mask
|
||||
TString line(xr);
|
||||
set_font(XVT_FFN_COURIER);
|
||||
set_color(MASK_DARK_COLOR,MASK_BACK_COLOR);
|
||||
set_opaque_text(TRUE);
|
||||
|
||||
for (int i = yt; i <= yb; i++)
|
||||
{
|
||||
line.spaces();
|
||||
if (i == yt)
|
||||
{
|
||||
line.fill(_chars.get_char(9));
|
||||
line[xl-1] = _chars.get_char(0);
|
||||
line[xm-1] = _chars.get_char(1);
|
||||
line[xr-1] = _chars.get_char(2);
|
||||
}
|
||||
else if (i == ym)
|
||||
{
|
||||
line.fill(_chars.get_char(9));
|
||||
line[xl-1] = _chars.get_char(6);
|
||||
line[xm-1] = _chars.get_char(7);
|
||||
line[xr-1] = _chars.get_char(8);
|
||||
}
|
||||
else if (i == yb)
|
||||
{
|
||||
line.fill(_chars.get_char(9));
|
||||
line[xl-1] = _chars.get_char(3);
|
||||
line[xm-1] = _chars.get_char(4);
|
||||
line[xr-1] = _chars.get_char(5);
|
||||
}
|
||||
else
|
||||
{
|
||||
line[xl-1] = _chars.get_char(10);
|
||||
line[xm-1] = _chars.get_char(10);
|
||||
line[xr-1] = _chars.get_char(10);
|
||||
}
|
||||
stringat(ofs, i, line);
|
||||
}
|
||||
}
|
||||
|
||||
void TFink_mask::start_run()
|
||||
{
|
||||
TMask::start_run();
|
||||
for (int i = 101; i <= 111; i++)
|
||||
{
|
||||
field(i).allow_pipe(); // allowa la pipa, se no son cazzi
|
||||
field(i).set(_chars.get(i - 101));
|
||||
}
|
||||
}
|
||||
|
||||
bool TFink_mask::stop_run(KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
for (int i = 101; i <= 111; i++)
|
||||
_chars.add(field(i).get(), i-101);
|
||||
}
|
||||
return TMask::stop_run(k);
|
||||
}
|
||||
|
||||
bool TFink_mask::char_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.focusdirty() && k == K_TAB)
|
||||
{
|
||||
TFink_mask& m = (TFink_mask&)f.mask();
|
||||
TToken_string& ch = m.get_chars();
|
||||
ch.add(f.get(), f.dlg() - 101);
|
||||
m.paint_example();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
// form editor
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
|
||||
TForm_editor::TForm_editor() : _form(NULL), _extra(FALSE), _m(NULL)
|
||||
{}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
enable_menu_item(M_FILE_PRINT);
|
||||
if ((form && code) || (form && code == 0 && _extra))
|
||||
{
|
||||
_form = new TForm(form, (code!=0) ? format("%05ld",code) : "", _extra ? 2 : 1);
|
||||
if (!_extra) dispatch_e_menu(MENU_ITEM(13));
|
||||
}
|
||||
else
|
||||
dispatch_e_menu(MENU_ITEM(14));
|
||||
|
||||
_m = new TMask("ba2100b");
|
||||
if (form)
|
||||
{
|
||||
_m->set(F_BASE, form);
|
||||
_m->disable(F_BASE);
|
||||
}
|
||||
|
||||
if (code) _m->set(F_CODE, code);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TForm_editor::destroy()
|
||||
{
|
||||
if (_form) delete _form;
|
||||
if (_m) delete _m;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
|
||||
bool TForm_editor::menu(MENU_TAG tag)
|
||||
{
|
||||
char sec = 'B';
|
||||
pagetype pt = odd_page;
|
||||
bool quit = FALSE;
|
||||
|
||||
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(13):
|
||||
sec = 'K'; break;
|
||||
case MENU_ITEM(14):
|
||||
quit = ask_profile();
|
||||
sec = 'B'; pt = odd_page; break;
|
||||
case MENU_ITEM(15): // formato numeri
|
||||
sec = 'J'; break;
|
||||
case MENU_ITEM(16): // formato date
|
||||
sec = 'Y'; 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;
|
||||
}
|
||||
|
||||
if (!quit) edit(sec, pt);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
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_fincatura()
|
||||
{
|
||||
TFink_mask m(_form->get_fincatura());
|
||||
bool dirty = FALSE;
|
||||
|
||||
if (m.run() == K_ENTER)
|
||||
{
|
||||
_form->set_fincatura(m.get_chars());
|
||||
dirty = TRUE;
|
||||
}
|
||||
return dirty;
|
||||
}
|
||||
|
||||
bool TForm_editor::date_example(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_TAB && f.focusdirty())
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
char format[6];
|
||||
format[0] = m.get(F_DFORMAT)[0];
|
||||
format[1] = m.get(F_DDAY )[0];
|
||||
format[2] = m.get(F_DMONTH )[0];
|
||||
format[3] = m.get(F_DYEAR )[0];
|
||||
format[4] = m.get(F_DSEP )[0];
|
||||
format[5] = '\0';
|
||||
|
||||
TDate dd(TODAY);
|
||||
TFormatted_date d(dd);
|
||||
|
||||
d.set_format(format);
|
||||
m.set(F_DEXAMPLE, d.string());
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TForm_editor::edit_formato_numero()
|
||||
{
|
||||
bool dirty = FALSE;
|
||||
|
||||
TMask m("ba21nm");
|
||||
if (dirty = (m.run() == K_ENTER))
|
||||
{
|
||||
int w = m.get_int(F_WIDTH);
|
||||
int d = m.get_int(F_DECIMALS);
|
||||
TString p(m.get(F_PICTURE));
|
||||
|
||||
_form->change_number_format(w, d, p);
|
||||
}
|
||||
return dirty;
|
||||
|
||||
}
|
||||
|
||||
bool TForm_editor::edit_formato_data()
|
||||
{
|
||||
bool dirty = FALSE;
|
||||
char format[6] = { "1444-" };
|
||||
TMask m("ba21dt");
|
||||
|
||||
m.set_handler(F_DFORMAT, date_example);
|
||||
m.set_handler(F_DDAY, date_example);
|
||||
m.set_handler(F_DMONTH, date_example);
|
||||
m.set_handler(F_DYEAR, date_example);
|
||||
m.set_handler(F_DSEP, date_example);
|
||||
|
||||
TDate dd(TODAY);
|
||||
TFormatted_date d(dd);
|
||||
d.set_format(format);
|
||||
|
||||
m.set(F_DFORMAT, "1");
|
||||
m.set(F_DDAY, "4");
|
||||
m.set(F_DMONTH, "4");
|
||||
m.set(F_DYEAR, "4");
|
||||
m.set(F_DSEP, "-");
|
||||
m.set(F_DEXAMPLE, d.string());
|
||||
|
||||
if (dirty = (m.run() == K_ENTER))
|
||||
{
|
||||
format[0] = m.get(F_DFORMAT)[0];
|
||||
format[1] = m.get(F_DDAY )[0];
|
||||
format[2] = m.get(F_DMONTH )[0];
|
||||
format[3] = m.get(F_DYEAR )[0];
|
||||
format[4] = m.get(F_DSEP )[0];
|
||||
format[5] = '\0';
|
||||
|
||||
_form->change_date_format(format);
|
||||
}
|
||||
return dirty;
|
||||
|
||||
}
|
||||
|
||||
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
|
||||
if (s == 'K')
|
||||
dirty = edit_fincatura();
|
||||
else
|
||||
if (s == 'J')
|
||||
dirty = edit_formato_numero();
|
||||
else
|
||||
if (s == 'Y')
|
||||
dirty = edit_formato_data();
|
||||
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();
|
||||
}
|
||||
|
||||
if (!_extra) dispatch_e_menu(MENU_ITEM(13));
|
||||
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;
|
||||
}
|
||||
|
||||
bool TForm_editor::ask_profile()
|
||||
{
|
||||
|
||||
_m->set_handler(F_CODE, cod_handler);
|
||||
|
||||
// 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 (!_extra && (fcode == 0 || fform.left(3) == "BOL"))
|
||||
{
|
||||
error_box("Non e' possibile modificare i profili standard o i bollettini.") ;
|
||||
continue;
|
||||
}
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
if (_form != NULL) delete _form;
|
||||
_form = new TForm(fform, (fcode!=0) ? format("%05ld",fcode) : "", _extra ? 2 :1, fdesc);
|
||||
break;
|
||||
}
|
||||
else if (k == K_DEL)
|
||||
{
|
||||
if (fcode != 0 && yesno_box("Confermare la cancellazione del profilo %05ld", fcode))
|
||||
{
|
||||
TLocalisamfile frm(LF_FORM);
|
||||
frm.zero();
|
||||
frm.put("TIPOPROF", fform);
|
||||
if (fcode != 0 )
|
||||
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 (k == K_QUIT)
|
||||
{
|
||||
dispatch_e_menu(M_FILE_QUIT);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int ba2100(int argc, char* argv[])
|
||||
{
|
||||
|
@ -1,4 +1,4 @@
|
||||
#include "ba2100.h"
|
||||
#include "bafrm.h"
|
||||
|
||||
PAGE "Scelta profilo" -1 -1 75 6
|
||||
|
||||
|
@ -1,20 +1,25 @@
|
||||
#include "ba2100.h"
|
||||
#include "bafrm.h"
|
||||
|
||||
TOOLBAR "" 0 20 0 2
|
||||
|
||||
BUTTON F_OPTIONS 10 2
|
||||
BEGIN
|
||||
PROMPT -13 -1 "Opzioni"
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
PROMPT -23 -1 ""
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -22 -1 ""
|
||||
PROMPT -33 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
PAGE "CAMPO DI STAMPA" -1 -1 78 20
|
||||
PAGE "CAMPO DI STAMPA" -1 -1 78 21
|
||||
|
||||
LIST F_CLASS 10
|
||||
BEGIN
|
||||
@ -77,6 +82,21 @@ MESSAGE COPY,F_HEIGHT
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
BOOLEAN F_FINKL
|
||||
BEGIN
|
||||
PROMPT 40 18 "Fincatura prima"
|
||||
END
|
||||
|
||||
BOOLEAN F_FINKR
|
||||
BEGIN
|
||||
PROMPT 63 18 "Fincatura dopo"
|
||||
END
|
||||
|
||||
NUMBER F_SPACES 2
|
||||
BEGIN
|
||||
PROMPT 1 18 "N. spazi davanti al campo "
|
||||
END
|
||||
|
||||
STRING F_PICTURE 80 40
|
||||
BEGIN
|
||||
PROMPT 1 4 "Formato "
|
||||
@ -167,48 +187,48 @@ END
|
||||
|
||||
STRING F_FILE1 80 60
|
||||
BEGIN
|
||||
PROMPT 2 12 "Archivio "
|
||||
PROMPT 2 11 "Archivio "
|
||||
HELP "Nome dell'archivio relativo al campo"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON F_BUT_FILE1 2 1
|
||||
BEGIN
|
||||
PROMPT 73 12 "*"
|
||||
PROMPT 73 11 "*"
|
||||
PICTURE 109
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
STRING F_FIELD1 80 60
|
||||
BEGIN
|
||||
PROMPT 2 13 "Campo 1 "
|
||||
PROMPT 2 12 "Campo 1 "
|
||||
HELP "Nome del campo su file"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON F_BUT_FIELD1 2 1
|
||||
BEGIN
|
||||
PROMPT 73 13 "*"
|
||||
PROMPT 73 12 "*"
|
||||
PICTURE 109
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
STRING F_FIELDREF1 20 16
|
||||
BEGIN
|
||||
PROMPT 60 14 ""
|
||||
PROMPT 60 13 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_FROM1 2
|
||||
BEGIN
|
||||
PROMPT 2 14 "Da "
|
||||
PROMPT 2 13 "Da "
|
||||
FLAGS "U"
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
NUMBER F_TO1 2
|
||||
BEGIN
|
||||
PROMPT 22 14 "A "
|
||||
PROMPT 22 13 "A "
|
||||
FLAGS "U"
|
||||
GROUP 7
|
||||
END
|
||||
@ -216,56 +236,56 @@ END
|
||||
|
||||
STRING F_FILE2 60
|
||||
BEGIN
|
||||
PROMPT 2 15 "Archivio "
|
||||
PROMPT 2 14 "Archivio "
|
||||
HELP "Nome dell'archivio relativo al campo"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON F_BUT_FILE2 2 1
|
||||
BEGIN
|
||||
PROMPT 73 15 "*"
|
||||
PROMPT 73 14 "*"
|
||||
PICTURE 109
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
STRING F_FIELD2 60
|
||||
BEGIN
|
||||
PROMPT 2 16 "Campo 2 "
|
||||
PROMPT 2 15 "Campo 2 "
|
||||
HELP "Nome del campo su file"
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
BUTTON F_BUT_FIELD2 2 1
|
||||
BEGIN
|
||||
PROMPT 73 16 "*"
|
||||
PROMPT 73 15 "*"
|
||||
PICTURE 109
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
STRING F_FIELDREF2 16
|
||||
BEGIN
|
||||
PROMPT 60 17 ""
|
||||
PROMPT 60 16 ""
|
||||
FLAGS "D"
|
||||
END
|
||||
|
||||
NUMBER F_FROM2 2
|
||||
BEGIN
|
||||
PROMPT 2 17 "Da "
|
||||
PROMPT 2 16 "Da "
|
||||
FLAGS "U"
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
NUMBER F_TO2 2
|
||||
BEGIN
|
||||
PROMPT 22 17 "A "
|
||||
PROMPT 22 16 "A "
|
||||
FLAGS "U"
|
||||
GROUP 7
|
||||
END
|
||||
|
||||
GROUPBOX DLG_NULL 78 8
|
||||
BEGIN
|
||||
PROMPT 1 11 "Campi su file"
|
||||
END
|
||||
//GROUPBOX DLG_NULL 78 8
|
||||
//BEGIN
|
||||
//PROMPT 1 11 "Campi su file"
|
||||
//END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
|
168
ba/ba2100s.uml
168
ba/ba2100s.uml
@ -1,13 +1,13 @@
|
||||
#include "ba2100.h"
|
||||
#include "bafrm.h"
|
||||
|
||||
PAGE "SEZIONE DI STAMPA" -1 -1 34 14
|
||||
PAGE "SEZIONE DI STAMPA" -1 -1 78 18
|
||||
|
||||
NUMBER F_HEIGHT 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "Altezza in righe "
|
||||
END
|
||||
|
||||
GROUP DLG_NULL -1 10
|
||||
GROUP DLG_NULL -1 6
|
||||
BEGIN
|
||||
PROMPT 0 2 "Dati comuni "
|
||||
END
|
||||
@ -15,65 +15,85 @@ END
|
||||
NUMBER F_FLEN 3
|
||||
BEGIN
|
||||
FLAGS "D"
|
||||
PROMPT 1 3 "Lunghezza foglio "
|
||||
PROMPT 3 3 "Lunghezza foglio "
|
||||
END
|
||||
|
||||
STRING F_CTP 1
|
||||
BEGIN
|
||||
PROMPT 40 3 "Carattere posizionamento"
|
||||
HELP "Carattere da utilizzare per il posizionamento del modulo"
|
||||
END
|
||||
|
||||
LIST F_FONT 2 16
|
||||
BEGIN
|
||||
PROMPT 1 4 "Font "
|
||||
PROMPT 3 4 "Font "
|
||||
ITEM "Courier New|Courier New"
|
||||
HELP "Font di stampa su video o stampante"
|
||||
END
|
||||
|
||||
LIST F_SIZE 3
|
||||
BEGIN
|
||||
PROMPT 1 5 "Dimensione "
|
||||
PROMPT 53 4 "Dimensione "
|
||||
ITEM "12|12"
|
||||
HELP "Dimensioni del carattere di stampa"
|
||||
END
|
||||
|
||||
STRING F_CTP 1
|
||||
BEGIN
|
||||
PROMPT 1 6 "Carattere di posizionamento "
|
||||
HELP "Carattere da utilizzare per il posizionamento del modulo"
|
||||
END
|
||||
|
||||
TEXT DLG_NULL
|
||||
BEGIN
|
||||
PROMPT 1 7 "Colonne di posizionamento"
|
||||
PROMPT 40 5 "Colonne di posizionamento"
|
||||
END
|
||||
|
||||
NUMBER F_IPX 3
|
||||
BEGIN
|
||||
PROMPT 24 7 ""
|
||||
PROMPT 64 5 ""
|
||||
HELP "Coordinata X di posizionamento iniziale"
|
||||
END
|
||||
|
||||
NUMBER F_FPX 3
|
||||
BEGIN
|
||||
PROMPT 29 7 ""
|
||||
PROMPT 70 5 ""
|
||||
HELP "Coordinata X di posizionamento finale"
|
||||
END
|
||||
|
||||
NUMBER F_IPY 3
|
||||
BEGIN
|
||||
PROMPT 1 8 "Riga di posizionamento "
|
||||
PROMPT 3 5 "Riga di posizionamento "
|
||||
HELP "Coordinata Y di posizionamento"
|
||||
END
|
||||
|
||||
NUMBER F_X 3
|
||||
BEGIN
|
||||
PROMPT 1 9 "Spostamento orizzontale "
|
||||
PROMPT 3 6 "Spostamento orizzontale "
|
||||
END
|
||||
|
||||
NUMBER F_Y 3
|
||||
BEGIN
|
||||
PROMPT 1 10 "Spostamento verticale "
|
||||
PROMPT 40 6 "Spostamento verticale "
|
||||
END
|
||||
|
||||
BUTTON DLG_EDIT 10 2
|
||||
SPREADSHEET F_FIELDS 78 8
|
||||
BEGIN
|
||||
PROMPT -12 -1 "~Edit"
|
||||
PROMPT 1 8 ""
|
||||
ITEM "ID@3"
|
||||
ITEM "Descrizione@40"
|
||||
ITEM "Intestazione@40"
|
||||
ITEM "Pr"
|
||||
ITEM "Y@2"
|
||||
ITEM "Lun."
|
||||
ITEM "X@2"
|
||||
ITEM "Col."
|
||||
ITEM "Spazi"
|
||||
ITEM "Finc. sin."
|
||||
ITEM "Finc. dx."
|
||||
ITEM "Tipo@10"
|
||||
ITEM "Formato@45"
|
||||
END
|
||||
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -12 -1 ""
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
@ -83,5 +103,113 @@ PROMPT -22 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
|
||||
ENDMASK
|
||||
|
||||
|
||||
PAGE "Dettaglio campo" -1 -1 65 15
|
||||
|
||||
BUTTON 100 10 2
|
||||
BEGIN
|
||||
PROMPT -14 -1 "Dettaglio"
|
||||
END
|
||||
|
||||
NUMBER 101 3
|
||||
BEGIN
|
||||
PROMPT 1 1 "ID "
|
||||
END
|
||||
|
||||
STRING 102 40
|
||||
BEGIN
|
||||
PROMPT 1 2 "Descrizione "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
STRING 103 40
|
||||
BEGIN
|
||||
PROMPT 1 3 "Intestazione "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
BOOLEAN 104
|
||||
BEGIN
|
||||
PROMPT 1 4 "Non Stampare "
|
||||
END
|
||||
|
||||
NUMBER 105 2
|
||||
BEGIN
|
||||
PROMPT 1 7 "Y "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
NUMBER 106 2
|
||||
BEGIN
|
||||
PROMPT 1 6 "Lunghezza "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
NUMBER 107 2
|
||||
BEGIN
|
||||
PROMPT 1 5 "X "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
NUMBER 108 2
|
||||
BEGIN
|
||||
PROMPT 1 8 "Colonna "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
NUMBER 109 2
|
||||
BEGIN
|
||||
PROMPT 1 9 "Spazi inizio "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
BOOLEAN 110
|
||||
BEGIN
|
||||
PROMPT 1 10 "Finc. prima "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
BOOLEAN 111
|
||||
BEGIN
|
||||
PROMPT 1 10 "Finc. dopo "
|
||||
FLAGS "G"
|
||||
END
|
||||
|
||||
LIST 112 10
|
||||
BEGIN
|
||||
PROMPT 1 11 "Tipo "
|
||||
ITEM "STRINGA|Testo"
|
||||
ITEM "NUMERO|Numero"
|
||||
ITEM "DATA|Data"
|
||||
ITEM "LISTA|Lista"
|
||||
ITEM "GRUPPO|Gruppo"
|
||||
ITEM "LINEA|Linea"
|
||||
ITEM "FIGURA|Figura"
|
||||
END
|
||||
|
||||
STRING 113 45
|
||||
BEGIN
|
||||
PROMPT 1 10 "Es. formato "
|
||||
END
|
||||
|
||||
BUTTON DLG_DELREC 10 2
|
||||
BEGIN
|
||||
PROMPT -24 -1 "~Elimina"
|
||||
MESSAGE EXIT,K_DEL
|
||||
END
|
||||
|
||||
BUTTON DLG_OK 10 2
|
||||
BEGIN
|
||||
PROMPT -34 -1 ""
|
||||
MESSAGE EXIT,K_ENTER
|
||||
END
|
||||
|
||||
BUTTON DLG_CANCEL 10 2
|
||||
BEGIN
|
||||
PROMPT -44 -1 ""
|
||||
END
|
||||
|
||||
ENDPAGE
|
||||
ENDMASK
|
||||
|
@ -1,6 +1,4 @@
|
||||
#include "baformed.h"
|
||||
#include "ba2100.h"
|
||||
|
||||
|
||||
class TForm_EC_editor : public TForm_editor
|
||||
{
|
||||
|
667
ba/baformed.cpp
Executable file
667
ba/baformed.cpp
Executable file
@ -0,0 +1,667 @@
|
||||
#include "baformed.h"
|
||||
#include <colors.h>
|
||||
// -----------------------------------------------------------------
|
||||
// maschera per le finkature
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
#include "ba21fn.h"
|
||||
|
||||
class TFink_mask : public TMask
|
||||
{
|
||||
TToken_string _chars;
|
||||
|
||||
enum pos { // posizioni scatoletta
|
||||
xl = 1,
|
||||
xm = 15,
|
||||
xr = 29,
|
||||
yt = 1,
|
||||
ym = 5,
|
||||
yb = 9,
|
||||
ofs = 36
|
||||
};
|
||||
|
||||
protected:
|
||||
|
||||
void paint_example();
|
||||
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
static bool char_handler(TMask_field& f, KEY k);
|
||||
virtual void start_run();
|
||||
virtual bool stop_run(KEY k);
|
||||
virtual PNT log2dev(long x, long y) const;
|
||||
|
||||
public:
|
||||
|
||||
TToken_string& get_chars() { return _chars; }
|
||||
|
||||
TFink_mask(const char* def) : TMask("ba21fn"), _chars(def,',')
|
||||
{
|
||||
set_handler(C_TR, char_handler);
|
||||
set_handler(C_TL, char_handler);
|
||||
set_handler(C_TM, char_handler);
|
||||
set_handler(C_BR, char_handler);
|
||||
set_handler(C_BL, char_handler);
|
||||
set_handler(C_BM, char_handler);
|
||||
set_handler(C_CM, char_handler);
|
||||
set_handler(C_CR, char_handler);
|
||||
set_handler(C_CL, char_handler);
|
||||
set_handler(C_HR, char_handler);
|
||||
set_handler(C_VR, char_handler);
|
||||
}
|
||||
virtual ~TFink_mask() {}
|
||||
};
|
||||
|
||||
PNT TFink_mask::log2dev(long x, long y) const
|
||||
{
|
||||
PNT p;
|
||||
p.h = ((short)x+1)*CHARX;
|
||||
p.v = (short)y*ROWY;
|
||||
return p;
|
||||
}
|
||||
|
||||
void TFink_mask::handler(WINDOW win, EVENT* ep)
|
||||
{
|
||||
TMask::handler(win, ep);
|
||||
if (ep->type == E_UPDATE)
|
||||
{
|
||||
// pittura le righette
|
||||
rect(xl, yt, xr+1, yb+1);
|
||||
line(xl, ym, xr, ym);
|
||||
line(xm, yt, xm, yb);
|
||||
paint_example();
|
||||
}
|
||||
}
|
||||
|
||||
void TFink_mask::paint_example()
|
||||
{
|
||||
// pittura un'immaginetta finculata
|
||||
// on the right of the mask
|
||||
TString line(xr);
|
||||
set_font(XVT_FFN_COURIER);
|
||||
set_color(MASK_DARK_COLOR,MASK_BACK_COLOR);
|
||||
set_opaque_text(TRUE);
|
||||
|
||||
for (int i = yt; i <= yb; i++)
|
||||
{
|
||||
line.spaces();
|
||||
if (i == yt)
|
||||
{
|
||||
line.fill(_chars.get_char(9));
|
||||
line[xl-1] = _chars.get_char(0);
|
||||
line[xm-1] = _chars.get_char(1);
|
||||
line[xr-1] = _chars.get_char(2);
|
||||
}
|
||||
else if (i == ym)
|
||||
{
|
||||
line.fill(_chars.get_char(9));
|
||||
line[xl-1] = _chars.get_char(6);
|
||||
line[xm-1] = _chars.get_char(7);
|
||||
line[xr-1] = _chars.get_char(8);
|
||||
}
|
||||
else if (i == yb)
|
||||
{
|
||||
line.fill(_chars.get_char(9));
|
||||
line[xl-1] = _chars.get_char(3);
|
||||
line[xm-1] = _chars.get_char(4);
|
||||
line[xr-1] = _chars.get_char(5);
|
||||
}
|
||||
else
|
||||
{
|
||||
line[xl-1] = _chars.get_char(10);
|
||||
line[xm-1] = _chars.get_char(10);
|
||||
line[xr-1] = _chars.get_char(10);
|
||||
}
|
||||
stringat(ofs, i, line);
|
||||
}
|
||||
}
|
||||
|
||||
void TFink_mask::start_run()
|
||||
{
|
||||
TMask::start_run();
|
||||
for (int i = 101; i <= 111; i++)
|
||||
{
|
||||
field(i).allow_pipe(); // allowa la pipa, se no son cazzi
|
||||
field(i).set(_chars.get(i - 101));
|
||||
}
|
||||
}
|
||||
|
||||
bool TFink_mask::stop_run(KEY k)
|
||||
{
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
for (int i = 101; i <= 111; i++)
|
||||
_chars.add(field(i).get(), i-101);
|
||||
}
|
||||
return TMask::stop_run(k);
|
||||
}
|
||||
|
||||
bool TFink_mask::char_handler(TMask_field& f, KEY k)
|
||||
{
|
||||
if (f.focusdirty() && k == K_TAB)
|
||||
{
|
||||
TFink_mask& m = (TFink_mask&)f.mask();
|
||||
TToken_string& ch = m.get_chars();
|
||||
ch.add(f.get(), f.dlg() - 101);
|
||||
m.paint_example();
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
// -----------------------------------------------------------------
|
||||
// form editor
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
|
||||
TForm_editor::TForm_editor() : _form(NULL), _extra(FALSE), _m(NULL)
|
||||
{}
|
||||
|
||||
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));
|
||||
}
|
||||
|
||||
enable_menu_item(M_FILE_PRINT);
|
||||
if ((form && code) || (form && code == 0 && _extra))
|
||||
{
|
||||
_form = new TForm(form, (code!=0) ? format("%05ld",code) : "", _extra ? 2 : 1);
|
||||
if (!_extra) dispatch_e_menu(MENU_ITEM(14));
|
||||
}
|
||||
else
|
||||
dispatch_e_menu(MENU_ITEM(14));
|
||||
|
||||
_m = new TMask(selection_mask());
|
||||
if (form)
|
||||
{
|
||||
_m->set(F_BASE, form);
|
||||
_m->disable(F_BASE);
|
||||
}
|
||||
|
||||
if (code) _m->set(F_CODE, code);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TForm_editor::destroy()
|
||||
{
|
||||
if (_form) delete _form;
|
||||
if (_m) delete _m;
|
||||
return TApplication::destroy();
|
||||
}
|
||||
|
||||
|
||||
bool TForm_editor::menu(MENU_TAG tag)
|
||||
{
|
||||
char sec = 'B';
|
||||
pagetype pt = odd_page;
|
||||
bool quit = FALSE;
|
||||
|
||||
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(13):
|
||||
sec = 'K'; break;
|
||||
case MENU_ITEM(14):
|
||||
quit = ask_profile();
|
||||
sec = 'B'; pt = odd_page; break;
|
||||
case MENU_ITEM(15): // formato numeri
|
||||
sec = 'J'; break;
|
||||
case MENU_ITEM(16): // formato date
|
||||
sec = 'Y'; 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;
|
||||
}
|
||||
|
||||
if (!quit) edit(sec, pt);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
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_fincatura()
|
||||
{
|
||||
TFink_mask m(_form->get_fincatura());
|
||||
bool dirty = FALSE;
|
||||
|
||||
if (m.run() == K_ENTER)
|
||||
{
|
||||
_form->set_fincatura(m.get_chars());
|
||||
dirty = TRUE;
|
||||
}
|
||||
return dirty;
|
||||
}
|
||||
|
||||
bool TForm_editor::date_example(TMask_field& f, KEY k)
|
||||
{
|
||||
if (k == K_TAB && f.focusdirty())
|
||||
{
|
||||
TMask& m = f.mask();
|
||||
char format[6];
|
||||
format[0] = m.get(F_DFORMAT)[0];
|
||||
format[1] = m.get(F_DDAY )[0];
|
||||
format[2] = m.get(F_DMONTH )[0];
|
||||
format[3] = m.get(F_DYEAR )[0];
|
||||
format[4] = m.get(F_DSEP )[0];
|
||||
format[5] = '\0';
|
||||
|
||||
TDate dd(TODAY);
|
||||
TFormatted_date d(dd);
|
||||
|
||||
d.set_format(format);
|
||||
m.set(F_DEXAMPLE, d.string());
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TForm_editor::edit_formato_numero()
|
||||
{
|
||||
bool dirty = FALSE;
|
||||
|
||||
TMask m("ba21nm");
|
||||
if (dirty = (m.run() == K_ENTER))
|
||||
{
|
||||
int w = m.get_int(F_WIDTH);
|
||||
int d = m.get_int(F_DECIMALS);
|
||||
TString p(m.get(F_PICTURE));
|
||||
|
||||
_form->change_number_format(w, d, p);
|
||||
}
|
||||
return dirty;
|
||||
|
||||
}
|
||||
|
||||
bool TForm_editor::edit_formato_data()
|
||||
{
|
||||
bool dirty = FALSE;
|
||||
char format[6] = { "1444-" };
|
||||
TMask m("ba21dt");
|
||||
|
||||
m.set_handler(F_DFORMAT, date_example);
|
||||
m.set_handler(F_DDAY, date_example);
|
||||
m.set_handler(F_DMONTH, date_example);
|
||||
m.set_handler(F_DYEAR, date_example);
|
||||
m.set_handler(F_DSEP, date_example);
|
||||
|
||||
TDate dd(TODAY);
|
||||
TFormatted_date d(dd);
|
||||
d.set_format(format);
|
||||
|
||||
m.set(F_DFORMAT, "1");
|
||||
m.set(F_DDAY, "4");
|
||||
m.set(F_DMONTH, "4");
|
||||
m.set(F_DYEAR, "4");
|
||||
m.set(F_DSEP, "-");
|
||||
m.set(F_DEXAMPLE, d.string());
|
||||
|
||||
if (dirty = (m.run() == K_ENTER))
|
||||
{
|
||||
format[0] = m.get(F_DFORMAT)[0];
|
||||
format[1] = m.get(F_DDAY )[0];
|
||||
format[2] = m.get(F_DMONTH )[0];
|
||||
format[3] = m.get(F_DYEAR )[0];
|
||||
format[4] = m.get(F_DSEP )[0];
|
||||
format[5] = '\0';
|
||||
|
||||
_form->change_date_format(format);
|
||||
}
|
||||
return dirty;
|
||||
|
||||
}
|
||||
|
||||
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
|
||||
if (s == 'K')
|
||||
dirty = edit_fincatura();
|
||||
else
|
||||
if (s == 'J')
|
||||
dirty = edit_formato_numero();
|
||||
else
|
||||
if (s == 'Y')
|
||||
dirty = edit_formato_data();
|
||||
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();
|
||||
}
|
||||
|
||||
if (!_extra) dispatch_e_menu(MENU_ITEM(14));
|
||||
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;
|
||||
}
|
||||
|
||||
bool TForm_editor::ask_profile()
|
||||
{
|
||||
_m->set_handler(F_CODE, cod_handler);
|
||||
|
||||
// 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 (!_extra && (fcode == 0 || fform.left(3) == "BOL"))
|
||||
{
|
||||
error_box("Non e' possibile modificare i profili standard o i bollettini.") ;
|
||||
continue;
|
||||
}
|
||||
if (k == K_ENTER)
|
||||
{
|
||||
if (_form != NULL) delete _form;
|
||||
_form = new TForm(fform, (fcode!=0) ? format("%05ld",fcode) : "", _extra ? 2 :1, fdesc);
|
||||
break;
|
||||
}
|
||||
else if (k == K_DEL)
|
||||
{
|
||||
if (fcode != 0 && yesno_box("Confermare la cancellazione del profilo %05ld", fcode))
|
||||
{
|
||||
TLocalisamfile frm(LF_FORM);
|
||||
frm.zero();
|
||||
frm.put("TIPOPROF", fform);
|
||||
if (fcode != 0 )
|
||||
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 (k == K_QUIT)
|
||||
{
|
||||
dispatch_e_menu(M_FILE_QUIT);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -7,6 +7,8 @@
|
||||
#include <utility.h>
|
||||
#include <urldefid.h>
|
||||
|
||||
#include "bafrm.h"
|
||||
|
||||
class TForm_editor : public TApplication
|
||||
{
|
||||
TForm* _form;
|
||||
@ -14,6 +16,10 @@ class TForm_editor : public TApplication
|
||||
bool _extra;
|
||||
|
||||
protected:
|
||||
|
||||
// maschera usata per selezione profilo (quando non specificato)
|
||||
virtual const char* selection_mask() const { return "ba2100b"; }
|
||||
|
||||
virtual bool create();
|
||||
virtual bool destroy();
|
||||
virtual bool menu(MENU_TAG);
|
||||
@ -25,15 +31,19 @@ protected:
|
||||
|
||||
bool& extra() { return _extra;}
|
||||
void set_form(TForm * f) { _form = f; }
|
||||
bool ask_profile();
|
||||
virtual bool ask_profile();
|
||||
bool edit_relation();
|
||||
bool edit_fincatura();
|
||||
bool edit_formato_numero();
|
||||
bool edit_formato_data();
|
||||
bool edit(char s, pagetype p);
|
||||
bool form_config() const;
|
||||
TForm& form() { return *_form; }
|
||||
|
||||
public:
|
||||
|
||||
TForm_editor();
|
||||
virtual ~TForm_editor();
|
||||
|
||||
};
|
||||
|
||||
|
93
ba/bafrm.h
Executable file
93
ba/bafrm.h
Executable file
@ -0,0 +1,93 @@
|
||||
// Maschera di edit dei form
|
||||
|
||||
#define F_CLASS 101
|
||||
#define F_KEY 102
|
||||
#define F_Y 103
|
||||
#define F_X 104
|
||||
#define F_WIDTH 105
|
||||
#define F_HEIGHT 106
|
||||
#define F_PROMPT 107
|
||||
#define F_HIDDEN 108
|
||||
#define F_DISABLED 109
|
||||
#define F_AUTOMAGIC 110
|
||||
#define F_PICTURE 111
|
||||
#define F_ID 112
|
||||
#define F_FONT 113
|
||||
#define F_SIZE 114
|
||||
#define F_FLEN 115
|
||||
#define F_CTP 117
|
||||
#define F_IPX 118
|
||||
#define F_IPY 119
|
||||
#define F_FPX 120
|
||||
// spreadsheet campi sezione
|
||||
#define F_FIELDS 121
|
||||
#define F_FINKL 122
|
||||
#define F_FINKR 123
|
||||
#define F_SPACES 124
|
||||
#define F_OPTIONS 125
|
||||
|
||||
#define F_GROUP 130
|
||||
#define F_GROUP1 131
|
||||
#define F_GROUP2 132
|
||||
#define F_GROUP3 133
|
||||
#define F_GROUP4 134
|
||||
#define F_GROUP5 135
|
||||
#define F_GROUP6 136
|
||||
#define F_GROUP7 137
|
||||
#define F_GROUP8 138
|
||||
#define F_GROUP9 139
|
||||
#define F_GROUP10 140
|
||||
#define F_GROUP11 141
|
||||
#define F_GROUP12 142
|
||||
#define F_GROUP13 143
|
||||
#define F_GROUP14 144
|
||||
#define F_GROUP15 145
|
||||
#define F_GROUP16 146
|
||||
#define F_GROUP17 147
|
||||
#define F_GROUP18 148
|
||||
#define F_GROUP19 149
|
||||
#define F_GROUP20 150
|
||||
#define F_GROUP21 151
|
||||
#define F_GROUP22 152
|
||||
#define F_GROUP23 153
|
||||
#define F_GROUP24 154
|
||||
|
||||
// date format section
|
||||
#define F_DFORMAT 160
|
||||
#define F_DDAY 161
|
||||
#define F_DMONTH 162
|
||||
#define F_DYEAR 163
|
||||
#define F_DSEP 164
|
||||
#define F_DEXAMPLE 165
|
||||
#define F_FILE 166
|
||||
|
||||
// file/field references
|
||||
#define F_FIELDREF1 170
|
||||
#define F_FILE1 171
|
||||
#define F_BUT_FILE1 172
|
||||
#define F_FIELD1 173
|
||||
#define F_BUT_FIELD1 174
|
||||
#define F_FROM1 175
|
||||
#define F_TO1 176
|
||||
|
||||
#define F_FIELDREF2 180
|
||||
#define F_FILE2 181
|
||||
#define F_BUT_FILE2 182
|
||||
#define F_FIELD2 183
|
||||
#define F_BUT_FIELD2 184
|
||||
#define F_FROM2 185
|
||||
#define F_TO2 186
|
||||
|
||||
#define F_ITEMS 200
|
||||
#define F_DECIMALS 206
|
||||
#define F_CAPTION 301
|
||||
|
||||
// maschera scelta form
|
||||
#define F_BASE 401
|
||||
#define F_CODE 402
|
||||
#define F_DESC 403
|
||||
#define F_VALUTA 404
|
||||
|
||||
|
||||
// nome base profilo estratto conto
|
||||
#define BASE_EC_PROFILE "PEC"
|
899
include/form.cpp
899
include/form.cpp
File diff suppressed because it is too large
Load Diff
181
include/form.h
181
include/form.h
@ -24,67 +24,18 @@ class TRelation_description;
|
||||
class TCursor;
|
||||
#endif
|
||||
|
||||
#ifndef __ASSOC_H
|
||||
#include <assoc.h>
|
||||
#endif
|
||||
|
||||
enum pagetype { odd_page, even_page, first_page, last_page };
|
||||
pagetype char2page(char); // prototipo della funzione che converte dalla notazione carattere al corrispondente enum pagetype
|
||||
|
||||
class TForm;
|
||||
class TMask_field;
|
||||
class TSheet_field;
|
||||
class TForm_item;
|
||||
|
||||
class TPrint_section : public TArray
|
||||
{
|
||||
static TMask* _msk;
|
||||
|
||||
word _height; // Altezza della sezione
|
||||
bool _dirty; // Flag di modifica parametri
|
||||
|
||||
TForm* _form; // Form cui appartiene alla sezione
|
||||
char _sec_type; // H, B, F, G
|
||||
pagetype _page_type; // Tipo della pagina
|
||||
bool _subsection; // e' una sottosezione
|
||||
|
||||
TArray _item; // Lista dei campi da stampare
|
||||
int _repeat_count; // n. ripetizioni eseguite
|
||||
|
||||
const TPrint_section& copy(const TPrint_section& ps);
|
||||
|
||||
protected:
|
||||
virtual void print_on(ostream& out) const;
|
||||
virtual TForm_item* parse_item(const TString& key);
|
||||
TForm_item* parse_item(TScanner& scanner);
|
||||
|
||||
public:
|
||||
TPrintrow& row(int num);
|
||||
TForm& form() const { return *_form; }
|
||||
|
||||
TForm_item& field(int n) const { return (TForm_item&)_item[n]; }
|
||||
TForm_item& find_field(short id) const;
|
||||
|
||||
word fields() const { return _item.items(); }
|
||||
word height() const { return _height; }
|
||||
void offset(int& x, int& y) const;
|
||||
void set_repeat_count(int x) { _repeat_count = x; }
|
||||
|
||||
virtual bool ok() const { return height() > 0 || fields() > 0; }
|
||||
|
||||
void reset();
|
||||
virtual bool update();
|
||||
bool parse(TScanner& scanner);
|
||||
|
||||
bool read_from(const TRectype& rec);
|
||||
void print_on(TRectype& rec);
|
||||
|
||||
bool edit(const char* title);
|
||||
char section_type() const { return _sec_type; }
|
||||
pagetype page_type() const { return _page_type; }
|
||||
|
||||
bool dirty() const { return _dirty; }
|
||||
void set_dirty(bool d = TRUE) { _dirty = d; }
|
||||
|
||||
const TPrint_section& operator=(const TPrint_section& ps) { return copy(ps); }
|
||||
TPrint_section(TForm* parent, char st, pagetype pt, bool subsection = FALSE);
|
||||
TPrint_section(const TPrint_section& ps) { copy(ps); }
|
||||
virtual ~TPrint_section();
|
||||
};
|
||||
class TPrint_section;
|
||||
|
||||
|
||||
class TForm : public TObject
|
||||
@ -181,6 +132,7 @@ public:
|
||||
const TString& code() const { return _code; }
|
||||
|
||||
bool edit_level() const { return _editlevel; }
|
||||
void set_edit_level(int n) { _editlevel = n; }
|
||||
void set_description(const char* s) { _desc = s; }
|
||||
|
||||
virtual TRelation* relation() const { return _relation; }
|
||||
@ -218,6 +170,8 @@ public:
|
||||
char f_centerright() { return _fink.get_char(8); }
|
||||
char f_horizontal() { return _fink.get_char(9); }
|
||||
char f_vertical() { return _fink.get_char(10); }
|
||||
// editor interface
|
||||
TForm_editor& editor() { return (TForm_editor&)main_app(); }
|
||||
|
||||
// Notifica l'inizio di stampa dell'ultima pagina
|
||||
void set_last_page(bool lp) { _lastpage = lp; }
|
||||
@ -235,6 +189,8 @@ struct TForm_flags : public TObject
|
||||
bool enabled : 1;
|
||||
bool shown : 1;
|
||||
bool dirty : 1;
|
||||
bool finkl : 1;
|
||||
bool finkr : 1;
|
||||
|
||||
protected:
|
||||
void print_on(ostream& out) const;
|
||||
@ -242,20 +198,101 @@ protected:
|
||||
public:
|
||||
TForm_flags();
|
||||
|
||||
void set_enabled(bool b) { enabled = b; }
|
||||
void set_finkl(bool b) { finkl = b; }
|
||||
void set_finkr(bool b) { finkr = b; }
|
||||
|
||||
void print_on(TMask& m);
|
||||
void read_from(const TMask& m);
|
||||
|
||||
bool update(const char* s);
|
||||
};
|
||||
|
||||
class TPrint_section : public TArray
|
||||
{
|
||||
static TMask* _msk;
|
||||
enum { MAXCOLUMNS = 32 };
|
||||
|
||||
word _height; // Altezza della sezione
|
||||
bool _dirty; // Flag di modifica parametri
|
||||
bool _columnwise; // Columnwise field specification
|
||||
|
||||
TForm* _form; // Form cui appartiene alla sezione
|
||||
char _sec_type; // H, B, F, G
|
||||
pagetype _page_type; // Tipo della pagina
|
||||
bool _subsection; // e' una sottosezione
|
||||
|
||||
TArray _item; // Lista dei campi da stampare
|
||||
int _repeat_count; // n. ripetizioni eseguite
|
||||
|
||||
int _tab[MAXCOLUMNS]; // columns offset if columnwise
|
||||
|
||||
const TPrint_section& copy(const TPrint_section& ps);
|
||||
|
||||
protected:
|
||||
|
||||
virtual void print_on(ostream& out) const;
|
||||
virtual TForm_item* parse_item(const TString& key);
|
||||
TForm_item* parse_item(TScanner& scanner);
|
||||
|
||||
// handlers for section editing
|
||||
static bool detail_field_handler(TMask_field&, KEY);
|
||||
static bool special_field_handler(TMask_field&, KEY);
|
||||
static bool detail_field_notify (TSheet_field&, int, KEY);
|
||||
|
||||
public:
|
||||
|
||||
TPrintrow& row(int num);
|
||||
TForm& form() const { return *_form; }
|
||||
|
||||
TForm_item& field(int n) const { return (TForm_item&)_item[n]; }
|
||||
TForm_item& find_field(short id) const;
|
||||
void destroy_field(int n) { _item.destroy(n, TRUE); }
|
||||
void change_field(int n, TForm_item* f);
|
||||
void insert_field(int n, TForm_item* f);
|
||||
|
||||
word fields() const { return _item.items(); }
|
||||
word height() const { return _height; }
|
||||
void offset(int& x, int& y);
|
||||
void set_repeat_count(int x) { _repeat_count = x; }
|
||||
|
||||
virtual bool ok() const { return height() > 0 || fields() > 0; }
|
||||
|
||||
void reset();
|
||||
virtual bool update();
|
||||
bool parse(TScanner& scanner);
|
||||
|
||||
bool read_from(const TRectype& rec);
|
||||
void print_on(TRectype& rec);
|
||||
|
||||
bool edit(const char* title);
|
||||
char section_type() const { return _sec_type; }
|
||||
pagetype page_type() const { return _page_type; }
|
||||
|
||||
bool dirty() const { return _dirty; }
|
||||
void set_dirty(bool d = TRUE) { _dirty = d; }
|
||||
bool columnwise() const { return _columnwise; }
|
||||
// ritorna l'offset della colonna corrispondente se columnwise
|
||||
int tab(int col);
|
||||
|
||||
const TPrint_section& operator=(const TPrint_section& ps) { return copy(ps); }
|
||||
TPrint_section(TForm* parent, char st, pagetype pt, bool subsection = FALSE);
|
||||
TPrint_section(const TPrint_section& ps) { copy(ps); }
|
||||
virtual ~TPrint_section();
|
||||
};
|
||||
|
||||
class TForm_item : public TObject
|
||||
{
|
||||
friend class TPrint_section;
|
||||
|
||||
TPrint_section* _section;
|
||||
TForm_flags _flag;
|
||||
TBit_array _group;
|
||||
TAssoc_array _special;
|
||||
|
||||
protected:
|
||||
short _id, _x, _y, _width, _height, _effective_height;
|
||||
|
||||
short _id, _x, _y, _width, _height, _effective_height, _ofs;
|
||||
TString _prompt;
|
||||
TString _desc;
|
||||
TString_array _message;
|
||||
@ -273,12 +310,15 @@ protected:
|
||||
void string_at(int x, int y, const char* s);
|
||||
|
||||
public:
|
||||
|
||||
short id() const { return _id; }
|
||||
virtual int width() const { return _width; }
|
||||
virtual void set_width(int w) { _width = w; }
|
||||
virtual int height() const { return _height; }
|
||||
virtual short& ofs() { return _ofs; }
|
||||
virtual int effective_height() const { return _effective_height; }
|
||||
virtual short& x() { return _x; }
|
||||
virtual short& x() { return _x; };
|
||||
virtual short x() const;
|
||||
virtual short& y() { return _y; }
|
||||
|
||||
bool shown() const { return _flag.shown; }
|
||||
@ -286,20 +326,29 @@ public:
|
||||
bool enabled() const { return _flag.enabled; }
|
||||
bool disabled() const { return !_flag.enabled; }
|
||||
bool automagic() const { return _flag.automagic; }
|
||||
bool finkl() const { return _flag.finkl; }
|
||||
bool finkr() const { return _flag.finkr; }
|
||||
|
||||
virtual bool parse(TScanner&);
|
||||
virtual bool update();
|
||||
|
||||
virtual void print_on(TMask& m);
|
||||
virtual void read_from(const TMask& m);
|
||||
|
||||
virtual bool read_from(const TRectype& rform);
|
||||
virtual void print_on(TRectype& rform);
|
||||
virtual void print_on_sheet_row(TToken_string& t) const;
|
||||
|
||||
virtual void read_from(const TMask& m);
|
||||
virtual bool read_from(const TRectype& rform);
|
||||
virtual void read_from(TToken_string& s);
|
||||
|
||||
virtual bool edit(TMask& m);
|
||||
|
||||
virtual const char* get() const { return _prompt; }
|
||||
virtual bool set(const char* s) { _prompt = s; return TRUE; }
|
||||
|
||||
// example() ritorna un esempio del formato corrente
|
||||
virtual const char* example() const { return ""; }
|
||||
|
||||
// const char* prompt() const { return _prompt; }
|
||||
const TString& prompt() const { return _prompt; }
|
||||
|
||||
virtual const TString& picture() const; // Da' CHECK
|
||||
@ -321,8 +370,18 @@ public:
|
||||
virtual void enable(bool on = TRUE);
|
||||
void disable() { enable(FALSE); }
|
||||
|
||||
// variabili personalizzate low-level
|
||||
int special_items() const { return _special.items(); }
|
||||
TAssoc_array& specials() const { return (TAssoc_array&)_special; }
|
||||
// high-level
|
||||
int get_special_names(TString_array& r);
|
||||
const char* get_special_value(const char*);
|
||||
const char* get_special_type (const char*);
|
||||
const char* get_special_description(const char*);
|
||||
|
||||
TForm_item(TPrint_section* section);
|
||||
virtual ~TForm_item() {}
|
||||
};
|
||||
|
||||
|
||||
#endif
|
||||
|
@ -1546,6 +1546,48 @@ WINDOW TMask::add_string (
|
||||
return f->win();
|
||||
}
|
||||
|
||||
// @mfunc Aggiunge runtime un campo lista alla maschera
|
||||
//
|
||||
// @rdesc Ritorna l'handle del campo creato
|
||||
WINDOW TMask::add_list (
|
||||
short id, // @parm Numero identificatore del campo da aggiungere
|
||||
int page, // @parm Pagina nel quale aggiungere il campo
|
||||
const char* prompt, // @parm Prompt del campo
|
||||
int x, // @parm Coordinata x (in caratteri)
|
||||
int y, // @parm Coordinata y (in caratteri)
|
||||
int dim, // @parm Lunghezza del campo sulla maschera
|
||||
const char* flags, // @parm Flag di controllo del campo (default "")
|
||||
const char* codes, // @parm tokenstringa con i codici (NULL def.)
|
||||
const char* items) // @parm tokenstringa con gli items (NULL def.)
|
||||
|
||||
// @xref <mf TMask::add_static> <mf TMask::add_number> <mf TMask::add_date>
|
||||
// <mf TMask::add_button> <mf TMask::add_radio> <mf TMask::add_memo>
|
||||
{
|
||||
TList_field* f = new TList_field(this);
|
||||
f->construct(id, prompt, x, y, dim, _pagewin[page], flags);
|
||||
f->replace_items(codes,items);
|
||||
_field.add(f);
|
||||
return f->win();
|
||||
}
|
||||
|
||||
// @cmember Aggiunge runtime un campo boolean alla maschera
|
||||
WINDOW TMask::add_boolean (
|
||||
short id, // @parm Numero identificatore del campo da aggiungere
|
||||
int page, // @parm Pagina nel quale aggiungere il campo
|
||||
const char* prompt, // @parm Prompt del campo
|
||||
int x, // @parm Coordinata x (in caratteri)
|
||||
int y, // @parm Coordinata y (in caratteri)
|
||||
const char* flags) // @parm Flag di controllo del campo (default "")
|
||||
|
||||
// @xref <mf TMask::add_static> <mf TMask::add_string> <mf TMask::add_number>
|
||||
// <mf TMask::add_date> <mf TMask::add_radio> <mf TMask::add_memo>
|
||||
{
|
||||
TBoolean_field* f = new TBoolean_field(this);
|
||||
f->construct(id, prompt, x, y, strlen(prompt), _pagewin[page], flags);
|
||||
_field.add(f);
|
||||
return f->win();
|
||||
}
|
||||
|
||||
// @mfunc Aggiunge runtime un campo zoom alla maschera
|
||||
//
|
||||
// @rdesc Ritorna l'handle del campo creato
|
||||
|
@ -164,12 +164,16 @@ public:
|
||||
WINDOW add_date (short id, int page, const char* prompt, int x, int y, const char* flags = "");
|
||||
// @cmember Aggiunge runtime un campo bottone alla maschera
|
||||
WINDOW add_button (short id, int page, const char* prompt, int x, int y, int dx = 9, int dy = 1, const char* flags = "");
|
||||
// @cmember Aggiunge runtime un campo boolean alla maschera
|
||||
WINDOW add_boolean (short id, int page, const char* prompt, int x, int y, const char* flags = "");
|
||||
// @cmember Aggiunge runtime un campo radio button alla maschera
|
||||
WINDOW add_radio(short id, int page, const char* prompt, int x, int y, int dx, const char* codes, const char* items, const char* flags = "");
|
||||
// @cmember Aggiunge runtime un campo memo alla maschera
|
||||
WINDOW add_memo (short id, int page, const char* prompt, int x, int y, int dx = 78, int dy = 4, const char* flags = "");
|
||||
// @cmember Aggiunge runtime un campo zoom alla maschera
|
||||
WINDOW add_zoom (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", int width = 0);
|
||||
// @cmember Aggiunge runtime un campo lista alla maschera
|
||||
WINDOW add_list (short id, int page, const char* prompt, int x, int y, int dim, const char* flags = "", const char* codes = NULL, const char* items = NULL);
|
||||
|
||||
// @cmember Ritorna il numero di campi della maschera
|
||||
int fields() const
|
||||
|
Loading…
x
Reference in New Issue
Block a user