From 309d8b23fdc1e44ab6c05d5fa57932c5bc627319 Mon Sep 17 00:00:00 2001 From: guy Date: Tue, 13 Apr 2010 14:31:37 +0000 Subject: [PATCH] Patch level : 10.0 Files correlati : ba8300a.msk ba8300b.msk ba8300c.msk ba8.exe Ricompilazione Demo : [ ] Commento : Riassunto 0001600: Dopo la stampa di un report in orizz ritorna in visual con il foglio in vert. Faccio l'anteprima di un report creato con orientamento foglio orrizzontale fisso, dopo aver stampato ritorna in visualizzazione con l'orientamento del foglio impostato sulla stampante (normalmente in verticale) git-svn-id: svn://10.65.10.50/trunk@20332 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- ba/ba8200.cpp | 25 ++-- ba/ba8300.cpp | 135 +-------------------- ba/ba8300.h | 3 + ba/ba8300a.uml | 4 +- ba/ba8300b.uml | 47 ++++++-- ba/ba8300c.uml | 34 ++++-- ba/ba8301.cpp | 316 +++++++++++++++++++++++++++++++++++++------------ ba/ba8301.h | 11 +- 8 files changed, 328 insertions(+), 247 deletions(-) diff --git a/ba/ba8200.cpp b/ba/ba8200.cpp index 53b96a29c..4ef9895eb 100755 --- a/ba/ba8200.cpp +++ b/ba/ba8200.cpp @@ -327,7 +327,7 @@ protected: public: void edit_query(); - void save_as(TRecordsetExportFormat fmt); + void save_as(TRecordsetExportFormat fmt, const char* ext = NULL); bool load_query(); bool save_query(); @@ -893,7 +893,7 @@ void TQuery_mask::edit_query() } } -void TQuery_mask::save_as(TRecordsetExportFormat fmt) +void TQuery_mask::save_as(TRecordsetExportFormat fmt, const char* ext) { TRecordset* rex = new_recordset(); if (rex == NULL) @@ -918,23 +918,22 @@ void TQuery_mask::save_as(TRecordsetExportFormat fmt) xvt_fsys_save_dir(); TFilename path; path.tempdir(); - const char* ext = "txt"; - switch (fmt) + if (ext == NULL || *ext == '\0') { - case fmt_html: ext = "html"; break; - default: break; + switch (fmt) + { + case fmt_html: ext = "html"; break; + default : ext = "txt"; break; + } } - FILE_SPEC fs; -/* xvt_fsys_convert_str_to_dir(path, &fs.dir); - strcpy(fs.name, get(F_CODICE)); - strcpy(fs.type, ext); - strcpy(fs.creator, "AGA"); */ if (field(F_CODICE).empty()) path.add("query"); else path.add(get(F_CODICE)); path.ext(ext); + + FILE_SPEC fs; xvt_fsys_convert_str_to_fspec(path, &fs); xvt_fsys_save_dir(); @@ -1314,7 +1313,7 @@ bool TQuery_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) break; case F_EXPORT_EXCEL: if (e == fe_button) - save_as(fmt_html); + save_as(fmt_html, "xls"); break; case F_EXPORT_TXT: if (e == fe_button) @@ -1477,7 +1476,7 @@ bool TSQL_recordset_app::create() _msk->save_as(fmt_text); break; case 'X': - _msk->save_as(fmt_html); + _msk->save_as(fmt_html, "xls"); break; case 'C': _msk->save_as(fmt_campo); diff --git a/ba/ba8300.cpp b/ba/ba8300.cpp index 1e2fe4bbe..45615be68 100755 --- a/ba/ba8300.cpp +++ b/ba/ba8300.cpp @@ -17,116 +17,6 @@ #include "ba8301.h" #include -/////////////////////////////////////////////////////////// -// TPrinter_font_mask -/////////////////////////////////////////////////////////// - -class TPrinter_font_mask : public TAutomask -{ - XVT_FNTID _font; - virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); - -public: - TPrinter_font_mask(XVT_FNTID font); -}; - -bool TReport_base_mask::choose_printer_font(XVT_FNTID font) -{ - TPrinter_font_mask m(font); - const bool ok = m.run() == K_ENTER; - if (ok) - { - xvt_font_set_family(font, m.get(102)); - xvt_font_set_size(font, m.get_int(103)); - } - return ok; -} - -bool TPrinter_font_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) -{ - PRINT_RCD* rcd = printer().get_printrcd(); - if (rcd == NULL) - return false; - - switch (o.dlg()) - { - case 101: - if (e == fe_init) - { - o.set(printer().printername()); - } - break; - case 102: - if (e == fe_init) - { - const int MAX_FAMILIES = 256; - char* family[MAX_FAMILIES]; - const int num_families = (int)xvt_fmap_get_families(rcd, family, MAX_FAMILIES); - - TToken_string fn(num_families * 16); - for (int i = 0; i < num_families; i++) - { - fn.add(family[i]); - xvt_mem_free(family[i]); - } - - TList_field& fonts = (TList_field&)o; - fonts.replace_items(fn, fn); - - TString80 buf; - xvt_font_get_family(_font, buf.get_buffer(), buf.size()); - fonts.set(buf); - } - if (e == fe_init || e == fe_modify) - { - TList_field& lst = (TList_field&)field(103); - TString4 old_size = lst.get(); - if (old_size.empty()) - old_size << xvt_font_get_size(_font); - - const int MAXSIZES = 8; - long sizes[MAXSIZES]; - BOOLEAN scalable = FALSE; - TString80 str = o.get(); - const int num_sizes = (int)xvt_fmap_get_family_sizes(rcd, str.get_buffer(), sizes, &scalable, MAXSIZES); - TToken_string pn1; - if (scalable) - { - for (int i = 4; i < 96; i++) - pn1.add(i); - } - else - { - if (num_sizes > 0) - { - for (int i = 0; i < num_sizes; i++) - pn1.add(sizes[i]); - } - else - pn1.add(printer().get_char_size()); // semper better than nothing - } - lst.replace_items(pn1, pn1); - lst.set(old_size); - lst.enable(pn1.items() > 1); - } - break; - default: - break; - } - return true; -} - -TPrinter_font_mask::TPrinter_font_mask(XVT_FNTID font) - : TAutomask(TR("Selezione Font nativo"), 1, 68, 5), _font(font) -{ - add_string(101, 0, PR("Stampante "), 1, 1, 256, "LG", 50); - add_list(102, 0, PR("Nome "), 1, 2, 50, "", "", ""); - add_list(103, 0, PR("Dimensioni "), 1, 3, 2, "", "", ""); - add_button(DLG_OK, 0, "", -12, -1, 10, 2); - add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2); - set_handlers(); -} - /////////////////////////////////////////////////////////// // TReport_sheet /////////////////////////////////////////////////////////// @@ -221,7 +111,6 @@ 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; @@ -234,25 +123,6 @@ 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() == curr_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, fld.parent()); - rct.top = rctfld.top; rct.bottom = rctfld.bottom; - xi_draw_3d_rect((XinWindow)fld.parent(), (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)); @@ -351,6 +221,8 @@ void TSection_properties_mask::set_section(const TReport_section& rs) set_num(F_RADIUS, rs.radius()); _fgcolor = rs.fore_color(); _bgcolor = rs.back_color(); + _shcolor = rs.shade_color(); + set(F_SHADE_ANGLE, rs.shade_angle()); set_font_info(rs.font()); set(F_PRESCRIPT, rs.prescript()); @@ -385,6 +257,8 @@ 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); + rs.set_shade_color(_shcolor); + rs.set_shade_angle(get_int(F_SHADE_ANGLE)); TReport_font f; if (get_font_info(f)) @@ -457,7 +331,6 @@ void TReport_properties_mask::get_report(TReport& r) const r.set_save_last_printer(get_bool(F_SAVE_PRINTER)); r.set_class(get(F_CLASS)); r.set_command_line(get(F_COMMAND)); - const TString& oldlib = r.get_libraries(); if (oldlib != get(F_INCLUDE)) diff --git a/ba/ba8300.h b/ba/ba8300.h index f72a825dd..6115abd95 100755 --- a/ba/ba8300.h +++ b/ba/ba8300.h @@ -42,6 +42,9 @@ #define F_RADIUS 148 #define F_PATTERN 149 #define F_SHADE_OFFSET 150 +#define F_SHADE_ANGLE 151 +#define F_SHCOLOR 152 +#define F_TXCOLOR 153 #define F_PRFONT_SELECT 159 #define F_LEVEL 160 diff --git a/ba/ba8300a.uml b/ba/ba8300a.uml index 6023fd256..e9725ed2f 100755 --- a/ba/ba8300a.uml +++ b/ba/ba8300a.uml @@ -1,6 +1,6 @@ #include "ba8300.h" -TOOLBAR "" 0 -1 0 1 +TOOLBAR "bottombar" 0 -1 0 1 STRING F_CODICE 256 24 BEGIN @@ -17,7 +17,7 @@ END ENDPAGE -TOOLBAR "" 0 0 0 2 +TOOLBAR "topbar" 0 0 0 2 BUTTON DLG_NEWREC 10 2 BEGIN diff --git a/ba/ba8300b.uml b/ba/ba8300b.uml index 773f8c0f1..c37f8be33 100755 --- a/ba/ba8300b.uml +++ b/ba/ba8300b.uml @@ -126,14 +126,24 @@ BEGIN ITEM "B|Basso" END -BUTTON F_FGCOLOR 14 1 +BUTTON F_TXCOLOR 14 1 BEGIN - PROMPT 2 4 "Colore ~Testo" + PROMPT 2 3 "Colore ~Testo" END BUTTON F_BGCOLOR 14 1 BEGIN - PROMPT 2 5 "Colore ~Sfondo" + PROMPT 2 4 "Colore ~Sfondo" +END + +BUTTON F_FGCOLOR 14 1 +BEGIN + PROMPT 2 5 "Colore ~Bordo" +END + +BUTTON F_SHCOLOR 14 1 +BEGIN + PROMPT 2 6 "Colore ~Sfumato" END LIST F_BORDER 2 15 @@ -156,33 +166,44 @@ BEGIN WARNING "Il raggio deve essere positivo" END -LIST F_PATTERN 1 18 +LIST F_PATTERN 2 18 BEGIN PROMPT 2 8 "Stile " ITEM "2|Pieno" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|SHOW,F_SHADE_OFFSET ITEM "1|Trasparente" - MESSAGE HIDE,F_BGCOLOR + MESSAGE HIDE,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|HIDE,F_SHADE_OFFSET ITEM "3|Linee orizzontali" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|HIDE,F_SHADE_OFFSET ITEM "4|Linee verticali" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|HIDE,F_SHADE_OFFSET ITEM "5|Diagonali \" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|HIDE,F_SHADE_OFFSET ITEM "6|Diagonali /" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|HIDE,F_SHADE_OFFSET ITEM "7|Griglia" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|HIDE,F_SHADE_OFFSET ITEM "8|Griglia diagonale" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE|HIDE,F_SHADE_OFFSET + ITEM "10|Sfumato" + MESSAGE SHOW,F_BGCOLOR|SHOW,F_SHCOLOR|SHOW,F_SHADE_ANGLE|SHOW,F_SHADE_OFFSET END STRING F_SHADE_OFFSET 4 BEGIN - PROMPT 32 8 "Ombreggiatura " + PROMPT 32 8 "Ombreggiatura " FLAGS "UR" END +LIST F_SHADE_ANGLE 3 20 +BEGIN + PROMPT 2 9 "Sfumatura " + ITEM "0|Lineare a destra" + ITEM "90|Lineare in alto" + ITEM "180|Lineare a sinistra" + ITEM "270|Lineare in basso" +END + BUTTON F_FONT_SELECT 14 2 BEGIN PROMPT 2 10 "~Font" diff --git a/ba/ba8300c.uml b/ba/ba8300c.uml index fce200306..a7100937a 100755 --- a/ba/ba8300c.uml +++ b/ba/ba8300c.uml @@ -141,25 +141,27 @@ BEGIN PROMPT 2 2 "Colore ~Bordo" END -LIST F_PATTERN 1 18 +LIST F_PATTERN 2 18 BEGIN PROMPT 2 4 "Sfondo " ITEM "1|Trasparente" - MESSAGE HIDE,F_BGCOLOR + MESSAGE HIDE,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE ITEM "2|Pieno" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE ITEM "3|Linee orizzontali" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE ITEM "4|Linee verticali" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE ITEM "5|Diagonali \" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE ITEM "6|Diagonali /" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE ITEM "7|Griglia" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE ITEM "8|Griglia diagonale" - MESSAGE SHOW,F_BGCOLOR + MESSAGE SHOW,F_BGCOLOR|HIDE,F_SHCOLOR|HIDE,F_SHADE_ANGLE + ITEM "10|Sfumato" + MESSAGE SHOW,F_BGCOLOR|SHOW,F_SHCOLOR|SHOW,F_SHADE_ANGLE END BUTTON F_BGCOLOR 14 1 @@ -167,6 +169,20 @@ BEGIN PROMPT 2 5 "Colore ~Sfondo" END +LIST F_SHADE_ANGLE 3 20 +BEGIN + PROMPT 2 7 "Sfumatura " + ITEM "0|Lineare a destra" + ITEM "90|Lineare in alto" + ITEM "180|Lineare a sinistra" + ITEM "270|Lineare in basso" +END + +BUTTON F_SHCOLOR 14 1 +BEGIN + PROMPT 2 8 "~Riempimento" +END + BUTTON F_FONT_SELECT 14 2 BEGIN PROMPT 2 10 "~Font" diff --git a/ba/ba8301.cpp b/ba/ba8301.cpp index f281087e7..60a4b521b 100755 --- a/ba/ba8301.cpp +++ b/ba/ba8301.cpp @@ -2,9 +2,11 @@ #include "ba8301.h" #include -#include -#include #include +#include +#include +#include +#include #include #include @@ -390,10 +392,141 @@ int TReport_tree::image_height() const return img != NULL ? img->height() : 0; } + +/////////////////////////////////////////////////////////// +// TPrinter_font_mask +/////////////////////////////////////////////////////////// + +class TPrinter_font_mask : public TAutomask +{ + XVT_FNTID _font; + virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + +public: + TPrinter_font_mask(XVT_FNTID font); +}; + +bool TPrinter_font_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) +{ + PRINT_RCD* rcd = printer().get_printrcd(); + if (rcd == NULL) + return false; + + switch (o.dlg()) + { + case 101: + if (e == fe_init) + { + o.set(printer().printername()); + } + break; + case 102: + if (e == fe_init) + { + const int MAX_FAMILIES = 256; + char* family[MAX_FAMILIES]; + const int num_families = (int)xvt_fmap_get_families(rcd, family, MAX_FAMILIES); + + TToken_string fn(num_families * 16); + for (int i = 0; i < num_families; i++) + { + fn.add(family[i]); + xvt_mem_free(family[i]); + } + + TList_field& fonts = (TList_field&)o; + fonts.replace_items(fn, fn); + + TString80 buf; + xvt_font_get_family(_font, buf.get_buffer(), buf.size()); + fonts.set(buf); + } + if (e == fe_init || e == fe_modify) + { + TList_field& lst = (TList_field&)field(103); + TString4 old_size = lst.get(); + if (old_size.empty()) + old_size << xvt_font_get_size(_font); + + const int MAXSIZES = 8; + long sizes[MAXSIZES]; + BOOLEAN scalable = FALSE; + TString80 str = o.get(); + const int num_sizes = (int)xvt_fmap_get_family_sizes(rcd, str.get_buffer(), sizes, &scalable, MAXSIZES); + TToken_string pn1; + if (scalable) + { + for (int i = 4; i < 96; i++) + pn1.add(i); + } + else + { + if (num_sizes > 0) + { + for (int i = 0; i < num_sizes; i++) + pn1.add(sizes[i]); + } + else + pn1.add(printer().get_char_size()); // semper better than nothing + } + lst.replace_items(pn1, pn1); + lst.set(old_size); + lst.enable(pn1.items() > 1); + } + break; + default: + break; + } + return true; +} + +TPrinter_font_mask::TPrinter_font_mask(XVT_FNTID font) + : TAutomask(TR("Selezione Font nativo"), 1, 68, 5), _font(font) +{ + add_string(101, 0, PR("Stampante "), 1, 1, 256, "LG", 50); + add_list(102, 0, PR("Nome "), 1, 2, 50, "", "", ""); + add_list(103, 0, PR("Dimensioni "), 1, 3, 2, "", "", ""); + add_button(DLG_OK, 0, "", -12, -1, 10, 2); + add_button(DLG_CANCEL, 0, "", -22, -1, 10, 2); + set_handlers(); +} + /////////////////////////////////////////////////////////// // TReport_base_mask /////////////////////////////////////////////////////////// +bool TReport_base_mask::draw_3d_rect(short id, COLOR rgb) const +{ + const int pos = id2pos(id); + const bool ok = pos >= 0; + if (ok) + { + TMask_field& f = fld(pos); + if (f.active() && f.parent() == curr_win()) + { + RCT rctfld; f.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, f.parent()); + rct.top = rctfld.top; rct.bottom = rctfld.bottom; + xi_draw_3d_rect((XinWindow)f.parent(), (XI_RCT*)&rct, TRUE, 2, BTN_LIGHT_COLOR, rgb, BTN_DARK_COLOR); + } + } + return ok; +} + +bool TReport_base_mask::choose_printer_font(XVT_FNTID font) +{ + TPrinter_font_mask m(font); + const bool ok = m.run() == K_ENTER; + if (ok) + { + xvt_font_set_family(font, m.get(102)); + xvt_font_set_size(font, m.get_int(103)); + } + return ok; +} + void TReport_base_mask::update() { const TMask_field& fld = field(F_FONT_SELECT); @@ -419,6 +552,11 @@ void TReport_base_mask::update() advanced_draw_text_line(fld.parent(), _font.name(), rct, _halign, _valign); xvt_font_destroy(fontid); } + + const short cid[3] = { F_FGCOLOR, F_BGCOLOR, F_SHCOLOR }; + const COLOR col[3] = { _fgcolor, _bgcolor, _shcolor }; + for (int i = 0; i < 3; i++) + draw_3d_rect(cid[i], col[i]); } bool TReport_base_mask::on_field_event(TOperable_field& o, TField_event e, long jolly) @@ -429,14 +567,21 @@ bool TReport_base_mask::on_field_event(TOperable_field& o, TField_event e, long if (e == fe_button) { _fgcolor = choose_color(_fgcolor, o.parent()); - force_update(); + draw_3d_rect(F_FGCOLOR, _fgcolor); } break; case F_BGCOLOR: if (e == fe_button) { _bgcolor = choose_color(_bgcolor, o.parent()); - force_update(); + draw_3d_rect(F_BGCOLOR, _bgcolor); + } + break; + case F_SHCOLOR: + if (e == fe_button) + { + _shcolor = choose_color(_shcolor, o.parent()); + draw_3d_rect(F_SHCOLOR, _shcolor); } break; case F_PATTERN: @@ -522,12 +667,30 @@ bool TReport_base_mask::get_font_info(TReport_font& font) const return ok; } +void TReport_base_mask::kill_special_pattern() +{ + if (id2pos(F_PATTERN) > 0) + { + TList_field& p = lfield(F_PATTERN); + TToken_string cod = p.get_codes(); + if (cod.get_pos("10") > 0) + { + cod.cut(cod.rfind(cod.separator())); + TToken_string val = p.get_values(); + val.cut(val.rfind(val.separator())); + p.replace_items(cod, val); + } + } +} + TReport_base_mask::TReport_base_mask(const char* name, TReport& rep) - : TAutomask(name), _report(rep), - _font_changed(false), - _halign('C'), _valign('C'), + : TAutomask(name), _report(rep), _font_changed(false), _halign('C'), _valign('C'), _fgcolor(COLOR_BLACK), _bgcolor(COLOR_WHITE) -{ } +{ + // Toglie le sfumature ai mortali + if (!is_power_reseller(true)) + kill_special_pattern(); +} /////////////////////////////////////////////////////////// // TReport_field_mask @@ -545,20 +708,7 @@ long TReport_field_mask::get_num(short id) const void TReport_field_mask::update() { - for (int i = 0; i < 2; i++) - { - TMask_field& fld = field(i == 0 ? F_FGCOLOR : F_BGCOLOR); - if (fld.active() && fld.parent() == curr_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, fld.parent()); - rct.top = rctfld.top; rct.bottom = rctfld.bottom; - xi_draw_3d_rect((XinWindow)fld.parent(), (XinRect*)&rct, TRUE, 2, MASK_LIGHT_COLOR, - i == 0 ? _fgcolor : _bgcolor, MASK_DARK_COLOR); - } - } + draw_3d_rect(F_TXCOLOR, _txcolor); TReport_base_mask::update(); } @@ -608,6 +758,13 @@ bool TReport_field_mask::on_field_event(TOperable_field& o, TField_event e, long { switch(o.dlg()) { + case F_TXCOLOR: + if (e == fe_button) + { + _txcolor = choose_color(_txcolor, o.parent()); + force_update(); + } + break; case F_TYPE: if (e == fe_init || e == fe_modify) { @@ -704,6 +861,9 @@ void TReport_field_mask::set_field(const TReport_field& rf) char str[2] = { rf.type(), '\0' }; set(F_TYPE, str, true); + if (strchr("ELR", rf.type())) + kill_special_pattern(); + const TReport_rct& r = rf.get_rect(); set(F_ID, rf.id()); set_num(F_X, r.left()); @@ -726,9 +886,11 @@ 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()); + set_num(F_SHADE_OFFSET, rf.shadow_offset()); + _txcolor = rf.text_color(); _fgcolor = rf.fore_color(); _bgcolor = rf.back_color(); + _shcolor = rf.shade_color(); set(F_TEXT, rf.picture()); set(F_SOURCE, rf.field()); set(F_SOURCE2, rf.alternate_field()); @@ -762,9 +924,12 @@ 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_shadow_offset(get_num(F_SHADE_OFFSET)); + rf.set_text_color(_txcolor); rf.set_fore_color(_fgcolor); rf.set_back_color(_bgcolor); + rf.set_shade_color(_shcolor); + rf.set_shade_angle(get_int(F_SHADE_ANGLE)); if (strchr("VP", rf.type()) != NULL) rf.set_picture(get_bool(F_HIDE_DOTS) ? "#########,@@" : "###.###.###,@@"); else @@ -779,7 +944,7 @@ void TReport_field_mask::get_field(TReport_field& rf) const rf.set_postscript(get(F_POSTSCRIPT)); if (rf.type() == 'A') { - TSheet_field& list = sfield(F_LIST); + const TSheet_field& list = sfield(F_LIST); rf.set_list(list.rows_array()); } } @@ -839,7 +1004,6 @@ class TReport_window : public TField_window RCT _rct_drag; TReport_image_cache _images; - //int _default_row_height; static TArray _clipboard; @@ -871,7 +1035,8 @@ protected: 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); + void advanced_draw_rect(const RCT& r, PAT_STYLE pat, int border, + COLOR fore, COLOR back, COLOR shade, int radius, int shadow, int angle); void offset_selection(TReport_section& rs, const TReport_size& p); // low level offset public: @@ -1158,9 +1323,8 @@ void TReport_window::popup_menu() menu[12].tag = POPUP_SELALL; menu[12].text = (char*)TR("Seleziona tutto"); menu[12].enabled = ful; menu[13].tag = POPUP_UNSELALL; menu[13].text = (char*)TR("Deseleziona tutto"); menu[13].enabled = ful; menu[14].tag = -1; menu[14].separator = true; - menu[15].tag = POPUP_PROPERTIES; menu[15].text = "Proprieta'"; menu[15].enabled = true; - menu[16].tag = POPUP_NEWFIELD; menu[16].text = "Nuovo"; menu[16].enabled = true; - + menu[15].tag = POPUP_PROPERTIES; menu[15].text = (char*)TR("Proprieta'"); menu[15].enabled = true; + menu[16].tag = POPUP_NEWFIELD; menu[16].text = (char*)TR("Nuovo"); menu[16].enabled = true; _pt_drag_start = dev2rep(_pt_click); xvt_menu_popup(menu, win(), _pt_click, XVT_POPUP_CENTER, 0); @@ -1612,8 +1776,8 @@ void TReport_window::rep2dev(const TReport_rct& rr, RCT& dr) const 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 has_pen = border > 0 && fore != COLOR_INVALID; + const bool has_brush = pat > PAT_HOLLOW && back != COLOR_INVALID; const bool visible = has_pen || has_brush; if (visible) { @@ -1635,27 +1799,39 @@ bool TReport_window::advanced_set_draw_tools(PAT_STYLE pat, int border, COLOR fo return visible; } -void TReport_window::advanced_draw_rect(const RCT& r, PAT_STYLE pat, int border, COLOR fore, COLOR back, int radius, int shade) +void TReport_window::advanced_draw_rect(const RCT& r, PAT_STYLE pat, int border, + COLOR fore, COLOR back, COLOR shade, + int radius, int shadow, int angle) { - if (shade != 0 && pat == PAT_SOLID) + WINDOW w = win(); + if (shadow != 0 && (pat == PAT_SOLID || pat == PAT_SPECIAL)) // Disegna eventuale ombra { if (advanced_set_draw_tools(pat, 0, COLOR_GRAY, COLOR_GRAY)) { RCT rct = r; - xvt_rect_offset(&rct, shade, shade); + xvt_rect_offset(&rct, shadow, shadow); if (radius > 0) - xvt_dwin_draw_roundrect(win(), &rct, radius, radius); + xvt_dwin_draw_roundrect(w, &rct, radius, radius); else - xvt_dwin_draw_rect(win(), (RCT*)&rct); + xvt_dwin_draw_rect(w, &rct); } } - if (advanced_set_draw_tools(pat, border, fore, back)) + if (pat == PAT_SPECIAL && shade != COLOR_INVALID) { - if (radius > 0) - xvt_dwin_draw_roundrect(win(), &r, radius, radius); - else - xvt_dwin_draw_rect(win(), (RCT*)&r); + xvt_dwin_draw_gradient_linear(w, &r, back, shade, angle); + if (advanced_set_draw_tools(PAT_HOLLOW, border, fore, COLOR_INVALID)) // ha un bordo + xvt_dwin_draw_rect(w, (RCT*)&r); + } + else + { + if (advanced_set_draw_tools(pat, border, fore, back)) + { + if (radius > 0) + xvt_dwin_draw_roundrect(w, &r, radius, radius); + else + xvt_dwin_draw_rect(w, (RCT*)&r); + } } } @@ -1684,20 +1860,18 @@ void TReport_window::draw_grid() x = y = 196*k; // Disegna l'eventuale sfondo di sezione - const bool draw_back = y > 0 && (rs.border() > 0 + const bool draw_back = y > 0 && (rs.border() > 0 || rs.pattern() == PAT_SPECIAL || (rs.pattern() >= PAT_SOLID && rs.back_color() != COLOR_WHITE)); if (draw_back) { const PNT p = rep2dev(TReport_pnt(x, y)); RCT rct; xvt_rect_set(&rct, 0, 0, p.h, p.v); - int rad = 0; - if (rs.radius() > 0) - { - const PNT p0 = rep2dev(TReport_pnt(0,0)); - const PNT pr = rep2dev(TReport_pnt(rs.radius(),rs.radius())); - rad = min(pr.h-p0.h, pr.v-p0.v); - } - advanced_draw_rect(rct, rs.pattern(), rs.border(), rs.fore_color(), rs.back_color(), rad, 0); + const PNT p0 = rep2dev(TReport_pnt(0, 0)); + const PNT pr = rep2dev(TReport_pnt(rs.radius(), rs.radius())); + const int radius = min(pr.h-p0.h, pr.v-p0.v); + advanced_draw_rect(rct, rs.pattern(), rs.border(), + rs.fore_color(), rs.back_color(), rs.shade_color(), + radius, 0, rs.shade_angle()); } for (int i = x/k; i > 0; i--) @@ -1758,20 +1932,20 @@ void TReport_window::draw_field(const TReport_field& rf) } int off = 0; - if (rf.shade_offset() > 0) + if (rf.shadow_offset() > 0) { const int width = r.right - r.left; - off = rf.shade_offset() * width / rf.get_rect().width(); + off = rf.shadow_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) { - case 1: back_pattern = PAT_FDIAG; break; - case 2: back_pattern = PAT_BDIAG; break; + case 1: back_pattern = PAT_FDIAG; break; + case 2: back_pattern = PAT_BDIAG; break; case 3: back_pattern = PAT_DIAGCROSS; break; - default: back_pattern = PAT_HOLLOW; break; + default: back_pattern = PAT_HOLLOW; break; } switch (rf.type()) @@ -1789,11 +1963,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(r, PAT_HOLLOW, rf.border(), rf.fore_color(), COLOR_WHITE, 0, off); + advanced_draw_rect(r, PAT_HOLLOW, rf.border(), rf.fore_color(), COLOR_INVALID, COLOR_INVALID, 0, off, 0); } break; case 'L': - if (advanced_set_draw_tools(PAT_SOLID, rf.border(), rf.fore_color(), COLOR_WHITE)) + if (advanced_set_draw_tools(PAT_SOLID, rf.border(), rf.fore_color(), COLOR_INVALID)) { const PNT f = { r.top, r.left }; xvt_dwin_draw_set_pos(win(), f); @@ -1803,11 +1977,11 @@ void TReport_window::draw_field(const TReport_field& rf) back_pattern = PAT_HOLLOW; break; case 'R': - advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad, off); + advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rf.shade_color(), rad, off, rf.shade_angle()); break; case 'T': { - advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad, off); + advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rf.shade_color(), rad, off, rf.shade_angle()); const TString& str = rf.picture(); if (str.full()) @@ -1838,10 +2012,9 @@ void TReport_window::draw_field(const TReport_field& rf) draw_broken_paper(rf); else { - if (rf.border() <= 0) // Rendi piu' visibile il bordo dei campi che non ce l'hanno - advanced_draw_rect(r, PAT_HOLLOW, 1, COLOR_LTGRAY, COLOR_WHITE, 0, 0); - else - advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rad, off); + advanced_draw_rect(r, rf.pattern(), rf.border(), rf.fore_color(), rf.back_color(), rf.shade_color(), rad, off, rf.shade_angle()); + if (rf.border() <= 0) // Rendi comunque visibile il bordo dei campi che non ce l'hanno + advanced_draw_rect(r, PAT_HOLLOW, 1, COLOR_LTGRAY, COLOR_INVALID, COLOR_INVALID, 0, 0, 0); } if (rf.link().not_empty()) @@ -1856,7 +2029,7 @@ void TReport_window::draw_field(const TReport_field& rf) else { xvt_dwin_set_font(win(), rf.font().get_xvt_font(*this)); - set_color(rf.fore_color(), rf.back_color()); + set_color(rf.text_color(), rf.back_color()); } TString str; @@ -1926,19 +2099,14 @@ void TReport_window::draw_bg() void TReport_window::update() { - clear(COLOR_WHITE); - draw_bg(); - draw_grid(); // Disegna griglia - - //const TReport_rct rect_riga(0,0,1000,100); - //RCT rct_riga; rep2dev(rect_riga, rct_riga); - //_default_row_height = rct_riga.bottom - rct_riga.top; - + clear(COLOR_WHITE); // Cancella pagina + draw_bg(); // Disegna sfondo + draw_grid(); // Disegna griglia const TReport_section& rs = curr_section(); for (int i = 0; i < rs.items(); i++) { const TReport_field& rf = rs.field(i); - draw_field(rf); + draw_field(rf); // Disegna campo } } diff --git a/ba/ba8301.h b/ba/ba8301.h index 93f9fe5dd..e21b9fcf5 100755 --- a/ba/ba8301.h +++ b/ba/ba8301.h @@ -68,10 +68,6 @@ public: TReport_drawer(TMask* m) : TWindowed_field(m) { } }; -/////////////////////////////////////////////////////////// -// TReport_field_mask -/////////////////////////////////////////////////////////// - /////////////////////////////////////////////////////////// // TReport_base_mask /////////////////////////////////////////////////////////// @@ -86,10 +82,12 @@ class TReport_base_mask : public TAutomask protected: TReport& _report; char _halign, _valign; - COLOR _fgcolor, _bgcolor; + COLOR _fgcolor, _bgcolor, _shcolor; + bool draw_3d_rect(short id, COLOR rgb) const; virtual void update(); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); + void kill_special_pattern(); public: void set_font_info(const TReport_font& font); @@ -101,12 +99,15 @@ public: class TReport_field_mask : public TReport_base_mask { TReport_field& _rf; + COLOR _txcolor; protected: void vedo_non_vedo(); virtual bool on_field_event(TOperable_field& o, TField_event e, long jolly); virtual void update(); + + public: void set_num(short id, long n); long get_num(short id) const;