diff --git a/include/mask.h b/include/mask.h index 8120b58df..95005b063 100755 --- a/include/mask.h +++ b/include/mask.h @@ -486,4 +486,13 @@ public: ~TYesnoallnone_box(); }; +#define FOR_EACH_MASK_FIELD(__m, __i, __f) \ + TMask_field* __f = NULL; \ + for (int __i = 0; __i < __m.fields() && (__f=&__m.fld(__i))!=NULL; __i++) + +#define FOR_EACH_MASK_SHEET(__m, __i, __s) \ + TSheet_field* __s = NULL; \ + for (int __i = 0; __i < __m.fields() && (__s=(TSheet_field*)&__m.fld(__i))!= NULL; __i++) if (__m.fld(__i).is_sheet()) + + #endif // __MASK_H diff --git a/include/tabapp.cpp b/include/tabapp.cpp index 445be7a05..255be1183 100755 --- a/include/tabapp.cpp +++ b/include/tabapp.cpp @@ -136,3 +136,95 @@ bool TTable_application::user_destroy() return TRUE; } + +/////////////////////////////////////////////////// +// Tabelle Multirel +/////////////////////////////////////////////////// + +// @cmember Indica se la futura 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::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)) + { + set_search_field(f->dlg()); + break; + } + } + + TFilename rep = tabname; + rep.ext("rep"); + if (rep.custom_path()) + 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() +{ } diff --git a/include/tabapp.h b/include/tabapp.h index 50633d645..6a91b9156 100755 --- a/include/tabapp.h +++ b/include/tabapp.h @@ -68,5 +68,55 @@ public: virtual ~TTable_application(); }; + +/////////////////////////////////////////////////////////////// +// Tabelle multirel +/////////////////////////////////////////////////////////////// +// @class TMultirel_application | Classe per la definizione della per le tabelle +// +// @base public | TRelation_application +class TMultirel_application : public TRelation_application + +// @author:(INTERNAL) Vari +// @access:(INTERNAL) Private Member +{ + // @cmember:(INTERNAL) Maschera corrente dell'applicazione + TMask* _msk; + // @cmember:(INTERNAL) Relazione corrente dell'applicazione + TRelation* _rel; + // @cmember:(INTERNAL) Nome della tabella da utilizzare + TString _tabname; + +// @access Protected Member +protected: + + virtual void get_mask_name(TString& tabname) const; + // @cmember Richiede la maschera da usare + virtual TMask* get_mask(int mode = MODE_QUERY); + // @cmember Indica se la futura ritornera' una maschera diversa + // dalla corrente. + virtual bool changing_mask(int mode); + // @cmember Ritorna la relazione da modificare + virtual TRelation* get_relation() const; + // @cmember Inizializzazione dei dati dell'utente + virtual bool user_create() ; + // @cmember Distruzione dei dati dell'utente + virtual bool user_destroy() ; + // @cmember Chiama il programma di stampa + virtual void print(); + + +// @access Public Member +public: + // @cmember Ritorna il nome della tabella + const TString& get_tabname() const + { return _tabname; } + + // @cmember Costruttore + TMultirel_application(); + // @cmember Distruttore + virtual ~TMultirel_application(); +}; + #endif