Introduzione delle sottosezioni
git-svn-id: svn://10.65.10.50/trunk@4555 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
5721b0b1d4
commit
7a1bbd6b7f
221
include/form.h
221
include/form.h
@ -19,15 +19,21 @@ class TRectype;
|
||||
#endif
|
||||
|
||||
#ifndef __RELATION_H
|
||||
class TRelation;
|
||||
#include <relation.h>
|
||||
/*class TRelation;
|
||||
class TRelation_description;
|
||||
class TCursor;
|
||||
class TSorted_cursor;*/
|
||||
#endif
|
||||
|
||||
#ifndef __ASSOC_H
|
||||
#include <assoc.h>
|
||||
#endif
|
||||
|
||||
#ifndef __EXPR_H
|
||||
#include <expr.h>
|
||||
#endif
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
// @enum pagetype | Posizione della pagina da stampare
|
||||
@ -39,6 +45,12 @@ enum pagetype {
|
||||
|
||||
// @doc INTERNAL
|
||||
|
||||
// @enum bkg_mode | Tipo di background presente nella stampa
|
||||
enum bkg_mode {
|
||||
none, // @emem Nessuno sfondo
|
||||
testo, // @emem Sfondo di tipo testo
|
||||
graphics } ; // @emem Sfondo grafico
|
||||
|
||||
pagetype char2page(char);
|
||||
|
||||
class TForm;
|
||||
@ -46,8 +58,10 @@ class TMask_field;
|
||||
class TSheet_field;
|
||||
class TForm_item;
|
||||
class TPrint_section;
|
||||
class TForm_subsection ;
|
||||
|
||||
const int MAXCOLUMNS = 32;
|
||||
const int MAXSUBSECTIONS = 9;
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
@ -68,6 +82,9 @@ class TForm : public TObject
|
||||
|
||||
// @access:(INTERNAL) Private Member
|
||||
|
||||
// @cmember:(INTERNAL) Tipo di sfondo da applicare alla stampa (vedi <t bkg_mode>)
|
||||
bkg_mode _background_mode;
|
||||
|
||||
// @cmember:(INTERNAL) Nome del profilo di stampa
|
||||
TString _name;
|
||||
// @cmember:(INTERNAL) Codice del profilo di stampa
|
||||
@ -103,6 +120,9 @@ class TForm : public TObject
|
||||
// @cmember:(INTERNAL) <c TRelation_description> per la gestione della relazione corrente
|
||||
TRelation_description* _rel_desc;
|
||||
|
||||
// @cmember:(INTERNAL) Indica se proseguire il ciclo next_match sul file (sezioni annidate)
|
||||
TArray _skip_info;
|
||||
|
||||
// @cmember:(INTERNAL) Array di headers
|
||||
TArray _head;
|
||||
// @cmember:(INTERNAL) Array di bodies
|
||||
@ -127,7 +147,9 @@ class TForm : public TObject
|
||||
TString _desc;
|
||||
// @cmember:(INTERNAL) Array di caratteri di fincatura
|
||||
TString16 _fink;
|
||||
|
||||
// @cmember:(INTERNAL) Numero iniziale di pagina
|
||||
word _frompage,_topage;
|
||||
|
||||
// @cmember:(INTERNAL) Handler di default della testata di stampa
|
||||
static void header_handler(TPrinter& p);
|
||||
// @cmember:(INTERNAL) Handler di default del piede di stampa
|
||||
@ -167,7 +189,15 @@ protected:
|
||||
// @cmember Legge una use e setta la relazione (ritorna sempre TRUE)
|
||||
bool parse_use(TScanner&);
|
||||
// @cmember Legge una join e setta la relazione (ritorna sempre TRUE)
|
||||
bool parse_join(TScanner&);
|
||||
bool parse_join(TScanner& scanner);
|
||||
// @cmember Legge una join e setta la relazione (ritorna sempre TRUE)
|
||||
bool parse_sortedjoin(TScanner& scanner);
|
||||
// @cmember Legge una join e setta la relazione (ritorna sempre TRUE)
|
||||
bool parse_join_param(TScanner& scanner,TRelation * rel, TString16 j, int to );
|
||||
// @cmember Legge l'espressione di ordinamento e ne ritorna la tokenstring
|
||||
TToken_string parse_sortexpr(TScanner&);
|
||||
// @cmember Legge l'espressione di filtro e ne ritorna la tokenstring
|
||||
TToken_string parse_filter(TScanner&);
|
||||
|
||||
// @cmember Legge una <c TRelation_description> e setta la relazione
|
||||
bool parse_description(TScanner&);
|
||||
@ -230,6 +260,15 @@ public:
|
||||
// @cmember Stampa gli items da <p form> a <p to>
|
||||
bool print(long from = 0L, long to = -1L);
|
||||
|
||||
// @cmember Memorizza il risultato dell'ultimo match (val==-1: resetta) su <p file>
|
||||
void match_result(int file=0, int val=-1);
|
||||
// @cmember Indica se l'ultimo next_match su <p file> è stato fruttuoso
|
||||
bool last_match_result(int file=0);
|
||||
// @cmember Indica se è già stato fatto un next_match su <p file>
|
||||
bool next_match_done(int file=0);
|
||||
// @cmember Indica se è già stato fatto un next_match su <p file>
|
||||
int matches_done(int file=0);
|
||||
|
||||
// @cmember Ritorna l'altezza della pagina <p page> la prima di default
|
||||
word height(word page = 3);
|
||||
|
||||
@ -282,6 +321,8 @@ public:
|
||||
|
||||
// @cmember Ritorna il campo <p id>-esimo della sezione <p sec>
|
||||
TForm_item& find_field(char sec, pagetype pag, short id) const;
|
||||
// @cmember Ritorna la sottosezione <p name> della sezione <p sec>
|
||||
TForm_item& find_field(char sec, pagetype pag, const char *name) const;
|
||||
// @cmember Ritorna l'offset x valido per tutte le sezioni
|
||||
int& offset_x()
|
||||
{ return _x; }
|
||||
@ -325,14 +366,22 @@ public:
|
||||
// @cmember Editor interface (vedi <c TForm_editor>)
|
||||
TForm_editor& editor() const;
|
||||
|
||||
// @cmember Setta lil numero di pagina iniziale
|
||||
void set_from_page(word p)
|
||||
{_frompage=p;}
|
||||
// @cmember Setta lil numero di pagina finale
|
||||
void set_to_page(word p)
|
||||
{_topage=p;}
|
||||
|
||||
// @cmember Setta l'inizio di stampa dell'ultima pagina
|
||||
void set_last_page(bool lp)
|
||||
{ _lastpage = lp; }
|
||||
|
||||
// @cmember Setta il modo di fincatura
|
||||
void set_fink_mode(bool f);
|
||||
// @cmember Ritorna il modo di fincatura
|
||||
bool get_fink_mode() ;
|
||||
// @cmember Setta il modo di sfondo (fincatura)
|
||||
void set_mode(bkg_mode b);
|
||||
// @cmember Ritorna il modo di sfondo (fincatura)
|
||||
bkg_mode mode()
|
||||
{ return _background_mode;}
|
||||
|
||||
// @cmember Costruttore
|
||||
TForm();
|
||||
@ -371,6 +420,8 @@ public:
|
||||
bool finkr : 1;
|
||||
// @cmember Indica se si tratta di un campo memo
|
||||
bool memo : 1;
|
||||
// @cmember Indica se va stampato a inizio di pagina nuova
|
||||
bool newpage : 1;
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
@ -394,6 +445,9 @@ public:
|
||||
// @cmember Setta il flag di campo memo
|
||||
void set_memo (bool b)
|
||||
{ memo = b; }
|
||||
// @cmember Setta il flag di campo memo
|
||||
void set_newpage (bool b)
|
||||
{ newpage = b; }
|
||||
// @cmember Permette di stampare i flags sulla maschera di editing <p m>
|
||||
void print_on(TMask& m);
|
||||
// @cmember Legge i flgs dalla maschera <p m>
|
||||
@ -439,14 +493,15 @@ class TPrint_section : public TArray
|
||||
char _sec_type;
|
||||
// @cmember:(INTERNAL) Posizione della pagina da stampare (vedi <t pagetype>)
|
||||
pagetype _page_type;
|
||||
// @cmember:(INTERNAL) Indica se si tratta di una sottosezione
|
||||
bool _subsection;
|
||||
|
||||
// @cmember:(INTERNAL) Puntatore alla sezione soprastante (!= NULL se si è in una sottosezione)
|
||||
TForm_subsection * _upsection;
|
||||
// @cmember:(INTERNAL) Array di sottosezioni
|
||||
TArray _subsections;
|
||||
// @cmember:(INTERNAL) Lista dei campi da stampare
|
||||
TArray _item;
|
||||
// @cmember:(INTERNAL) Numero di ripetizione eseguite
|
||||
int _repeat_count;
|
||||
|
||||
|
||||
// @cmember:(INTERNAL) Offset delle colonne se COLUMNWISE
|
||||
int _tab[MAXCOLUMNS];
|
||||
|
||||
@ -470,8 +525,12 @@ protected:
|
||||
static bool special_field_handler(TMask_field&, KEY);
|
||||
// @cmember Handler dello sheet presente nella maschera di edit della sezione
|
||||
static bool detail_field_notify (TSheet_field&, int, KEY);
|
||||
// @cmember Cerca e ritorna l'<p id>-esimo campo nella sezione (funzione ricorsiva usata da find_field)
|
||||
TForm_item * find_field_everywhere(short id,const TPrint_section *starting) const;
|
||||
// @cmember Cerca e ritorna la sottosezione <p id> nella sezione
|
||||
TForm_item * find_field_everywhere(const char *id,const TPrint_section *starting) const;
|
||||
|
||||
// @access Public Member
|
||||
// @access Public Members
|
||||
public:
|
||||
// @cmember Ritorna la <c TPrintrow> della riga <p num>
|
||||
TPrintrow& row(int num);
|
||||
@ -487,19 +546,37 @@ public:
|
||||
{ return (TForm_item&)_item[n]; }
|
||||
// @cmember Cerca e ritorna l'<p id>-esimo campo da stampare
|
||||
TForm_item& find_field(short id) const;
|
||||
// @cmember Cerca e ritorna la sottosezione <p id> da stampare
|
||||
TForm_item& find_field(const char *id) const;
|
||||
// @cmember Rimuove uno o tutti i campi da stampare (chiama <mf TArray::destroy>)
|
||||
void destroy_field(int n, bool c = TRUE)
|
||||
{ _item.destroy(n, c); }
|
||||
// @cmember Rimuove tutti i campi da stampare (chiama <mf TArray::destroy>)
|
||||
void destroy_fields()
|
||||
{ _item.destroy(); }
|
||||
// @cmember Viene sostiuito il campo di posizione <p n> col campo <p f> (chiama <mf TArray::add>)
|
||||
// @cmember Viene sostituito il campo di posizione <p n> col campo <p f> (chiama <mf TArray::add>)
|
||||
void change_field(int n, TForm_item* f);
|
||||
// @cmember Viene inserito il campo di posizione <p n> col campo <p f> (chiama <mf TArray::insert>)
|
||||
void insert_field(int n, TForm_item* f);
|
||||
// @cmember Viene aggiunto i coda alla'array il campo <p f> (chiama <mf TArray::add>)
|
||||
void add_field(TForm_item* f);
|
||||
|
||||
// @cmember Aggiunge una sottosezione
|
||||
void add_subsection(TForm_subsection * ss) ;
|
||||
// @cmember Restituisce la sezione numero n
|
||||
TForm_subsection * subsection(int n) const ;
|
||||
// @cmember Restituisce il numero di sottosezioni
|
||||
int subsections() const ;
|
||||
// @cmember Restituisce il puntatore alla sezione "Padre"
|
||||
TPrint_section * section_above() const ;
|
||||
// @cmember Restituisce il puntatore alla sezione "Padre"
|
||||
TForm_subsection * subsection_above() const ;
|
||||
|
||||
// @cmember ricompone le espressioni di FILE GROUP delle sottosezioni contenute
|
||||
void set_subs_cond(int file,const char *newcond,const char * oldcond);
|
||||
// @cmember Valuta l'espressione passata risolvendo le variabili
|
||||
TExpression & eval_expr(TExpression & e, int def_file=0);
|
||||
|
||||
// @cmember Ritorna se si tratta di una sezione temporanea
|
||||
virtual bool& temp()
|
||||
{ return _temp; };
|
||||
@ -515,7 +592,9 @@ public:
|
||||
{ tab(0); return _nfld; }
|
||||
// @cmember Ritorna l'altezza della sezione
|
||||
word height() const
|
||||
{ return _height; }
|
||||
{ return _height;}
|
||||
// @cmember Ritorna l'altezza minima delle sottosezioni
|
||||
word subs_height() const ;
|
||||
// @cmember Ritorna l'offset della prima colonna
|
||||
word ofspc() const
|
||||
{ return _ofspc; }
|
||||
@ -538,9 +617,15 @@ public:
|
||||
|
||||
// @cmember Azzera tutte le righe della sezione di stampa
|
||||
void reset();
|
||||
// @cmember Aggiorna tutti i campi e li stampa
|
||||
// @cmember Aggiorna tutti i campi e li inserisce nel buffer delle righe di stampa
|
||||
virtual bool update();
|
||||
// @cmember Legge i campi dal file di testo (vedi <c TScanner>)
|
||||
// @cmember Aggiorna tutti i campi e li stampa (usata in caso di BODY)
|
||||
bool update_and_print(bool shown, bool newpage=FALSE);
|
||||
// @cmember Legge la testata dal file di testo (vedi <c TScanner>)
|
||||
bool parse_head(TScanner& scanner);
|
||||
// @cmember Legge i campi della sezione dal file di testo (vedi <c TScanner>)
|
||||
bool parse_body(TScanner& scanner);
|
||||
// @cmember Legge la testata e il corpo (chiama parse_head e parse_body)
|
||||
bool parse(TScanner& scanner);
|
||||
|
||||
// @cmember Legge dal record <p rec> altezza e offset prima colonna della sezione
|
||||
@ -570,12 +655,12 @@ public:
|
||||
int tab(int col);
|
||||
// @cmember Annulla (setta a -1) l'offset delle colonne se COLUMNWISE
|
||||
void reset_tabs();
|
||||
|
||||
// @cmember Operatore di assegnamento
|
||||
|
||||
// @cmember Operatore di assegnamento
|
||||
const TPrint_section& operator=(const TPrint_section& ps)
|
||||
{ return copy(ps); }
|
||||
// @cmember Costruttore
|
||||
TPrint_section(TForm* parent, char st, pagetype pt, bool subsection = FALSE);
|
||||
TPrint_section(TForm* parent, char st, pagetype pt, TForm_subsection *fathersection = NULL);
|
||||
// @cmember Costruttore
|
||||
TPrint_section(const TPrint_section& ps)
|
||||
{ copy(ps); }
|
||||
@ -600,8 +685,6 @@ class TForm_item : public TObject
|
||||
|
||||
// @access:(INTERNAL) Private Member
|
||||
|
||||
// @cmember:(INTERNAL) Flag del campo (vedi <c TForm_flags>)
|
||||
TForm_flags _flag;
|
||||
// @cmember:(INTERNAL) Gruppi a cui appartiene il campo
|
||||
TBit_array _group;
|
||||
// @cmember:(INTERNAL) Special attribuiti al campo (vedi <c TAssoc_array>)
|
||||
@ -611,6 +694,8 @@ class TForm_item : public TObject
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
// @cmember:(INTERNAL) Flag del campo (vedi <c TForm_flags>)
|
||||
TForm_flags _flag;
|
||||
// @cmember:(INTERNAL) Sezione da stampare (vedi <c TPrint_section>)
|
||||
TPrint_section* _section;
|
||||
// @cmember Identificatore del campo
|
||||
@ -663,6 +748,10 @@ protected:
|
||||
|
||||
// @cmember Copia tutti i membri dell'oggetto base in fi. Viene chiamata dalla <mf TForm_item::dup>
|
||||
void copy_to_form_item(TForm_item* fi) const;
|
||||
|
||||
// @cmember manda il messaggio a tutti i campi appartenenti al gruppo inidcato
|
||||
// (funzione ricorsiva chiamata da <mf TForm_item::do_message>)
|
||||
void send_message_to_group(const char * cmd,byte id,const TPrint_section & section, const TPrint_section *starting_section) ;
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
@ -884,5 +973,95 @@ public:
|
||||
{}
|
||||
};
|
||||
|
||||
class TForm_subsection : public TForm_item
|
||||
{
|
||||
TPrint_section _ssec; // sezione di stampa contenente il "corpo" della sottosezione
|
||||
TString _name;
|
||||
|
||||
bool _bigskip; // indicatore di bigskip sui raggruppamenti (salta di gruppo in gruppo)
|
||||
int _file_id; // ID del file su cui iterare in stampa se previsto
|
||||
TExpression * _condexpr; // espressione condizionale per la valutazione della sottosezione
|
||||
// o per individuare il raggruppamento nel file
|
||||
protected:
|
||||
virtual void print_on(ostream& out) const;
|
||||
TForm_subsection * upper_conditional() const ;
|
||||
public:
|
||||
virtual TObject* dup() const;
|
||||
virtual bool parse(TScanner& s);
|
||||
virtual bool update();
|
||||
virtual bool edit(TMask& m);
|
||||
|
||||
virtual const char* class_name() const { return "SEZIONE"; }
|
||||
|
||||
TPrint_section& subsection() { return _ssec; }
|
||||
|
||||
|
||||
// @cmember Ritorna se la sezione è da stampare a inizio di pagina nuova
|
||||
bool atnewpage() {return _flag.newpage;}
|
||||
// virtual void show(bool on = TRUE);
|
||||
// virtual void enable(bool on = TRUE);
|
||||
void hide() { show(FALSE); }
|
||||
void disable() { enable(FALSE); }
|
||||
|
||||
// @cmember Ritorna il nome della sezione
|
||||
void name(const char* s) { _name = s; _desc << "Sottosezione " << s; }
|
||||
const char* name() const { return _name; }
|
||||
// @cmember Aggiorna e stampa tutti i campi della sezione e delle sezioni contenute
|
||||
bool set_body(bool showfields=TRUE);
|
||||
// @cmember restituisce la condizione della sottosezione
|
||||
const char * condition();
|
||||
// @cmember restituisce il numero del file associato alla sottosezione
|
||||
int fileid();
|
||||
// @cmember imposta la condizione della sottosezione
|
||||
void setcondition(const char * cond,TTypeexp type=_numexpr);
|
||||
// @cmember Costruttore
|
||||
TForm_subsection(TPrint_section* above_section, const char* name = "");
|
||||
virtual ~TForm_subsection();
|
||||
};
|
||||
|
||||
class TForm_string : public TForm_item
|
||||
{
|
||||
TString _str, _picture;
|
||||
TArray _field;
|
||||
TToken_string _memo;
|
||||
|
||||
protected:
|
||||
virtual const char* class_name() const { return "STRINGA"; }
|
||||
virtual void print_body(ostream& out) const;
|
||||
|
||||
virtual void print_on(TMask& m);
|
||||
virtual void read_from(const TMask& m);
|
||||
|
||||
virtual bool read_from(const TRectype& rform);
|
||||
virtual void print_on(TRectype& rform);
|
||||
|
||||
virtual void print_on(TToken_string& row);
|
||||
|
||||
virtual bool parse_item(TScanner&);
|
||||
virtual bool read();
|
||||
virtual bool update();
|
||||
virtual const char* example() const;
|
||||
virtual void apply_format(TString & s, const TString & p) const;
|
||||
|
||||
virtual TToken_string& memo_info() { return _memo; }
|
||||
|
||||
virtual const char* get() const;
|
||||
bool set(const char*);
|
||||
|
||||
TFieldref& field(int i) const { return (TFieldref&)_field[i]; }
|
||||
|
||||
public:
|
||||
virtual TObject* dup() const;
|
||||
virtual const int fields() { return _field.items();}
|
||||
virtual const TString& picture() const { return _picture; }
|
||||
virtual void set_picture(const char* p) { _picture = p; }
|
||||
virtual void put_paragraph(const char* s);
|
||||
|
||||
virtual bool edit(TMask& m);
|
||||
TForm_string(TPrint_section* section);
|
||||
virtual ~TForm_string() {}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user