From c2596b4fcc399b1ff3eb69e9b00a4d58d53297e2 Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Wed, 12 May 2021 06:53:25 +0200 Subject: [PATCH] Patch level : 12.0 nopatch Files correlati : MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Commento : Esportazione in excel possibilità di scegliere i file. Migliorata formattazione stringe su più linee Aggiunti bottoni per esportazione nella aprintbar --- src/include/aprintbar.h | 28 ++++++++++++++++-- src/include/defmask.h | 2 ++ src/include/reprint.cpp | 64 +++++++++++++++++++++++++++++++++++------ src/include/reprint.h | 6 ++-- 4 files changed, 86 insertions(+), 14 deletions(-) diff --git a/src/include/aprintbar.h b/src/include/aprintbar.h index e74fd0b97..352f81a47 100755 --- a/src/include/aprintbar.h +++ b/src/include/aprintbar.h @@ -4,15 +4,39 @@ BEGIN PICTURE TOOL_PRINT END +#ifdef EXPORT +BUTTON DLG_EXPORT 10 2 +BEGIN +PROMPT 2 1 "~Esporta" +PICTURE TOOL_EXPORT +END +#endif + +#ifdef EXPORT_EXCEL +BUTTON DLG_EXPORT_EXCEL 10 2 +BEGIN +PROMPT 3 1 "~Esporta" +PICTURE TOOL_EXCEL +END +#endif + +#ifdef EXPORT_PDF +BUTTON DLG_EXPORT_PDF 10 2 +BEGIN +PROMPT 4 1 "~Esporta" +PICTURE TOOL_PDF +END +#endif + BUTTON DLG_SETPRINT 2 2 BEGIN - PROMPT 2 1 "Imposta" + PROMPT 5 1 "Imposta" PICTURE TOOL_SETPRINT END BUTTON DLG_PREVIEW 2 2 BEGIN - PROMPT 3 1 "~Anteprima" + PROMPT 6 1 "~Anteprima" PICTURE TOOL_PREVIEW END diff --git a/src/include/defmask.h b/src/include/defmask.h index 312de5abd..c10ff420c 100755 --- a/src/include/defmask.h +++ b/src/include/defmask.h @@ -51,6 +51,8 @@ #define DLG_BARCODE_TYPE 47 /* TAG del tipo codice a barre */ #define DLG_ALL 48 /* TAG del bottone Tutti */ #define DLG_LOG 49 /* TAG del delle transazioni */ +#define DLG_EXPORT_EXCEL 50 /* TAG del bottone Esporta in Excel */ +#define DLG_EXPORT_PDF 51 /* TAG del bottone Esporta un pdf */ #define DLG_USER 100 /* TAG del primo controllo definito dall'utente */ diff --git a/src/include/reprint.cpp b/src/include/reprint.cpp index 80952e5f2..fdf67d13a 100755 --- a/src/include/reprint.cpp +++ b/src/include/reprint.cpp @@ -873,9 +873,24 @@ int TBook::compute_text_frame(const TString& tmp, const TReport_font& font, TRep CHECK(w == PRINTER_WIN, "Finestra di stampa non valida"); xvt_dwin_set_font(w, font.get_xvt_font(*_printwin)); - TToken_string p(tmp, '\n'); + // TToken_string p(tmp, '\n'); + TString int_tmp(tmp); + int pos = int_tmp.find('|'); + + while (pos >= 0) + { + int_tmp[pos] = 'ü'; + pos = int_tmp.find('|', pos); + } + + TParagraph_string p(int_tmp, rect.width() /100); + FOR_EACH_TOKEN(p, line) + { + while (char * s = (char *)strstr(line, "ü")) + *s = '|'; para.add(line); + } for (int i = 0; i < para.items(); i++) { TString& row = para.row(i); @@ -1577,13 +1592,27 @@ bool TBook::print_page(TWindow& win, size_t page) return true; } -bool TBook::export_text(TFilename& fname, bool signature, int size) + +HIDDEN bool ask_export_filename(TFilename& fname) +{ + bool ok = false; + + FILE_SPEC fs; xvt_fsys_convert_str_to_fspec(fname, &fs); + if (ok = (xvt_dm_post_file_save(&fs, TR("Esportazione")) == FL_OK)) + xvt_fsys_convert_fspec_to_str(&fs, fname.get_buffer(), fname.size()); + return ok; +} + +bool TBook::export_text(TFilename& fname, bool signature, int size, bool goto_url, bool ask_filename) { TString ext = fname.ext(); ext.lower(); if (ext == "pdf") - return export_pdf(fname, signature); + return export_pdf(fname, signature, goto_url, ask_filename); if (ext.starts_with("xls") || ext.starts_with("htm")) - return export_excel(fname, signature); + return export_excel(fname, signature, goto_url, ask_filename); + + if (ask_filename && !ask_export_filename(fname)) + return false; TToken_string str(1024, '='); @@ -1733,7 +1762,8 @@ bool TBook::export_text(TFilename& fname, bool signature, int size) if (xvt_sign_file(fname, outfile)) fname = outfile; } - + if (goto_url) + xvt_sys_goto_url(fname, "open"); return true; } @@ -1772,9 +1802,12 @@ static void reformat_excel(TString& str) } } -bool TBook::export_excel(TFilename& fname, bool signature) +bool TBook::export_excel(TFilename& fname, bool signature, bool goto_url, bool ask_filename) { TTabulator tab; + + if (ask_filename && !ask_export_filename(fname)) + return false; int row = 0, col = 0, wid = 0; TToken_string str(1024, '='); @@ -1890,6 +1923,8 @@ bool TBook::export_excel(TFilename& fname, bool signature) fname = outfile; } + if (goto_url) + xvt_sys_goto_url(fname, "open"); return true; } @@ -2208,15 +2243,18 @@ bool TBook::print(size_t pagefrom, size_t pageto, word copies) return ok; } -bool TBook::export_pdf(TFilename& filename, bool signature) +bool TBook::export_pdf(TFilename& filename, bool signature, bool goto_url, bool ask_filename) { bool ok = (pages() > 0) && main_app().has_module(RSAUT); // Controllo paranoico dei permessi if (ok) { + if (ask_filename && !ask_export_filename(filename)) + return false; // Evita problemi di aggiornamento del pdf: deve sempre rigenerarlo! if (filename.exist() && !filename.fremove()) return cantwrite_box(filename); + _pdf_file = filename; _pagefrom = 1; _pageto = 0; @@ -2234,6 +2272,8 @@ bool TBook::export_pdf(TFilename& filename, bool signature) } } } + if (ok && goto_url) + xvt_sys_goto_url(filename, "open"); return ok; } @@ -2268,13 +2308,13 @@ bool TBook::esporta() break; case 'P': case 'p': - ok = export_pdf(fname, signature); + ok = export_pdf(fname, signature); if (ok) xvt_sys_goto_url(fname, "open"); break; case 'X': case 'x': - ok = export_excel(fname, signature); + ok = export_excel(fname, signature); if (ok) xvt_sys_goto_url(fname, "open"); break; @@ -2774,13 +2814,16 @@ void TReport_book::add_doc(const TString& name) if (name.ends_with(".rep", true)) // Tratto a parte i report! { TReport* eminem = new TReport; + if (eminem->load(name)) { TFilename msk = _report->filename().name(); + msk.ext("msk"); if (_report->use_mask() && msk.custom_path()) { TMask m(msk); + _report->report2mask(m); eminem->mask2report(m); } @@ -2788,9 +2831,11 @@ void TReport_book::add_doc(const TString& name) { TRecordset* mainset = _report->recordset(); TRecordset* recset = eminem->recordset(); + if (mainset && recset) { const TString_array& vars = mainset->variables(); + FOR_EACH_ARRAY_ROW(vars, i, name) recset->set_var(*name, mainset->get_var(*name)); if (main_app().name().starts_with("ve1")) @@ -2804,6 +2849,7 @@ void TReport_book::add_doc(const TString& name) } TReport* rep = _report; // Salvo variabile globale + add(*eminem, true); _report = rep; // Ripristino variabile globale } diff --git a/src/include/reprint.h b/src/include/reprint.h index 6cd9008f0..eae2e1c4a 100755 --- a/src/include/reprint.h +++ b/src/include/reprint.h @@ -97,9 +97,9 @@ public: virtual bool archive(const char* repname, bool signature); virtual bool preview(); - virtual bool export_excel(TFilename& fname, bool signature); - virtual bool export_pdf(TFilename& fname, bool signature); - virtual bool export_text(TFilename& fname, bool signature, int size); + virtual bool export_excel(TFilename& fname, bool signature, bool goto_url = false, bool ask_filename = false); + virtual bool export_pdf(TFilename& fname, bool signature, bool goto_url = false, bool ask_filename = false); + virtual bool export_text(TFilename& fname, bool signature, int size, bool goto_url = false, bool ask_filename = false); virtual bool send_mail(TFilename& fname, bool signature); virtual bool esporta(); bool print_or_preview(); // Calls one of the above