Rif. mod. 96/1. Modifiche effettuate per la gestione e l'anteprima
dei profili E.C.: metodi agggiunti: TForm::genera_inmtestazioni, TForm::remove_temp_items, TForm::put_examples, TForm::remove_examples, TForm::set_mode, TPrint_section::set_mode metodi modificati: TForm::reread, TPrint_section::destroy_field, TPrint_section::tab. Corretti inoltre il ricalcolo della larghezza colonna nel caso cambi il font, e sistemato l'offset di stampa. git-svn-id: svn://10.65.10.50/trunk@2382 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
12e041c8b3
commit
d12de9d600
141
include/form.cpp
141
include/form.cpp
@ -603,7 +603,6 @@ void TForm_item::string_at(int x, int y, const char* s)
|
|||||||
{
|
{
|
||||||
if (shown())
|
if (shown())
|
||||||
{
|
{
|
||||||
section().offset(x, y);
|
|
||||||
if (section().columnwise()) x += _ofs;
|
if (section().columnwise()) x += _ofs;
|
||||||
TPrintrow& row = section().row(y-1); // Seleziona riga di stampa
|
TPrintrow& row = section().row(y-1); // Seleziona riga di stampa
|
||||||
|
|
||||||
@ -881,6 +880,10 @@ bool TForm_item::edit(TMask& m)
|
|||||||
m.hide(F_PROMPT);
|
m.hide(F_PROMPT);
|
||||||
m.enable(F_MEMO);
|
m.enable(F_MEMO);
|
||||||
m.show(F_MEMO);
|
m.show(F_MEMO);
|
||||||
|
m.enable(F_WIDTH);
|
||||||
|
m.show(F_WIDTH);
|
||||||
|
m.enable(F_HEIGHT);
|
||||||
|
m.show(F_HEIGHT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -1122,6 +1125,7 @@ protected:
|
|||||||
void put_paragraph(const char* s);
|
void put_paragraph(const char* s);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
virtual const int fields() { return _field.items();}
|
||||||
virtual const TString& picture() const { return _picture; }
|
virtual const TString& picture() const { return _picture; }
|
||||||
virtual void set_picture(const char* p) { _picture = p; }
|
virtual void set_picture(const char* p) { _picture = p; }
|
||||||
|
|
||||||
@ -2015,17 +2019,19 @@ int TPrint_section::tab(int col)
|
|||||||
// compute column offset
|
// compute column offset
|
||||||
_nfld = 0;
|
_nfld = 0;
|
||||||
_tab[0] = 1;
|
_tab[0] = 1;
|
||||||
|
short maxcolreached = 0;
|
||||||
for (word i = 0; i < fields(); i++)
|
for (word i = 0; i < fields(); i++)
|
||||||
{
|
{
|
||||||
if (field(i).shown())
|
if (field(i).shown())
|
||||||
{
|
{
|
||||||
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)._y + 1; // one is for separation
|
_tab[field(i)._x] = field(i)._y + 1; // one is for separation
|
||||||
|
if (field(i)._x > maxcolreached) maxcolreached = field(i)._x;
|
||||||
_nfld++;
|
_nfld++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// cumulate offsets
|
// cumulate offsets
|
||||||
for (i = 1; i < _nfld; i++)
|
for (i = 1; i <= (word)maxcolreached; i++)
|
||||||
_tab[i] += _tab[i-1];
|
_tab[i] += _tab[i-1];
|
||||||
}
|
}
|
||||||
// se manca la colonna, vai a prendere quella immediatamente prima
|
// se manca la colonna, vai a prendere quella immediatamente prima
|
||||||
@ -2571,6 +2577,7 @@ bool TPrint_section::edit(const char* title)
|
|||||||
|
|
||||||
TString80 name(m.get(F_FONT));
|
TString80 name(m.get(F_FONT));
|
||||||
int size = m.get_int(F_SIZE);
|
int size = m.get_int(F_SIZE);
|
||||||
|
if (size==0) size = form().fontsize();
|
||||||
if (name != form().fontname() || size != form().fontsize())
|
if (name != form().fontname() || size != form().fontsize())
|
||||||
{
|
{
|
||||||
if (!form().dirty()) form().set_dirty();
|
if (!form().dirty()) form().set_dirty();
|
||||||
@ -2595,22 +2602,19 @@ bool TPrint_section::edit(const char* title)
|
|||||||
for (pagetype pt = odd_page; pt <= last_page; pt = pagetype(pt+1))
|
for (pagetype pt = odd_page; pt <= last_page; pt = pagetype(pt+1))
|
||||||
{
|
{
|
||||||
TPrint_section* sec = form().exist(sc, pt);
|
TPrint_section* sec = form().exist(sc, pt);
|
||||||
if (sec != NULL)
|
if (sec != NULL && !sec->columnwise())
|
||||||
{
|
{
|
||||||
sec->set_dirty();
|
sec->set_dirty();
|
||||||
for (word i = 0; i < sec->fields() ; i++)
|
for (word i = 0; i < sec->fields() ; i++)
|
||||||
{
|
{
|
||||||
TForm_item& fi = sec->field(i);
|
TForm_item& fi = sec->field(i);
|
||||||
short value = sec->columnwise() ? fi.y() : fi.x();
|
short value = fi.x();
|
||||||
if (value > 0 && (prm.ratio != 1.0))
|
if (value > 0 && (prm.ratio != 1.0))
|
||||||
{
|
{
|
||||||
real x_pos;
|
real x_pos;
|
||||||
x_pos = value * prm.ratio;
|
x_pos = value * prm.ratio;
|
||||||
x_pos.round();
|
x_pos.round();
|
||||||
if (sec->columnwise())
|
fi.x() = (short)x_pos.integer();
|
||||||
fi.y() = (short)x_pos.integer();
|
|
||||||
else
|
|
||||||
fi.x() = (short)x_pos.integer();
|
|
||||||
fi.set_dirty();
|
fi.set_dirty();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2921,10 +2925,10 @@ TPrint_section& TForm::section(char s, word pagenum)
|
|||||||
return section(s, pt);
|
return section(s, pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TForm::reread(char sec, pagetype p)
|
bool TForm::reread(char sec, pagetype p, bool force)
|
||||||
{
|
{
|
||||||
TPrint_section* s = exist(sec,p);
|
TPrint_section* s = exist(sec,p);
|
||||||
bool ok = FALSE;
|
bool ok = force;
|
||||||
if (s != NULL)
|
if (s != NULL)
|
||||||
for (word j = 0; j < s->fields(); j++)
|
for (word j = 0; j < s->fields(); j++)
|
||||||
ok |= s->field(j).dirty();
|
ok |= s->field(j).dirty();
|
||||||
@ -3260,7 +3264,7 @@ bool TForm::genera_fincatura(pagetype p, int y1, int y2, int* rows)
|
|||||||
if (cols[i] != start && cols[i] > 0)
|
if (cols[i] != start && cols[i] > 0)
|
||||||
{
|
{
|
||||||
TForm_line* l = new TForm_line(grs);
|
TForm_line* l = new TForm_line(grs);
|
||||||
l->x() = cols[i]-1;
|
l->x() = cols[i]-1 + body->ofspc();
|
||||||
l->y() = (word)y1;
|
l->y() = (word)y1;
|
||||||
l->id() = -1;
|
l->id() = -1;
|
||||||
l->width() = 1;
|
l->width() = 1;
|
||||||
@ -3275,11 +3279,12 @@ bool TForm::genera_fincatura(pagetype p, int y1, int y2, int* rows)
|
|||||||
if (start != 999 && end != 0)
|
if (start != 999 && end != 0)
|
||||||
{
|
{
|
||||||
TForm_box* l = new TForm_box(grs);
|
TForm_box* l = new TForm_box(grs);
|
||||||
l->x() = start;
|
l->x() = start + body->ofspc();
|
||||||
l->y() = (word)y1;
|
l->y() = (word)y1;
|
||||||
l->id() = -1;
|
l->id() = -1;
|
||||||
l->width() = (int)(end + wlast - start + 1);
|
l->width() = (int)(end + wlast - start + 1);
|
||||||
l->height() = (int)(y2 - y1 + 1);
|
l->height() = (int)(y2 - y1 + 1);
|
||||||
|
l->set("@B@R");
|
||||||
l->temp() = TRUE;
|
l->temp() = TRUE;
|
||||||
grs->add_field(l);
|
grs->add_field(l);
|
||||||
}
|
}
|
||||||
@ -3289,7 +3294,7 @@ bool TForm::genera_fincatura(pagetype p, int y1, int y2, int* rows)
|
|||||||
for (i = 0; rows[i]; i++)
|
for (i = 0; rows[i]; i++)
|
||||||
{
|
{
|
||||||
TForm_line* l = new TForm_line(grs);
|
TForm_line* l = new TForm_line(grs);
|
||||||
l->x() = start;
|
l->x() = start + body->ofspc();
|
||||||
l->y() = (word)rows[i];
|
l->y() = (word)rows[i];
|
||||||
l->id() = -1;
|
l->id() = -1;
|
||||||
l->width() = (int)(end + wlast - start + 1);
|
l->width() = (int)(end + wlast - start + 1);
|
||||||
@ -3302,6 +3307,109 @@ bool TForm::genera_fincatura(pagetype p, int y1, int y2, int* rows)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool TForm::genera_intestazioni(pagetype p, short y)
|
||||||
|
{
|
||||||
|
TPrint_section* body = exist('B', p);
|
||||||
|
if (body == NULL || !body->columnwise()) return FALSE;
|
||||||
|
|
||||||
|
TPrint_section* header = exist('H', p);
|
||||||
|
if (header == NULL) return FALSE;
|
||||||
|
|
||||||
|
body->reset_tabs();
|
||||||
|
const word items = body->fields();
|
||||||
|
bool firstcolumn = TRUE;
|
||||||
|
for (word j=0;j<items;j++)
|
||||||
|
{// Scans all body items to print, and append header items...
|
||||||
|
const TForm_item& fi = body->field(j);
|
||||||
|
if (!fi.shown())
|
||||||
|
continue;
|
||||||
|
TForm_string* s = new TForm_string(header);
|
||||||
|
const int x = fi.x() + body->ofspc();
|
||||||
|
s->id() = -1;
|
||||||
|
s->x() = x;
|
||||||
|
if (firstcolumn)
|
||||||
|
{
|
||||||
|
s->x() += 1;
|
||||||
|
firstcolumn=FALSE;
|
||||||
|
}
|
||||||
|
s->y() = y;
|
||||||
|
s->set_prompt(fi.key());
|
||||||
|
s->temp() = TRUE;
|
||||||
|
header->add_field(s);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TForm::remove_temp_items(char sec, pagetype p)
|
||||||
|
{
|
||||||
|
TPrint_section* s = exist(sec,p);
|
||||||
|
if (s!=NULL)
|
||||||
|
{
|
||||||
|
const word items = s->fields();
|
||||||
|
for (word j=0;j<items; j++)
|
||||||
|
{
|
||||||
|
if (s->field(j).temp())
|
||||||
|
s->destroy_field(j,FALSE);
|
||||||
|
}
|
||||||
|
s->field_array().pack();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TForm::put_examples(char sez, pagetype p)
|
||||||
|
{
|
||||||
|
TPrint_section* s = exist(sez,p);
|
||||||
|
if (s!=NULL)
|
||||||
|
{
|
||||||
|
const word items = s->fields();
|
||||||
|
for (word i=0;i<items;i++)
|
||||||
|
{
|
||||||
|
TForm_item& fi = s->field(i);
|
||||||
|
if (fi.fields()!=0) continue;
|
||||||
|
if (fi.memo())
|
||||||
|
fi.set(fi.memo_info());
|
||||||
|
else
|
||||||
|
if (fi.prompt().empty())
|
||||||
|
{
|
||||||
|
if (fi.class_name() == "DATA")
|
||||||
|
{
|
||||||
|
const TDate d(TODAY);
|
||||||
|
fi.set(d);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
if (fi.class_name() == "NUMERO")
|
||||||
|
{
|
||||||
|
fi.set_prompt(fi.example());
|
||||||
|
fi.temp() = TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
fi.set(fi.key());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TForm::remove_examples(char sez, pagetype p)
|
||||||
|
{
|
||||||
|
TPrint_section* s = exist(sez,p);
|
||||||
|
if (s!=NULL)
|
||||||
|
{
|
||||||
|
const word items = s->fields();
|
||||||
|
for (word i=0;i<items;i++)
|
||||||
|
{
|
||||||
|
TForm_item& fi = s->field(i);
|
||||||
|
if (fi.fields()!=0) continue;
|
||||||
|
if (fi.memo())
|
||||||
|
fi.set("");
|
||||||
|
else
|
||||||
|
if (fi.class_name() == "NUMERO" && fi.temp())
|
||||||
|
{
|
||||||
|
fi.set_prompt("");
|
||||||
|
fi.temp() = FALSE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 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
|
||||||
@ -3329,6 +3437,7 @@ bool TForm::print(long from, long to)
|
|||||||
|
|
||||||
pr.setheaderhandler(header_handler); // Setta handlers
|
pr.setheaderhandler(header_handler); // Setta handlers
|
||||||
pr.setfooterhandler(footer_handler);
|
pr.setfooterhandler(footer_handler);
|
||||||
|
pr.set_offset(_y,_x);
|
||||||
if (!pr.is_generic())
|
if (!pr.is_generic())
|
||||||
{
|
{
|
||||||
for (pagetype t = odd_page; t <= last_page; t = pagetype(t+1))
|
for (pagetype t = odd_page; t <= last_page; t = pagetype(t+1))
|
||||||
@ -3358,6 +3467,8 @@ bool TForm::print(long from, long to)
|
|||||||
{
|
{
|
||||||
pr.formlen(height(odd_page));
|
pr.formlen(height(odd_page));
|
||||||
}
|
}
|
||||||
|
const bool old_val = pr.isgraphics();
|
||||||
|
pr.set_graphics(_background_mode == graphics ? TRUE : FALSE); // Set mode for finkatur & graphics
|
||||||
pr.set_char_size(_fontsize); // Set font name and size
|
pr.set_char_size(_fontsize); // Set font name and size
|
||||||
pr.set_fontname(_fontname); // according to current form
|
pr.set_fontname(_fontname); // according to current form
|
||||||
const bool was_open = pr.isopen();
|
const bool was_open = pr.isopen();
|
||||||
@ -3404,6 +3515,8 @@ bool TForm::print(long from, long to)
|
|||||||
|
|
||||||
pr.setheaderhandler(NULL);
|
pr.setheaderhandler(NULL);
|
||||||
pr.setfooterhandler(NULL);
|
pr.setfooterhandler(NULL);
|
||||||
|
pr.set_graphics(old_val); //Reset graphics mode to old value
|
||||||
|
pr.set_offset(0,0); //Reset global offsets of printer
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
@ -3617,7 +3730,7 @@ void TForm::init()
|
|||||||
_arrange= TRUE;
|
_arrange= TRUE;
|
||||||
set_fincatura(printer().get_fincatura());
|
set_fincatura(printer().get_fincatura());
|
||||||
_dirty= FALSE;
|
_dirty= FALSE;
|
||||||
_background_mode = printer().isgraphics() ? graphics : text;
|
_background_mode = printer().isgraphics() ? graphics : texto;
|
||||||
}
|
}
|
||||||
|
|
||||||
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)
|
||||||
|
@ -29,6 +29,7 @@ class TCursor;
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
enum pagetype { odd_page, even_page, first_page, last_page };
|
enum pagetype { odd_page, even_page, first_page, last_page };
|
||||||
|
enum bkg_mode { none, texto, graphics } ;
|
||||||
pagetype char2page(char); // prototipo della funzione che converte dalla notazione carattere al corrispondente enum pagetype
|
pagetype char2page(char); // prototipo della funzione che converte dalla notazione carattere al corrispondente enum pagetype
|
||||||
|
|
||||||
class TForm;
|
class TForm;
|
||||||
@ -45,9 +46,7 @@ class TForm : public TObject
|
|||||||
friend class TForm_EC_editor;
|
friend class TForm_EC_editor;
|
||||||
friend class TPrint_section;
|
friend class TPrint_section;
|
||||||
|
|
||||||
enum bkg_mode
|
bkg_mode _background_mode;
|
||||||
{ none, text, graphics }
|
|
||||||
_background_mode;
|
|
||||||
|
|
||||||
TString _name; // Profile name
|
TString _name; // Profile name
|
||||||
TString _code; // Profile code
|
TString _code; // Profile code
|
||||||
@ -133,7 +132,13 @@ public:
|
|||||||
// verticali, array di posizioni riga con 0 per finire
|
// verticali, array di posizioni riga con 0 per finire
|
||||||
// ritorna FALSE se non c'e' il body per quella pagina
|
// ritorna FALSE se non c'e' il body per quella pagina
|
||||||
bool genera_fincatura(pagetype p, int y1, int y2, int* rows);
|
bool genera_fincatura(pagetype p, int y1, int y2, int* rows);
|
||||||
|
|
||||||
|
// Genera le righe di intestazione colonna alla riga indicata, vale per COLUMNWISE
|
||||||
|
// I form_items di intestazione vengono aggiunti alla sezione header di tipo p con ID -1
|
||||||
|
bool genera_intestazioni(pagetype p, short y);
|
||||||
|
void remove_temp_items(char sec, pagetype p);
|
||||||
|
void put_examples(char sec, pagetype p);
|
||||||
|
void remove_examples(char sec, pagetype p);
|
||||||
bool print(long from = 0L, long to = -1L);
|
bool print(long from = 0L, long to = -1L);
|
||||||
|
|
||||||
TArray& body() { return _body; }
|
TArray& body() { return _body; }
|
||||||
@ -172,13 +177,16 @@ public:
|
|||||||
// cambia il formato di tutti i numeri nel form
|
// cambia il formato di tutti i numeri nel form
|
||||||
void change_number_format(int w, int dec, const char* p);
|
void change_number_format(int w, int dec, const char* p);
|
||||||
// Rilegge la sezione specificata
|
// Rilegge la sezione specificata
|
||||||
bool reread(char sec, pagetype p);
|
bool reread(char sec, pagetype p, bool force=FALSE);
|
||||||
// editor interface
|
// editor interface
|
||||||
TForm_editor& editor() const;
|
TForm_editor& editor() const;
|
||||||
|
|
||||||
// Notifica l'inizio di stampa dell'ultima pagina
|
// Notifica l'inizio di stampa dell'ultima pagina
|
||||||
void set_last_page(bool lp) { _lastpage = lp; }
|
void set_last_page(bool lp) { _lastpage = lp; }
|
||||||
|
|
||||||
|
// Setta il modo di sfondo (fincatura)
|
||||||
|
void set_mode(bkg_mode b) {_background_mode = b;}
|
||||||
|
|
||||||
// if code == NULL it's a base form
|
// if code == NULL it's a base form
|
||||||
// otherwise it's integrated by a file definition
|
// otherwise it's integrated by a file definition
|
||||||
TForm();
|
TForm();
|
||||||
@ -254,7 +262,7 @@ public:
|
|||||||
TArray& field_array() { return _item; }
|
TArray& field_array() { return _item; }
|
||||||
TForm_item& field(int n) const { return (TForm_item&)_item[n]; }
|
TForm_item& field(int n) const { return (TForm_item&)_item[n]; }
|
||||||
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, bool c = TRUE) { _item.destroy(n, c); }
|
||||||
void destroy_fields() { _item.destroy(); }
|
void destroy_fields() { _item.destroy(); }
|
||||||
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);
|
||||||
@ -267,6 +275,7 @@ public:
|
|||||||
// returns 0 if not columnwise; means n. of printable fields
|
// returns 0 if not columnwise; means n. of printable fields
|
||||||
word columns() { tab(0); return _nfld; }
|
word columns() { tab(0); return _nfld; }
|
||||||
word height() const { return _height; }
|
word height() const { return _height; }
|
||||||
|
word ofspc() const { return _ofspc; }
|
||||||
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; }
|
||||||
|
|
||||||
@ -345,7 +354,9 @@ public:
|
|||||||
virtual short x() const;
|
virtual short x() const;
|
||||||
virtual short& y() { return _y; }
|
virtual short& y() { return _y; }
|
||||||
virtual short y() const { return _y; }
|
virtual short y() const { return _y; }
|
||||||
|
|
||||||
|
virtual const int fields() { return 0;}
|
||||||
|
|
||||||
bool shown() const { return _flag.shown; }
|
bool shown() const { return _flag.shown; }
|
||||||
bool hidden() const { return !_flag.shown; }
|
bool hidden() const { return !_flag.shown; }
|
||||||
bool enabled() const { return _flag.enabled; }
|
bool enabled() const { return _flag.enabled; }
|
||||||
|
Loading…
x
Reference in New Issue
Block a user