Patch level : 2.1 92

Files correlati     : ba8
Ricompilazione Demo : [ ]
Commento            :

Aggiunto supporto per ombreggiature e font della stampante


git-svn-id: svn://10.65.10.50/trunk@12257 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2004-07-27 14:20:56 +00:00
parent 913613ac22
commit 76c88609d7
6 changed files with 118 additions and 41 deletions

View File

@ -259,7 +259,8 @@ void TReport_field_mask::vedo_non_vedo()
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_RADIUS, type != 'E' && type != 'L' && type != 'I');
show(F_SHADE_OFFSET,type != 'E' && type != 'L');
show(F_FONT_SELECT, is_text);
show(F_SOURCE, (is_text || type == 'I') && type != 'T');
show(F_SOURCE2, is_text && type != 'T');
@ -293,6 +294,8 @@ bool TReport_field_mask::on_field_event(TOperable_field& o, TField_event e, long
case F_Y:
case F_DX:
case F_DY:
case F_RADIUS:
case F_SHADE_OFFSET:
if (e == fe_modify)
{
const int num = get_num(o.dlg());
@ -379,6 +382,7 @@ void TReport_field_mask::set_field(const TReport_field& rf)
set(F_BORDER, rf.border());
set(F_PATTERN, rf.pattern());
set_num(F_RADIUS, rf.radius());
set_num(F_SHADE_OFFSET, rf.shade_offset());
_fgcolor = rf.fore_color();
_bgcolor = rf.back_color();
set(F_TEXT, rf.picture());
@ -414,6 +418,7 @@ void TReport_field_mask::get_field(TReport_field& rf) const
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_shade_offset(get_num(F_SHADE_OFFSET));
rf.set_fore_color(_fgcolor);
rf.set_back_color(_bgcolor);
if (strchr("VP", rf.type()) != NULL)
@ -676,6 +681,7 @@ void TSection_properties_mask::get_section(TReport_section& rs) const
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);
@ -712,6 +718,7 @@ bool TReport_properties_mask::on_field_event(TOperable_field& o, TField_event e,
void TReport_properties_mask::set_report(const TReport& r)
{
set(F_FONT_AUTO, r.use_printer_font());
set(F_DY, r.lpi());
set_font_info(r.font());
set(F_INCLUDE, ((TReport&)r).get_libraries());
@ -723,11 +730,15 @@ void TReport_properties_mask::set_report(const TReport& r)
void TReport_properties_mask::get_report(TReport& r) const
{
r.set_lpi(get_int(F_DY));
TReport_font f;
if (get_font_info(f))
r.set_font(f);
const bool af = get_bool(F_FONT_AUTO);
r.set_use_printer_font(af);
if (!af)
{
r.set_lpi(get_int(F_DY));
TReport_font f;
if (get_font_info(f))
r.set_font(f);
}
const TString& oldlib = r.get_libraries();
if (oldlib != get(F_INCLUDE))

View File

@ -42,6 +42,7 @@
#define F_DYNAMIC_HEIGHT 147
#define F_RADIUS 148
#define F_PATTERN 149
#define F_SHADE_OFFSET 150
#define F_LEVEL 160
#define F_GROUP_BY 161
@ -50,6 +51,7 @@
#define F_KEEP_WITH_NEXT 164
#define F_CONDITION 165
#define F_REPEAT 166
#define F_FONT_AUTO 167
#define F_SQL 201
#define F_IMPORT_QRY 202

View File

@ -161,19 +161,15 @@ LIST F_BORDER 1 12
BEGIN
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
STRING F_RADIUS 4
BEGIN
PROMPT 32 7 "Raggio smussatura "
FLAGS "U"
FLAGS "UR"
END
LIST F_PATTERN 1 18
@ -197,6 +193,12 @@ BEGIN
MESSAGE SHOW,F_BGCOLOR
END
STRING F_SHADE_OFFSET 4
BEGIN
PROMPT 32 8 "Ombreggiatura "
FLAGS "UR"
END
BUTTON F_FONT_SELECT 14 2
BEGIN
PROMPT 2 10 "~Font"

View File

@ -113,19 +113,15 @@ 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
STRING F_RADIUS 4
BEGIN
PROMPT 26 1 "Raggio smussatura "
FLAGS "U"
FLAGS "UR"
END
BUTTON F_FGCOLOR 14 1

View File

@ -1,21 +1,28 @@
#include "ba8300.h"
PAGE "Report" -1 -1 60 13
PAGE "Report" -1 -1 60 16
BOOLEAN F_FONT_AUTO
BEGIN
PROMPT 1 0 "Seleziona font in base alle impostazioni della stampante"
MESSAGE FALSE ENABLE,F_FONT_SELECT|ENABLE,F_DY
MESSAGE TRUE DISABLE,F_FONT_SELECT|DISABLE,F_DY
END
NUMBER F_DY 2
BEGIN
PROMPT 1 0 "Linee per pollice "
PROMPT 1 1 "Linee per pollice "
CHEKCTYPE REQUIRED
END
BUTTON F_FONT_SELECT 10 2
BEGIN
PROMPT 1 1 "~Font"
PROMPT 1 2 "~Font"
END
SPREADSHEET F_PARAMS 0 -3
BEGIN
PROMPT 1 3 ""
PROMPT 1 4 ""
ITEM "Parametro@16"
ITEM "Valore@50"
END
@ -32,31 +39,31 @@ END
ENDPAGE
PAGE "Avanzate" -1 -1 50 16
PAGE "Avanzate" -1 -1 60 16
MEMO F_INCLUDE 48 2
MEMO F_INCLUDE 58 2
BEGIN
PROMPT 1 0 "Librerie (separate da ,) "
END
MEMO F_PRESCRIPT 48 6
MEMO F_PRESCRIPT 58 6
BEGIN
PROMPT 1 2 "Script iniziale"
END
MEMO F_POSTSCRIPT 48 3
MEMO F_POSTSCRIPT 58 5
BEGIN
PROMPT 1 8 "Script finale"
END
BUTTON DLG_CANCEL 10 2
BEGIN
PROMPT -13 -1 ""
PROMPT -12 -1 ""
END
BUTTON DLG_OK 10 2
BEGIN
PROMPT -33 -1 ""
PROMPT -22 -1 ""
END
ENDPAGE

View File

@ -1,6 +1,7 @@
#include <xinclude.h>
#include <statbar.h>
#include <colors.h>
#include <diction.h>
#include <image.h>
#include <mask.h>
@ -306,6 +307,11 @@ int TReport_tree::image_height() const
return img != NULL ? img->height() : 0;
}
///////////////////////////////////////////////////////////
// Utility
///////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////
// TReport_window
///////////////////////////////////////////////////////////
@ -348,6 +354,9 @@ protected:
int cpi() const;
int lpi() const;
bool advanced_set_draw_tools(PAT_STYLE pat, int border, COLOR fore, COLOR back);
void advanced_draw_rect(const RCT& r, PAT_STYLE pat, int border, COLOR fore, COLOR back, int radius, int shade);
public:
virtual PNT log2dev(long x, long y) const;
virtual TPoint dev2log(const PNT& pt) const;
@ -967,6 +976,49 @@ TPoint TReport_window::dev2log(const PNT& pt) const
return p;
}
bool TReport_window::advanced_set_draw_tools(PAT_STYLE pat, int border, COLOR fore, COLOR back)
{
const bool has_pen = border > 0;
const bool has_brush = pat > PAT_HOLLOW;
const bool visible = has_pen || has_brush;
if (visible)
{
if (has_pen)
set_pen(fore, border, PAT_SOLID);
else
hide_pen();
if (has_brush)
set_brush(back, pat);
else
hide_brush();
}
return visible;
}
void TReport_window::advanced_draw_rect(const RCT& r, PAT_STYLE pat, int border, COLOR fore, COLOR back, int radius, int shade)
{
if (shade != 0 && pat == PAT_SOLID)
{
if (advanced_set_draw_tools(pat, 0, COLOR_GRAY, COLOR_GRAY))
{
RCT rct = r;
xvt_rect_offset(&rct, shade, shade);
if (radius > 0)
xvt_dwin_draw_roundrect(win(), &rct, radius, radius);
else
xvt_dwin_draw_rect(win(), (RCT*)&rct);
}
}
if (advanced_set_draw_tools(pat, border, fore, back))
{
if (radius > 0)
xvt_dwin_draw_roundrect(win(), &r, radius, radius);
else
xvt_dwin_draw_rect(win(), (RCT*)&r);
}
}
void TReport_window::draw_grid()
{
const int k = 100;
@ -998,7 +1050,7 @@ void TReport_window::draw_grid()
|| (rs.pattern() >= PAT_SOLID && rs.back_color() != COLOR_WHITE));
if (draw_back)
{
const PNT p = log2dev(x, 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)
@ -1007,7 +1059,7 @@ void TReport_window::draw_grid()
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);
advanced_draw_rect(rct, rs.pattern(), rs.border(), rs.fore_color(), rs.back_color(), rad, 0);
}
for (int i = x/k; i > 0; i--)
@ -1024,7 +1076,7 @@ void TReport_window::draw_grid()
if (p.v < rct.bottom)
{
hide_pen();
set_brush(COLOR_LTGRAY, PAT_DIAGCROSS);
set_brush(MASK_BACK_COLOR, PAT_DIAGCROSS);
rct.top = p.v;
xvt_dwin_draw_rect(win(), &rct);
}
@ -1065,6 +1117,13 @@ void TReport_window::draw_field(const TReport_field& rf)
rad = rf.radius() * width / rf.get_rect().width();
}
int off = 0;
if (rf.shade_offset() > 0)
{
const int width = r.right - r.left;
off = rf.shade_offset() * width / rf.get_rect().width();
}
PAT_STYLE back_pattern = PAT_HOLLOW;
const int k = (rf.hidden() ? 1 : 0) + (rf.deactivated() ? 2 : 0);
switch (k)
@ -1078,7 +1137,7 @@ void TReport_window::draw_field(const TReport_field& rf)
switch (rf.type())
{
case 'E':
if (advanced_set_draw_tools(*this, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color()))
if (advanced_set_draw_tools(rf.pattern(), rf.border(), rf.fore_color(), rf.back_color()))
xvt_dwin_draw_oval(win(), &r);
back_pattern = PAT_HOLLOW;
break;
@ -1090,11 +1149,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, PAT_HOLLOW, rf.border(), rf.fore_color(), COLOR_WHITE, 0);
advanced_draw_rect(r, PAT_HOLLOW, rf.border(), rf.fore_color(), COLOR_WHITE, 0, off);
}
break;
case 'L':
if (advanced_set_draw_tools(*this, PAT_SOLID, rf.border(), rf.fore_color(), COLOR_WHITE))
if (advanced_set_draw_tools(PAT_SOLID, rf.border(), rf.fore_color(), COLOR_WHITE))
{
const PNT f = { r.top, r.left };
xvt_dwin_draw_set_pos(win(), f);
@ -1104,11 +1163,11 @@ void TReport_window::draw_field(const TReport_field& rf)
back_pattern = PAT_HOLLOW;
break;
case 'R':
advanced_draw_rect(*this, r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad);
advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad, off);
break;
case 'T':
{
advanced_draw_rect(*this, r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad);
advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad, off);
xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this));
set_color(rf.fore_color(), rf.back_color());
TString str = rf.picture();
@ -1121,9 +1180,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, PAT_HOLLOW, 1, COLOR_LTGRAY, COLOR_WHITE, 0);
advanced_draw_rect(r, PAT_HOLLOW, 1, COLOR_LTGRAY, COLOR_WHITE, 0, 0);
else
advanced_draw_rect(*this, r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad);
advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad, off);
}
if (rf.link().not_empty())
@ -1158,7 +1217,7 @@ void TReport_window::draw_field(const TReport_field& rf)
}
if (rf.selected())
{
advanced_set_draw_tools(*this, PAT_SOLID, 0, COLOR_WHITE, COLOR_GRAY);
advanced_set_draw_tools(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);