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:
guy 2004-05-20 14:17:28 +00:00
parent bc64de7745
commit 4cde8ad2b2
6 changed files with 103 additions and 67 deletions

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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); }

View File

@ -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;