81534d006f
Files correlati : tutti Ricompilazione Demo : [ ] Commento : 0001213: mappa di login, fuoco Lla mappa di login si apre ma per poter digitare la password bisogna cliccare sul campo col mouse. Stesso problema richiamando le ricerche, per esempio quella clienti. git-svn-id: svn://10.65.10.50/trunk@18591 c028cbd2-c16b-5b4b-a496-9718f37d4682
334 lines
6.7 KiB
C++
Executable File
334 lines
6.7 KiB
C++
Executable File
#include <execp.h>
|
|
#include <tabapp.h>
|
|
#include <tabutil.h>
|
|
|
|
// @cmember Costruttore
|
|
TTable_application::TTable_application()
|
|
: _msk(NULL), _rel(NULL)
|
|
{ }
|
|
|
|
// @cmember Distruttore
|
|
TTable_application::~TTable_application()
|
|
{ }
|
|
|
|
// @cmember Indica se la futura <mf TTable_application::get_mask> ritornera' una maschera diversa
|
|
// dalla corrente.
|
|
bool TTable_application::changing_mask(int mode)
|
|
{ return FALSE; }
|
|
|
|
// @cmember Richiede la maschera da usare
|
|
TMask* TTable_application::get_mask(int mode)
|
|
{
|
|
CHECK(_msk, "Null mask");
|
|
return _msk;
|
|
}
|
|
|
|
// @cmember Ritorna la relazione da modificare
|
|
TRelation* TTable_application::get_relation() const
|
|
{
|
|
CHECK(_rel, "Null relation");
|
|
return _rel;
|
|
}
|
|
|
|
void TTable_application::print()
|
|
{
|
|
TString16 cmd;
|
|
cmd << "ba3 -1 " << get_tabname();
|
|
TExternal_app stampa(cmd);
|
|
stampa.run();
|
|
}
|
|
|
|
void TTable_application::init_query_mode(TMask& m)
|
|
{
|
|
m.enable(-GR_MODIFY_PROTECTED);
|
|
m.enable(-GR_RECORD_PROTECTED);
|
|
}
|
|
|
|
void TTable_application::init_modify_mode(TMask& m)
|
|
{
|
|
m.disable(-GR_MODIFY_PROTECTED);
|
|
const bool enable = !(_rel->curr().get_bool(FPC));
|
|
m.enable(-GR_RECORD_PROTECTED,enable);
|
|
}
|
|
|
|
bool TTable_application::protected_record(TRectype& rec)
|
|
{
|
|
return rec.get_bool(FPC);
|
|
}
|
|
|
|
TString& TTable_application::get_mask_name(TString& t) const
|
|
{
|
|
CHECK(_rel,"Can't use a NULL relation to retrieve table module");
|
|
TTable& tab = (TTable&) _rel->lfile();
|
|
|
|
TString16 m = _tabname;
|
|
if (m[0] == '%') m.ltrim(1);
|
|
|
|
t = tab.module();
|
|
t << "tb" << m;
|
|
t.lower();
|
|
|
|
TFilename n(t); n.ext("msk");
|
|
if (!n.custom_path())
|
|
t.overwrite("ba");
|
|
return t;
|
|
}
|
|
|
|
TMask* TTable_application::set_mask(TMask* m)
|
|
{
|
|
if (_msk != NULL)
|
|
{
|
|
delete _msk;
|
|
_msk = NULL;
|
|
}
|
|
|
|
if (m != NULL)
|
|
{
|
|
// imposta la maschera come maschera della applicazione
|
|
_msk = m;
|
|
}
|
|
else
|
|
{
|
|
// alloca la maschera standard come maschera della applicazione
|
|
TFilename name; get_mask_name(name); name.ext("msk");
|
|
if (name.custom_path())
|
|
_msk = new TMask(name);
|
|
else
|
|
error_box(FR("Impossibile trovare la maschera %s"), (const char*)name);
|
|
}
|
|
return _msk;
|
|
}
|
|
|
|
bool TTable_application::user_create()
|
|
{
|
|
if (argc() < 3)
|
|
return false;
|
|
|
|
_tabname = argv(2);
|
|
_tabname.upper();
|
|
_rel = new TRelation(_tabname);
|
|
|
|
if (set_mask() == NULL)
|
|
return false;
|
|
|
|
const int campi = _msk->fields();
|
|
for (int i = 0; i < campi; i++)
|
|
{
|
|
const TMask_field& f = _msk->fld(i);
|
|
if (f.in_group(GR_SEARCH))
|
|
{
|
|
set_search_field(f.dlg());
|
|
break;
|
|
}
|
|
}
|
|
|
|
TFilename rpt; get_mask_name(rpt); rpt.ext("rpt");
|
|
if (rpt.custom_path())
|
|
{
|
|
enable_menu_item(M_FILE_PREVIEW);
|
|
enable_menu_item(M_FILE_PRINT);
|
|
}
|
|
|
|
TString title;
|
|
_msk->get_caption(title);
|
|
set_title(title);
|
|
return TRUE;
|
|
}
|
|
|
|
bool TTable_application::user_destroy()
|
|
{
|
|
if (_msk) delete _msk;
|
|
if (_rel) delete _rel;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
///////////////////////////////////////////////////
|
|
// Tabelle Multirel
|
|
///////////////////////////////////////////////////
|
|
|
|
// @cmember Indica se la futura <mf TMultirel_application::get_mask> ritornera' una maschera diversa
|
|
// dalla corrente.
|
|
bool TMultirel_application::changing_mask(int mode)
|
|
{ return false; }
|
|
|
|
// @cmember Richiede la maschera da usare
|
|
TMask* TMultirel_application::get_mask(int mode)
|
|
{
|
|
CHECK(_msk, "Null mask");
|
|
return _msk;
|
|
}
|
|
|
|
// @cmember Ritorna la relazione da modificare
|
|
TRelation* TMultirel_application::get_relation() const
|
|
{
|
|
CHECK(_rel, "Null relation");
|
|
return _rel;
|
|
}
|
|
|
|
void TMultirel_application::print()
|
|
{
|
|
TString16 tabname;
|
|
get_mask_name(tabname);
|
|
TString cmd;
|
|
cmd << "ba8 -4 "<< tabname;
|
|
TExternal_app stampa(cmd);
|
|
stampa.run();
|
|
}
|
|
|
|
void TMultirel_application::get_mask_name(TString& tabname) const
|
|
{
|
|
tabname = name().left(4);
|
|
tabname << _tabname;
|
|
}
|
|
|
|
bool TMultirel_application::find(word k)
|
|
{
|
|
bool ok = TRelation_application::find(k);
|
|
|
|
if (!ok && k < 2)
|
|
{
|
|
file().setkey(1);
|
|
file().zero();
|
|
for (TEditable_field* e = get_mask()->get_key_field(1, true); e; e = get_mask()->get_key_field(1, false))
|
|
{
|
|
if (e->shown() || e->ghost()) // Ignora campi invisibili non ghost
|
|
e->autosave(*get_relation());
|
|
}
|
|
|
|
TRectype rec(file().curr());
|
|
ok = file().read(_isequal) == NOERR;
|
|
}
|
|
|
|
return ok;
|
|
}
|
|
|
|
void TMultirel_application::init_insert_mode(TMask& m)
|
|
{
|
|
TLocalisamfile multi(LF_MULTIREL);
|
|
|
|
file().curr().zero();
|
|
for (TEditable_field* e = get_mask()->get_key_field(1, true); e; e = get_mask()->get_key_field(1, false))
|
|
{
|
|
if ((!e->in_group(1)) && (e->shown() || e->ghost()))
|
|
e->autosave(*get_relation());
|
|
}
|
|
|
|
multi.curr() = file().curr();
|
|
if (multi.read(_isgteq) == NOERR && multi.curr() == file().curr())
|
|
set_descr(m, multi.get("DATA"));
|
|
for (int i = m.fields() - 1; i >= 0; i--)
|
|
{
|
|
TMask_field& c = m.fld(i);
|
|
|
|
if (c.in_group(1))
|
|
{
|
|
c.enable();
|
|
if (c.is_edit())
|
|
{
|
|
TEdit_field& e = (TEdit_field&)c;
|
|
|
|
if (e.browse() != NULL)
|
|
e.enable_check();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void TMultirel_application::init_modify_mode(TMask& m)
|
|
{
|
|
for (int i = m.fields() - 1; i >= 0; i--)
|
|
{
|
|
TMask_field& c = m.fld(i);
|
|
|
|
if (c.in_group(1))
|
|
{
|
|
c.enable();
|
|
_second = c.get();
|
|
if (c.is_edit())
|
|
{
|
|
TEdit_field& e = (TEdit_field&)c;
|
|
|
|
if (e.browse() != NULL)
|
|
e.enable_check();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
int TMultirel_application::rewrite(const TMask& m)
|
|
{
|
|
int err = TRelation_application::rewrite(m);
|
|
|
|
if (err != NOERR)
|
|
err = TRelation_application::write(m);
|
|
|
|
TRelation & rel = *get_relation();
|
|
const TString & second = rel.lfile().get("SECOND");
|
|
|
|
if (err == NOERR && second != _second)
|
|
{
|
|
|
|
rel.save_status();
|
|
rel.lfile().put("SECOND", _second);
|
|
rel.remove();
|
|
rel.restore_status();
|
|
}
|
|
return err;
|
|
}
|
|
|
|
bool TMultirel_application::user_create()
|
|
{
|
|
if (argc() < 3)
|
|
return false;
|
|
|
|
_tabname = argv(2);
|
|
_tabname.upper();
|
|
_rel = new TRelation(LF_MULTIREL);
|
|
|
|
//costruisce il nome della maschera interessata
|
|
//nome modulo + 'ts' + nome tabella
|
|
TString16 tabname;
|
|
get_mask_name(tabname);
|
|
_msk = new TMask(tabname);
|
|
|
|
FOR_EACH_MASK_FIELD((*_msk), i, f)
|
|
{
|
|
if (f->in_key(1) && !f->in_group(1))
|
|
{
|
|
set_search_field(f->dlg());
|
|
break;
|
|
}
|
|
}
|
|
|
|
TFilename rep = tabname;
|
|
rep.ext("rep");
|
|
if (rep.custom_path())
|
|
{
|
|
enable_menu_item(M_FILE_PREVIEW);
|
|
enable_menu_item(M_FILE_PRINT);
|
|
}
|
|
|
|
TString title;
|
|
_msk->get_caption(title);
|
|
set_title(title);
|
|
return true;
|
|
}
|
|
|
|
bool TMultirel_application::user_destroy()
|
|
{
|
|
if (_msk) delete _msk;
|
|
if (_rel) delete _rel;
|
|
|
|
return true;
|
|
}
|
|
|
|
// @cmember Costruttore
|
|
TMultirel_application::TMultirel_application()
|
|
: _msk(NULL), _rel(NULL)
|
|
{ }
|
|
|
|
// @cmember Distruttore
|
|
TMultirel_application::~TMultirel_application()
|
|
{ }
|