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_FGCOLOR, type != 'I');
show(F_BGCOLOR, type != 'L'); show(F_BGCOLOR, type != 'L');
show(F_PATTERN, type != 'L' && type != 'I'); 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_FONT_SELECT, is_text);
show(F_SOURCE, (is_text || type == 'I') && type != 'T'); show(F_SOURCE, (is_text || type == 'I') && type != 'T');
show(F_SOURCE2, is_text && 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_Y:
case F_DX: case F_DX:
case F_DY: case F_DY:
case F_RADIUS:
case F_SHADE_OFFSET:
if (e == fe_modify) if (e == fe_modify)
{ {
const int num = get_num(o.dlg()); 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_BORDER, rf.border());
set(F_PATTERN, rf.pattern()); set(F_PATTERN, rf.pattern());
set_num(F_RADIUS, rf.radius()); set_num(F_RADIUS, rf.radius());
set_num(F_SHADE_OFFSET, rf.shade_offset());
_fgcolor = rf.fore_color(); _fgcolor = rf.fore_color();
_bgcolor = rf.back_color(); _bgcolor = rf.back_color();
set(F_TEXT, rf.picture()); 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_pattern((PAT_STYLE)get_int(F_PATTERN));
rf.set_border(get_int(F_BORDER)); rf.set_border(get_int(F_BORDER));
rf.set_radius(get_num(F_RADIUS)); rf.set_radius(get_num(F_RADIUS));
rf.set_shade_offset(get_num(F_SHADE_OFFSET));
rf.set_fore_color(_fgcolor); rf.set_fore_color(_fgcolor);
rf.set_back_color(_bgcolor); rf.set_back_color(_bgcolor);
if (strchr("VP", rf.type()) != NULL) 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_radius(get_num(F_RADIUS));
rs.set_fore_color(_fgcolor); rs.set_fore_color(_fgcolor);
rs.set_back_color(_bgcolor); rs.set_back_color(_bgcolor);
TReport_font f; TReport_font f;
if (get_font_info(f)) if (get_font_info(f))
rs.set_font(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) void TReport_properties_mask::set_report(const TReport& r)
{ {
set(F_FONT_AUTO, r.use_printer_font());
set(F_DY, r.lpi()); set(F_DY, r.lpi());
set_font_info(r.font()); set_font_info(r.font());
set(F_INCLUDE, ((TReport&)r).get_libraries()); 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 void TReport_properties_mask::get_report(TReport& r) const
{ {
r.set_lpi(get_int(F_DY)); const bool af = get_bool(F_FONT_AUTO);
r.set_use_printer_font(af);
TReport_font f; if (!af)
if (get_font_info(f)) {
r.set_font(f); 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(); const TString& oldlib = r.get_libraries();
if (oldlib != get(F_INCLUDE)) if (oldlib != get(F_INCLUDE))

View File

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

View File

@ -161,19 +161,15 @@ LIST F_BORDER 1 12
BEGIN BEGIN
PROMPT 2 7 "Bordo " PROMPT 2 7 "Bordo "
ITEM "0|Nessuno" ITEM "0|Nessuno"
MESSAGE HIDE,F_RADIUS
ITEM "1|Sottile" ITEM "1|Sottile"
MESSAGE SHOW,F_RADIUS
ITEM "2|Normale" ITEM "2|Normale"
MESSAGE SHOW,F_RADIUS
ITEM "3|Spesso" ITEM "3|Spesso"
MESSAGE SHOW,F_RADIUS
END END
NUMBER F_RADIUS 3 STRING F_RADIUS 4
BEGIN BEGIN
PROMPT 32 7 "Raggio smussatura " PROMPT 32 7 "Raggio smussatura "
FLAGS "U" FLAGS "UR"
END END
LIST F_PATTERN 1 18 LIST F_PATTERN 1 18
@ -197,6 +193,12 @@ BEGIN
MESSAGE SHOW,F_BGCOLOR MESSAGE SHOW,F_BGCOLOR
END END
STRING F_SHADE_OFFSET 4
BEGIN
PROMPT 32 8 "Ombreggiatura "
FLAGS "UR"
END
BUTTON F_FONT_SELECT 14 2 BUTTON F_FONT_SELECT 14 2
BEGIN BEGIN
PROMPT 2 10 "~Font" PROMPT 2 10 "~Font"

View File

@ -113,19 +113,15 @@ LIST F_BORDER 1 12
BEGIN BEGIN
PROMPT 2 1 "Bordo " PROMPT 2 1 "Bordo "
ITEM "0|Nessuno" ITEM "0|Nessuno"
MESSAGE HIDE,F_RADIUS
ITEM "1|Sottile" ITEM "1|Sottile"
MESSAGE SHOW,F_RADIUS
ITEM "2|Normale" ITEM "2|Normale"
MESSAGE SHOW,F_RADIUS
ITEM "3|Spesso" ITEM "3|Spesso"
MESSAGE SHOW,F_RADIUS
END END
NUMBER F_RADIUS 3 STRING F_RADIUS 4
BEGIN BEGIN
PROMPT 26 1 "Raggio smussatura " PROMPT 26 1 "Raggio smussatura "
FLAGS "U" FLAGS "UR"
END END
BUTTON F_FGCOLOR 14 1 BUTTON F_FGCOLOR 14 1

View File

@ -1,21 +1,28 @@
#include "ba8300.h" #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 NUMBER F_DY 2
BEGIN BEGIN
PROMPT 1 0 "Linee per pollice " PROMPT 1 1 "Linee per pollice "
CHEKCTYPE REQUIRED CHEKCTYPE REQUIRED
END END
BUTTON F_FONT_SELECT 10 2 BUTTON F_FONT_SELECT 10 2
BEGIN BEGIN
PROMPT 1 1 "~Font" PROMPT 1 2 "~Font"
END END
SPREADSHEET F_PARAMS 0 -3 SPREADSHEET F_PARAMS 0 -3
BEGIN BEGIN
PROMPT 1 3 "" PROMPT 1 4 ""
ITEM "Parametro@16" ITEM "Parametro@16"
ITEM "Valore@50" ITEM "Valore@50"
END END
@ -32,31 +39,31 @@ END
ENDPAGE ENDPAGE
PAGE "Avanzate" -1 -1 50 16 PAGE "Avanzate" -1 -1 60 16
MEMO F_INCLUDE 48 2 MEMO F_INCLUDE 58 2
BEGIN BEGIN
PROMPT 1 0 "Librerie (separate da ,) " PROMPT 1 0 "Librerie (separate da ,) "
END END
MEMO F_PRESCRIPT 48 6 MEMO F_PRESCRIPT 58 6
BEGIN BEGIN
PROMPT 1 2 "Script iniziale" PROMPT 1 2 "Script iniziale"
END END
MEMO F_POSTSCRIPT 48 3 MEMO F_POSTSCRIPT 58 5
BEGIN BEGIN
PROMPT 1 8 "Script finale" PROMPT 1 8 "Script finale"
END END
BUTTON DLG_CANCEL 10 2 BUTTON DLG_CANCEL 10 2
BEGIN BEGIN
PROMPT -13 -1 "" PROMPT -12 -1 ""
END END
BUTTON DLG_OK 10 2 BUTTON DLG_OK 10 2
BEGIN BEGIN
PROMPT -33 -1 "" PROMPT -22 -1 ""
END END
ENDPAGE ENDPAGE

View File

@ -1,6 +1,7 @@
#include <xinclude.h> #include <xinclude.h>
#include <statbar.h> #include <statbar.h>
#include <colors.h>
#include <diction.h> #include <diction.h>
#include <image.h> #include <image.h>
#include <mask.h> #include <mask.h>
@ -306,6 +307,11 @@ int TReport_tree::image_height() const
return img != NULL ? img->height() : 0; return img != NULL ? img->height() : 0;
} }
///////////////////////////////////////////////////////////
// Utility
///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TReport_window // TReport_window
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -348,6 +354,9 @@ protected:
int cpi() const; int cpi() const;
int lpi() 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: public:
virtual PNT log2dev(long x, long y) const; virtual PNT log2dev(long x, long y) const;
virtual TPoint dev2log(const PNT& pt) const; virtual TPoint dev2log(const PNT& pt) const;
@ -967,6 +976,49 @@ TPoint TReport_window::dev2log(const PNT& pt) const
return p; 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() void TReport_window::draw_grid()
{ {
const int k = 100; const int k = 100;
@ -998,7 +1050,7 @@ void TReport_window::draw_grid()
|| (rs.pattern() >= PAT_SOLID && rs.back_color() != COLOR_WHITE)); || (rs.pattern() >= PAT_SOLID && rs.back_color() != COLOR_WHITE));
if (draw_back) 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); RCT rct; xvt_rect_set(&rct, 0, 0, p.h, p.v);
int rad = 0; int rad = 0;
if (rs.radius() > 0) if (rs.radius() > 0)
@ -1007,7 +1059,7 @@ void TReport_window::draw_grid()
const PNT pr = log2dev(rs.radius(),rs.radius()); const PNT pr = log2dev(rs.radius(),rs.radius());
rad = min(pr.h-p0.h, pr.v-p0.v); 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--) for (int i = x/k; i > 0; i--)
@ -1024,7 +1076,7 @@ void TReport_window::draw_grid()
if (p.v < rct.bottom) if (p.v < rct.bottom)
{ {
hide_pen(); hide_pen();
set_brush(COLOR_LTGRAY, PAT_DIAGCROSS); set_brush(MASK_BACK_COLOR, PAT_DIAGCROSS);
rct.top = p.v; rct.top = p.v;
xvt_dwin_draw_rect(win(), &rct); 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(); 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; PAT_STYLE back_pattern = PAT_HOLLOW;
const int k = (rf.hidden() ? 1 : 0) + (rf.deactivated() ? 2 : 0); const int k = (rf.hidden() ? 1 : 0) + (rf.deactivated() ? 2 : 0);
switch (k) switch (k)
@ -1078,7 +1137,7 @@ void TReport_window::draw_field(const TReport_field& rf)
switch (rf.type()) switch (rf.type())
{ {
case 'E': 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); xvt_dwin_draw_oval(win(), &r);
back_pattern = PAT_HOLLOW; back_pattern = PAT_HOLLOW;
break; break;
@ -1090,11 +1149,11 @@ void TReport_window::draw_field(const TReport_field& rf)
const TImage* img = _images.image(name); const TImage* img = _images.image(name);
if (img != NULL && img->ok()) if (img != NULL && img->ok())
img->draw(win(), r); 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; break;
case 'L': 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 }; const PNT f = { r.top, r.left };
xvt_dwin_draw_set_pos(win(), f); xvt_dwin_draw_set_pos(win(), f);
@ -1104,11 +1163,11 @@ void TReport_window::draw_field(const TReport_field& rf)
back_pattern = PAT_HOLLOW; back_pattern = PAT_HOLLOW;
break; break;
case 'R': 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; break;
case 'T': 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)); xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this));
set_color(rf.fore_color(), rf.back_color()); set_color(rf.fore_color(), rf.back_color());
TString str = rf.picture(); TString str = rf.picture();
@ -1121,9 +1180,9 @@ void TReport_window::draw_field(const TReport_field& rf)
else else
{ {
if (rf.border() <= 0) // Rendi piu' visibile il bordo dei campi che non ce l'hanno 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 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()) if (rf.link().not_empty())
@ -1158,7 +1217,7 @@ void TReport_window::draw_field(const TReport_field& rf)
} }
if (rf.selected()) 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; const int k = 5;
RCT s = r; s.right = s.left+k; s.bottom = s.top+k; RCT s = r; s.right = s.left+k; s.bottom = s.top+k;
xvt_dwin_draw_rect(win(), &s); xvt_dwin_draw_rect(win(), &s);