From 2b08b4cf004d8f2e61646929d05c8cea10526547 Mon Sep 17 00:00:00 2001 From: alex Date: Fri, 17 Jun 2011 10:47:42 +0000 Subject: [PATCH] Patch level : 10.1026 Files correlati : ve0.exe ve2.exe mg1.exe mg3.exe mg4.exe db0.exe Ricompilazione Demo : [ ] Commento : Aggiunto il parametro (CUSTOM_SEARCH_47(2)=X dove 47 e' l'identificatore del file anamag e 2 e' il numero della chiaveper descrizione) nel paragrafo Main del file ini della ditta per aggiungere la descrizione estesa alle discerche per descrizione degli articoli git-svn-id: svn://10.65.10.50/branches/R_10_00@22280 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/maskfld.cpp | 79 ++++++++++++++++++++++++++++++++++++++++++--- include/maskfld.h | 10 ++++-- 2 files changed, 82 insertions(+), 7 deletions(-) diff --git a/include/maskfld.cpp b/include/maskfld.cpp index 3520d76c8..46ac9ac4e 100755 --- a/include/maskfld.cpp +++ b/include/maskfld.cpp @@ -19,6 +19,7 @@ #include #include +#include "../mg/anamag.h" #include // @doc INTERNAL @@ -2132,7 +2133,9 @@ TBrowse::TBrowse(TEdit_field* f, TRelation* r, int key, const char* filter) _relation(r), _cursor(new TCursor (r, "", key)), _filter(filter), _secondary(false), _custom_filter_handler(NULL) -{} +{ + custom_cursor(); +} // Certified 100% @@ -2140,7 +2143,9 @@ TBrowse::TBrowse(TEdit_field* f, TCursor* c) : TBrowse_button(f), _relation(NULL), _cursor(c), _secondary(false), _custom_filter_handler(NULL) -{} +{ + custom_cursor(); +} // Certified 100% @@ -2154,6 +2159,70 @@ TBrowse::~TBrowse() } } +static bool descr_filter_handler(TMask_field& f, KEY k) +{ + if (k == K_SPACE) + { + TString expr; + if (!f.get().empty()) // Filtro attivato! + { + const short id = f.dlg()-500; + TString e = f.mask().get(id); // Espressione regolare + e.strip("\"'"); // Tolgo caratteri che potrebbero dare problemi + if (!e.blank()) + expr << "(DESCR+DESCRAGG)" << "?=\"" << e << '"'; + if (expr.empty()) + f.reset(); + } + ((TBrowse_sheet&) f.mask()).add_custom_filter(expr); + } + return true; +} + +void TBrowse::custom_cursor() +{ + TRelation * relation = _relation == NULL ? _cursor->relation() : _relation; + int logicnum = relation->lfile().num(); + + switch(logicnum) + { + case LF_ANAMAG : + if (_cursor->key() == 2 && ini_get_bool(CONFIG_DITTA, "Main", "CUSTOM_SEARCH_" TOSTRING(LF_ANAMAG), false, 2)) + { + delete _cursor; + _cursor = new TSorted_cursor(relation, ANAMAG_DESCR "|" ANAMAG_DESCRAGG, "", 2); + set_custom_filter_handler(descr_filter_handler); + } + break; + default: + break; + } +} + +void TBrowse::custom_display() +{ + switch(_cursor->file().num()) + { + case LF_ANAMAG : + if (_cursor->key() == 2 && ini_get_bool(CONFIG_DITTA, "Main", "CUSTOM_SEARCH_" TOSTRING(LF_ANAMAG), false, 2)) + { + TToken_string & it = (TToken_string &) items(); + if (it.find(ANAMAG_DESCRAGG) < 0) + { + const char * s = it.get(0); + for (int i = 0; s && *s; s = it.get(++i)) + if (strcmp(s, ANAMAG_DESCR) == 0) + { + add_display_field("Descrizione aggiuntiva@50", ANAMAG_DESCRAGG, i + 1); + break; + } + } + } + break; + default: + break; + } +} // Certified 100% void TBrowse::parse_display(TScanner& scanner) @@ -2336,7 +2405,7 @@ void TBrowse::add_input_field(const char * id, const char * name, const int pos, if (select) strid << '@'; - if (pos < 0) + if (pos < 0 || pos >= _items.items()) { _inp_id.add(strid); _inp_fn.add(name); @@ -2390,7 +2459,7 @@ void TBrowse::copy_output(const TBrowse * b) void TBrowse::add_display_field(const char * hd, const char * name, const int pos) { - if (pos < 0) + if (pos < 0 || pos >= _items.items()) { _head.add(dictionary_translate_header(hd)); _items.add(name); @@ -2418,7 +2487,7 @@ void TBrowse::remove_input_field(const int pos) void TBrowse::add_output_field(const char * id, const char * name, const int pos) { - if (pos < 0) + if (pos < 0 || pos >= _items.items()) { _out_id.add(id); _out_fn.add(name); diff --git a/include/maskfld.h b/include/maskfld.h index a2fdaeb68..51264e70c 100755 --- a/include/maskfld.h +++ b/include/maskfld.h @@ -935,9 +935,15 @@ protected: // @cmember Crea lista identificatori di ricerca TToken_string& create_siblings(TToken_string& siblings); - // @access Public Member + // @cmember Modifica il cursore + void custom_cursor(); + + // @access Public Member public: - // @cmember Ritorna il numero di inputs senza contare quelli che funzionano + // @cmember Modifica il display + void custom_display(); + + // @cmember Ritorna il numero di inputs senza contare quelli che funzionano // solo da filtro int input_fields();