Patch level : 12.00 nopatch

Files correlati     :
Commento            :
Agiiunte righe verticali ad altezza automatica
Aggiunto indirizza della ditta corrente
L'esportazione in excel delle descrizioni lunghe le troncava alla prima riga
This commit is contained in:
Alessandro Bonazzi 2023-04-12 09:49:28 +02:00
parent 656929078c
commit 4b64ddeaa2
3 changed files with 166 additions and 119 deletions

View File

@ -221,7 +221,7 @@ TReport_font::TReport_font() : _win_mapped(NULL_WIN), _fontid(nullptr)
create(DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE, XVT_FS_NONE); create(DEFAULT_FONT_NAME, DEFAULT_FONT_SIZE, XVT_FS_NONE);
} }
TReport_font::TReport_font(const TReport_font& f) : _win_mapped(NULL_WIN), _fontid(NULL) TReport_font::TReport_font(const TReport_font& f) : _win_mapped(NULL_WIN), _fontid(nullptr)
{ copy(f); } { copy(f); }
TReport_font::~TReport_font() TReport_font::~TReport_font()
@ -234,7 +234,7 @@ TReport_font::~TReport_font()
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
static bool is_a_number(const char* str) static bool is_a_number(const char* str)
{ {
if (str == NULL || *str == '\0' || *str == '0') if (str == nullptr || *str == '\0' || *str == '0')
return false; // Se comincia per zero va preservato! return false; // Se comincia per zero va preservato!
if (*str == '-') if (*str == '-')
{ {
@ -244,7 +244,7 @@ static bool is_a_number(const char* str)
} }
while (*str) while (*str)
{ {
if (strchr("0123456789.", *str) == NULL) if (strchr("0123456789.", *str) == nullptr)
return false; return false;
str++; str++;
} }
@ -309,7 +309,7 @@ TReport_expr& TReport_expr_cache::operator[](const char* key)
TObject* TReport_image_cache::key2obj(const char* key) TObject* TReport_image_cache::key2obj(const char* key)
{ {
TImage* img = NULL; TImage* img = nullptr;
TFilename pathname = key; TFilename pathname = key;
if (pathname.custom_path()) if (pathname.custom_path())
@ -386,16 +386,16 @@ TReport_section* TReport_section::father_section() const
} }
else else
return _report.find_section('B', type() == 'B' ? 0 : 1); return _report.find_section('B', type() == 'B' ? 0 : 1);
return NULL; return nullptr;
} }
const TReport_font& TReport_section::font() const const TReport_font& TReport_section::font() const
{ {
const TReport_font* f = _font; const TReport_font* f = _font;
if (f == NULL) if (f == nullptr)
{ {
TReport_section* father = father_section(); TReport_section* father = father_section();
if (father == NULL) if (father == nullptr)
f = &_report.font(); f = &_report.font();
else else
f = &father->font(); f = &father->font();
@ -405,11 +405,7 @@ const TReport_font& TReport_section::font() const
void TReport_section::set_font(const TReport_font& f) void TReport_section::set_font(const TReport_font& f)
{ {
if (_font != NULL) safe_delete(_font);
{
delete _font;
_font = NULL;
}
if (font() != f) if (font() != f)
_font = new TReport_font(f); _font = new TReport_font(f);
} }
@ -418,7 +414,7 @@ void TReport_section::compute_print_font(const TReport_font& oldfont, const TRep
{ {
if (has_font()) if (has_font())
{ {
if (_print_font == NULL) if (_print_font == nullptr)
_print_font = new TReport_font; _print_font = new TReport_font;
*_print_font = font(); *_print_font = font();
_print_font->adapt(oldfont, newfont); _print_font->adapt(oldfont, newfont);
@ -432,14 +428,14 @@ void TReport_section::compute_print_font(const TReport_font& oldfont, const TRep
const TReport_font& TReport_section::print_font() const const TReport_font& TReport_section::print_font() const
{ {
if (_print_font != NULL && _report.use_printer_font()) if (_print_font != nullptr && _report.use_printer_font())
return *_print_font; return *_print_font;
if (_font != NULL) if (_font != nullptr)
return *_font; return *_font;
TReport_section* father = father_section(); TReport_section* father = father_section();
if (father != NULL) if (father != nullptr)
return father->print_font(); return father->print_font();
return _report.print_font(); return _report.print_font();
@ -467,7 +463,7 @@ void TReport_section::set_postscript(const char* src)
void TReport_section::unmap_font() void TReport_section::unmap_font()
{ {
if (_font != NULL) if (_font != nullptr)
_font->unmap(); _font->unmap();
for (int i = last(); i >= 0; i--) for (int i = last(); i >= 0; i--)
field(i).unmap_font(); field(i).unmap_font();
@ -502,7 +498,7 @@ TReport_field* TReport_section::find_field(int id)
const int pos = find_field_pos(id); const int pos = find_field_pos(id);
if (pos >= 0) if (pos >= 0)
return &field(pos); return &field(pos);
return NULL; return nullptr;
} }
int TReport_section::code(TString& code) const int TReport_section::code(TString& code) const
@ -597,7 +593,7 @@ bool TReport_section::execute_prescript(const TBook& book)
if (items() > 0) if (items() > 0)
report().set_curr_field(&field(0)); report().set_curr_field(&field(0));
else else
report().set_curr_field(NULL); report().set_curr_field(nullptr);
ok = _prescript.execute(report()); ok = _prescript.execute(report());
} }
for (int i = 0; ok && i < items(); i++) for (int i = 0; ok && i < items(); i++)
@ -650,6 +646,7 @@ void TReport_section::print(TBook& book) const
for (int i = 0; i < tot; i++) for (int i = 0; i < tot; i++)
{ {
const TReport_field& f = field(i); const TReport_field& f = field(i);
f.print(book); f.print(book);
} }
} }
@ -682,7 +679,8 @@ bool TReport_section::execute_postscript()
void TReport_section::save(TXmlItem& root) const void TReport_section::save(TXmlItem& root) const
{ {
TXmlItem& item = root.AddChild("section"); TXmlItem& item = root.AddChild("section");
char* tipo = NULL; char* tipo = nullptr;
switch (type()) switch (type())
{ {
case 'H': tipo = "Head"; break; case 'H': tipo = "Head"; break;
@ -723,7 +721,7 @@ void TReport_section::save(TXmlItem& root) const
item.AddChild("condition") << condition(); item.AddChild("condition") << condition();
if (grouped_by().not_empty()) if (grouped_by().not_empty())
item.AddChild("groupby") << grouped_by(); item.AddChild("groupby") << grouped_by();
if (recordset() != NULL) if (recordset() != nullptr)
item.AddChild("sql") << recordset()->query_text(); item.AddChild("sql") << recordset()->query_text();
if (has_font()) if (has_font())
@ -789,7 +787,7 @@ void TReport_section::load(const TXmlItem& sec)
{ {
TString str; TString str;
const TXmlItem* cnd = sec.FindFirstChild("condition"); const TXmlItem* cnd = sec.FindFirstChild("condition");
if (cnd != NULL) if (cnd != nullptr)
{ {
cnd->GetEnclosedText(str); cnd->GetEnclosedText(str);
set_condition(str); set_condition(str);
@ -797,7 +795,7 @@ void TReport_section::load(const TXmlItem& sec)
if (level() > 1) if (level() > 1)
{ {
const TXmlItem* gb = sec.FindFirstChild("groupby"); const TXmlItem* gb = sec.FindFirstChild("groupby");
if (gb != NULL) if (gb != nullptr)
{ {
gb->GetEnclosedText(str); gb->GetEnclosedText(str);
group_by(str); group_by(str);
@ -805,7 +803,7 @@ void TReport_section::load(const TXmlItem& sec)
if (level() > 10 && type() == 'B') // Solo body dei pulcini hanno la query if (level() > 10 && type() == 'B') // Solo body dei pulcini hanno la query
{ {
const TXmlItem* sql = sec.FindFirstChild("sql"); const TXmlItem* sql = sec.FindFirstChild("sql");
if (sql != NULL) if (sql != nullptr)
{ {
sql->GetEnclosedText(str); sql->GetEnclosedText(str);
set_recordset(str); set_recordset(str);
@ -836,7 +834,7 @@ void TReport_section::update_recordset_parent()
if (type() == 'B' && level() > 0) if (type() == 'B' && level() > 0)
{ {
// Update my recordset // Update my recordset
if (_recordset != NULL) if (_recordset != nullptr)
{ {
if (level() > 100) if (level() > 100)
{ {
@ -851,7 +849,7 @@ void TReport_section::update_recordset_parent()
{ {
const int child = level()*10+i; const int child = level()*10+i;
TReport_section* rs = _report.find_section('B', child); TReport_section* rs = _report.find_section('B', child);
if (rs != NULL) if (rs != nullptr)
rs->update_recordset_parent(); rs->update_recordset_parent();
else else
break; break;
@ -863,24 +861,23 @@ bool TReport_section::set_recordset(TRecordset* rs)
{ {
if (type() == 'B') if (type() == 'B')
{ {
if (_recordset != NULL) safe_delete(_recordset);
delete _recordset;
_recordset = rs; _recordset = rs;
update_recordset_parent(); update_recordset_parent();
} }
return _recordset != NULL; return _recordset != nullptr;
} }
bool TReport_section::set_recordset(const TString& sql) bool TReport_section::set_recordset(const TString& sql)
{ {
TRecordset* rex = create_recordset(sql); TRecordset* rex = create_recordset(sql);
set_recordset(rex); set_recordset(rex);
return rex != NULL; return rex != nullptr;
} }
bool TReport_section::get_record_field(const char* name, TVariant& var) const bool TReport_section::get_record_field(const char* name, TVariant& var) const
{ {
if (_recordset != NULL) if (_recordset != nullptr)
{ {
var = _recordset->get(name); var = _recordset->get(name);
if (!var.is_null()) if (!var.is_null())
@ -888,7 +885,7 @@ bool TReport_section::get_record_field(const char* name, TVariant& var) const
if (level() > 100) if (level() > 100)
{ {
const TReport_section* sec = _report.find_section('B', level()/10); const TReport_section* sec = _report.find_section('B', level()/10);
if (sec != NULL) // Should ALWAYS exist if (sec != nullptr) // Should ALWAYS exist
return sec->get_record_field(name, var); return sec->get_record_field(name, var);
} }
} }
@ -900,7 +897,7 @@ TReport_section::TReport_section(TReport& r, char t, int l)
_size(0,0), _page_break(false), _hidden_if_needed(false), _size(0,0), _page_break(false), _hidden_if_needed(false),
_can_break(false), _keep_with_next(false), _can_break(false), _keep_with_next(false),
_repeat(false), _hidden(false), _deactivated(false), _repeat(false), _hidden(false), _deactivated(false),
_font(NULL), _print_font(NULL), _recordset(NULL), _font(nullptr), _print_font(nullptr), _recordset(nullptr),
_bgcolor(COLOR_WHITE), _fgcolor(COLOR_BLACK), _shcolor(COLOR_GRAY), _pattern(PAT_HOLLOW), _bgcolor(COLOR_WHITE), _fgcolor(COLOR_BLACK), _shcolor(COLOR_GRAY), _pattern(PAT_HOLLOW),
_border(0), _radius(0), _shade_angle(0) _border(0), _radius(0), _shade_angle(0)
{ } { }
@ -1017,7 +1014,7 @@ void TReport_script::copy(const TReport_script& rs)
bool TReport_script::compile(TReport& rep) bool TReport_script::compile(TReport& rep)
{ {
if (_bc == NULL) if (_bc == nullptr)
_bc = new TBytecode; _bc = new TBytecode;
bool good = true; bool good = true;
@ -1035,7 +1032,7 @@ bool TReport_script::execute(TReport& rep)
bool good = true; bool good = true;
if (ok()) if (ok())
{ {
if (_bc == NULL) if (_bc == nullptr)
good = compile(rep); good = compile(rep);
if (good) if (good)
good = rep.execute(*_bc); good = rep.execute(*_bc);
@ -1057,11 +1054,7 @@ bool TReport_script::execute(TReport_field& rf)
void TReport_script::destroy() void TReport_script::destroy()
{ {
if (_bc != NULL) safe_delete(_bc);
{
delete _bc;
_bc = NULL;
}
_src.cut(0); _src.cut(0);
} }
@ -1089,7 +1082,7 @@ bool TReport_script::load(const TXmlItem& root, const char* tag)
return ok(); return ok();
} }
TReport_script::TReport_script() : _bc(NULL) TReport_script::TReport_script() : _bc(nullptr)
{ } { }
TReport_script::~TReport_script() TReport_script::~TReport_script()
@ -1128,7 +1121,7 @@ TReport_field* TReport_field::next() const
for (int i = sec.last()-1; i >= 0; i--) for (int i = sec.last()-1; i >= 0; i--)
if (sec.objptr(i) == this) if (sec.objptr(i) == this)
return (TReport_field*)sec.objptr(i+1); return (TReport_field*)sec.objptr(i+1);
return NULL; return nullptr;
} }
TReport_field* TReport_field::prev() const TReport_field* TReport_field::prev() const
@ -1137,7 +1130,7 @@ TReport_field* TReport_field::prev() const
for (int i = sec.last(); i > 0; i--) for (int i = sec.last(); i > 0; i--)
if (sec.objptr(i) == this) if (sec.objptr(i) == this)
return (TReport_field*)sec.objptr(i-1); return (TReport_field*)sec.objptr(i-1);
return NULL; return nullptr;
} }
void TReport_field::set_pos(long x, long y) void TReport_field::set_pos(long x, long y)
@ -1164,6 +1157,11 @@ void TReport_field::set_draw_pos(long x, long y)
_draw_rct.y = y; _draw_rct.y = y;
} }
void TReport_field::set_draw_height(long h)
{
_draw_rct.set_height(h);
}
void TReport_field::set_draw_size(long w, long h) void TReport_field::set_draw_size(long w, long h)
{ {
_draw_rct.set_width(w); _draw_rct.set_width(w);
@ -1172,7 +1170,7 @@ void TReport_field::set_draw_size(long w, long h)
void TReport_field::set_dynamic_height(bool dh) void TReport_field::set_dynamic_height(bool dh)
{ {
_dynamic_height = dh && _type == 'S' && _rct.height() > 0; _dynamic_height = dh && (_type == 'S' || _type == 'L') && _rct.height() > 0;
} }
bool TReport_field::dynamic_height() const bool TReport_field::dynamic_height() const
@ -1186,14 +1184,14 @@ const TReport_rct& TReport_field::get_draw_rect() const
const TReport_font& TReport_field::font() const const TReport_font& TReport_field::font() const
{ {
return _font != NULL ? *_font : _section->font(); return _font != nullptr ? *_font : _section->font();
} }
const TReport_font& TReport_field::print_font() const const TReport_font& TReport_field::print_font() const
{ {
if (_print_font != NULL) if (_print_font != nullptr)
return *_print_font; return *_print_font;
if (_font != NULL) if (_font != nullptr)
return *_font; return *_font;
return _section->print_font(); return _section->print_font();
} }
@ -1202,7 +1200,7 @@ void TReport_field::compute_print_font(const TReport_font& oldfont, const TRepor
{ {
if (has_font()) if (has_font())
{ {
if (_print_font == NULL) if (_print_font == nullptr)
_print_font = new TReport_font(font()); _print_font = new TReport_font(font());
else else
*_print_font = font(); *_print_font = font();
@ -1212,20 +1210,16 @@ void TReport_field::compute_print_font(const TReport_font& oldfont, const TRepor
void TReport_field::set_font(const TReport_font& f) void TReport_field::set_font(const TReport_font& f)
{ {
if (_font != NULL) safe_delete(_font);
{ if (_section == nullptr || f != font())
delete _font;
_font = NULL;
}
if (_section == NULL || f != font())
_font = new TReport_font(f); _font = new TReport_font(f);
} }
void TReport_field::unmap_font() void TReport_field::unmap_font()
{ {
if (_font != NULL) if (_font != nullptr)
_font->unmap(); _font->unmap();
if (_print_font != NULL) if (_print_font != nullptr)
_print_font->unmap(); _print_font->unmap();
} }
@ -1278,7 +1272,7 @@ void TReport_field::copy(const TReport_field& rf)
_groups = rf._groups; _groups = rf._groups;
_modules = rf._modules; _modules = rf._modules;
_list = rf._list; _list = rf._list;
if (rf._font != NULL) if (rf._font != nullptr)
set_font(*rf._font); set_font(*rf._font);
_draw_hidden = _draw_deactivated = false; _draw_hidden = _draw_deactivated = false;
_selected = false; _selected = false;
@ -1375,7 +1369,7 @@ bool TReport_field::execute_prescript()
if (ok && type() == 'A') if (ok && type() == 'A')
{ {
TReport_array_item* item = get_array_item(); TReport_array_item* item = get_array_item();
if (item != NULL) if (item != nullptr)
ok = item->_script.execute(*this); ok = item->_script.execute(*this);
} }
} }
@ -1418,12 +1412,12 @@ TReport_array_item* TReport_field::get_array_item() const
} }
return (TReport_array_item*)_list.objptr(i); return (TReport_array_item*)_list.objptr(i);
} }
return NULL; return nullptr;
} }
bool TReport_field::zeroes_hidden() const bool TReport_field::zeroes_hidden() const
{ {
return _hide_zeroes && strchr("DNVP", _type) != NULL; return _hide_zeroes && strchr("DNVP", _type) != nullptr;
} }
const TString& TReport_field::formatted_text() const const TString& TReport_field::formatted_text() const
@ -1436,7 +1430,7 @@ const TString& TReport_field::formatted_text() const
case 'A': case 'A':
{ {
const TReport_array_item* item = get_array_item(); const TReport_array_item* item = get_array_item();
if (item != NULL) if (item != nullptr)
return item->_value; return item->_value;
return EMPTY_STRING; return EMPTY_STRING;
} }
@ -2021,13 +2015,13 @@ TReport_field::TReport_field(TReport_section* sec)
_shcolor(COLOR_GRAY), _pattern(PAT_HOLLOW), _shcolor(COLOR_GRAY), _pattern(PAT_HOLLOW),
_radius(0), _shadow_offset(0), _shade_angle(0), _radius(0), _shadow_offset(0), _shade_angle(0),
_border(0), _halign('L'), _valign('T'), _dynamic_height(false), _border(0), _halign('L'), _valign('T'), _dynamic_height(false),
_font(NULL), _print_font(NULL), _font(nullptr), _print_font(nullptr),
_hidden(false), _deactivated(false), _hide_zeroes(false), _selected(false), _hidden(false), _deactivated(false), _hide_zeroes(false), _selected(false),
_hidden_default(false), _draw_hidden(false), _draw_deactivated(false) _hidden_default(false), _draw_hidden(false), _draw_deactivated(false)
{ } { }
TReport_field::TReport_field(const TReport_field& rf) TReport_field::TReport_field(const TReport_field& rf)
: _section(NULL), _font(NULL), _print_font(NULL), _draw_hidden(false), : _section(nullptr), _font(nullptr), _print_font(nullptr), _draw_hidden(false),
_draw_deactivated(false) _draw_deactivated(false)
{ {
@ -2036,10 +2030,9 @@ TReport_field::TReport_field(const TReport_field& rf)
TReport_field::~TReport_field() TReport_field::~TReport_field()
{ {
if (_font != NULL) safe_delete(_font);
delete _font;
if (_print_font != NULL) safe_delete(_print_font);
delete _print_font;
} }
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -2160,32 +2153,32 @@ void TReport::load_printer_font()
void TReport::update_recordset_parent() void TReport::update_recordset_parent()
{ {
if (recordset() != NULL) if (recordset() != nullptr)
recordset()->set_parent(NULL); recordset()->set_parent(nullptr);
for (int i = find_max_level('B'); i > 0; i--) for (int i = find_max_level('B'); i > 0; i--)
section('B', i).update_recordset_parent(); section('B', i).update_recordset_parent();
} }
bool TReport::set_recordset(TRecordset* rs) bool TReport::set_recordset(TRecordset* rs)
{ {
if (_recordset != NULL && _recordset != rs) if (_recordset != rs)
delete _recordset; safe_delete(_recordset);
_recordset = rs; _recordset = rs;
update_recordset_parent(); update_recordset_parent();
return _recordset != NULL; return _recordset != nullptr;
} }
bool TReport::set_recordset(const TString& sql) bool TReport::set_recordset(const TString& sql)
{ {
TRecordset* rex = create_recordset(sql); TRecordset* rex = create_recordset(sql);
set_recordset(rex); set_recordset(rex);
return rex != NULL; return rex != nullptr;
} }
TReport_section& TReport::section(char type, int level) TReport_section& TReport::section(char type, int level)
{ {
TReport_section* sec = find_section(type, level); TReport_section* sec = find_section(type, level);
if (sec == NULL) if (sec == nullptr)
{ {
sec = new TReport_section(*this, type, level); sec = new TReport_section(*this, type, level);
TString8 key; build_section_key(type, level, key); TString8 key; build_section_key(type, level, key);
@ -2205,12 +2198,12 @@ int TReport::parse_field(const char* code, char& type, int& level, int& id) cons
if (isdigit(code[0]) || strncmp(code, "THIS", 4) == 0) // Niente sezione davanti if (isdigit(code[0]) || strncmp(code, "THIS", 4) == 0) // Niente sezione davanti
{ {
if (strchr(code, '.') != NULL) if (strchr(code, '.') != nullptr)
return 0; // Mi sono confuso con un campo su file, es: 34.CODART return 0; // Mi sono confuso con un campo su file, es: 34.CODART
id = atoi(code); id = atoi(code);
TReport_field* rf = curr_field(); TReport_field* rf = curr_field();
if (rf != NULL) if (rf != nullptr)
{ {
type = rf->section().type(); type = rf->section().type();
level = rf->section().level(); level = rf->section().level();
@ -2230,7 +2223,7 @@ int TReport::parse_field(const char* code, char& type, int& level, int& id) cons
TReport_section* sec = find_section(type, level); TReport_section* sec = find_section(type, level);
if (sec == NULL) if (sec == nullptr)
return 1; return 1;
const char* pdot = strchr(code, '.'); const char* pdot = strchr(code, '.');
const int dot = pdot ? int(pdot-code) : -1; const int dot = pdot ? int(pdot-code) : -1;
@ -2239,7 +2232,7 @@ int TReport::parse_field(const char* code, char& type, int& level, int& id) cons
id = atoi((const char*)code + dot + 1); id = atoi((const char*)code + dot + 1);
} }
return strchr(code, '@') != NULL ? 4 : 3; return strchr(code, '@') != nullptr ? 4 : 3;
} }
TReport_field* TReport::field(const char* code) TReport_field* TReport::field(const char* code)
@ -2248,13 +2241,13 @@ TReport_field* TReport::field(const char* code)
int level = -1, id = 0; int level = -1, id = 0;
const int k = parse_field(code, type, level, id); const int k = parse_field(code, type, level, id);
TReport_field* rf = NULL; TReport_field* rf = nullptr;
if (k == 3) if (k == 3)
{ {
if (id > 0) if (id > 0)
{ {
TReport_section* sec = find_section(type, level); TReport_section* sec = find_section(type, level);
if (sec != NULL) if (sec != nullptr)
rf = sec->find_field(id); rf = sec->find_field(id);
} }
else else
@ -2353,7 +2346,7 @@ bool TReport::load(const char* fname)
_page_merge = xml.GetBoolAttr("page_merge"); _page_merge = xml.GetBoolAttr("page_merge");
const TXmlItem* desc = xml.FindFirstChild("description"); const TXmlItem* desc = xml.FindFirstChild("description");
if (desc != NULL) if (desc != nullptr)
desc->GetEnclosedText(_description); desc->GetEnclosedText(_description);
_class = xml.GetAttr("class"); _class = xml.GetAttr("class");
@ -2361,13 +2354,13 @@ bool TReport::load(const char* fname)
// Carico la query principale PRIMA delle sezioni che potrebbero collegarvicisi // Carico la query principale PRIMA delle sezioni che potrebbero collegarvicisi
const TXmlItem* sql = xml.FindFirstChild("sql"); const TXmlItem* sql = xml.FindFirstChild("sql");
if (sql != NULL) if (sql != nullptr)
{ {
TString str; sql->GetEnclosedText(str); TString str; sql->GetEnclosedText(str);
set_recordset(str); set_recordset(str);
} }
if (xml.FindFirstChild("section") != NULL) if (xml.FindFirstChild("section") != nullptr)
load_sections(xml); load_sections(xml);
_include = xml.GetAttr("libraries"); _include = xml.GetAttr("libraries");
@ -2378,7 +2371,7 @@ bool TReport::load(const char* fname)
_params.destroy(); _params.destroy();
const TXmlItem* params = xml.FindFirstChild("parameters"); const TXmlItem* params = xml.FindFirstChild("parameters");
if (params != NULL) if (params != nullptr)
{ {
TToken_string tok, str; TToken_string tok, str;
for (int i = 0; i < params->GetChildren(); i++) for (int i = 0; i < params->GetChildren(); i++)
@ -2396,7 +2389,7 @@ bool TReport::load(const char* fname)
_allegati.destroy(); _allegati.destroy();
const TXmlItem* all = xml.FindFirstChild("allegates"); const TXmlItem* all = xml.FindFirstChild("allegates");
if (all != NULL) if (all != nullptr)
{ {
for (int i = 0; i < all->GetChildren(); i++) for (int i = 0; i < all->GetChildren(); i++)
{ {
@ -2419,7 +2412,7 @@ bool TReport::load(const char* fname)
bool TReport::save(const char* fname) const bool TReport::save(const char* fname) const
{ {
char name[_MAX_FNAME]; char name[_MAX_FNAME];
xvt_fsys_parse_pathname (fname, NULL, NULL, name, NULL, NULL); xvt_fsys_parse_pathname (fname, nullptr, nullptr, name, nullptr, nullptr);
bool ok = *name > ' '; bool ok = *name > ' ';
if (ok) if (ok)
{ {
@ -2452,7 +2445,7 @@ bool TReport::save(const char* fname) const
} }
} }
if (recordset() != NULL) if (recordset() != nullptr)
xml.AddChild("sql") << recordset()->query_text(); xml.AddChild("sql") << recordset()->query_text();
_prescript.save(xml, "prescript"); _prescript.save(xml, "prescript");
@ -2511,7 +2504,7 @@ void TReport::set_postscript(const char* src)
bool TReport::execute_dot(const TVariant& var) bool TReport::execute_dot(const TVariant& var)
{ {
if (_curr_field != NULL) if (_curr_field != nullptr)
{ {
_curr_field->set(var); _curr_field->set(var);
return true; return true;
@ -2556,7 +2549,7 @@ bool TReport::execute_prescript()
if (bAsk) if (bAsk)
{ {
// Script dei poverissimi: chiede le eventuali variabili // Script dei poverissimi: chiede le eventuali variabili
if (recordset() != NULL) if (recordset() != nullptr)
recordset()->ask_variables(false); recordset()->ask_variables(false);
} }
@ -2623,8 +2616,15 @@ bool TReport::get_report_field(const TString& name, TVariant& var) const
} }
TReport_field* fld = ((TReport*)this)->field(str); TReport_field* fld = ((TReport*)this)->field(str);
if (fld != NULL) if (fld != nullptr)
{ {
if (fld->type() == 'A')
{
TReport_array_item * i = fld->get_array_item();
var = i != nullptr ? i->_value : fld->get();
}
else
var = fld->get(); var = fld->get();
return true; return true;
} }
@ -2663,10 +2663,10 @@ bool TReport::get_report_field(const TString& name, TVariant& var) const
bool TReport::get_record_field(const TString& name, TVariant& var) const bool TReport::get_record_field(const TString& name, TVariant& var) const
{ {
bool found = false; bool found = false;
if (recordset() != NULL) if (recordset() != nullptr)
{ {
// Cerco il campo nel recordset della eventuale sottosezione di appartenenza // Cerco il campo nel recordset della eventuale sottosezione di appartenenza
if (_curr_field != NULL) if (_curr_field != nullptr)
found = _curr_field->section().get_record_field(name, var); found = _curr_field->section().get_record_field(name, var);
// Se non lo trovo, allora lo cerco nel recordset principale // Se non lo trovo, allora lo cerco nel recordset principale
@ -2731,7 +2731,7 @@ bool TReport::set_usr_val(const TString& name, const TVariant& var)
case 3: // E' un campo singolo case 3: // E' un campo singolo
{ {
TReport_field* rf = id <= 0 ? curr_field() : section(type, level).find_field(id); TReport_field* rf = id <= 0 ? curr_field() : section(type, level).find_field(id);
if (rf != NULL) if (rf != nullptr)
{ {
rf->set(var); rf->set(var);
ok = true; ok = true;
@ -2772,10 +2772,10 @@ size_t TReport::get_usr_words(TString_array& words) const
"GET_POS", "GET_SIZE", "HIDE", "ISAM_READ", "GET_POS", "GET_SIZE", "HIDE", "ISAM_READ",
"RUN_FORM", "SET_BACK_COLOR", "SET_FORE_COLOR", "RUN_FORM", "SET_BACK_COLOR", "SET_FORE_COLOR",
"SET_POS", "SET_SIZE", "SET_TEXT_COLOR", "SHOW", "TABLE_READ", "GET_FIRM_DATA", "SET_POS", "SET_SIZE", "SET_TEXT_COLOR", "SHOW", "TABLE_READ", "GET_FIRM_DATA",
"EVALUATE", "GOLEM", "LOGO", NULL "EVALUATE", "GOLEM", "LOGO", nullptr
}; };
size_t i; size_t i;
for (i = 0; name[i] != NULL; i++) for (i = 0; name[i] != nullptr; i++)
words.add(name[i]); words.add(name[i]);
return i; return i;
} }
@ -2785,17 +2785,17 @@ size_t TReport::add_usr_words(TString_array& words, const char* const names[]) c
TReport::get_usr_words(words); TReport::get_usr_words(words);
const int first_msg = words.items(); // Calcola il primo numero disponibile const int first_msg = words.items(); // Calcola il primo numero disponibile
for (size_t i = 0; names[i] != NULL; i++) for (size_t i = 0; names[i] != nullptr; i++)
words.add(names[i]); words.add(names[i]);
return first_msg; return first_msg;
} }
static void do_show(TReport_field& rf, void* jolly) static void do_show(TReport_field& rf, void* jolly)
{ rf.set_draw_hidden(jolly == NULL); } { rf.set_draw_hidden(jolly == nullptr); }
static void do_enable(TReport_field& rf, void* jolly) static void do_enable(TReport_field& rf, void* jolly)
{ rf.set_draw_deactivated(jolly == NULL); } { rf.set_draw_deactivated(jolly == nullptr); }
static void do_set_pos(TReport_field& rf, void* jolly) static void do_set_pos(TReport_field& rf, void* jolly)
{ {
@ -2842,7 +2842,7 @@ bool TReport::do_message(const TVariant& var, FLDMSG_FUNC msg, void* jolly)
case 3: // E' un campo singolo case 3: // E' un campo singolo
{ {
TReport_field* rf = id <= 0 ? curr_field() : section(type, level).find_field(id); TReport_field* rf = id <= 0 ? curr_field() : section(type, level).find_field(id);
if (rf != NULL) if (rf != nullptr)
msg(*rf, jolly); msg(*rf, jolly);
} }
break; break;
@ -2873,7 +2873,7 @@ void TReport::report2mask(TMask & m) const
{ {
TMask_field& f = m.fld(i); TMask_field& f = m.fld(i);
const TFieldref* ref = f.field(); const TFieldref* ref = f.field();
if (ref != NULL) if (ref != nullptr)
{ {
const bool is_final = f.in_group(2); const bool is_final = f.in_group(2);
name = ref->name(); name = ref->name();
@ -2957,7 +2957,7 @@ void TReport::mask2report(const TMask & m)
TMask_field& f = m.fld(i); TMask_field& f = m.fld(i);
const TFieldref* ref = f.field(); const TFieldref* ref = f.field();
if (ref != NULL) if (ref != nullptr)
{ {
const bool is_final = f.in_group(2); const bool is_final = f.in_group(2);
name = ref->name(); name = ref->name();
@ -3408,6 +3408,17 @@ void TReport::msg_firm(TVariant_stack& stack)
<< anag.get(is_fisc ? ANA_CIVRF : ANA_CIVRES) << " " << anag.get(is_fisc ? ANA_CIVRF : ANA_CIVRES) << " "
<< comune.get(COM_DENCOM) << " (" << comune.get(COM_PROVCOM) << ")"; << comune.get(COM_DENCOM) << " (" << comune.get(COM_PROVCOM) << ")";
cf.set(intest); cf.set(intest);
return;
}
if (in == "INDIR")
{
TString indir;
indir << anag.get(is_fisc ? ANA_INDRF : ANA_INDRES) << " "
<< anag.get(is_fisc ? ANA_CIVRF : ANA_CIVRES) << " "
<< anag.get(is_fisc ? ANA_CAPRF : ANA_CAPRES) << " "
<< comune.get(COM_DENCOM) << " (" << comune.get(COM_PROVCOM) << ")";
cf.set(indir);
} }
} }

View File

@ -383,9 +383,9 @@ protected:
void copy(const TReport_field& rf); void copy(const TReport_field& rf);
TFieldtypes var_type() const; TFieldtypes var_type() const;
void get_currency(TCurrency& cur) const; void get_currency(TCurrency& cur) const;
TReport_array_item* get_array_item() const;
public: public:
TReport_array_item* get_array_item() const;
virtual TObject* dup() const { return new TReport_field(*this); } virtual TObject* dup() const { return new TReport_field(*this); }
TReport_field& operator=(const TReport_field& rf) { copy(rf); return *this; } TReport_field& operator=(const TReport_field& rf) { copy(rf); return *this; }
@ -470,6 +470,7 @@ public:
void set_draw_deactivated(bool d) { _draw_deactivated = d; } void set_draw_deactivated(bool d) { _draw_deactivated = d; }
void set_draw_pos(long x, long y); void set_draw_pos(long x, long y);
void set_draw_height(long y);
void set_draw_size(long x, long y); void set_draw_size(long x, long y);
void set_image_resize_type(const char * image_resize_type) { _image_resize_type = image_resize_type; } void set_image_resize_type(const char * image_resize_type) { _image_resize_type = image_resize_type; }
@ -730,7 +731,7 @@ public:
bool export_text(const char * filename, int size = 0, bool signature = false); bool export_text(const char * filename, int size = 0, bool signature = false);
TReport(); TReport();
TReport(const char * name) { load(name); } TReport(const char * name) : _recordset(nullptr), _curr_field(nullptr) { load(name); }
virtual ~TReport(); virtual ~TReport();
}; };

View File

@ -2028,15 +2028,17 @@ bool TBook::export_excel(TFilename& fname, bool signature, bool goto_url, bool a
while (!ifs.eof()) while (!ifs.eof())
{ {
ifs.getline(str.get_buffer(), str.size());
if (str == "</text>") if (str == "</text>")
break; break;
ifs.getline(str.get_buffer(), str.size());
if (do_export && str.full()) if (do_export && str.full())
{ {
int idx, pos; int idx, pos;
if (tab.find_column(col, wid, idx, pos)) if (tab.find_column(col, wid, idx, pos, true))
{ {
TToken_string* line = (TToken_string*)page.objptr(row); TToken_string* line = (TToken_string*)page.objptr(row);
TString field;
if (line == NULL) if (line == NULL)
{ {
line = new TToken_string(256,sep); line = new TToken_string(256,sep);
@ -2049,7 +2051,24 @@ bool TBook::export_excel(TFilename& fname, bool signature, bool goto_url, bool a
str << '"' << s << '"'; str << '"' << s << '"';
} }
line->add(str, idx);// come mai ?? pos); field << str;
while (str != "</text>" && !ifs.eof())
{
ifs.getline(str.get_buffer(), str.size());
if (str == "</text>")
{
line->add(field, idx);// come mai ?? pos);
break;
}
reformat_excel(str);
if (str.find(sep) >= 0)
{
const TString s = str;
str << '"' << s << '"';
}
field << str;
}
} }
} }
} }
@ -2678,7 +2697,7 @@ bool TReport_book::open_page()
if (height > 0) if (height > 0)
{ {
_delta.y += height; _delta.y += height;
if (_delta.y >= _logical_foot_pos) // Copertina enorme? if (_delta.y > _logical_foot_pos) // Copertina enorme? perchè uguale ? >=
{ {
close_page(); close_page();
return open_page(); return open_page();
@ -2687,7 +2706,7 @@ bool TReport_book::open_page()
} }
TReport_section* page_head = _report->find_section('H', 0); TReport_section* page_head = _report->find_section('H', 0);
if (page_head != NULL && (_rep_page > 1 || !page_head->hidden_if_needed())) if (page_head != nullptr && (_rep_page > 1 || !page_head->hidden_if_needed()))
{ {
const TReport_pnt& pos = page_head->pos(); const TReport_pnt& pos = page_head->pos();
_delta.x += pos.x; _delta.y += pos.y; _delta.x += pos.x; _delta.y += pos.y;
@ -2799,6 +2818,17 @@ long TReport_book::print_section(TReport_section& rs)
if (height > 0) // Has some visible fields if (height > 0) // Has some visible fields
{ {
for (int i = 0; i < rs.items(); i++)
{
TReport_field& f = rs.field(i);
if (f.type() == 'L' && f.dynamic_height())
{
f.set_height(height);
f.set_draw_height(height);
}
}
long reprint_from = 0; // Posizione di stampa per sezione interrotte a meta' long reprint_from = 0; // Posizione di stampa per sezione interrotte a meta'
bool page_break = false; bool page_break = false;
@ -2833,7 +2863,7 @@ long TReport_book::print_section(TReport_section& rs)
page_break = h > space_left; // Controlla se e' sufficiente page_break = h > space_left; // Controlla se e' sufficiente
// Controllo se la sezione puo' essere stampata su due pagine // Controllo se la sezione puo' essere stampata su due pagine
if (page_break && space_left > 100 && rs.can_be_broken()) if (page_break && space_left >= 100 && rs.can_be_broken()) // anche =
{ {
reprint_from = space_left; reprint_from = space_left;
rs.print_clipped(*this, 0, reprint_from); rs.print_clipped(*this, 0, reprint_from);
@ -2912,18 +2942,22 @@ bool TReport_book::init(TReport& rep)
const TSize res = page_res(); const TSize res = page_res();
const double pollici_pagina_y = (double)siz.y / (double)res.y; const double pollici_pagina_y = (double)siz.y / (double)res.y;
const double righe_pagina = pollici_pagina_y * lpi(); const int righe_pagina = pollici_pagina_y * lpi();
_logical_page_height = long(righe_pagina*100.0);
_logical_page_height = long(righe_pagina*100);
const double pollici_pagina_x = (double)siz.x / (double)res.x; const double pollici_pagina_x = (double)siz.x / (double)res.x;
const double colonne_pagina = pollici_pagina_x * cpi(); const double colonne_pagina = pollici_pagina_x * cpi();
_logical_page_width = long(colonne_pagina*100.0);
_logical_page_width = long(colonne_pagina*100);
const TReport_section& footer = _report->section('F', 0); const TReport_section& footer = _report->section('F', 0);
_logical_foot_pos = footer.pos().y; _logical_foot_pos = footer.pos().y;
if (_logical_foot_pos <= 0) if (_logical_foot_pos <= 0)
{ {
const long logical_footer_height = footer.compute_size().y; const long logical_footer_height = footer.compute_size().y;
_logical_foot_pos = _logical_page_height - logical_footer_height; _logical_foot_pos = _logical_page_height - logical_footer_height;
} }
@ -3030,12 +3064,13 @@ bool TReport_book::add(TReport& rep, export_type type, bool progind)
if (!init(rep)) if (!init(rep))
return false; return false;
_report->reset_export_sections();
_report->set_export_sections(type); _report->set_export_sections(type);
if (!_report->execute_prescript()) if (!_report->execute_prescript())
return false; return false;
TRecordset* rex = _report->recordset(); TRecordset* rex = _report->recordset();
if (rex == NULL) if (rex == nullptr)
return true; return true;
rex->requery(); rex->requery();
@ -3165,7 +3200,7 @@ bool TReport_book::add(TReport& rep, export_type type, bool progind)
const int fy = fl->pos().y; const int fy = fl->pos().y;
if (fy > 0) // Ha una coordinata y imposta if (fy > 0) // Ha una coordinata y imposta
{ {
if (fy < _delta.y) // Sono gia' andato oltre quindi salto pagina if (fy < _delta.y) // Sono gia' andato oltre quindi salto pagina sec
{ {
close_page(); close_page();
open_page(); open_page();