Patch level : 12.0 552

Files correlati     : sy
Commento            : Aggiunto filtro da a in manutenzione archivi

git-svn-id: svn://10.65.10.50/branches/R_10_00@24427 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
mtollari 2018-03-12 11:44:24 +00:00
parent 827237fc54
commit 90379c87da
3 changed files with 71 additions and 38 deletions

View File

@ -15,6 +15,9 @@
#include <xml.h> #include <xml.h>
#include <xvtility.h> #include <xvtility.h>
#define DAFILTRO "DA_"
#define AFILTRO "A_"
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
// TSheet_control // TSheet_control
/////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////
@ -1671,40 +1674,51 @@ bool TCursor_sheet::filter_dialog()
TMask m(TR("Filtro"), 1, 78, kfields+5); TMask m(TR("Filtro"), 1, 78, kfields+5);
m.add_button_tool(DLG_OK, "", TOOL_OK); m.add_button_tool(DLG_OK, "", TOOL_OK);
m.add_button_tool(DLG_CANCEL, "", TOOL_CANCEL); m.add_button_tool(DLG_CANCEL, "", TOOL_CANCEL);
for (int i = 0; i < kfields; i++) int max_len = 0;
{ for (int j = 0; j < 2; j++)
const int nf = k0.FieldSeq[i] % MaxFields; {
const char* fname = rec.fieldname(nf); for (int i = 0; i < kfields; i++)
const TFieldtypes ft = rec.type(fname); {
TString16 prompt = fname; prompt.left_just(12); const int nf = k0.FieldSeq[i] % MaxFields;
TString4 flags; const char* fname = rec.fieldname(nf);
switch (ft) const TFieldtypes ft = rec.type(fname);
{ TString16 prompt = fname; prompt.left_just(12);
case _alfafld: TString4 flags;
case _charfld: TString ffname = get_tmp_string() << (j ? AFILTRO : DAFILTRO) << fname;
m.add_string(101+i, 0, prompt, 1, i+1, rec.length(fname), flags).set_field(fname); switch (ft)
break; {
case _intzerofld: case _alfafld:
case _longzerofld: case _charfld:
flags << "Z"; m.add_string(101 + i + j * 20, 0, prompt, 1 + (j * max_len), i + 1, rec.length(fname), flags).set_field(ffname);
case _wordfld: break;
case _intfld: case _intzerofld:
case _longfld: case _longzerofld:
m.add_number(101+i, 0, prompt, 1, i+1, rec.length(fname), flags).set_field(fname); flags << "Z";
break; case _wordfld:
case _datefld: case _intfld:
m.add_date(101+i, 0, prompt, 1, i+1, flags).set_field(fname); case _longfld:
break; m.add_number(101 + i + j * 20, 0, prompt, 1 + (j * max_len), i + 1, rec.length(fname), flags).set_field(ffname);
default: break;
break; case _datefld:
} m.add_date(101 + i + j * 20, 0, prompt, 1 + (j * max_len), i + 1, flags).set_field(ffname);
} break;
default:
break;
}
max_len = max_len < rec.length(fname) + strlen(prompt) ? rec.length(fname) + strlen(prompt) : max_len;
}
max_len += 10;
}
for (int i = 0; i < kfields-1; i++) for (int i = 0; i < kfields-1; i++)
{ {
const int nf = k0.FieldSeq[i] % MaxFields; const int nf = k0.FieldSeq[i] % MaxFields;
const char* fname = rec.fieldname(nf); const char * fname = rec.fieldname(nf);
TMask_field* f = m.find_by_fieldname(fname); TString ffname = DAFILTRO; ffname << fname;
TMask_field* f = &m.field(101 + i);
// Non dovrebbe succedere ma lascio il codice vecchio in caso di errori
if(f == NULL)
f = m.find_by_fieldname(ffname);
if (f) if (f)
f->set(rec.get(fname)); f->set(rec.get(fname));
} }
@ -1712,17 +1726,26 @@ bool TCursor_sheet::filter_dialog()
if (m.run() == K_ENTER) if (m.run() == K_ENTER)
{ {
rec.zero(); rec.zero();
for (int i = 0; i < kfields; i++) TRectype torec = _cursor->curr();
{ torec.zero();
const int nf = k0.FieldSeq[i] % MaxFields; TRectype* prec = &rec;
const char* fname = rec.fieldname(nf);
const TMask_field* f = m.find_by_fieldname(fname); for (int j = 0; j < 2; j++)
if (f) rec.put(fname, f->get()); {
} for (int i = 0; i < kfields; i++)
{
const int nf = k0.FieldSeq[i] % MaxFields;
const char* fname = rec.fieldname(nf);
TString ffname = (j ? AFILTRO : DAFILTRO); ffname << fname;
const TMask_field* f = m.find_by_fieldname(ffname);
if (f) prec->put(fname, f->get());
}
prec = &torec;
}
TWait_cursor hourglass; TWait_cursor hourglass;
_cursor->freeze(false); _cursor->freeze(false);
_cursor->setregion(rec, rec); _cursor->setregion(rec, torec);
_cursor->items(); _cursor->items();
_cursor->freeze(true); _cursor->freeze(true);
force_update(); force_update();

View File

@ -1013,6 +1013,14 @@ TString& TString::insert(
strcpy_s(&_str[pos+l], _size-(pos+l)+1, spark); // Aggiungi spark strcpy_s(&_str[pos+l], _size-(pos+l)+1, spark); // Aggiungi spark
} }
return *this; return *this;
}
TString & TString::add_front(const char * s)
{
const int l = strlen(s);
lpad(len() + l);
overwrite(s);
return *this;
} }
// Certified 90% // Certified 90%

View File

@ -153,6 +153,8 @@ public:
TString& overwrite(const char* s, int pos = 0, int len = 0); TString& overwrite(const char* s, int pos = 0, int len = 0);
// @cmember Inserisce la stringa s dalla posizione pos // @cmember Inserisce la stringa s dalla posizione pos
TString& insert(const char* s, int pos = 0); TString& insert(const char* s, int pos = 0);
// @cmember Aggiunge la stringa passata davanti
TString& add_front(const char* s);
// @cmember Elimina tutti i caratteri contenuti in k // @cmember Elimina tutti i caratteri contenuti in k
TString& strip(const char* k); TString& strip(const char* k);