Patch level : 2.1 48
Files correlati : librerie Ricompilazione Demo : [ ] Commento : Correzioni per stampa report git-svn-id: svn://10.65.10.50/trunk@12103 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
bc64de7745
commit
4cde8ad2b2
@ -770,19 +770,14 @@ bool TAVM::do_include(const char* fname)
|
|||||||
// Mette sullo stack il valore della variabile name
|
// Mette sullo stack il valore della variabile name
|
||||||
void TAVM::do_fetch(const TString& name)
|
void TAVM::do_fetch(const TString& name)
|
||||||
{
|
{
|
||||||
if (name[0] == '#')
|
const TVariant* var = name[0] != '#' ? (const TVariant*)_vars.objptr(name) : NULL;
|
||||||
|
if (var != NULL)
|
||||||
|
_stack.push(*var);
|
||||||
|
else
|
||||||
{
|
{
|
||||||
TVariant var;
|
TVariant var;
|
||||||
_vm->get_usr_val(name, var);
|
_vm->get_usr_val(name, var);
|
||||||
_stack.push(var);
|
_stack.push(var);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
const TVariant* var = (const TVariant*)_vars.objptr(name);
|
|
||||||
if (var != NULL)
|
|
||||||
_stack.push(*var);
|
|
||||||
else
|
|
||||||
_stack.push(NULL_VARIANT);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -797,14 +792,11 @@ void TAVM::do_add()
|
|||||||
void TAVM::do_store(const TString& name)
|
void TAVM::do_store(const TString& name)
|
||||||
{
|
{
|
||||||
const TVariant& var = _stack.pop();
|
const TVariant& var = _stack.pop();
|
||||||
if (name[0] == '#')
|
TVariant* v = name[0] != '#' ? (TVariant*)_vars.objptr(name) : NULL;
|
||||||
_vm->set_usr_val(name, var);
|
if (v != NULL)
|
||||||
|
*v = var;
|
||||||
else
|
else
|
||||||
{
|
_vm->set_usr_val(name, var);
|
||||||
TVariant* v = (TVariant*)_vars.objptr(name);
|
|
||||||
if (v != NULL)
|
|
||||||
*v = var;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TAVM::defined(const char* name)
|
bool TAVM::defined(const char* name)
|
||||||
@ -971,6 +963,7 @@ void TAVM::execute(const TAVM_op& op)
|
|||||||
{
|
{
|
||||||
const TString name = _stack.pop().as_string();
|
const TString name = _stack.pop().as_string();
|
||||||
do_fetch(name);
|
do_fetch(name);
|
||||||
|
_stack.roll(1);
|
||||||
do_add();
|
do_add();
|
||||||
do_store(name);
|
do_store(name);
|
||||||
}
|
}
|
||||||
|
@ -143,13 +143,13 @@ HIDDEN TPicture_array* _picture = NULL;
|
|||||||
HIDDEN XVT_FNTID DEF_FONT = NULL;
|
HIDDEN XVT_FNTID DEF_FONT = NULL;
|
||||||
HIDDEN XVT_FNTID FAT_FONT = NULL;
|
HIDDEN XVT_FNTID FAT_FONT = NULL;
|
||||||
|
|
||||||
bool has_font(const char * nome_font)
|
bool is_xvt_font(const char * nome_font)
|
||||||
{
|
{
|
||||||
const int max_fonts = 1024;
|
const int max_fonts = 1024;
|
||||||
char * fonts[max_fonts];
|
char * fonts[max_fonts];
|
||||||
const int num_fonts = xvt_fmap_get_families(NULL, fonts, max_fonts);
|
const int num_fonts = xvt_fmap_get_families(NULL, fonts, max_fonts);
|
||||||
bool found = false;
|
bool found = false;
|
||||||
for (int i = 0; i < num_fonts; i++)
|
for (int i = num_fonts-1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
if (!found && xvt_str_compare_ignoring_case(fonts[i], nome_font) == 0)
|
if (!found && xvt_str_compare_ignoring_case(fonts[i], nome_font) == 0)
|
||||||
found = true;
|
found = true;
|
||||||
@ -170,7 +170,7 @@ XVT_FNTID xvt_default_font(bool bold)
|
|||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
{
|
{
|
||||||
const char* name = "Courier";
|
const char* name = "Courier";
|
||||||
if (has_font("Verdana"))
|
if (is_xvt_font("Verdana"))
|
||||||
name = "Verdana";
|
name = "Verdana";
|
||||||
font_ser_desc.format("01\\%s\\0\\10\\WIN01/-13/0/0/0/400/0/0/0/0/1/2/1/49/%s", name, name);
|
font_ser_desc.format("01\\%s\\0\\10\\WIN01/-13/0/0/0/400/0/0/0/0/1/2/1/49/%s", name, name);
|
||||||
}
|
}
|
||||||
|
@ -57,7 +57,7 @@ PRINT_RCD* TPrinter_setup_mask::get_print_rcd(int& size) const
|
|||||||
|
|
||||||
void TPrinter_setup_mask::fill_font_list()
|
void TPrinter_setup_mask::fill_font_list()
|
||||||
{
|
{
|
||||||
const int MAX_FAMILIES = 128;
|
const int MAX_FAMILIES = 256;
|
||||||
char* family[MAX_FAMILIES];
|
char* family[MAX_FAMILIES];
|
||||||
const int num_families = (int)xvt_fmap_get_families(_pcd, family, MAX_FAMILIES);
|
const int num_families = (int)xvt_fmap_get_families(_pcd, family, MAX_FAMILIES);
|
||||||
|
|
||||||
|
@ -749,10 +749,10 @@ TString& TReport_script::translate_message(TReport& rep) const
|
|||||||
TString& src = get_tmp_string();
|
TString& src = get_tmp_string();
|
||||||
if (!empty_alex.blank())
|
if (!empty_alex.blank())
|
||||||
{
|
{
|
||||||
src = "#THIS @ IF\n";
|
src = "#THIS @ EMPTY= IF\n";
|
||||||
src << alex;
|
|
||||||
src << "\nELSE\n";
|
|
||||||
src << empty_alex;
|
src << empty_alex;
|
||||||
|
src << "\nELSE\n";
|
||||||
|
src << alex;
|
||||||
src << "\nTHEN";
|
src << "\nTHEN";
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@ -854,6 +854,16 @@ TReport_script::TReport_script() : _bc(NULL)
|
|||||||
TReport_script::~TReport_script()
|
TReport_script::~TReport_script()
|
||||||
{ destroy(); }
|
{ destroy(); }
|
||||||
|
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
// TReport_array_item
|
||||||
|
///////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
struct TReport_array_item : public TObject
|
||||||
|
{
|
||||||
|
TString _code, _value;
|
||||||
|
TReport_script _script;
|
||||||
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// TReport_field
|
// TReport_field
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
@ -1081,6 +1091,12 @@ bool TReport_field::execute_prescript()
|
|||||||
if (!draw_deactivated())
|
if (!draw_deactivated())
|
||||||
{
|
{
|
||||||
ok = _prescript.execute(*this);
|
ok = _prescript.execute(*this);
|
||||||
|
if (ok && type() == 'A')
|
||||||
|
{
|
||||||
|
TReport_array_item* item = get_array_item();
|
||||||
|
if (item != NULL)
|
||||||
|
ok = item->_script.execute(*this);
|
||||||
|
}
|
||||||
compute_draw_rect();
|
compute_draw_rect();
|
||||||
}
|
}
|
||||||
return ok;
|
return ok;
|
||||||
@ -1168,28 +1184,36 @@ void TReport_field::get_currency(TCurrency& cur) const
|
|||||||
cur.set_num(_var.as_real());
|
cur.set_num(_var.as_real());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TReport_array_item* TReport_field::get_array_item() const
|
||||||
|
{
|
||||||
|
if (type() == 'A')
|
||||||
|
{
|
||||||
|
const TString& val = _var.as_string();
|
||||||
|
int i = 0;
|
||||||
|
for (i = _list.last(); i > 0; i--)
|
||||||
|
{
|
||||||
|
const TReport_array_item& item = (const TReport_array_item&)_list[i];
|
||||||
|
if (val == item._code)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return (TReport_array_item*)_list.objptr(i);
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
const TString& TReport_field::formatted_text() const
|
const TString& TReport_field::formatted_text() const
|
||||||
{
|
{
|
||||||
if (_hide_zeroes && _var.is_zero())
|
if (_hide_zeroes && _var.is_zero())
|
||||||
return EMPTY_STRING;
|
return EMPTY_STRING;
|
||||||
|
|
||||||
switch (_type)
|
switch (type())
|
||||||
{
|
{
|
||||||
case 'A':
|
case 'A':
|
||||||
{
|
{
|
||||||
const TString& val = _var.as_string();
|
const TReport_array_item* item = get_array_item();
|
||||||
TString_array list; get_list(list);
|
if (item != NULL)
|
||||||
int i;
|
return item->_value;
|
||||||
for (i = list.last(); i > 0; i--)
|
return EMPTY_STRING;
|
||||||
if (val == list.row(i).get(0))
|
|
||||||
break;
|
|
||||||
if (i >= 0)
|
|
||||||
{
|
|
||||||
TString& fmt = get_tmp_string();
|
|
||||||
TToken_string& tok = list.row(i);
|
|
||||||
tok.get(1, fmt);
|
|
||||||
return fmt;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 'D':
|
case 'D':
|
||||||
@ -1227,7 +1251,8 @@ const TString& TReport_field::formatted_text() const
|
|||||||
{
|
{
|
||||||
TCurrency cur; get_currency(cur);
|
TCurrency cur; get_currency(cur);
|
||||||
TString& tmp = get_tmp_string();
|
TString& tmp = get_tmp_string();
|
||||||
tmp = cur.string(true);
|
const bool dotted = _picture.find('.' > 0);
|
||||||
|
tmp = cur.string(dotted);
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -1437,18 +1462,19 @@ void TReport_field::save(TXmlItem& root) const
|
|||||||
|
|
||||||
if (_type == 'A')
|
if (_type == 'A')
|
||||||
{
|
{
|
||||||
TString_array arr; get_list(arr);
|
|
||||||
TXmlItem& list = fld.AddChild("list");
|
TXmlItem& list = fld.AddChild("list");
|
||||||
FOR_EACH_ARRAY_ROW(arr, i, row)
|
FOR_EACH_ARRAY_ITEM(_list, i, obj)
|
||||||
{
|
{
|
||||||
|
const TReport_array_item& item = *(const TReport_array_item*)obj;
|
||||||
TXmlItem& li = list.AddChild("li");
|
TXmlItem& li = list.AddChild("li");
|
||||||
li.SetAttr("Code", row->get(0));
|
li.SetAttr("Code", item._code);
|
||||||
li << row->get();
|
li.SetAttr("Value", item._value);
|
||||||
|
if (item._script.ok())
|
||||||
|
li << item._script.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
bool TReport_field::load(const TXmlItem& fld)
|
bool TReport_field::load(const TXmlItem& fld)
|
||||||
{
|
{
|
||||||
const TString& t = fld.GetAttr("type");
|
const TString& t = fld.GetAttr("type");
|
||||||
@ -1478,28 +1504,30 @@ bool TReport_field::load(const TXmlItem& fld)
|
|||||||
if (font.load(fld))
|
if (font.load(fld))
|
||||||
set_font(font);
|
set_font(font);
|
||||||
|
|
||||||
TXmlItem* grp = fld.FindFirstChild("groups");
|
TXmlItem* grp = fld.FindFirstChild("groups");
|
||||||
if (grp != NULL)
|
if (grp != NULL)
|
||||||
{
|
{
|
||||||
TString str; grp->GetEnclosedText(str);
|
TString str; grp->GetEnclosedText(str);
|
||||||
set_groups(str);
|
set_groups(str);
|
||||||
}
|
}
|
||||||
|
|
||||||
_prescript.load(fld, "prescript");
|
_prescript.load(fld, "prescript");
|
||||||
_postscript.load(fld, "postscript");
|
_postscript.load(fld, "postscript");
|
||||||
|
|
||||||
_list.cut(0);
|
_list.destroy();
|
||||||
if (_type == 'A')
|
if (_type == 'A')
|
||||||
{
|
{
|
||||||
TXmlItem* list = fld.FindFirstChild("list");
|
TXmlItem* list = fld.FindFirstChild("list");
|
||||||
TToken_string tok;
|
|
||||||
TString str;
|
TString str;
|
||||||
for (int i = 0; i < list->GetChildren(); i++)
|
for (int i = 0; i < list->GetChildren(); i++)
|
||||||
{
|
{
|
||||||
const TXmlItem* li = list->GetChild(i);
|
const TXmlItem* li = list->GetChild(i);
|
||||||
tok = li->GetAttr("Code");
|
TReport_array_item* rai = new TReport_array_item;
|
||||||
tok.add(li->GetEnclosedText(str));
|
rai->_code = li->GetAttr("Code");
|
||||||
_list.add(tok);
|
rai->_value = li->GetAttr("Value");
|
||||||
|
li->GetEnclosedText(str);
|
||||||
|
rai->_script.set(str);
|
||||||
|
_list.add(rai);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1509,16 +1537,28 @@ bool TReport_field::load(const TXmlItem& fld)
|
|||||||
void TReport_field::get_list(TString_array& list) const
|
void TReport_field::get_list(TString_array& list) const
|
||||||
{
|
{
|
||||||
list.destroy();
|
list.destroy();
|
||||||
TToken_string& toklst = (TToken_string&)_list;
|
FOR_EACH_ARRAY_ITEM(_list, i, obj)
|
||||||
FOR_EACH_TOKEN(toklst, tok)
|
{
|
||||||
list.add(tok);
|
const TReport_array_item& rai = (const TReport_array_item&)_list[i];
|
||||||
|
TToken_string* row = new TToken_string(50, SAFE_PIPE_CHR);
|
||||||
|
row->add(rai._code, 0);
|
||||||
|
row->add(rai._value, 1);
|
||||||
|
row->add(rai._script.get(), 2);
|
||||||
|
list.add(row);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void TReport_field::set_list(const TString_array& list)
|
void TReport_field::set_list(const TString_array& list)
|
||||||
{
|
{
|
||||||
_list.cut(0);
|
_list.destroy();
|
||||||
FOR_EACH_ARRAY_ROW(list, i, row)
|
FOR_EACH_ARRAY_ROW(list, i, row)
|
||||||
_list.add(*row);
|
{
|
||||||
|
TReport_array_item* rai = new TReport_array_item;
|
||||||
|
rai->_code = row->get(0);
|
||||||
|
rai->_value = row->get();
|
||||||
|
rai->_script.set(row->get());
|
||||||
|
_list.add(rai);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int TReport_field::compare(const TSortable& s) const
|
int TReport_field::compare(const TSortable& s) const
|
||||||
@ -1539,12 +1579,8 @@ TReport_field::TReport_field(TReport_section* sec)
|
|||||||
: _section(sec), _id(0), _type('T'),
|
: _section(sec), _id(0), _type('T'),
|
||||||
_font(NULL), _halign('L'), _valign('T'),
|
_font(NULL), _halign('L'), _valign('T'),
|
||||||
_selected(false), _hidden(false), _deactivated(false), _hide_zeroes(false),
|
_selected(false), _hidden(false), _deactivated(false), _hide_zeroes(false),
|
||||||
_border(0), _fgcolor(COLOR_BLACK), _bgcolor(COLOR_WHITE), _list(32, '\n')
|
_border(0), _fgcolor(COLOR_BLACK), _bgcolor(COLOR_WHITE), _rct(0,0,1000,100)
|
||||||
{
|
{ }
|
||||||
set_pos(0,0);
|
|
||||||
set_size(1600,100);
|
|
||||||
_draw_rct = _rct;
|
|
||||||
}
|
|
||||||
|
|
||||||
TReport_field::TReport_field(const TReport_field& rf) : _font(NULL)
|
TReport_field::TReport_field(const TReport_field& rf) : _font(NULL)
|
||||||
{
|
{
|
||||||
@ -1890,7 +1926,8 @@ bool TReport::save(const char* fname) const
|
|||||||
xml.SetTag("report");
|
xml.SetTag("report");
|
||||||
xml.SetAttr("name", name);
|
xml.SetAttr("name", name);
|
||||||
xml.SetAttr("lpi", lpi());
|
xml.SetAttr("lpi", lpi());
|
||||||
xml.AddChild("description") << _description;
|
if (!_description.blank())
|
||||||
|
xml.AddChild("description") << _description;
|
||||||
xml.SetAttr("libraries", _include);
|
xml.SetAttr("libraries", _include);
|
||||||
_font.save(xml);
|
_font.save(xml);
|
||||||
|
|
||||||
|
@ -220,6 +220,8 @@ public:
|
|||||||
virtual ~TReport_section();
|
virtual ~TReport_section();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct TReport_array_item;
|
||||||
|
|
||||||
class TReport_field : public TSortable
|
class TReport_field : public TSortable
|
||||||
{
|
{
|
||||||
TReport_section* _section;
|
TReport_section* _section;
|
||||||
@ -234,7 +236,7 @@ class TReport_field : public TSortable
|
|||||||
TString _field, _alt_field;
|
TString _field, _alt_field;
|
||||||
TVariant _var;
|
TVariant _var;
|
||||||
TReport_script _prescript, _postscript;
|
TReport_script _prescript, _postscript;
|
||||||
TToken_string _list; // Elementi di un campo lista
|
TArray _list; // Elementi di un campo lista
|
||||||
|
|
||||||
TReport_font* _font;
|
TReport_font* _font;
|
||||||
bool _hidden, _deactivated, _hide_zeroes, _selected;
|
bool _hidden, _deactivated, _hide_zeroes, _selected;
|
||||||
@ -250,6 +252,7 @@ protected:
|
|||||||
const TString& formatted_text() const;
|
const TString& formatted_text() const;
|
||||||
void get_currency(TCurrency& cur) const;
|
void get_currency(TCurrency& cur) const;
|
||||||
void compute_draw_rect() const;
|
void compute_draw_rect() const;
|
||||||
|
TReport_array_item* get_array_item() const;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
virtual TObject* dup() const { return new TReport_field(*this); }
|
virtual TObject* dup() const { return new TReport_field(*this); }
|
||||||
|
@ -1355,6 +1355,9 @@ bool TFilename::input()
|
|||||||
|
|
||||||
bool TFilename::custom_path(const char* path_list)
|
bool TFilename::custom_path(const char* path_list)
|
||||||
{
|
{
|
||||||
|
if (blank()) // Inutile continuare!
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!is_absolute_path())
|
if (!is_absolute_path())
|
||||||
{
|
{
|
||||||
TToken_string pl = path_list;
|
TToken_string pl = path_list;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user