Patch level : 10.0

Files correlati     : cg2.exe
Ricompilazione Demo : [ ]
Commento            :
Aggiunta gestione campi di modulo: scompaiono in assenza del relativo modulo


git-svn-id: svn://10.65.10.50/branches/R_10_00@22302 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
guy 2011-06-21 14:59:49 +00:00
parent baa17cebd6
commit 6c4e5a6086
8 changed files with 148 additions and 37 deletions

View File

@ -2,15 +2,15 @@
#include <automask.h>
#include <colors.h>
#include <controls.h>
#include <diction.h>
#include <dongle.h>
#include <execp.h>
#include <expr.h>
#include <modaut.h>
#include <msksheet.h>
#include <recarray.h>
#include <recset.h>
#include <relapp.h>
#include <sheet.h>
#include <relation.h>
#include <tabutil.h>
#include <text.h>
#include <toolfld.h>
@ -209,7 +209,7 @@ void TMask_field::update_flags(const char* f, bool reset)
}
TMask_field::TMask_field(TMask* m)
: _mask(m), _groups(NULL), _ctl(NULL)
: _mask(m), _groups(NULL), _modules(NULL), _ctl(NULL)
{ }
// Certified 100%
@ -217,6 +217,7 @@ TMask_field::~TMask_field()
{
if (_ctl) delete _ctl;
if (_groups) delete _groups;
if (_modules) delete _modules;
}
// Certified 100%
@ -383,7 +384,7 @@ void TMask_field::construct(TScanner& scanner, WINDOW parent)
_ctl_data._dlg, (const char*)m.source_file());
scanner.push();
}
if (_ctl_data._dlg > 0)
if (_ctl_data._dlg > DLG_NULL)
{
FOR_EACH_MASK_FIELD(m, i, mf)
{
@ -396,14 +397,23 @@ void TMask_field::construct(TScanner& scanner, WINDOW parent)
while(scanner.popkey() != "EN") // END of control
parse_item(scanner);
if (class_id() == CLASS_EDIT_FIELD)
if (is_edit())
{
TBrowse * b = ((TEdit_field *) this)->browse();
TBrowse* b = ((TEdit_field*)this)->browse();
if (b != NULL)
b->custom_display();
}
// Controllo se il campo (anche non operable) e' visibile solo con certi moduli
if (in_module(0) && _ctl_data._flags.find('H') < 0)
{
long mod = _modules->last_one();
for (; mod > BAAUT; mod--)
if (main_app().has_module(mod))
break;
if (mod <= 0)
_ctl_data._flags << 'H';
}
create(parent);
}
@ -422,6 +432,28 @@ void TMask_field::set_group(byte group)
_groups->set(0L);
}
void TMask_field::set_module(word m)
{
if (m > BAAUT && m < ENDAUT)
{
if (_modules == NULL)
_modules = new TBit_array;
_modules->set(long(m));
}
}
bool TMask_field::in_module(word m) const
{
if (_modules != NULL)
{
if (m == BAAUT || m >= ENDAUT)
return _modules->first_one() > BAAUT;
else
return (*_modules)[m];
}
return false;
}
bool TMask_field::parse_item(TScanner& scanner)
{
if (scanner.key() == "PR") // PROMPT
@ -440,7 +472,7 @@ bool TMask_field::parse_item(TScanner& scanner)
return true;
}
if (scanner.key() == "GR")
if (scanner.key() == "GR") // GROUPS
{
if (_groups == NULL)
_groups = new TBit_array;
@ -449,6 +481,19 @@ bool TMask_field::parse_item(TScanner& scanner)
return true;
}
if (scanner.key() == "MO") // MODULES
{
TToken_string m(scanner.line(), ',');
FOR_EACH_TOKEN(m, mod)
{
const word cod = dongle().module_name2code(mod);
set_module(cod);
}
return true;
}
NFCHECK("'%s' Token non riconosciuto nel campo %d: %s",
(const char*)scanner.token(), (int)dlg(), (const char*)_ctl_data._prompt);
return false;
@ -512,6 +557,8 @@ void TMask_field::show(
{
if (_ctl)
{
if (on && !_flags.show_default && in_module(0))
on = false; // Nego la visibiltà in assenza del modulo opportuno
_ctl->show(on);
_flags.shown = on;
}
@ -1707,8 +1754,9 @@ word TEditable_field::create_prompt(
{
if (_ctl_data._prompt.not_empty())
{
TString flags;
if (hidden()) flags << 'H';
TString4 flags;
if (hidden() || _ctl_data._flags.find('H') >= 0)
flags << 'H';
if (height < 3)
{
@ -1732,6 +1780,10 @@ word TEditable_field::create_prompt(
void TEditable_field::show(bool on)
{
// Cerco di mostrare un campo di un modulo proibito?
if (on && !_flags.show_default && in_module(0))
on = false; // Ho detto di Nooo!
TOperable_field::show(on);
if (_prompt) _prompt->show(on);
}
@ -2212,24 +2264,32 @@ 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))
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)
{
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;
}
}
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;
}
break;
case LF_TABMOD:
{
_cursor->file().zero(); // Azzera il record corrente in modo da impostare "MOD"
const TString& mod =_cursor->curr().get("MOD");
const word cod = dongle().module_name2code(mod);
field().set_module(cod);
}
break;
default:
break;
}
}
@ -2559,6 +2619,8 @@ int TBrowse::do_input(
for (const char* fld = _inp_id.get(); fld; fld = _inp_id.get())
{
const TFieldref fldref(_inp_fn.get(), 0); // Output field
if (*fld == '"')
{
val = (fld+1);
@ -2588,11 +2650,28 @@ int TBrowse::do_input(
{
const TMask_field& f = *campf;
val = f.get();
if (f.class_id() == CLASS_DATE_FIELD && f.right_justified())
switch (f.class_id())
{
const TDate d(val);
val = d.string(ANSI);
case CLASS_REAL_FIELD:
// Cerco di allineare correttamente i campi numerici salvati parzialmente su codtab
if (fldref.to() > 1 && f.size() > 1 && val.full() &&
((TReal_field&)f).decimals() == 0 && fldref.name() == "CODTAB")
{
const int len = fldref.len(cur);
if (f.size() == len && val.len() < len)
val.right_just(len);
}
break;
case CLASS_DATE_FIELD:
if (f.right_justified())
{
const TDate d(val);
val = d.string(ANSI);
}
break;
default:
break;
}
const bool filter_flag = strchr(fld, '@') != NULL;
@ -2601,7 +2680,6 @@ int TBrowse::do_input(
ne++; // Increment not empty fields count
}
}
const TFieldref fldref(_inp_fn.get(), 0); // Output field
fldref.write(val, *_cursor->relation());
if (tofilter)
{
@ -4457,10 +4535,9 @@ bool TDate_field::on_key(KEY key)
bool TDate_field::autosave(TRelation& r)
{
if (field())
if (field() != NULL)
{
const char* td = get();
if (right_justified())
{
TDate d(td);
@ -4745,6 +4822,25 @@ void TReal_field::set_decimals(int d)
}
}
bool TReal_field::autosave(TRelation& r)
{
// Qundo salvo un intero in un sottocampo (ad esempio CODTAB[2,7]) lo allineo a destra
if (field() != NULL && field()->to() > 1 && decimals() == 0 &&
size() > 1 && !empty() && field()->name() == "CODTAB")
{
const int len = field()->len(r.curr(field()->file()));
if (size() == len && get().len() < len)
{
TString16 val = get();
val.right_just(len);
field()->write(val, r);
return true;
}
}
return TEditable_field::autosave(r);
}
///////////////////////////////////////////////////////////
// Currency_field
///////////////////////////////////////////////////////////

View File

@ -77,6 +77,9 @@ class TMask_field : public TObject
// @cmember:(INTERNAL) Gruppi cui appartiene il campo
TBit_array* _groups;
// @cmember:(INTERNAL) Moduli cui appartiene il campo
TBit_array* _modules;
// @access Protected Member
protected:
// @cmember Controllo vero e proprio
@ -383,6 +386,10 @@ public:
// @cmember Assegna il campo al gruppo <p group>
void set_group(byte group);
// @cmember Assegna il campo al modulo <p module>
void set_module(word module);
bool in_module(word m) const;
// @cmember Setta il focus al campo
virtual void set_focus() const;
@ -1344,6 +1351,8 @@ protected: // TEditable_field
// @cmember Gestisce la pressione del tasto (true se la gestione ha avuto successo)
virtual bool on_key(KEY key);
virtual bool autosave(TRelation& r);
// @access Public Member
public:

View File

@ -47,6 +47,8 @@
#define MOV_DNDOC "DNDOC"
#define MOV_DATAINC "DATAINC"
#define MOV_LIQDIFF "LIQDIFF"
#define MOV_CONTRATTO "CONTRATTO"
#define MOV_NOPROFIT "NOPROFIT"
#define NUMREG_PROVVISORIO 999999L

View File

@ -31,6 +31,7 @@
#define PCN_CODCMS "CODCMS"
#define PCN_FASCMS "FASCMS"
#define PCN_ANALITICA "ANALITICA"
#define PCN_SERVIZI "SERVIZI"
#endif

View File

@ -108,13 +108,14 @@ bool TRecordset::save_as_html(const char* path)
save_html_head(out, main_app().title());
out << "<body>" << endl;
/* More annoyng than useful
TString qry; parsed_text(qry);
if (qry.full())
{
for (int i = qry.find('\n'); i > 0; i = qry.find('\n', i+1))
qry.insert("<br/>", i+1);
out << "<p><b>" << qry << "</b></p>" << endl;
}
}*/
out << "<table border=\"1\">";
out << " <caption>" << main_app().title() << "</caption>" << endl;
@ -135,7 +136,7 @@ bool TRecordset::save_as_html(const char* path)
case _longfld:
case _realfld: out << "align=\"right\""; break;
case _boolfld: out << "align=\"center\""; break;
default : out << "style=\"mso-number-format:\\@\""; break;
default : out << "style=\"mso-number-format:\\@\""; break; // Stringa!
}
out << " />" << endl;
}

View File

@ -2407,7 +2407,7 @@ void TFieldref::write(TConfig& ini, const char* defpar, const char* val) const
if ((val == NULL || *val == '\0') && !ini.exist(_name))
return;
const char* para = _id.empty() ? defpar : (const char *) _id;
const char* para = _id.empty() ? defpar : (const char*)_id;
if (_from > 0 || _to > 0)
{
buffer = ini.get(_name, para);

View File

@ -90,6 +90,8 @@ int TText_recordset::find_column(const char* column) const
{
if (real::is_natural(column))
n = atoi(column);
if (strlen(column) > 2)
n = TRecordset::find_column(column);
else
{
n = 0;

View File

@ -114,7 +114,7 @@ protected:
virtual bool save_as_text(const char* path);
TAS400_column_info* parse_field(const char* column, int& c, bool create);
bool set_field(const TAS400_column_info& fi, const TVariant& var);
virtual bool set_field(const TAS400_column_info& fi, const TVariant& var);
virtual const TVariant& get_field(const TAS400_column_info& fi) const;
public: