Megamodifica form editor

git-svn-id: svn://10.65.10.50/trunk@2285 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-12-14 10:45:17 +00:00
parent 506e99c7d1
commit c163b8e1e7
15 changed files with 1911 additions and 1138 deletions

View File

@ -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;
}

View File

@ -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

View File

@ -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"

View File

@ -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[])
{

View File

@ -1,4 +1,4 @@
#include "ba2100.h"
#include "bafrm.h"
PAGE "Scelta profilo" -1 -1 75 6

View File

@ -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

View File

@ -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

View File

@ -1,6 +1,4 @@
#include "baformed.h"
#include "ba2100.h"
class TForm_EC_editor : public TForm_editor
{

667
ba/baformed.cpp Executable file
View 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;
}

View File

@ -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
View 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"

File diff suppressed because it is too large Load Diff

View File

@ -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

View File

@ -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

View File

@ -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