Patch level : 2.1 nopatch

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :

Aggiunte fichissime alla stampa report


git-svn-id: svn://10.65.10.50/trunk@12180 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2004-06-15 14:53:17 +00:00
parent 0126346ff7
commit f72c70c29b
8 changed files with 275 additions and 121 deletions

View File

@ -100,6 +100,24 @@ bool TReport_base_mask::on_field_event(TOperable_field& o, TField_event e, long
{
switch (o.dlg())
{
case F_FGCOLOR:
if (e == fe_button)
{
_fgcolor = xvt_dm_post_choose_color(win(), _fgcolor);
force_update();
}
break;
case F_BGCOLOR:
if (e == fe_button)
{
_bgcolor = xvt_dm_post_choose_color(win(), _bgcolor);
force_update();
}
break;
case F_PATTERN:
if (e == fe_modify)
force_update();
break;
case F_FONT_SELECT:
if (e == fe_button)
{
@ -240,6 +258,8 @@ void TReport_field_mask::vedo_non_vedo()
show(F_DYNAMIC_HEIGHT, type == 'S');
show(F_FGCOLOR, type != 'I');
show(F_BGCOLOR, type != 'L');
show(F_PATTERN, type != 'L' && type != 'I');
show(F_RADIUS, type != 'L' && type != 'I');
show(F_FONT_SELECT, is_text);
show(F_SOURCE, (is_text || type == 'I') && type != 'T');
show(F_SOURCE2, is_text && type != 'T');
@ -260,7 +280,14 @@ bool TReport_field_mask::on_field_event(TOperable_field& o, TField_event e, long
{
case F_TYPE:
if (e == fe_init || e == fe_modify)
{
vedo_non_vedo();
if (e == fe_modify)
{
if (strchr("ELR", o.get()[0]) != NULL && get_int(F_BORDER) == 0)
set(F_BORDER, 2); // Propongo un bordo visibile per le linee
}
}
break;
case F_X:
case F_Y:
@ -272,20 +299,6 @@ bool TReport_field_mask::on_field_event(TOperable_field& o, TField_event e, long
set_num(o.dlg(), num); // Reformat
}
break;
case F_FGCOLOR:
if (e == fe_button)
{
_fgcolor = xvt_dm_post_choose_color(win(), _fgcolor);
force_update();
}
break;
case F_BGCOLOR:
if (e == fe_button)
{
_bgcolor = xvt_dm_post_choose_color(win(), _bgcolor);
force_update();
}
break;
case F_LIST:
if (e == fe_close)
{
@ -364,6 +377,8 @@ void TReport_field_mask::set_field(const TReport_field& rf)
str[0] = rf.vertical_alignment();
set(F_VALIGN, str);
set(F_BORDER, rf.border());
set(F_PATTERN, rf.pattern());
set_num(F_RADIUS, rf.radius());
_fgcolor = rf.fore_color();
_bgcolor = rf.back_color();
set(F_TEXT, rf.picture());
@ -389,14 +404,16 @@ void TReport_field_mask::get_field(TReport_field& rf) const
rf.set_size(get_num(F_DX), get_num(F_DY));
rf.show(!get_bool(F_HIDDEN));
rf.activate(!get_bool(F_DISABLED));
rf.hide_zeroes(get_bool(F_HIDE_ZEROES));
rf.hide_zeroes(field(F_HIDE_ZEROES).active() && get_bool(F_HIDE_ZEROES));
rf.set_dynamic_height(get_bool(F_DYNAMIC_HEIGHT));
rf.set_groups(get(F_GROUPS));
rf.set_codval(get(F_CODVAL));
rf.set_link(get(F_LINK));
rf.set_horizontal_alignment(get(F_HALIGN)[0]);
rf.set_vertical_alignment(get(F_VALIGN)[0]);
rf.set_pattern((PAT_STYLE)get_int(F_PATTERN));
rf.set_border(get_int(F_BORDER));
rf.set_radius(get_num(F_RADIUS));
rf.set_fore_color(_fgcolor);
rf.set_back_color(_bgcolor);
if (strchr("VP", rf.type()) != NULL)
@ -519,6 +536,7 @@ TReport_sheet::TReport_sheet(TReport_section& sec)
class TSection_properties_mask : public TReport_base_mask
{
protected:
virtual void update();
virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly);
void set_num(short id, long num);
short get_num(short id) const;
@ -531,6 +549,25 @@ public:
TSection_properties_mask(TReport_section& rs);
};
void TSection_properties_mask::update()
{
for (int i = 0; i < 2; i++)
{
TMask_field& fld = field(i == 0 ? F_FGCOLOR : F_BGCOLOR);
if (fld.active() && fld.parent() == win())
{
RCT rctfld; fld.get_rect(rctfld);
const int x = rctfld.right / CHARX + 1;
const int y = rctfld.top / ROWY + 1;
RCT& rct = resize_rect(x, y, -3, 1, W_PLAIN, win());
rct.top = rctfld.top; rct.bottom = rctfld.bottom;
xi_draw_3d_rect((XinWindow)win(), (XinRect*)&rct, TRUE, 2, MASK_LIGHT_COLOR,
i == 0 ? _fgcolor : _bgcolor, MASK_DARK_COLOR);
}
}
TReport_base_mask::update();
}
void TSection_properties_mask::set_num(short id, long num)
{
set(id, num2str(num));
@ -601,7 +638,13 @@ void TSection_properties_mask::set_section(const TReport_section& rs)
set(F_REPEAT, rs.repeat_on_page());
set(F_DISABLED, rs.deactivated());
set(F_BORDER, rs.border());
set(F_PATTERN, rs.pattern());
set_num(F_RADIUS, rs.radius());
_fgcolor = rs.fore_color();
_bgcolor = rs.back_color();
set_font_info(rs.font());
set(F_PRESCRIPT, rs.prescript());
set(F_POSTSCRIPT, rs.postscript());
@ -627,6 +670,11 @@ void TSection_properties_mask::get_section(TReport_section& rs) const
rs.keep_with_next(get_bool(F_KEEP_WITH_NEXT));
rs.set_repeat_on_page(get_bool(F_REPEAT));
rs.set_pattern((PAT_STYLE)get_int(F_PATTERN));
rs.set_border(get_int(F_BORDER));
rs.set_radius(get_num(F_RADIUS));
rs.set_fore_color(_fgcolor);
rs.set_back_color(_bgcolor);
TReport_font f;
if (get_font_info(f))
rs.set_font(f);
@ -1098,6 +1146,7 @@ void TReport_mask::section_properties()
{
case K_ENTER:
m.get_section(rs);
_tree.goto_node(rs.type(), rs.level());
_is_dirty = true;
break;
case K_DEL:
@ -1107,7 +1156,6 @@ void TReport_mask::section_properties()
const int l = rs.level();
rs.report().kill_section(t, l);
_tree.goto_node(t, l-1);
tfield(F_SECTIONS).select_current();
_is_dirty = true;
}
break;

View File

@ -40,6 +40,8 @@
#define F_SOURCE2 145
#define F_HIDE_DOTS 146
#define F_DYNAMIC_HEIGHT 147
#define F_RADIUS 148
#define F_PATTERN 149
#define F_LEVEL 160
#define F_GROUP_BY 161

View File

@ -73,15 +73,14 @@ END
TEXT F_REPORT_TITLE
BEGIN
PROMPT 41 6 "Corpo di livello 0"
PROMPT 41 7 "Corpo di livello 0"
END
REPORT F_REPORT -3 -3
BEGIN
PROMPT 21 7 ""
PROMPT 21 8 ""
END
BUTTON F_FLD_ADD 10 2
BEGIN
PROMPT -16 -1 "Campo +"

View File

@ -5,13 +5,13 @@ PAGE "Campo" -1 -1 72 17
LIST F_TYPE 1 16
BEGIN
PROMPT 1 0 "Tipo "
ITEM "T|Testo"
ITEM "T|Testo fisso"
ITEM "S|Stringa"
ITEM "N|Numero"
ITEM "V|Valuta"
ITEM "P|Prezzo"
ITEM "D|Data"
ITEM "A|Array"
ITEM "A|Array (Lista)"
ITEM "I|Immagine"
ITEM "L|Linea"
ITEM "R|Rettangolo"
@ -157,20 +157,52 @@ BEGIN
PROMPT 2 5 "Colore ~Sfondo"
END
BUTTON F_FONT_SELECT 14 2
BEGIN
PROMPT 2 7 "~Font"
END
LIST F_BORDER 1 12
BEGIN
PROMPT 2 10 "Bordo "
PROMPT 2 7 "Bordo "
ITEM "0|Nessuno"
MESSAGE HIDE,F_RADIUS
ITEM "1|Sottile"
MESSAGE SHOW,F_RADIUS
ITEM "2|Normale"
MESSAGE SHOW,F_RADIUS
ITEM "3|Spesso"
MESSAGE SHOW,F_RADIUS
END
NUMBER F_RADIUS 3
BEGIN
PROMPT 32 7 "Raggio smussatura "
FLAGS "U"
END
LIST F_PATTERN 1 18
BEGIN
PROMPT 2 8 "Stile "
ITEM "2|Pieno"
MESSAGE SHOW,F_BGCOLOR
ITEM "1|Trasparente"
MESSAGE HIDE,F_BGCOLOR
ITEM "3|Linee orizzontali"
MESSAGE SHOW,F_BGCOLOR
ITEM "4|Linee verticali"
MESSAGE SHOW,F_BGCOLOR
ITEM "5|Diagonali \"
MESSAGE SHOW,F_BGCOLOR
ITEM "6|Diagonali /"
MESSAGE SHOW,F_BGCOLOR
ITEM "7|Griglia"
MESSAGE SHOW,F_BGCOLOR
ITEM "8|Griglia diagonale"
MESSAGE SHOW,F_BGCOLOR
END
BUTTON F_FONT_SELECT 14 2
BEGIN
PROMPT 2 10 "~Font"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -13 -1 ""

View File

@ -91,11 +91,6 @@ BEGIN
CHECKTYPE REQUIRED
END
BUTTON F_FONT_SELECT 10 2
BEGIN
PROMPT -13 -3 "~Font"
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -13 -1 ""
@ -113,6 +108,75 @@ END
ENDPAGE
PAGE "Aspetto" -1 -1 72 16
LIST F_BORDER 1 12
BEGIN
PROMPT 2 1 "Bordo "
ITEM "0|Nessuno"
MESSAGE HIDE,F_RADIUS
ITEM "1|Sottile"
MESSAGE SHOW,F_RADIUS
ITEM "2|Normale"
MESSAGE SHOW,F_RADIUS
ITEM "3|Spesso"
MESSAGE SHOW,F_RADIUS
END
NUMBER F_RADIUS 3
BEGIN
PROMPT 26 1 "Raggio smussatura "
FLAGS "U"
END
BUTTON F_FGCOLOR 14 1
BEGIN
PROMPT 2 2 "Colore ~Bordo"
END
LIST F_PATTERN 1 18
BEGIN
PROMPT 2 4 "Sfondo "
ITEM "1|Trasparente"
MESSAGE HIDE,F_BGCOLOR
ITEM "2|Pieno"
MESSAGE SHOW,F_BGCOLOR
ITEM "3|Linee orizzontali"
MESSAGE SHOW,F_BGCOLOR
ITEM "4|Linee verticali"
MESSAGE SHOW,F_BGCOLOR
ITEM "5|Diagonali \"
MESSAGE SHOW,F_BGCOLOR
ITEM "6|Diagonali /"
MESSAGE SHOW,F_BGCOLOR
ITEM "7|Griglia"
MESSAGE SHOW,F_BGCOLOR
ITEM "8|Griglia diagonale"
MESSAGE SHOW,F_BGCOLOR
END
BUTTON F_BGCOLOR 14 1
BEGIN
PROMPT 2 5 "Colore ~Sfondo"
END
BUTTON F_FONT_SELECT 14 2
BEGIN
PROMPT 2 10 "~Font"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -13 -1 ""
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -33 -1 ""
END
ENDPAGE
PAGE "Avanzate" -1 -1 50 16
MEMO F_PRESCRIPT 48 7

View File

@ -1,49 +0,0 @@
PAGE "Monitor" -1 -1 50 20
LIST 101 24 -3
BEGIN
PROMPT 0 0 ""
END
STACK 102 -3 10
BEGIN
PROMPT 27 0 ""
END
STACK 103 -3 -3
BEGIN
PROMPT 27 11 ""
END
BUTTON DLG_NEXTREC 9 2
BEGIN
PROMPT -14 -1 ""
PICTURE 124
MESSAGE EXIT,K_F11
END
BUTTON DLG_LASTREC 9 2
BEGIN
PROMPT -24 -1 ""
PICTURE 1671
MESSAGE EXIT,K_F10
END
BUTTON DLG_ELABORA 9 2
BEGIN
PROMPT -34 -1 ""
PICTURE BMP_LASTREC
MESSAGE EXIT,K_F5
END
BUTTON DLG_QUIT 9 2
BEGIN
PROMPT -44 -1 ""
MESSAGE EXIT,K_QUIT
END
ENDPAGE
ENDMASK

View File

@ -4,6 +4,7 @@
#include <diction.h>
#include <image.h>
#include <mask.h>
#include <reprint.h>
#include "ba8300.h"
#include "ba8301.h"
@ -321,9 +322,10 @@ class TReport_window : public TField_window
PNT _pt_click, _pt_drag_offset;
RCT _rct_drag;
TArray _clipboard;
TReport_image_cache _images;
static TArray _clipboard;
protected:
virtual void handler(WINDOW win, EVENT* ep);
virtual void update();
@ -341,6 +343,7 @@ protected:
void popup_cut();
void popup_copy();
void popup_paste();
bool do_zoom(int k, bool reflect);
int cpi() const;
int lpi() const;
@ -365,6 +368,8 @@ public:
virtual ~TReport_window() { }
};
TArray TReport_window::_clipboard;
void TReport_window::set_report_section(TReport_section& rs)
{
_report = &rs.report();
@ -372,7 +377,6 @@ void TReport_window::set_report_section(TReport_section& rs)
_level = rs.level();
}
bool TReport_window::pick(const TPoint& ptlog) const
{
TReport_section& rs = curr_section();
@ -683,6 +687,29 @@ bool TReport_window::test_corner(const RCT& rct, const PNT& pt, PNT& opposite) c
return test == 2;
}
bool TReport_window::do_zoom(int k, bool reflect)
{
const int n = _dpi.v+k;
const bool ok = n >= 48 && n < 300;
if (ok)
{
_dpi.h = _dpi.v = n;
curr_section().unmap_font();
force_update();
if (reflect)
{
const short buddy = owner().dlg() == F_REPORT ? F_REPORTH : F_REPORT;
TWindowed_field& fld = (TWindowed_field&)owner().mask().field(buddy);
TReport_window& win = (TReport_window&)fld.win();
win.do_zoom(k, false);
}
}
return ok;
}
void TReport_window::handler(WINDOW win, EVENT* ep)
{
switch (ep->type)
@ -840,20 +867,10 @@ void TReport_window::handler(WINDOW win, EVENT* ep)
popup_paste();
break;
case POPUP_ZOOMIN:
if (_dpi.v < 300)
{
_dpi.h = _dpi.v = _dpi.v + 24;
curr_section().unmap_font();
force_update();
}
do_zoom(+24, true);
break;
case POPUP_ZOOMOUT:
if (_dpi.v > 48)
{
_dpi.h = _dpi.v = _dpi.v - 24;
curr_section().unmap_font();
force_update();
}
do_zoom(-24, true);
break;
case POPUP_PROPERTIES:
{
@ -872,6 +889,19 @@ void TReport_window::handler(WINDOW win, EVENT* ep)
break;
}
break;
case E_HSCROLL:
{ // Riflette l'evento E_HSCROLL sull'altra finestra di anteprima spacciandolo per E_USER
const short buddy = owner().dlg() == F_REPORT ? F_REPORTH : F_REPORT;
TWindowed_field& fld = (TWindowed_field&)owner().mask().field(buddy);
ep->type = E_USER;
dispatch_event(fld.win().win(), *ep, false);
ep->type = E_HSCROLL;
}
break;
case E_USER:
// Mi e' arrivato un E_HSCROLL camuffato E_USER dall'altra finestra di anteprima
ep->type = E_HSCROLL;
break;
default:
break;
}
@ -900,34 +930,57 @@ TPoint TReport_window::dev2log(const PNT& pt) const
void TReport_window::draw_grid()
{
const int k = 100;
clear(COLOR_WHITE);
const int max = 196;
const int k = 100;
for (int i = 1; i < max; i++)
{
set_pen(i%10 ? MAKE_COLOR(232,232,255) : MAKE_COLOR(255,192,255));
line(0, i*k, max*k, i*k);
line(i*k, 0, i*k, max*k);
}
const TReport_section& rs = curr_section();
int x = rs.width();
int y = rs.height();
if (x <= 0) x = 196*k;
if (y <= 0) // Sezione ad altezza variabile
{
for (int i = 0; i < rs.items(); i++)
{
const TReport_field& rf = rs.field(i);
const int fy = rf.get_rect().bottom();
const TRectangle& rct = rf.get_rect();
const int fy = rct.bottom();
if (fy > y) y = fy;
}
const int mod = y % 100;
if (mod != 0) y += 100-mod;
const int mod = y % k;
if (mod != 0) y += k-mod;
}
if (y > 0) // Disegna barra di fine sezione
if (rs.type() == 'B' && rs.level() == 0)
x = y = 196*k;
// Disegna l'eventuale sfondo di sezione
const bool draw_back = y > 0 && (rs.border() > 0
|| (rs.pattern() >= PAT_SOLID && rs.back_color() != COLOR_WHITE));
if (draw_back)
{
const PNT p = log2dev(0, y);
const PNT p = log2dev(x, y);;
RCT rct; xvt_rect_set(&rct, 0, 0, p.h, p.v);
int rad = 0;
if (rs.radius() > 0)
{
const PNT p0 = log2dev(0,0);
const PNT pr = log2dev(rs.radius(),rs.radius());
rad = min(pr.h-p0.h, pr.v-p0.v);
}
advanced_draw_rect(*this, rct, rs.pattern(), rs.border(), rs.fore_color(), rs.back_color(), rad);
}
for (int i = x/k; i > 0; i--)
{
set_pen(i%10 ? MAKE_COLOR(232,232,255) : MAKE_COLOR(255,192,255));
line(0, i*k, x, i*k);
line(i*k, 0, i*k, y <= 0 ? x : y);
}
if (y > 0) // Disegna barra di fine sezione
{
const PNT p = log2dev(x, y);
RCT rct; xvt_vobj_get_client_rect(win(), &rct);
if (p.v < rct.bottom)
{
@ -937,7 +990,6 @@ void TReport_window::draw_grid()
xvt_dwin_draw_rect(win(), &rct);
}
}
}
void TReport_window::draw_broken_paper(const TReport_field& rf)
@ -967,6 +1019,12 @@ void TReport_window::draw_broken_paper(const TReport_field& rf)
void TReport_window::draw_field(const TReport_field& rf)
{
RCT r; TWindow::log2dev(rf.get_rect(), r);
int rad = 0;
if (rf.radius() > 0)
{
const int width = r.right - r.left;
rad = rf.radius() * width / rf.get_rect().width();
}
PAT_STYLE back_pattern = PAT_HOLLOW;
const int k = (rf.hidden() ? 1 : 0) + (rf.deactivated() ? 2 : 0);
@ -981,7 +1039,7 @@ void TReport_window::draw_field(const TReport_field& rf)
switch (rf.type())
{
case 'E':
if (advanced_set_draw_tools(*this, rf.border(), rf.fore_color(), rf.back_color()))
if (advanced_set_draw_tools(*this, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color()))
xvt_dwin_draw_oval(win(), &r);
back_pattern = PAT_HOLLOW;
break;
@ -993,11 +1051,11 @@ void TReport_window::draw_field(const TReport_field& rf)
const TImage* img = _images.image(name);
if (img != NULL && img->ok())
img->draw(win(), r);
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), COLOR_WHITE);
advanced_draw_rect(*this, r, PAT_HOLLOW, rf.border(), rf.fore_color(), COLOR_WHITE, 0);
}
break;
case 'L':
if (advanced_set_draw_tools(*this, rf.border(), rf.fore_color(), COLOR_WHITE))
if (advanced_set_draw_tools(*this, PAT_SOLID, rf.border(), rf.fore_color(), COLOR_WHITE))
{
const PNT f = { r.top, r.left };
xvt_dwin_draw_set_pos(win(), f);
@ -1007,11 +1065,11 @@ void TReport_window::draw_field(const TReport_field& rf)
back_pattern = PAT_HOLLOW;
break;
case 'R':
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), rf.back_color());
advanced_draw_rect(*this, r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad);
break;
case 'T':
{
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), rf.back_color());
advanced_draw_rect(*this, r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad);
xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this));
set_color(rf.fore_color(), rf.back_color());
TString str = rf.picture();
@ -1024,9 +1082,9 @@ void TReport_window::draw_field(const TReport_field& rf)
else
{
if (rf.border() <= 0) // Rendi piu' visibile il bordo dei campi che non ce l'hanno
advanced_draw_rect(*this, r, 1, COLOR_LTGRAY, COLOR_WHITE);
advanced_draw_rect(*this, r, PAT_HOLLOW, 1, COLOR_LTGRAY, COLOR_WHITE, 0);
else
advanced_draw_rect(*this, r, rf.border(), rf.fore_color(), rf.back_color());
advanced_draw_rect(*this, r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad);
}
if (rf.link().not_empty())
@ -1061,7 +1119,7 @@ void TReport_window::draw_field(const TReport_field& rf)
}
if (rf.selected())
{
advanced_set_draw_tools(*this, 0, COLOR_WHITE, COLOR_GRAY);
advanced_set_draw_tools(*this, PAT_SOLID, 0, COLOR_WHITE, COLOR_GRAY);
const int k = 5;
RCT s = r; s.right = s.left+k; s.bottom = s.top+k;
xvt_dwin_draw_rect(win(), &s);

View File

@ -9,7 +9,7 @@ PAGE "Libri sociali" -1 -1 78 9
NUMBER FLD_TABITL_CODTAB 2
BEGIN
PROMPT 2 1 "Codice "
FIELD %ITL->CODTAB
FIELD CODTAB
HELP "Codice del libro sociale"
USE %ITL
CHECKTYPE REQUIRED
@ -25,7 +25,7 @@ END
STRING FLD_TABITL_S0 50
BEGIN
PROMPT 2 3 "Descrizione "
FIELD %ITL->S0
FIELD S0
HELP "Nome del libro sociale"
USE %ITL KEY 2
CHECKTYPE REQUIRED