From a97a79aac62685448276a50f1d14ddb45a3d4a56 Mon Sep 17 00:00:00 2001 From: Alessandro Bonazzi Date: Fri, 12 Nov 2021 15:33:49 +0100 Subject: [PATCH] Patch level : 12.0 1096 Files correlati : li0.exe Commento : Crorretta la ricostruzione plafond. --- src/include/brwbut.cpp | 37 ++++++++++++++++++++++++++++++------- src/include/brwbut.h | 13 +++++++++++++ src/include/classes.h | 8 ++++++++ src/include/defmask.h | 2 ++ src/include/mask.h | 10 +++++++--- src/include/maskfld.cpp | 4 +++- src/include/repapp.cpp | 41 ++++++++++++++++++++++++----------------- src/include/repapp.h | 23 +++++++++++------------ 8 files changed, 98 insertions(+), 40 deletions(-) diff --git a/src/include/brwbut.cpp b/src/include/brwbut.cpp index ab845f104..bbe8adb4d 100644 --- a/src/include/brwbut.cpp +++ b/src/include/brwbut.cpp @@ -1701,7 +1701,7 @@ KEY TReport_select::run() TFilename path = field().get(); if (select_custom_file(path, "rep", _classe)) { - path = path.name(); + path = path.name(); path.ext(""); field().set(path); } @@ -1712,14 +1712,37 @@ KEY TReport_select::run() bool TReport_select::check(CheckTime ct) { TFilename name = field().get(); - if (ct != STARTING_CHECK && name.empty() && - field().check_type() == CHECK_REQUIRED) - return false; + + if (ct == STARTING_CHECK || ct == FINAL_CHECK) + { + if (name.empty()) + { + TString_array reps; - bool ok = true; + list_custom_files("rep", _classe, reps); + if (reps.items() > 0) + field().set(((TToken_string &)reps[0]).get(0)); + else + field().set(""); + } + if (ct == FINAL_CHECK && field().get().empty()) + return false; + } if (field().roman()) // Must exist - ok = name.custom_path(); - return ok; + return name.custom_path(); + return true; +} + +void TReport_select::set_report_class(const char * classe) +{ + TString_array reps; + + _classe = classe; + list_custom_files("rep", _classe, reps); + if (reps.items()) + field().set(reps[0]); + else + field().set(""); } /////////////////////////////////////////////////////////// diff --git a/src/include/brwbut.h b/src/include/brwbut.h index 1e6950d24..3cf337925 100644 --- a/src/include/brwbut.h +++ b/src/include/brwbut.h @@ -83,6 +83,7 @@ protected: // @access Public Memeber public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_LIST_BUTTON; } // @cmember Legge dal file gli item dello sheet void parse_item(TScanner& scanner); @@ -157,6 +158,7 @@ protected: // @access Public Member public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_BROWSE_BUTTON; } // @cmember Modifica il display void custom_display(); @@ -317,6 +319,8 @@ protected: virtual TCursor& cursor(); public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_FBROWSE_BUTTON; } + virtual bool check(CheckTime = RUNNING_CHECK); virtual KEY run(); virtual long find(const TString& val); @@ -332,6 +336,7 @@ protected: virtual TCursor& cursor(); public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_ABROWSE_BUTTON; } virtual KEY run(); TAlternative_browse(TEdit_field* ef, int altkey); @@ -343,6 +348,7 @@ class TFile_select : public TBrowse_button TFilename _filter; public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_FSELECT_BUTTON; } // @cmember Controlla la sintassi della input del campo e ne setta i membri virtual void parse_input(TScanner& scanner); @@ -363,6 +369,7 @@ public: class TDir_select : public TBrowse_button { public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_DSELECT_BUTTON; } // @cmember Controlla la sintassi della input del campo e ne setta i membri virtual void parse_input(TScanner& scanner); @@ -384,7 +391,9 @@ class TReport_select : public TBrowse_button { TString _classe; + public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_RSELECT_BUTTON; } // @cmember Controlla la sintassi della input del campo e ne setta i membri virtual void parse_input(TScanner& scanner); @@ -398,6 +407,9 @@ public: virtual bool is_filesel() const { return true; } + void set_report_class(const char * classe); + const TString & get_report_class() const { return _classe; } + TReport_select(TEdit_field* ef, const char* classe); virtual ~TReport_select() { } }; @@ -413,6 +425,7 @@ protected: virtual void parse_output(TScanner& scanner); public: + virtual bool is_kind_of(word cid) const { return cid == CLASS_PSELECT_BUTTON; } virtual KEY run(); // @cmember Controlla la validita' del campo diff --git a/src/include/classes.h b/src/include/classes.h index 027a08065..b5b5b5a12 100755 --- a/src/include/classes.h +++ b/src/include/classes.h @@ -60,6 +60,14 @@ #define CLASS_MVC_FIELD 256 #define CLASS_TREELIST_FIELD 257 #define CLASS_METROLIST_FIELD 258 +#define CLASS_LIST_BUTTON 259 +#define CLASS_BROWSE_BUTTON 260 +#define CLASS_FBROWSE_BUTTON 261 +#define CLASS_ABROWSE_BUTTON 262 +#define CLASS_FSELECT_BUTTON 263 +#define CLASS_DSELECT_BUTTON 264 +#define CLASS_RSELECT_BUTTON 265 +#define CLASS_PSELECT_BUTTON 265 #define CLASS_TOOL_FIELD 280 #define CLASS_BUTTON_TOOL 281 diff --git a/src/include/defmask.h b/src/include/defmask.h index 94f98b412..5b92e3058 100755 --- a/src/include/defmask.h +++ b/src/include/defmask.h @@ -55,6 +55,8 @@ #define DLG_EXPORT_PDF 51 /* TAG del bottone Esporta un pdf */ #define DLG_EXPORT_DBF 52 /* TAG del bottone Esporta in dbf */ #define DLG_EXPORT_TEXT 53 /* TAG del bottone Esporta un testo */ +#define DLG_OUTPUT 54 /* TAG del campo */ +#define DLG_REPORT 55 /* TAG del campo */ #define DLG_USER 100 /* TAG del primo controllo definito dall'utente */ diff --git a/src/include/mask.h b/src/include/mask.h index c22248aa3..0f6975dbf 100755 --- a/src/include/mask.h +++ b/src/include/mask.h @@ -289,11 +289,15 @@ public: { return (TMask_field&)_field[i]; } // @cmember Ritorna il campo contraddistinto dall'identificatore passato TMask_field& field(short id) const; - // @cmember Ritorna il campo corrispondente ad id se c'e' - TMask_field* find_by_id(short id) const; + // @cmember Ritorna il campo corrispondente ad id se c'e' + TMask_field* find_by_id(short id) const; + // @cmember esiste il campo corrispondente ad id ? + bool exist(short id) const { return find_by_id(id) != nullptr; } // @cmember Ritorna il campo corrispondente al FIELD fieldname TMask_field* find_by_fieldname(const char* fieldname) const; - // @cmember Ritorna il campo di edit contraddistinto dall'identificatore passato + // @cmember Ritorna il campo corrispondente al FIELD fieldname + bool exist(const char* fieldname) const { return find_by_fieldname(fieldname) != nullptr; } + // @cmember Ritorna il campo di edit contraddistinto dall'identificatore passato TEdit_field& efield(short id) const; // @cmember Ritorna il campo listbox contraddistinto dall'identificatore passato TList_field& lfield(short id) const; diff --git a/src/include/maskfld.cpp b/src/include/maskfld.cpp index bb9c890d1..dd1d21926 100755 --- a/src/include/maskfld.cpp +++ b/src/include/maskfld.cpp @@ -2811,9 +2811,11 @@ bool TEdit_field::on_key(KEY key) { ok = !(check_type() == CHECK_REQUIRED && empty()); // check consistency + if (!ok && _browse != nullptr && _browse->is_kind_of(CLASS_RSELECT_BUTTON)) + ok = true; if (ok && _browse) { - if (browse()) + if (browse() && !_browse->is_kind_of(CLASS_RSELECT_BUTTON)) { if (ok && check_enabled() && vf != 21) // 21 = NOT_EMPTY_CHECK_FIELD { diff --git a/src/include/repapp.cpp b/src/include/repapp.cpp index e37a70016..1b6162f5d 100644 --- a/src/include/repapp.cpp +++ b/src/include/repapp.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -8,7 +9,7 @@ bool TReport_application::create() { - bool ok = user_create(); + bool ok = user_create(); if (ok) return TSkeleton_application::create(); return false; @@ -94,7 +95,7 @@ void TReport_application::execute_print(TReport_book & book, TAutomask & mask, T book.add(rep, type); } -TTrec * TReport_application::get_dbase_recdesc(TReport & rep) +TTrec * TReport_application::get_dbase_recdesc(TReport & rep, const TAutomask & mask) { TTrec * desc = new TTrec; TReport_section * head = rep.find_section('H', 0); @@ -167,12 +168,25 @@ void TReport_application::main_loop() { TAutomask & m = get_mask(); KEY k; + bool has_rs = main_app().has_module(RSAUT, CHK_DONGLE); + if (m.exist(DLG_EXPORT)) + m.enable(DLG_EXPORT, has_rs); + if (m.exist(DLG_EXPORT_EXCEL)) + m.enable(DLG_EXPORT_EXCEL, has_rs); + if (m.exist(DLG_EXPORT_PDF)) + m.enable(DLG_EXPORT_PDF, has_rs); + if (m.exist(DLG_EXPORT_DBF)) + m.enable(DLG_EXPORT_DBF, has_rs); + if (m.exist(DLG_EXPORT_TEXT)) + m.enable(DLG_EXPORT_TEXT, has_rs); + if (m.exist(DLG_OUTPUT)) + m.show(DLG_OUTPUT, has_rs); while ((k = m.run()) != K_QUIT) { TReport & rep = get_report(m); TReport_book b(title()); - TFilename name = get_filename(rep); + TFilename name = get_output_filename(m, rep); bool ask_filename = name.blank(); export_type type = _export_printer; @@ -217,7 +231,7 @@ void TReport_application::main_loop() b.export_text(name, false, true, ask_filename); break; case K_DBF : - b.export_dbase(name, false, get_dbase_recdesc(rep), true, ask_filename); + b.export_dbase(name, false, get_dbase_recdesc(rep, m), true, ask_filename); break; case K_VISUALIZE: b.preview(); @@ -228,19 +242,12 @@ void TReport_application::main_loop() } } -const char * TReport_application::get_filename(const TReport & rep) +const char * TReport_application::get_output_filename(const TAutomask & mask, const TReport & rep) { - short id = output_id(); - TFilename output; - - if (id > 0) - output = get_mask().get(id); - else + TFilename output = get_mask().get(output_id()); + + if (output.blank()) output.tempdir(); - output.add(output_name(rep)); - - TString & str = get_tmp_string(output.len()); - - str = output; - return str; + output.add(output_name(mask, rep)); + return get_tmp_string() = output; } \ No newline at end of file diff --git a/src/include/repapp.h b/src/include/repapp.h index 17c6145e6..da0d172d1 100644 --- a/src/include/repapp.h +++ b/src/include/repapp.h @@ -23,13 +23,9 @@ // // @base public | TApplication class TReport_application : public TSkeleton_application - -// @author:(INTERNAL) Guido - + // @access:(INTERNAL) Private Member { - - private: virtual bool create(); virtual bool destroy(); @@ -39,10 +35,8 @@ protected: // TApplication virtual bool firm_change_enabled() const { return true; } // @cmember Aggiorna i limiti di ricerca sul cambio ditta virtual void on_firm_change() { return TApplication::on_firm_change(); } - // @cmember Ritorna il report - virtual TReport & get_report(const TAutomask & m) pure; // @cmember Alloca e ritorna il report una volta usato va distrutto; - virtual TTrec * get_dbase_recdesc(TReport & rep); + virtual TTrec * get_dbase_recdesc(TReport & rep, const TAutomask & mask); // @cmember Ciclo principale virtual void main_loop(); // @cmember Inizializzazione dei dati dell'utente @@ -51,16 +45,21 @@ protected: // TApplication virtual bool user_destroy() { return true; } // @cmember ritorna la maschera virtual TAutomask & get_mask() pure; + + // @cmember Ritorna il report + virtual TReport & get_report(const TAutomask & m) pure; void ini2mask(TConfig& ini, TMask& m, bool query); void mask2ini(const TMask& m, TConfig& ini); virtual void execute_print(TReport_book & book, TAutomask & mask, TReport & rep, export_type type = _export_printer); public: - virtual const char * title() const { return "Report application"; } - virtual short output_id() const { return 0; } - virtual const char * output_name(const TReport & rep) const { return rep.filename().name_only(); } - const char * get_filename(const TReport & rep); + virtual const char * title() const { return title(); } + virtual short output_id() const { return DLG_OUTPUT; } + virtual short report_id() const { return DLG_REPORT; } + const char * report_name(const TAutomask & mask) const { return mask.get(report_id()); } + const char * output_name(const TAutomask & mask, const TReport & rep) const { return report_name(mask); } + const char * get_output_filename(const TAutomask & mask, const TReport & rep); // @cmember Costruttore TReport_application() { } // @cmember Distruttore