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;