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

View File

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

View File

@ -153,6 +153,8 @@ public:
TString& overwrite(const char* s, int pos = 0, int len = 0);
// @cmember Inserisce la stringa s dalla posizione pos
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
TString& strip(const char* k);