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
|
||||
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;
|
||||
_vm->get_usr_val(name, 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)
|
||||
{
|
||||
const TVariant& var = _stack.pop();
|
||||
if (name[0] == '#')
|
||||
_vm->set_usr_val(name, var);
|
||||
TVariant* v = name[0] != '#' ? (TVariant*)_vars.objptr(name) : NULL;
|
||||
if (v != NULL)
|
||||
*v = var;
|
||||
else
|
||||
{
|
||||
TVariant* v = (TVariant*)_vars.objptr(name);
|
||||
if (v != NULL)
|
||||
*v = var;
|
||||
}
|
||||
_vm->set_usr_val(name, var);
|
||||
}
|
||||
|
||||
bool TAVM::defined(const char* name)
|
||||
@ -971,6 +963,7 @@ void TAVM::execute(const TAVM_op& op)
|
||||
{
|
||||
const TString name = _stack.pop().as_string();
|
||||
do_fetch(name);
|
||||
_stack.roll(1);
|
||||
do_add();
|
||||
do_store(name);
|
||||
}
|
||||
|
@ -143,13 +143,13 @@ HIDDEN TPicture_array* _picture = NULL;
|
||||
HIDDEN XVT_FNTID DEF_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;
|
||||
char * fonts[max_fonts];
|
||||
const int num_fonts = xvt_fmap_get_families(NULL, fonts, max_fonts);
|
||||
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)
|
||||
found = true;
|
||||
@ -170,7 +170,7 @@ XVT_FNTID xvt_default_font(bool bold)
|
||||
#ifdef WIN32
|
||||
{
|
||||
const char* name = "Courier";
|
||||
if (has_font("Verdana"))
|
||||
if (is_xvt_font("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);
|
||||
}
|
||||
|
@ -57,7 +57,7 @@ PRINT_RCD* TPrinter_setup_mask::get_print_rcd(int& size) const
|
||||
|
||||
void TPrinter_setup_mask::fill_font_list()
|
||||
{
|
||||
const int MAX_FAMILIES = 128;
|
||||
const int MAX_FAMILIES = 256;
|
||||
char* 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();
|
||||
if (!empty_alex.blank())
|
||||
{
|
||||
src = "#THIS @ IF\n";
|
||||
src << alex;
|
||||
src << "\nELSE\n";
|
||||
src = "#THIS @ EMPTY= IF\n";
|
||||
src << empty_alex;
|
||||
src << "\nELSE\n";
|
||||
src << alex;
|
||||
src << "\nTHEN";
|
||||
}
|
||||
else
|
||||
@ -854,6 +854,16 @@ TReport_script::TReport_script() : _bc(NULL)
|
||||
TReport_script::~TReport_script()
|
||||
{ destroy(); }
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TReport_array_item
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
struct TReport_array_item : public TObject
|
||||
{
|
||||
TString _code, _value;
|
||||
TReport_script _script;
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TReport_field
|
||||
///////////////////////////////////////////////////////////
|
||||
@ -1081,6 +1091,12 @@ bool TReport_field::execute_prescript()
|
||||
if (!draw_deactivated())
|
||||
{
|
||||
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();
|
||||
}
|
||||
return ok;
|
||||
@ -1168,28 +1184,36 @@ void TReport_field::get_currency(TCurrency& cur) const
|
||||
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
|
||||
{
|
||||
if (_hide_zeroes && _var.is_zero())
|
||||
return EMPTY_STRING;
|
||||
|
||||
switch (_type)
|
||||
switch (type())
|
||||
{
|
||||
case 'A':
|
||||
{
|
||||
const TString& val = _var.as_string();
|
||||
TString_array list; get_list(list);
|
||||
int i;
|
||||
for (i = list.last(); i > 0; i--)
|
||||
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;
|
||||
}
|
||||
const TReport_array_item* item = get_array_item();
|
||||
if (item != NULL)
|
||||
return item->_value;
|
||||
return EMPTY_STRING;
|
||||
}
|
||||
break;
|
||||
case 'D':
|
||||
@ -1227,7 +1251,8 @@ const TString& TReport_field::formatted_text() const
|
||||
{
|
||||
TCurrency cur; get_currency(cur);
|
||||
TString& tmp = get_tmp_string();
|
||||
tmp = cur.string(true);
|
||||
const bool dotted = _picture.find('.' > 0);
|
||||
tmp = cur.string(dotted);
|
||||
return tmp;
|
||||
}
|
||||
break;
|
||||
@ -1437,18 +1462,19 @@ void TReport_field::save(TXmlItem& root) const
|
||||
|
||||
if (_type == 'A')
|
||||
{
|
||||
TString_array arr; get_list(arr);
|
||||
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");
|
||||
li.SetAttr("Code", row->get(0));
|
||||
li << row->get();
|
||||
li.SetAttr("Code", item._code);
|
||||
li.SetAttr("Value", item._value);
|
||||
if (item._script.ok())
|
||||
li << item._script.get();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool TReport_field::load(const TXmlItem& fld)
|
||||
{
|
||||
const TString& t = fld.GetAttr("type");
|
||||
@ -1478,28 +1504,30 @@ bool TReport_field::load(const TXmlItem& fld)
|
||||
if (font.load(fld))
|
||||
set_font(font);
|
||||
|
||||
TXmlItem* grp = fld.FindFirstChild("groups");
|
||||
if (grp != NULL)
|
||||
{
|
||||
TString str; grp->GetEnclosedText(str);
|
||||
set_groups(str);
|
||||
}
|
||||
TXmlItem* grp = fld.FindFirstChild("groups");
|
||||
if (grp != NULL)
|
||||
{
|
||||
TString str; grp->GetEnclosedText(str);
|
||||
set_groups(str);
|
||||
}
|
||||
|
||||
_prescript.load(fld, "prescript");
|
||||
_postscript.load(fld, "postscript");
|
||||
|
||||
_list.cut(0);
|
||||
_list.destroy();
|
||||
if (_type == 'A')
|
||||
{
|
||||
TXmlItem* list = fld.FindFirstChild("list");
|
||||
TToken_string tok;
|
||||
TString str;
|
||||
for (int i = 0; i < list->GetChildren(); i++)
|
||||
{
|
||||
const TXmlItem* li = list->GetChild(i);
|
||||
tok = li->GetAttr("Code");
|
||||
tok.add(li->GetEnclosedText(str));
|
||||
_list.add(tok);
|
||||
TReport_array_item* rai = new TReport_array_item;
|
||||
rai->_code = li->GetAttr("Code");
|
||||
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
|
||||
{
|
||||
list.destroy();
|
||||
TToken_string& toklst = (TToken_string&)_list;
|
||||
FOR_EACH_TOKEN(toklst, tok)
|
||||
list.add(tok);
|
||||
FOR_EACH_ARRAY_ITEM(_list, i, obj)
|
||||
{
|
||||
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)
|
||||
{
|
||||
_list.cut(0);
|
||||
_list.destroy();
|
||||
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
|
||||
@ -1539,12 +1579,8 @@ TReport_field::TReport_field(TReport_section* sec)
|
||||
: _section(sec), _id(0), _type('T'),
|
||||
_font(NULL), _halign('L'), _valign('T'),
|
||||
_selected(false), _hidden(false), _deactivated(false), _hide_zeroes(false),
|
||||
_border(0), _fgcolor(COLOR_BLACK), _bgcolor(COLOR_WHITE), _list(32, '\n')
|
||||
{
|
||||
set_pos(0,0);
|
||||
set_size(1600,100);
|
||||
_draw_rct = _rct;
|
||||
}
|
||||
_border(0), _fgcolor(COLOR_BLACK), _bgcolor(COLOR_WHITE), _rct(0,0,1000,100)
|
||||
{ }
|
||||
|
||||
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.SetAttr("name", name);
|
||||
xml.SetAttr("lpi", lpi());
|
||||
xml.AddChild("description") << _description;
|
||||
if (!_description.blank())
|
||||
xml.AddChild("description") << _description;
|
||||
xml.SetAttr("libraries", _include);
|
||||
_font.save(xml);
|
||||
|
||||
|
@ -220,6 +220,8 @@ public:
|
||||
virtual ~TReport_section();
|
||||
};
|
||||
|
||||
struct TReport_array_item;
|
||||
|
||||
class TReport_field : public TSortable
|
||||
{
|
||||
TReport_section* _section;
|
||||
@ -234,7 +236,7 @@ class TReport_field : public TSortable
|
||||
TString _field, _alt_field;
|
||||
TVariant _var;
|
||||
TReport_script _prescript, _postscript;
|
||||
TToken_string _list; // Elementi di un campo lista
|
||||
TArray _list; // Elementi di un campo lista
|
||||
|
||||
TReport_font* _font;
|
||||
bool _hidden, _deactivated, _hide_zeroes, _selected;
|
||||
@ -250,6 +252,7 @@ protected:
|
||||
const TString& formatted_text() const;
|
||||
void get_currency(TCurrency& cur) const;
|
||||
void compute_draw_rect() const;
|
||||
TReport_array_item* get_array_item() const;
|
||||
|
||||
public:
|
||||
virtual TObject* dup() const { return new TReport_field(*this); }
|
||||
|
@ -1355,6 +1355,9 @@ bool TFilename::input()
|
||||
|
||||
bool TFilename::custom_path(const char* path_list)
|
||||
{
|
||||
if (blank()) // Inutile continuare!
|
||||
return false;
|
||||
|
||||
if (!is_absolute_path())
|
||||
{
|
||||
TToken_string pl = path_list;
|
||||
|
Loading…
x
Reference in New Issue
Block a user