Patch level : 2.1 48
Files correlati : Ricompilazione Demo : [ ] Commento : Nuovi metodi per report git-svn-id: svn://10.65.10.50/trunk@12111 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
7e9576ecef
commit
9963ab9ec0
@ -247,11 +247,12 @@ TReport_image_cache::TReport_image_cache() : TCache(7)
|
||||
// Utility
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
void advanced_draw_rect(TWindow& win, const RCT& r, int border, COLOR fore, COLOR back)
|
||||
bool advanced_set_draw_tools(TWindow& win, int border, COLOR fore, COLOR back)
|
||||
{
|
||||
const bool has_pen = border > 0;
|
||||
const bool has_brush = (back & 0xFFFFFF) != (COLOR_WHITE & 0xFFFFFF);
|
||||
if (has_pen || has_brush)
|
||||
const bool visible = has_pen || has_brush;
|
||||
if (visible)
|
||||
{
|
||||
if (has_pen)
|
||||
win.set_pen(fore, border, PAT_SOLID);
|
||||
@ -261,8 +262,14 @@ void advanced_draw_rect(TWindow& win, const RCT& r, int border, COLOR fore, COLO
|
||||
win.set_brush(back, PAT_SOLID);
|
||||
else
|
||||
win.hide_brush();
|
||||
xvt_dwin_draw_rect(win.win(), (RCT*)&r);
|
||||
}
|
||||
return visible;
|
||||
}
|
||||
|
||||
void advanced_draw_rect(TWindow& win, const RCT& r, int border, COLOR fore, COLOR back)
|
||||
{
|
||||
if (advanced_set_draw_tools(win, border, fore, back))
|
||||
xvt_dwin_draw_rect(win.win(), (RCT*)&r);
|
||||
}
|
||||
|
||||
void advanced_draw_justified_text(TWindow& win, const char* text, short x, short y, short dx)
|
||||
@ -515,7 +522,7 @@ bool TReport_section::compute_rect(TRectangle& rct) const
|
||||
|
||||
void TReport_section::draw(TWindow& win, TReport_draw_mode rdm) const
|
||||
{
|
||||
if (shown() || rdm == rdm_edit)
|
||||
if (shown() && active())
|
||||
{
|
||||
for (int i = 0; i < items(); i++)
|
||||
{
|
||||
@ -898,38 +905,26 @@ void TReport_field::set_draw_size(long w, long h)
|
||||
_draw_rct.set_height(h);
|
||||
}
|
||||
|
||||
void TReport_field::compute_draw_rect() const
|
||||
const TRectangle& TReport_field::get_draw_rect() const
|
||||
{
|
||||
TRectangle& rct = ((TReport_field*)this)->_draw_rct;
|
||||
rct = _rct;
|
||||
|
||||
if (type() == 'S')
|
||||
if (dynamic_height())
|
||||
{
|
||||
if (rct.width() <= 0)
|
||||
{
|
||||
TString text = formatted_text(); text.rtrim();
|
||||
TToken_string str(text, '\n');
|
||||
int maxlen = 1;
|
||||
FOR_EACH_TOKEN(str, line)
|
||||
{
|
||||
const int len = strlen(line);
|
||||
if (len > maxlen)
|
||||
maxlen = len;
|
||||
}
|
||||
rct.set_width(maxlen * 100);
|
||||
}
|
||||
if (rct.height() <= 0)
|
||||
{
|
||||
if (rct.width() >= 100)
|
||||
{
|
||||
TString text = formatted_text(); text.rtrim();
|
||||
TParagraph_string str(text, rct.width()/100);
|
||||
rct.set_height(str.items() * 100);
|
||||
}
|
||||
if (rct.height() <= 0)
|
||||
rct.set_height(100);
|
||||
}
|
||||
TRectangle& rct = ((TReport_field*)this)->_draw_rct;
|
||||
rct = _rct;
|
||||
|
||||
int h = 100;
|
||||
TParagraph_string str(formatted_text(), rct.width()/100);
|
||||
str.rtrim();
|
||||
h = str.items() * 100;
|
||||
|
||||
if (h <= 0)
|
||||
h = 100;
|
||||
if (h > _rct.height())
|
||||
h = _rct.height();
|
||||
rct.set_height(h);
|
||||
return rct;
|
||||
}
|
||||
return _rct;
|
||||
}
|
||||
|
||||
const TReport_font& TReport_field::font() const
|
||||
@ -1097,7 +1092,6 @@ bool TReport_field::execute_prescript()
|
||||
if (item != NULL)
|
||||
ok = item->_script.execute(*this);
|
||||
}
|
||||
compute_draw_rect();
|
||||
}
|
||||
return ok;
|
||||
}
|
||||
@ -1124,7 +1118,7 @@ void TReport_field::draw_text(TWindow& win, const char* text, TReport_draw_mode
|
||||
RCT r; win.log2dev(rct, r);
|
||||
advanced_draw_rect(win, r, border(), fore_color(), back_color());
|
||||
|
||||
if (rdm == rdm_print_preview && link().not_empty())
|
||||
if (rdm == rdm_preview && link().not_empty())
|
||||
{
|
||||
XVT_FNTID lnkfont = xvt_font_create();
|
||||
xvt_font_copy(lnkfont, font().get_xvt_font(win), XVT_FA_ALL);
|
||||
@ -1251,7 +1245,7 @@ const TString& TReport_field::formatted_text() const
|
||||
{
|
||||
TCurrency cur; get_currency(cur);
|
||||
TString& tmp = get_tmp_string();
|
||||
const bool dotted = _picture.find('.' > 0);
|
||||
const bool dotted = _picture.find('.') > 0;
|
||||
tmp = cur.string(dotted);
|
||||
return tmp;
|
||||
}
|
||||
@ -1273,100 +1267,41 @@ const TString& TReport_field::formatted_text() const
|
||||
|
||||
void TReport_field::draw(TWindow& win, TReport_draw_mode rdm) const
|
||||
{
|
||||
PAT_STYLE back_pattern = PAT_HOLLOW;
|
||||
if (draw_hidden() || draw_deactivated())
|
||||
return;
|
||||
|
||||
if (rdm == rdm_edit)
|
||||
{
|
||||
compute_draw_rect();
|
||||
if (hidden() || deactivated())
|
||||
{
|
||||
if (hidden() && deactivated())
|
||||
back_pattern = PAT_DIAGCROSS;
|
||||
else
|
||||
back_pattern = hidden() ? PAT_FDIAG : PAT_BDIAG;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (draw_hidden() || draw_deactivated())
|
||||
return;
|
||||
}
|
||||
RCT r; win.log2dev(get_draw_rect(), r);
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
case 'E':
|
||||
{
|
||||
const bool has_pen = border() > 0;
|
||||
const bool has_brush = color_distance(back_color(), COLOR_WHITE) != 0;
|
||||
if (has_pen)
|
||||
win.set_pen(fore_color(), border(), PAT_SOLID);
|
||||
else
|
||||
win.hide_pen();
|
||||
if (has_brush)
|
||||
win.set_brush(back_color(), PAT_SOLID);
|
||||
else
|
||||
win.hide_brush();
|
||||
RCT r; win.log2dev(get_rect(), r);
|
||||
xvt_dwin_draw_oval(win.win(), &r);
|
||||
|
||||
if (rdm == rdm_edit && back_pattern != PAT_HOLLOW)
|
||||
{
|
||||
win.set_brush(COLOR_GRAY, back_pattern);
|
||||
xvt_dwin_draw_oval(win.win(), &r);
|
||||
back_pattern = PAT_HOLLOW;
|
||||
}
|
||||
}
|
||||
if (advanced_set_draw_tools(win, border(), fore_color(), back_color()))
|
||||
xvt_dwin_draw_oval(win.win(), &r);
|
||||
break;
|
||||
case 'I':
|
||||
{
|
||||
RCT r; win.log2dev(get_rect(), r);
|
||||
TReport& rep = section().report();
|
||||
if (rdm == rdm_edit)
|
||||
{
|
||||
TVariant var;
|
||||
section().report().evaluate(_field, var, _alfafld);
|
||||
const TString& name = var.as_string();
|
||||
const TImage* img = rep.image(name);
|
||||
if (img != NULL && img->ok())
|
||||
img->draw(win.win(), r);
|
||||
}
|
||||
else
|
||||
{
|
||||
const TString& name = get().as_string();
|
||||
const TImage* img = rep.image(name);
|
||||
if (img != NULL && img->ok())
|
||||
img->draw(win.win(), r);
|
||||
}
|
||||
const TString& name = get().as_string();
|
||||
const TImage* img = rep.image(name);
|
||||
if (img != NULL && img->ok())
|
||||
img->draw(win.win(), r);
|
||||
draw_rect(win);
|
||||
}
|
||||
break;
|
||||
case 'L':
|
||||
{
|
||||
win.set_pen(fore_color(), border());
|
||||
const TRectangle& r = get_rect();
|
||||
win.line((short)r.left(), (short)r.top(), (short)r.right(), (short)r.bottom());
|
||||
back_pattern = PAT_HOLLOW;
|
||||
advanced_set_draw_tools(win, border(), fore_color(), back_color());
|
||||
const PNT f = { r.top, r.left };
|
||||
xvt_dwin_draw_set_pos(win.win(), f);
|
||||
const PNT t = { r.bottom, r.right };
|
||||
xvt_dwin_draw_line(win.win(), t);
|
||||
}
|
||||
break;
|
||||
case 'R': draw_rect(win); break;
|
||||
case 'R':
|
||||
advanced_draw_rect(win, r, border(), fore_color(), back_color());
|
||||
break;
|
||||
case 'T': draw_text(win, _picture, rdm); break;
|
||||
default :
|
||||
if (rdm == rdm_edit)
|
||||
{
|
||||
if (border() <= 0) // Rendi piu' visibile il bordo dei campi che non ce l'hanno
|
||||
{
|
||||
RCT r; win.log2dev(get_draw_rect(), r);
|
||||
advanced_draw_rect(win, r, 1, COLOR_LTGRAY, COLOR_WHITE);
|
||||
}
|
||||
if (id() > 0)
|
||||
{
|
||||
TString16 str; str << id();
|
||||
draw_text(win, str, rdm);
|
||||
}
|
||||
else
|
||||
draw_text(win, _field, rdm);
|
||||
}
|
||||
else // Real printing
|
||||
{
|
||||
const TString& str = formatted_text();
|
||||
if (!str.blank())
|
||||
@ -1374,24 +1309,64 @@ void TReport_field::draw(TWindow& win, TReport_draw_mode rdm) const
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (rdm == rdm_edit)
|
||||
void TReport_field::print(TBook& book) const
|
||||
{
|
||||
if (draw_hidden() || draw_deactivated())
|
||||
return;
|
||||
|
||||
switch (_type)
|
||||
{
|
||||
RCT r; win.log2dev(get_rect(), r);
|
||||
if (back_pattern != PAT_HOLLOW)
|
||||
case 'E':
|
||||
book.set_pen(fore_color(), border());
|
||||
book.set_brush(back_color());
|
||||
book.draw_ellipse(get_draw_rect());
|
||||
break;
|
||||
case 'I':
|
||||
{
|
||||
win.set_pen(COLOR_LTGRAY);
|
||||
win.set_brush(COLOR_LTGRAY, back_pattern);
|
||||
xvt_dwin_draw_rect(win.win(), &r);
|
||||
const TString& name = get().as_string();
|
||||
book.draw_image(get_draw_rect(), name);
|
||||
if (border() > 0)
|
||||
{
|
||||
book.set_pen(fore_color(), border());
|
||||
book.set_brush(COLOR_WHITE);
|
||||
book.draw_rectangle(get_draw_rect());
|
||||
}
|
||||
}
|
||||
if (selected())
|
||||
break;
|
||||
case 'L':
|
||||
book.set_pen(fore_color(), border());
|
||||
book.draw_line(get_draw_rect());
|
||||
break;
|
||||
case 'R':
|
||||
book.set_pen(fore_color(), border());
|
||||
book.set_brush(back_color());
|
||||
book.draw_rectangle(get_draw_rect());
|
||||
break;
|
||||
case 'T':
|
||||
if (!_picture.blank())
|
||||
{
|
||||
const int k = 4;
|
||||
RCT s = r; s.right = s.left+k; s.bottom = s.top+k;
|
||||
advanced_draw_rect(win, s, 0, COLOR_WHITE, COLOR_LTGRAY);
|
||||
s = r; s.left = s.right-k; s.top = s.bottom-k;
|
||||
advanced_draw_rect(win, s, 0, COLOR_WHITE, COLOR_LTGRAY);
|
||||
book.set_font(font());
|
||||
book.set_text_align(horizontal_alignment(), vertical_alignment());
|
||||
book.draw_text(get_draw_rect(), _picture);
|
||||
}
|
||||
break;
|
||||
default :
|
||||
{
|
||||
book.set_pen(fore_color(), border());
|
||||
book.set_brush(back_color());
|
||||
book.draw_rectangle(get_draw_rect());
|
||||
|
||||
const TString& str = formatted_text();
|
||||
if (!str.blank())
|
||||
{
|
||||
book.set_font(font());
|
||||
book.set_text_align(horizontal_alignment(), vertical_alignment());
|
||||
book.draw_text(get_draw_rect(), str);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -1426,6 +1401,7 @@ void TReport_field::save(TXmlItem& root) const
|
||||
set_num_attr(fld, "y", rct.top());
|
||||
set_num_attr(fld, "width", rct.width());
|
||||
set_num_attr(fld, "height", rct.height(), 100);
|
||||
fld.SetAttr("dynamic_height", dynamic_height());
|
||||
fld.SetAttr("hidden", _hidden);
|
||||
fld.SetAttr("deactivated", _deactivated);
|
||||
fld.SetAttr("hide_zero", _hide_zeroes);
|
||||
@ -1485,6 +1461,7 @@ bool TReport_field::load(const TXmlItem& fld)
|
||||
set_row(get_num_attr(fld, "y"));
|
||||
set_width(get_num_attr(fld, "width"));
|
||||
set_height(get_num_attr(fld, "height", 100));
|
||||
set_dynamic_height(fld.GetBoolAttr("dynamic_height"));
|
||||
_draw_rct = _rct;
|
||||
show(!fld.GetBoolAttr("hidden"));
|
||||
activate(!fld.GetBoolAttr("deactivated"));
|
||||
@ -1577,7 +1554,7 @@ int TReport_field::compare(const TSortable& s) const
|
||||
|
||||
TReport_field::TReport_field(TReport_section* sec)
|
||||
: _section(sec), _id(0), _type('T'),
|
||||
_font(NULL), _halign('L'), _valign('T'),
|
||||
_font(NULL), _halign('L'), _valign('T'),_dynamic_height(false),
|
||||
_selected(false), _hidden(false), _deactivated(false), _hide_zeroes(false),
|
||||
_border(0), _fgcolor(COLOR_BLACK), _bgcolor(COLOR_WHITE), _rct(0,0,1000,100)
|
||||
{ }
|
||||
|
@ -63,6 +63,45 @@ public:
|
||||
virtual ~TReport_font();
|
||||
};
|
||||
|
||||
class TBook : public TObject
|
||||
{
|
||||
size_t _pages;
|
||||
TPointer_array _index;
|
||||
TFilename _file;
|
||||
ofstream* _out;
|
||||
TPoint _delta;
|
||||
|
||||
DRAW_CTOOLS _tools;
|
||||
TReport_font _font;
|
||||
TRectangle _rect;
|
||||
|
||||
protected:
|
||||
void define_frame(const TRectangle& rect);
|
||||
void do_text(const TString& str);
|
||||
|
||||
public:
|
||||
void start_page();
|
||||
void close_page();
|
||||
|
||||
void set_pen(COLOR color, int width = 0, int style = P_SOLID);
|
||||
void set_brush(COLOR color, int pattern = PAT_SOLID);
|
||||
void set_font(const TReport_font& font);
|
||||
void set_text_color(COLOR color);
|
||||
void set_text_align(char halign ='L', char valign = 'T');
|
||||
void draw_rectangle(const TRectangle& rect);
|
||||
void draw_ellipse(const TRectangle& rect);
|
||||
void draw_line(const TRectangle& rect);
|
||||
void draw_image(const TRectangle& rect, const char* filename);
|
||||
void draw_text(const TRectangle& rect, const char* text);
|
||||
void draw_link(const TRectangle& rect, const char* text, const char* link);
|
||||
|
||||
size_t pages() const { return _pages; }
|
||||
bool draw_page(TWindow& win, size_t page);
|
||||
|
||||
TBook(const char* name);
|
||||
virtual ~TBook();
|
||||
};
|
||||
|
||||
class TReport;
|
||||
class TReport_field;
|
||||
|
||||
@ -133,7 +172,7 @@ public:
|
||||
// TReport_section
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
enum TReport_draw_mode { rdm_edit, rdm_print, rdm_print_preview, rdm_spooler, rdm_textonly };
|
||||
enum TReport_draw_mode { rdm_print, rdm_preview };
|
||||
|
||||
class TReport_section : public TArray
|
||||
{
|
||||
@ -231,6 +270,7 @@ class TReport_field : public TSortable
|
||||
COLOR _fgcolor, _bgcolor;
|
||||
short _border;
|
||||
char _halign, _valign;
|
||||
bool _dynamic_height;
|
||||
TBit_array _groups;
|
||||
TString _picture, _codval, _link;
|
||||
TString _field, _alt_field;
|
||||
@ -251,7 +291,6 @@ protected:
|
||||
TFieldtypes var_type() const;
|
||||
const TString& formatted_text() const;
|
||||
void get_currency(TCurrency& cur) const;
|
||||
void compute_draw_rect() const;
|
||||
TReport_array_item* get_array_item() const;
|
||||
|
||||
public:
|
||||
@ -299,6 +338,9 @@ public:
|
||||
void set_height(long dy) { _rct.set_height(dy); }
|
||||
const TRectangle& get_rect() const { return _rct; }
|
||||
|
||||
void set_dynamic_height(bool dh) { _dynamic_height = dh; }
|
||||
bool dynamic_height() const { return _dynamic_height; }
|
||||
|
||||
bool hidden() const { return _hidden; }
|
||||
bool shown() const { return !hidden(); }
|
||||
void show(bool on) { _hidden = !on; }
|
||||
@ -317,7 +359,7 @@ public:
|
||||
|
||||
void set_draw_pos(long x, long y);
|
||||
void set_draw_size(long x, long y);
|
||||
const TRectangle& get_draw_rect() const { return _draw_rct; }
|
||||
const TRectangle& get_draw_rect() const;
|
||||
|
||||
void set_groups(const TString& groups);
|
||||
const TString& groups() const;
|
||||
@ -350,7 +392,9 @@ public:
|
||||
|
||||
virtual void draw_rect(TWindow& win) const;
|
||||
virtual void draw_text(TWindow& win, const char* text, TReport_draw_mode mode) const;
|
||||
|
||||
virtual void draw(TWindow& win, TReport_draw_mode mode) const;
|
||||
virtual void print(TBook& book) const;
|
||||
|
||||
void save(TXmlItem& root) const;
|
||||
bool load(const TXmlItem& root);
|
||||
@ -482,6 +526,7 @@ public:
|
||||
virtual ~TReport();
|
||||
};
|
||||
|
||||
bool advanced_set_draw_tools(TWindow& win, int border, COLOR fore, COLOR back);
|
||||
void advanced_draw_rect(TWindow& win, const RCT& r, int border, COLOR fore, COLOR back);
|
||||
void advanced_draw_text(TWindow& win, const char* text, const RCT& r,
|
||||
char halign, char valign);
|
||||
|
@ -761,9 +761,9 @@ long TReport_printer::print_section(TReport_section& rs)
|
||||
open_page();
|
||||
}
|
||||
if (_page_is_open)
|
||||
rs.draw(*this, preview_mode() ? rdm_print_preview : rdm_print);
|
||||
rs.draw(*this, preview_mode() ? rdm_preview : rdm_print);
|
||||
|
||||
if (rs.level() > 0) // Ho stampa qualcosa che non sia lo sfondo!
|
||||
if (rs.level() > 0) // Ho stampato qualcosa che non sia lo sfondo!
|
||||
_page_break_allowed = true;
|
||||
}
|
||||
|
||||
@ -949,3 +949,174 @@ void lock_preview_update(bool yes)
|
||||
void abort_printing()
|
||||
{ _print_aborted = true; }
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// TBook
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Writing a page
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
void TBook::start_page()
|
||||
{
|
||||
if (_out == NULL)
|
||||
_out = new ofstream(_file);
|
||||
|
||||
_index.add_long(_out->tellp(), _pages);
|
||||
*_out << "<page num=" << (_pages+1) << '>' << endl;
|
||||
|
||||
memset(&_tools, -1, sizeof(_tools));
|
||||
_font.create("", 0, XVT_FA_ALL);
|
||||
|
||||
_delta.x = _delta.y = 0;
|
||||
}
|
||||
|
||||
void TBook::close_page()
|
||||
{
|
||||
_pages++;
|
||||
*_out << "</page num=" << _pages << '>' << endl;
|
||||
}
|
||||
|
||||
void TBook::set_font(const TReport_font& f)
|
||||
{
|
||||
if (f != _font)
|
||||
{
|
||||
_font = f;
|
||||
*_out << "<font"
|
||||
<< " name=\"" << f.name() << '"'
|
||||
<< " size=" << f.size()
|
||||
<< " style=" << f.style()
|
||||
<< " />" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void TBook::define_frame(const TRectangle& r)
|
||||
{
|
||||
if (r != _rect)
|
||||
{
|
||||
_rect = r;
|
||||
*_out << "<frame"
|
||||
<< " x=" << r.x << " y=" << r.y
|
||||
<< " dx=" << r.width() << " dy=" << r.height()
|
||||
<< " />" << endl;
|
||||
}
|
||||
}
|
||||
|
||||
void TBook::draw_text(const TRectangle& r, const char* txt)
|
||||
{
|
||||
define_frame(r);
|
||||
*_out << "<text>" << endl << text << endl << "</text>" << endl;
|
||||
}
|
||||
|
||||
void TBook::set_pen(COLOR color, int width, int style)
|
||||
{
|
||||
}
|
||||
|
||||
void TBook::set_brush(COLOR color, int pattern)
|
||||
{
|
||||
}
|
||||
|
||||
void TBook::set_text_color(COLOR color)
|
||||
{
|
||||
}
|
||||
|
||||
void TBook::set_text_align(char halign, char valign)
|
||||
{
|
||||
}
|
||||
|
||||
void TBook::draw_rectangle(const TRectangle& r)
|
||||
{
|
||||
define_frame(r);
|
||||
*_out << "<rectangle />" << endl;
|
||||
}
|
||||
|
||||
void TBook::draw_ellipse(const TRectangle& r)
|
||||
{
|
||||
define_frame(r);
|
||||
*_out << "<ellipse />" << endl;
|
||||
}
|
||||
|
||||
void TBook::draw_line(const TRectangle& r)
|
||||
{
|
||||
define_frame(r);
|
||||
*_out << "<line />" << endl;
|
||||
}
|
||||
|
||||
void TBook::draw_link(const TRectangle& rect, const char* text, const char* link)
|
||||
{
|
||||
draw_text(rect, text);
|
||||
}
|
||||
|
||||
void TBook::draw_image(const TRectangle& rect, const char* name)
|
||||
{
|
||||
draw_rectangle(rect);
|
||||
}
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////
|
||||
// Reading a page
|
||||
///////////////////////////////////////////////////////////
|
||||
|
||||
void TBook::do_text(const TString& str)
|
||||
{
|
||||
}
|
||||
|
||||
bool TBook::draw_page(TWindow& win, size_t page)
|
||||
{
|
||||
if (page >= _pages)
|
||||
return false;
|
||||
|
||||
|
||||
TString str(1024);
|
||||
char* buffer = str.get_buffer();
|
||||
|
||||
const streampos pos = _index.get_long(page);
|
||||
ifstream ifs(_file);
|
||||
ifs.seekg(pos);
|
||||
|
||||
while (!ifs.eof())
|
||||
{
|
||||
ifs.getline(buffer, str.size());
|
||||
if (str.starts_with("</page"))
|
||||
break;
|
||||
|
||||
if (str.starts_with("<frame"))
|
||||
{
|
||||
long x, y, dx, dy;
|
||||
sscanf(str, "<frame x=%ld y=%ld dx=%ld dy=%ld />", &x, &y, &dx, &dy);
|
||||
_rect.set(x, y, dx, dy);
|
||||
continue;
|
||||
}
|
||||
if (str == "<text>")
|
||||
{
|
||||
TString stringona;
|
||||
while (!ifs.eof())
|
||||
{
|
||||
ifs.getline(buffer, str.size());
|
||||
if (str != "</text>")
|
||||
stringona << str;
|
||||
}
|
||||
do_text(stringona);
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
TBook::TBook(const char* name) : _out(NULL)
|
||||
{
|
||||
_file = name;
|
||||
if (_file.blank())
|
||||
_file.temp("rep");
|
||||
}
|
||||
|
||||
TBook::~TBook()
|
||||
{
|
||||
if (_out != NULL)
|
||||
{
|
||||
_out->close();
|
||||
delete _out;
|
||||
}
|
||||
}
|
||||
|
@ -27,9 +27,9 @@ struct TPoint
|
||||
// @cmember Operatore di assegnamento tra punti
|
||||
TPoint& operator =(const TPoint& pnt) { x = pnt.x; y = pnt.y; return *this; }
|
||||
// @cmember Confronta se due punti sono uguali (TRUE se uguali)
|
||||
bool operator ==(const TPoint& p) { return p.x == x && p.y == y; }
|
||||
bool operator ==(const TPoint& p) const { return p.x == x && p.y == y; }
|
||||
// @cmember Confronta se due punti sono diversi (TRUE se diversi)
|
||||
bool operator !=(const TPoint& p) { return p.x != x || p.y != y; }
|
||||
bool operator !=(const TPoint& p) const { return p.x != x || p.y != y; }
|
||||
TPoint& operator +=(const TPoint& pnt) { x += pnt.x; y += pnt.y; return *this; }
|
||||
void reset() { x = y = 0; }
|
||||
|
||||
@ -68,6 +68,11 @@ public:
|
||||
void merge(const TRectangle& r);
|
||||
bool is_empty() const { return _size.x == 0 || _size.y == 0; }
|
||||
|
||||
// @cmember Confronta se due rettangoli sono uguali (TRUE se uguali)
|
||||
bool operator ==(const TRectangle& p) const { return TPoint::operator ==(p) && _size == p._size; }
|
||||
// @cmember Confronta se due rettangoli sono diversi (TRUE se diversi)
|
||||
bool operator !=(const TRectangle& p) const { return TPoint::operator !=(p) || _size != p._size; }
|
||||
|
||||
TRectangle& operator=(const TRectangle& r) { copy(r); return *this; }
|
||||
TRectangle() : TPoint(0,0), _size(0,0) { }
|
||||
TRectangle(const TPoint& p, const TPoint& s) : TPoint(p), _size(s) { }
|
||||
|
Loading…
x
Reference in New Issue
Block a user