Generazione automatica fincatura; aggiunto BOX, corrette cazzatelle
git-svn-id: svn://10.65.10.50/trunk@2296 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
cd274bfec5
commit
70c3e5a7bc
129
include/form.cpp
129
include/form.cpp
@ -278,7 +278,7 @@ void TForm_flags::read_from(const TMask& m)
|
|||||||
enabled = !m.get_bool(F_DISABLED);
|
enabled = !m.get_bool(F_DISABLED);
|
||||||
automagic = m.get_bool(F_AUTOMAGIC);
|
automagic = m.get_bool(F_AUTOMAGIC);
|
||||||
finkl = !m.get_bool(F_FINKL);
|
finkl = !m.get_bool(F_FINKL);
|
||||||
finkr = !m.get_bool(F_FINKL);
|
finkr = !m.get_bool(F_FINKR);
|
||||||
}
|
}
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -1729,7 +1729,7 @@ protected:
|
|||||||
virtual bool update();
|
virtual bool update();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TForm_picture(TGraphic_section* section) : TForm_item(section) {};
|
TForm_picture(TGraphic_section* section) : TForm_item(section) {}
|
||||||
virtual ~TForm_picture() {}
|
virtual ~TForm_picture() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1740,10 +1740,21 @@ protected:
|
|||||||
virtual bool update();
|
virtual bool update();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TForm_line(TGraphic_section* section) : TForm_item(section) {};
|
TForm_line(TGraphic_section* section) : TForm_item(section) {}
|
||||||
virtual ~TForm_line() {}
|
virtual ~TForm_line() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class TForm_box : public TForm_item
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
virtual const char* class_name() const { return "BOX"; }
|
||||||
|
virtual bool update();
|
||||||
|
|
||||||
|
public:
|
||||||
|
TForm_box(TGraphic_section* section) : TForm_item(section) {}
|
||||||
|
virtual ~TForm_box() {}
|
||||||
|
};
|
||||||
|
|
||||||
bool TForm_picture::update()
|
bool TForm_picture::update()
|
||||||
{
|
{
|
||||||
const bool ok = _prompt.not_empty();
|
const bool ok = _prompt.not_empty();
|
||||||
@ -1768,6 +1779,18 @@ bool TForm_line::update()
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TForm_box::update()
|
||||||
|
{
|
||||||
|
TString80 i;
|
||||||
|
const int w = _prompt[0] == '@' ? 3 : 1;
|
||||||
|
i << 'W' << w << "b{" << _x << ',' << _y << ','
|
||||||
|
<< (_x+width()-1) << ',' << (_y+height()-1) << '}';
|
||||||
|
|
||||||
|
((TGraphic_section&)section()).append(i);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
TForm_item* TGraphic_section::parse_item(const TString& s)
|
TForm_item* TGraphic_section::parse_item(const TString& s)
|
||||||
{
|
{
|
||||||
@ -1775,6 +1798,8 @@ TForm_item* TGraphic_section::parse_item(const TString& s)
|
|||||||
return new TForm_picture(this);
|
return new TForm_picture(this);
|
||||||
else if (s == "LI")
|
else if (s == "LI")
|
||||||
return new TForm_line(this);
|
return new TForm_line(this);
|
||||||
|
else if (s == "BO")
|
||||||
|
return new TForm_box(this);
|
||||||
|
|
||||||
error_box("Campo di stampa non ammesso per lo sfondo: %s", (const char*)s);
|
error_box("Campo di stampa non ammesso per lo sfondo: %s", (const char*)s);
|
||||||
return NULL;
|
return NULL;
|
||||||
@ -1838,7 +1863,7 @@ TMask* TPrint_section::_msk = NULL;
|
|||||||
|
|
||||||
TPrint_section::TPrint_section(TForm* f, char st, pagetype pt, bool sub)
|
TPrint_section::TPrint_section(TForm* f, char st, pagetype pt, bool sub)
|
||||||
: _height(0), _form(f), _sec_type(st), _page_type(pt), _dirty(FALSE),
|
: _height(0), _form(f), _sec_type(st), _page_type(pt), _dirty(FALSE),
|
||||||
_subsection(sub), _repeat_count(0)
|
_subsection(sub), _repeat_count(0), _ofspc(0), _nfld(0)
|
||||||
{ _tab[0] = -1; }
|
{ _tab[0] = -1; }
|
||||||
|
|
||||||
TPrint_section::~TPrint_section()
|
TPrint_section::~TPrint_section()
|
||||||
@ -1860,6 +1885,11 @@ void TPrint_section::insert_field(int n, TForm_item* f)
|
|||||||
_item.insert(f,n);
|
_item.insert(f,n);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TPrint_section::add_field(TForm_item* f)
|
||||||
|
{
|
||||||
|
_item.add(f);
|
||||||
|
}
|
||||||
|
|
||||||
const TPrint_section& TPrint_section::copy(const TPrint_section& ps)
|
const TPrint_section& TPrint_section::copy(const TPrint_section& ps)
|
||||||
{
|
{
|
||||||
_item = ps._item;
|
_item = ps._item;
|
||||||
@ -1886,7 +1916,7 @@ int TPrint_section::tab(int col)
|
|||||||
if (_tab[0] == -1)
|
if (_tab[0] == -1)
|
||||||
{
|
{
|
||||||
// compute column offset
|
// compute column offset
|
||||||
word nfld = 0;
|
_nfld = 0;
|
||||||
_tab[0] = 1;
|
_tab[0] = 1;
|
||||||
for (word i = 0; i < fields(); i++)
|
for (word i = 0; i < fields(); i++)
|
||||||
{
|
{
|
||||||
@ -1894,12 +1924,12 @@ int TPrint_section::tab(int col)
|
|||||||
{
|
{
|
||||||
CHECKD (field(i)._x < MAXCOLUMNS, "Colonna ammessa e non concessa: ", field(i)._x);
|
CHECKD (field(i)._x < MAXCOLUMNS, "Colonna ammessa e non concessa: ", field(i)._x);
|
||||||
_tab[field(i)._x] = field(i).width() + 1; // one is for separation
|
_tab[field(i)._x] = field(i).width() + 1; // one is for separation
|
||||||
nfld++;
|
_nfld++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// cumulate offsets
|
// cumulate offsets
|
||||||
for (i = 1; i < nfld; i++)
|
for (i = 1; i < _nfld; i++)
|
||||||
_tab[i] += _tab[i-1];
|
_tab[i] += _tab[i-1];
|
||||||
}
|
}
|
||||||
ret = _tab[col];
|
ret = _tab[col];
|
||||||
}
|
}
|
||||||
@ -1910,7 +1940,7 @@ void TPrint_section::offset(int& x, int& y)
|
|||||||
{
|
{
|
||||||
if (x >= 0)
|
if (x >= 0)
|
||||||
{
|
{
|
||||||
if (_columnwise) x = tab(x-1);
|
if (_columnwise) x = tab(x-1) + _ofspc;
|
||||||
x += form().offset_x();
|
x += form().offset_x();
|
||||||
}
|
}
|
||||||
if (y >= 0) y += form().offset_y() + (_height * _repeat_count);
|
if (y >= 0) y += form().offset_y() + (_height * _repeat_count);
|
||||||
@ -2239,6 +2269,8 @@ bool TPrint_section::detail_field_notify (TSheet_field& s, int r, KEY k)
|
|||||||
fff = new TForm_group(&sec);
|
fff = new TForm_group(&sec);
|
||||||
else if (typ == "LINEA")
|
else if (typ == "LINEA")
|
||||||
fff = new TForm_line((TGraphic_section*)&sec);
|
fff = new TForm_line((TGraphic_section*)&sec);
|
||||||
|
else if (typ == "BOX")
|
||||||
|
fff = new TForm_box((TGraphic_section*)&sec);
|
||||||
else if (typ == "FIGURA")
|
else if (typ == "FIGURA")
|
||||||
fff = new TForm_picture((TGraphic_section*)&sec);
|
fff = new TForm_picture((TGraphic_section*)&sec);
|
||||||
|
|
||||||
@ -2279,7 +2311,12 @@ bool TPrint_section::edit(const char* title)
|
|||||||
m.set(F_IPY, form().ipy());
|
m.set(F_IPY, form().ipy());
|
||||||
m.set(F_FPX, form().fpx());
|
m.set(F_FPX, form().fpx());
|
||||||
m.set(F_FLEN, printer().formlen());
|
m.set(F_FLEN, printer().formlen());
|
||||||
|
m.set(F_OFSPC, _ofspc);
|
||||||
|
|
||||||
|
// still unused: will need to be shown if section is columnwise; no
|
||||||
|
// provision for saving yet (should be in form, with a field for each pos)
|
||||||
|
m.hide(F_OFSPC);
|
||||||
|
|
||||||
TSheet_field& ms = (TSheet_field&)m.field(F_FIELDS);
|
TSheet_field& ms = (TSheet_field&)m.field(F_FIELDS);
|
||||||
|
|
||||||
if (_columnwise)
|
if (_columnwise)
|
||||||
@ -2355,6 +2392,11 @@ bool TPrint_section::edit(const char* title)
|
|||||||
_height = m.get_int(F_HEIGHT);
|
_height = m.get_int(F_HEIGHT);
|
||||||
_dirty=TRUE;
|
_dirty=TRUE;
|
||||||
}
|
}
|
||||||
|
if (_ofspc != (word)m.get_int(F_OFSPC) )
|
||||||
|
{
|
||||||
|
_ofspc = m.get_int(F_OFSPC);
|
||||||
|
_dirty=TRUE;
|
||||||
|
}
|
||||||
if (m.get_int(F_X) != form().offset_x() || m.get_int(F_Y) != form().offset_y())
|
if (m.get_int(F_X) != form().offset_x() || m.get_int(F_Y) != form().offset_y())
|
||||||
{
|
{
|
||||||
form().offset_x() = m.get_int(F_X);
|
form().offset_x() = m.get_int(F_X);
|
||||||
@ -2754,7 +2796,7 @@ bool TForm::ps_change_number_format(TPrint_section& s, int w, int dec, const cha
|
|||||||
else if (strcmp(fi.class_name(), "NUMERO") == 0)
|
else if (strcmp(fi.class_name(), "NUMERO") == 0)
|
||||||
{
|
{
|
||||||
TForm_number& fn = (TForm_number&)fi;
|
TForm_number& fn = (TForm_number&)fi;
|
||||||
fn.set_width(w);
|
fn.width() = w;
|
||||||
fn.set_decimals(dec);
|
fn.set_decimals(dec);
|
||||||
fn.set_picture(p);
|
fn.set_picture(p);
|
||||||
}
|
}
|
||||||
@ -2955,8 +2997,70 @@ long TForm::records() const
|
|||||||
{
|
{
|
||||||
const long r = cursor() ? cursor()->items() : 0;
|
const long r = cursor() ? cursor()->items() : 0;
|
||||||
return r;
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TForm::genera_fincatura(pagetype p, int y1, int y2, int* rows)
|
||||||
|
{
|
||||||
|
const TPrint_section* body = exist('B', p);
|
||||||
|
if (body == NULL) return FALSE;
|
||||||
|
|
||||||
|
TGraphic_section* grs = (TGraphic_section*)exist('G', p, TRUE);
|
||||||
|
word j = 0, start = 999, end = 0, wlast = 0;
|
||||||
|
word cols[MAXCOLUMNS];
|
||||||
|
|
||||||
|
for (word i = 0; i < body->fields(); i++)
|
||||||
|
{
|
||||||
|
TForm_item& f = body->field(i);
|
||||||
|
if (!f.shown()) continue;
|
||||||
|
|
||||||
|
word x = f.x();
|
||||||
|
|
||||||
|
if (x < start) start = x;
|
||||||
|
if (x > end) { end = x; wlast = f.width(); }
|
||||||
|
cols[j++] = x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// inner lines
|
||||||
|
for (i = 0; i < j; i++)
|
||||||
|
{
|
||||||
|
if (cols[i] != start)
|
||||||
|
{
|
||||||
|
TForm_line* l = new TForm_line(grs);
|
||||||
|
l->x() = cols[i]-1;
|
||||||
|
l->y() = (word)y1;
|
||||||
|
l->width() = 0;
|
||||||
|
l->height() = (int)(y2 - y1 + 1);
|
||||||
|
grs->add_field(l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// box around
|
||||||
|
if (start != 999 && end != 0)
|
||||||
|
{
|
||||||
|
TForm_box* l = new TForm_box(grs);
|
||||||
|
l->x() = start;
|
||||||
|
l->y() = (word)y1;
|
||||||
|
l->width() = (int)(end + wlast - start + 1);
|
||||||
|
l->height() = (int)(y2 - y1 + 1);
|
||||||
|
grs->add_field(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
// horizontal lines
|
||||||
|
if (start != 999 && end != 0)
|
||||||
|
for (i = 0; rows[i]; i++)
|
||||||
|
{
|
||||||
|
TForm_line* l = new TForm_line(grs);
|
||||||
|
l->x() = start;
|
||||||
|
l->y() = (word)rows[i];
|
||||||
|
l->width() = (int)(end + wlast - start + 1);
|
||||||
|
l->height() = 0;
|
||||||
|
grs->add_field(l);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// Stampa gli items dal from a to
|
// Stampa gli items dal from a to
|
||||||
// se to < 0 stampa fino alla fine del file
|
// se to < 0 stampa fino alla fine del file
|
||||||
|
|
||||||
@ -3270,7 +3374,8 @@ void TForm::init()
|
|||||||
_arrange= TRUE;
|
_arrange= TRUE;
|
||||||
_fink= "+,+,+,+,+,+,+,+,+,-,|";
|
_fink= "+,+,+,+,+,+,+,+,+,-,|";
|
||||||
_fink.separator(',');
|
_fink.separator(',');
|
||||||
_dirty= FALSE;
|
_dirty= FALSE;
|
||||||
|
_background_mode = printer().isgraphics() ? graphics : text;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TForm::read(const char* name, const char* code, int lev, const char* desc)
|
void TForm::read(const char* name, const char* code, int lev, const char* desc)
|
||||||
|
@ -37,12 +37,17 @@ class TSheet_field;
|
|||||||
class TForm_item;
|
class TForm_item;
|
||||||
class TPrint_section;
|
class TPrint_section;
|
||||||
|
|
||||||
|
const int MAXCOLUMNS = 32;
|
||||||
|
|
||||||
class TForm : public TObject
|
class TForm : public TObject
|
||||||
{
|
{
|
||||||
friend class TForm_editor;
|
friend class TForm_editor;
|
||||||
friend class TPrint_section;
|
friend class TPrint_section;
|
||||||
|
|
||||||
|
enum bkg_mode
|
||||||
|
{ none, text, graphics }
|
||||||
|
_background_mode;
|
||||||
|
|
||||||
TString _name; // Profile name
|
TString _name; // Profile name
|
||||||
TString _code; // Profile code
|
TString _code; // Profile code
|
||||||
TString _fontname; // Font name
|
TString _fontname; // Font name
|
||||||
@ -120,6 +125,12 @@ protected:
|
|||||||
virtual word set_footer(word p, bool u);
|
virtual word set_footer(word p, bool u);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
// genera automaticamente la sezione grafica con colonne fincate
|
||||||
|
// parametri: posizione pagina, prima e ultima Y per le righe
|
||||||
|
// verticali, array di posizioni riga con 0 per finire
|
||||||
|
// ritorna FALSE se non c'e' il body per quella pagina
|
||||||
|
bool genera_fincatura(pagetype p, int y1, int y2, int* rows);
|
||||||
|
|
||||||
bool print(long from = 0L, long to = -1L);
|
bool print(long from = 0L, long to = -1L);
|
||||||
|
|
||||||
@ -212,9 +223,10 @@ public:
|
|||||||
class TPrint_section : public TArray
|
class TPrint_section : public TArray
|
||||||
{
|
{
|
||||||
static TMask* _msk;
|
static TMask* _msk;
|
||||||
enum { MAXCOLUMNS = 32 };
|
|
||||||
|
|
||||||
word _height; // Altezza della sezione
|
word _height; // Altezza della sezione
|
||||||
|
word _ofspc; // Offset prima colonna (still ignored)
|
||||||
|
word _nfld; // number of columns if columnwise
|
||||||
bool _dirty; // Flag di modifica parametri
|
bool _dirty; // Flag di modifica parametri
|
||||||
bool _columnwise; // Columnwise field specification
|
bool _columnwise; // Columnwise field specification
|
||||||
|
|
||||||
@ -250,9 +262,12 @@ public:
|
|||||||
TForm_item& find_field(short id) const;
|
TForm_item& find_field(short id) const;
|
||||||
void destroy_field(int n) { _item.destroy(n, TRUE); }
|
void destroy_field(int n) { _item.destroy(n, TRUE); }
|
||||||
void change_field(int n, TForm_item* f);
|
void change_field(int n, TForm_item* f);
|
||||||
void insert_field(int n, TForm_item* f);
|
void insert_field(int n, TForm_item* f);
|
||||||
|
void add_field(TForm_item* f);
|
||||||
|
|
||||||
word fields() const { return _item.items(); }
|
word fields() const { return _item.items(); }
|
||||||
|
// returns 0 if not columnwise; means n. of printable fields
|
||||||
|
word columns() { tab(0); return _nfld; }
|
||||||
word height() const { return _height; }
|
word height() const { return _height; }
|
||||||
void offset(int& x, int& y);
|
void offset(int& x, int& y);
|
||||||
void set_repeat_count(int x) { _repeat_count = x; }
|
void set_repeat_count(int x) { _repeat_count = x; }
|
||||||
@ -285,7 +300,6 @@ public:
|
|||||||
class TForm_item : public TObject
|
class TForm_item : public TObject
|
||||||
{
|
{
|
||||||
friend class TPrint_section;
|
friend class TPrint_section;
|
||||||
|
|
||||||
TPrint_section* _section;
|
TPrint_section* _section;
|
||||||
TForm_flags _flag;
|
TForm_flags _flag;
|
||||||
TBit_array _group;
|
TBit_array _group;
|
||||||
@ -314,8 +328,9 @@ public:
|
|||||||
|
|
||||||
short id() const { return _id; }
|
short id() const { return _id; }
|
||||||
virtual int width() const { return _width; }
|
virtual int width() const { return _width; }
|
||||||
virtual void set_width(int w) { _width = w; }
|
virtual short& width() { return _width; }
|
||||||
virtual int height() const { return _height; }
|
virtual int height() const { return _height; }
|
||||||
|
virtual short& height() { return _height; }
|
||||||
virtual short& ofs() { return _ofs; }
|
virtual short& ofs() { return _ofs; }
|
||||||
virtual int effective_height() const { return _effective_height; }
|
virtual int effective_height() const { return _effective_height; }
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user