campo-sirio/include/printer.h
guy 3de99221c0 Migliorata esportazione in Excel di stampe vecchio stile
git-svn-id: svn://10.65.10.50/branches/R_10_00@22980 c028cbd2-c16b-5b4b-a496-9718f37d4682
2014-07-30 12:57:55 +00:00

800 lines
27 KiB
C++
Executable File

#ifndef __PRINTER_H
#define __PRINTER_H
#ifndef XVT_INCL_XVT
#include <xvt.h>
#endif
#ifndef __DATE_H
#include <date.h>
#endif
#ifndef __TEXT_H
#include <text.h>
#endif
// @doc EXTERNAL
// @enum TPrintstyle | Indica lo stile da assegnare al carattere
enum TPrintstyle
{
normalstyle = 0, // @emem Stile normale
boldstyle = 1, // @emem Stile grassetto
underlinedstyle = 2, // @emem Stile sttolineato
italicstyle = 4 // @emem Stile corsivo
};
// @doc EXTERNAL
// @enum TPrtype | Indica il tipo di stampante da utilizzare per la stampa
enum TPrtype
{
winprinter = 0, // @emem Stampa su stampante normale
fileprinter = 1, // @emem Stampa su file
screenvis = 2, // @emem Anteprima a video
exportprinter= 3, // @emem Esportazione di stampa
acrobatprinter=4, // @emem Stampa tramite Acrobat
};
// @doc EXTERNAL
// @enum TGraphic_shape | Indica la forma grafica da utilizzare per la stampa
enum TGraphic_shape
{
line, // @emem Disgna una linea
box // @emem Disgna un box
};
// 256 | Lunghezza massima della riga da stampare
#define MAX_PR_WIDTH 256
// @doc EXTERNAL
// @class TPrintrow | Classe per la definizione della stampa di una riga
//
// @base public | TObject
class TPrintrow : public TObject
// @author:(INTERNAL) Villa
// @access:(INTERNAL) Private Member
{
// @cmember:(INTERNAL) Stringa da stampare nella riga
TString256 _row;
// @cmember:(INTERNAL) Attributi stile dei caratteri
char _attr[MAX_PR_WIDTH];
// @cmember:(INTERNAL) Attributi colore dei caratteri
int _cols[MAX_PR_WIDTH];
// @cmember:(INTERNAL) Inizio delle nuove posizioni di tabulazione
TBit_array _tab;
// @cmember:(INTERNAL) Immagini
TToken_string* _images;
// @cmember:(INTERNAL) Attributo carattere corrente
TPrintstyle _currentstyle;
// @cmember:(INTERNAL) Attributo colore corrente
int _currentcolor;
// @cmember:(INTERNAL) Ultima posizione di stampa
int _lastpos;
// @access Public Member
public:
// @cmember Costruttore
TPrintrow();
// @cmember Costruttore
TPrintrow(const TPrintrow& pr);
// @cmember Distruttore
virtual ~TPrintrow();
// TPrintrow& center(const char* str, int position);
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Ritorna il nome della classe
virtual const char* class_name() const;
// @cmember Duplica una riga (vedi <mf TObject::dup>)
virtual TObject* dup() const;
// @cmember Ritorna la stringa da stampare nella riga
const char* row() const
{ return _row; }
// @cmember Ritorna la riga con i codici '@' per lo stile ed il colore del font
const char* row_codified() const;
// @cmember Svuota la riga
TPrintrow& reset();
// @cmember Ritorna lo stile del carattere <p position>-esimo (vedi <t TPrintstyle>)
TPrintstyle get_style(int position) const
{ return (TPrintstyle)_attr[position]; }
// @cmember Ritorna l'attributo carattere corrente
TPrintstyle get_style() const
{ return _currentstyle; }
// @cmember Ritorna il colore del carattere <p position>-esimo
int get_color(int position) const
{ return (TPrintstyle)_cols[position]; }
// @cmember Ritorna l'attributo colore corrente
int get_color() const
{ return _currentcolor; }
// @cmember Scrive una stringa (!!!-1=tab)
TPrintrow& put(const char* str, int position = -1, int len=0);
// @cmember Setta l'attributo carattere corrente (vedi <t TPrintstyle>)
void set_style(TPrintstyle style)
{ _currentstyle=style; }
// @cmember Ritorna l'ultima posizione di stampa
int lastpos() const
{ return _lastpos; }
};
// @doc INTERNAL
// @class BkDef | Classe per la definizione dei bookmark in anteprima di stampa
//
// @base public | TObject
class BkDef : public TObject
// @author:(INTERNAL) Villa
// @comm Questo oggetto e' in grado di costruire l'intero menu' gerarchico dei bookmark
{
// @access Public Member
public:
// @cmember Identificatore del bookmark creato
int _id;
// @cmember Identificatore del bookmark padre
int _father_id;
// @cmember Testo del bookmark
TString _txt;
// @cmember Numero della riga sulla quale e' inserito il bookmark
long _row;
// @cmember Costruttore
BkDef()
{}
// @cmember Distruttore
virtual ~BkDef()
{}
};
class TPrinter;
class TPrint_intersector;
// @doc EXTERNAL
// @type PRINTSECTIONHANDLER | Prototipo funzione definita dall'utente chiamata all'inizio della stampa
// dell'header o del footer
typedef void (*PRINTSECTIONHANDLER)(TPrinter& printer);
// @doc EXTERNAL
// @type LINKHANDLER | Prototipo funzione definita dall'utente per la gestione del link
// Ritorna true se e' necessario ripetere la stampa
typedef bool (*LINKHANDLER)(int, const char*);
class TViswin;
// @doc EXTERNAL
// @class TPrinter | Classe per la definzione delle operazioni sulla stampante
//
// @base public | TObject
class TPrinter : public TObject
// @author:(INTERNAL) Villa
// @access:(INTERNAL) Private Member
{
friend class TPrinter_setup_mask;
// @cmember:(INTERNAL) Puntatore al file di visualizzazione
TViswin* _vf;
// @cmember:(INTERNAL) Testo da stampare
TTextfile _txt;
// @cmember:(INTERNAL) Nome del file di esportazione
TFilename _exportfile;
// @cmember:(INTERNAL) Dimensione dell'header
int _headersize;
// @cmember:(INTERNAL) Dimensione del footer
int _footersize;
// @cmember:(INTERNAL) Contenuto dell'header
TArray _header;
// @cmember:(INTERNAL) Contenuto del footer
TArray _footer;
// @cmember:(INTERNAL) Nome della stampante corrente
TFilename _prname;
// @cmember:(INTERNAL) Nome dell'ultimo TForm utilizzato
TFilename _formname;
// @cmember:(INTERNAL) Lunghezza della pagina logica
int _formlen;
// @cmember:(INTERNAL) Larghezza della pagina logica
int _formwidth;
// @cmember:(INTERNAL) Prossima riga da stampare
int _currentrow;
// @cmember:(INTERNAL) Nome del font per la stampa
TString _fontname;
// @cmember:(INTERNAL) Dimensione del font per la stampa
int _ch_size;
// @cmember:(INTERNAL) Pagina logica contenente la prossima riga da stampare
word _currentpage;
// @cmember:(INTERNAL) Prima pagina da stampare (normalmente 0)
word _frompage;
// @cmember:(INTERNAL) Ultima pagina da stampare (normalmente USHRT_MAX)
word _topage;
// @cmember:(INTERNAL) Indica la stampa di un form feed dopo ogni footer
bool _hwformfeed;
// @cmember:(INTERNAL) Indica il tipo di output selezionato dall'utente per la stampa
TPrtype _printertype;
// @cmember:(INTERNAL) Indica se la stampante e' inizializzata
bool _isopen;
// @cmember:(INTERNAL) Data di stampa
TDate _date;
// @cmember:(INTERNAL) Nome del file per la stampa su disco
TFilename _printerfile;
// @cmember:(INTERNAL) Array di nomi dei link
TString_array _linksdescr;
// @cmember:(INTERNAL) Array di nomi di segnalibri
TArray _bookmarks;
// @cmember:(INTERNAL) Indica se e' attivo il link multiplo (vedi <mf TPrint_application::set_multiple_link>)
bool _multiple_link;
// @cmember:(INTERNAL) Nome del paragrafo di configurazione
TString _config;
// @cmember:(INTERNAL) Array di stringhe per la descrizione del background
TArray _backgrounds;
// @cmember:(INTERNAL) Nomi dei file delle immagini da stampare
TString_array _image_names;
// @cmember:(INTERNAL) Indica se la stampante e' abilitata a trattare grafica
bool _isgraphics;
// @cmember:(INTERNAL) Indica se la stampante e' stata momentaneamente interrotta
bool _frozen;
// @cmember:(INTERNAL) Descrizione completa dello stato della stampante
PRINT_RCD* _print_rcd;
// @cmember:(INTERNAL) Dimensione del record per la descrizione completa dello stato della stampante
int _print_rcd_size;
// @cmember:(INTERNAL) Numero di linee per pollice
int _lines_per_inch;
// @cmember:(INTERNAL) Offset verticale in pixels
int _vert_offset;
// @cmember:(INTERNAL) Offset orizzontale in pixels
int _horz_offset;
// @cmember:(INTERNAL) Offset verticale in linee (in caratteri)
int _l_offset;
// @cmember:(INTERNAL) Offset orizzontale in colonne (in caratteri)
int _c_offset;
// @cmember:(INTERNAL) Definizione dell stampa in punti per linea
int _dots_per_line;
// @cmember:(INTERNAL) Forza stampante di default
bool _force_default;
// @cmember:(INTERNAL) Setta <p t> con il profilo della stampante
//void _get_windows_printer_names(TToken_string& t);
// @cmember:(INTERNAL) Indica se occorre esportare l'header di stampa
bool _export_header;
// @cmember:(INTERNAL) Lunghezza dell'header di stampa da esportare
int _export_header_len;
// @cmember:(INTERNAL) Handler dell'header
PRINTSECTIONHANDLER _headerhandler;
// @cmember:(INTERNAL) Handler del footer
PRINTSECTIONHANDLER _footerhandler;
// @cmember:(INTERNAL) Header del link ipertestuale
LINKHANDLER _linkhandler;
// @cmember:(INTERNAL) Caratteri per fincatura
TString16 _fink;
// @cmember:(INTERNAL) Flag per aggiungere ad una stampa su file gia' esistente (TRUE aggiunge in coda, FALSE sovrascrive)
bool _appendfile;
// @cmember:(INTERNAL) Tipo di fincatura (TRUE grafica, FALSE testo)
bool _fink_mode;
// @cmember:(INTERNAL) Fincatore per modo testo
TPrint_intersector* _finker;
bool _manual_setup;
// @access Protected Member
protected:
// @cmember Ritorna il carattere di newline
virtual char newline()
{ return '\n'; }
// @cmember Metodo base per la stampa
bool printrow (TPrintrow* rowtoprint=NULL);
// @cmember Stampa un formfeed (ritorna sempre TRUE)
bool printformfeed ();
// @cmember Stampa l'header della pagina
bool printheader();
// @cmember Stampa il footer della pagina
bool printfooter();
// @cmember Esporta automaticamente nel formato deciso dalla estensione di n
bool auto_export(const TFilename& n);
// @access Public Member
public:
// @cmember Costruttore
TPrinter ();
// @cmember Distruttore
virtual ~TPrinter();
// @cmember Inizia una nuova sessione di stampa. Viene passata alla <mf TPrintwin::do_print>
static BOOLEAN start_print(long data);
// @cmember Inizia una nuova sessione di stampa PDF. Viene passata alla <mf TPrintwin::do_print>
static BOOLEAN start_print_pdf(long data);
// @cmember Setta il numero della prima pagina da stampare
void set_from_page (word from)
{ _frompage = from; }
// @cmember Setta il numero dell'ultima pagina da stampare
void set_to_page (word to)
{ _topage = to; }
// @cmember Indica se stampare un formfeed dopo ogni footer
void set_hwff (bool hwff)
{ _hwformfeed = hwff; }
// @cmember Permette di tradurre la stringa con i codici @codes in un array utilizzabile dalla stampa
void parse_background(const char* bgdesc, TString_array& background);
// @cmember Ritorna il nome della classe
virtual const char* class_name() const;
// @cmember Ritorna l'identificatore della classe
virtual word class_id() const;
// @cmember Ritorna la lunghezza della pagina logica
int formlen () const
{ return _formlen; }
// @cmember Ritorna la larghezza della pagina logica
int formwidth () const
{ return _formwidth; }
// @cmember Ritorna il numero della prima pagina da stampare
word frompage () const
{ return _frompage; }
// @cmember Ritorna il numero dell'ultima pagina da stampare
word topage () const
{ return _topage; }
// @cmember Ritorna la riga corrente all' interno della pagina
int current_row () const
{ return _currentrow; }
// @cmember Ritorna la dimensione dell'header
int headersize () const
{ return _headersize; }
// @cmember Ritorna la dimensione del footer
int footersize () const
{ return _footersize; }
// @cmember Ritorna il contenuto della <p linetoget>-esima linea dell'header
TPrintrow* getheaderline (int linetoget);
// @cmember Ritorna il contenuto della <p linetoget>-esima linea del footer
TPrintrow* getfooterline (int linetoget);
// @cmember Setta la lunghezza della pagina logica da stampare
int formlen (int fl)
{ return (_formlen=fl); }
// @cmember Setta la dimensione del footer
int footerlen (int fl)
{ CHECKD(fl >= 0 && fl < 1024, "Bad footerlen ", fl); return _footersize = fl; }
// @cmember Setta la dimensione dell'header
int headerlen (int hl)
{ return (_headersize=hl); }
// @cmember Setta il numero della prima pagina da stampare
word frompage (word fp)
{ return (_frompage=fp);}
// @cmember Setta il numero dell'ultima pagina da stampare
word topage (word tp)
{ return (_topage=tp); }
// @cmember Setta il contenuto di una line dell'header
void setheaderline (int linetoset, TPrintrow* line);
// @cmember Setta il contenuto di una line dell'header passata per indirizzo
void setheaderline (int linetoset, const TPrintrow& line);
// @cmember Setta il contenuto di una line del footer
void setfooterline (int linetoset, TPrintrow* line);
// @cmember Setta il contenuto di una line del footer passata per indirizzo
void setfooterline (int linetoset, const TPrintrow& line);
// @cmember Elimina il contenuto dell'header
void resetheader();
// @cmember Elimina il contenuto del footer
void resetfooter();
// @cmember Setta il colore del background
void setbackground(const char* bg, int index = 0);
// @cmember Ritorna l'array con i nomi delle immagini da stampare!!!
TString_array& image_names()
{ return _image_names; }
// @cmember Ritorna l'array con i nomi dei colori da stampare!!!
TString_array& getbgdesc(word page = 0) const;
// @cmember Ritorna l'array con i segalibri settati
TArray& get_bookmarks()
{ return _bookmarks; }
// @cmember Ritorna se la stampante e' stata momentaneamente interrotta
bool frozen()
{ return _frozen; }
// @cmember Setta l'interruzione momentanea della stampante
void freeze(bool b = TRUE)
{ _frozen = b; }
// @cmember Ritorna il testo da stampare
TTextfile& get_txt() { return _txt; }
// @cmember Stampa il testo
bool print_txt(TTextfile& txt);
// @cmember Stampa il testo su pdf
bool print_pdf(TTextfile& txt, const TFilename& fn);
// @cmember Stampa il pdf con Acrobat
bool acrobatically_print_pdf(const TFilename& pdf) const;
// @cmember Setta l'handle dell'header
void setheaderhandler(PRINTSECTIONHANDLER h)
{ _headerhandler = h; }
// @cmember Setta l'handle del footer
void setfooterhandler(PRINTSECTIONHANDLER h)
{ _footerhandler = h; }
// sono qui e non nella printapp per poter usare una viswin
// completamente anche da un'altra application
// @cmember Setta l'header del link (usata dalla <c TViswin>)
void setlinkhandler(LINKHANDLER h)
{ _linkhandler = h; }
// @cmember Ritorna l'header del link
LINKHANDLER getlinkhandler()
{ return _linkhandler; }
// @cmember Ritorna l'array con i nomi dei link
TString_array& links()
{ return _linksdescr; }
// @cmember Abilita/disabilita il link multiplo
void setmultiplelink(bool on)
{ _multiple_link = on; }
// @cmember Indica se attivato il link multiplo
bool ismultiplelink()
{ return _multiple_link; }
// @cmember Ritorna i caratteri di fincatura
const char* get_fincatura() const
{ return (const char *) _fink; }
// @cmember Setta i caratteri di fincatura
void set_fincatura(const char* s)
{ _fink.strncpy(s, 11); }
// @cmember Setta/forza il tipo di fincatura
void set_fink_mode(bool f) ;
// @cmember Ritorna il tipo di fincatura
bool get_fink_mode() { return _fink_mode; }
// @cmember Ritorna il carattere di fincatura alto-sinistra
char f_topleft() const
{ return _fink[0]; }
// @cmember Ritorna il carattere di fincatura alto-centro
char f_topmiddle() const
{ return _fink[1]; }
// @cmember Ritorna il carattere di fincatura alto-destra
char f_topright() const
{ return _fink[2]; }
// @cmember Ritorna il carattere di fincatura basso-sinistra
char f_botleft() const
{ return _fink[3]; }
// @cmember Ritorna il carattere di fincatura basso-centro
char f_botmiddle() const
{ return _fink[4]; }
// @cmember Ritorna il carattere di fincatura basso-destra
char f_botright() const
{ return _fink[5]; }
// @cmember Ritorna il carattere di fincatura centro-sinistra
char f_centerleft() const
{ return _fink[6]; }
// @cmember Ritorna il carattere di fincatura centro-centro
char f_centermiddle() const
{ return _fink[7]; }
// @cmember Ritorna il carattere di fincatura centro-destra
char f_centerright() const
{ return _fink[8]; }
// @cmember Ritorna il carattere di fincatura orizzontale
char f_horizontal() const
{ return _fink[9]; }
// @cmember Ritorna il carattere di fincatura verticale
char f_vertical() const
{ return _fink[10]; }
// @cmember Permette di saltare alcune righe dalla posizione corrente
bool skip (int linetoskip);
// @cmember Permette di saltare alla riga indicata
bool jump (int linestojump);
// @cmember Resetta la stampa eliminando header e footer correnti e riportando i valori di
// pagina corrente e riga corrente a 1
void reset ();
// @cmember Permette di settare i parametri di stampa tramite la maschera bagn001a
virtual bool set ();
// @cmember Apre un processo di stampa
bool open ();
// @cmember Chiude un processo di stampa
void close ();
// @cmember Stampa un formfeed.
bool formfeed ();
// @cmember Permette di stampare una riga
bool print (TPrintrow& rowtoprint);
// @cmember Ritorna se la stampante e' stat inizializzata
bool isopen()
{ return _isopen; }
// @cmember Permette di settare la data di stampa
void setdate(const TDate& d)
{ _date = d; }
// @cmember Ritorna la data di stampa
const TDate& getdate() const
{ return _date; }
// @cmember Ritorna il tipo di output selezionato dall'utente per la stampa
TPrtype printtype() const
{ return _printertype; }
// @cmember Setta il tipo di output selezionato dall'utente per la stampa
void set_printtype(TPrtype dest)
{ _printertype=dest; }
// @cmember Setta il nome del file per la stampa su disco
void set_printerfile(const char* ffile)
{ _printerfile=ffile; }
const TFilename& get_printerfile() const { return _printerfile; }
// @cmember Setta il flag per la stampa in coda al file su disco
void set_append(const bool append = TRUE)
{ _appendfile = append; }
// @cmember Ritorna il numero della pagina logica da stampare
word getcurrentpage() const
{ return _currentpage; }
// @cmember Setta il numero della pagina logica da stampare
void setcurrentpage(word n)
{ _currentpage = n; }
const TFilename& get_export_file() const { return _exportfile; }
// @cmember Dirige la stampa sul file specificato, preservando gli attributi di formato.
// Se <p header> = TRUE si stampano su file anche gli header
void set_export_file(const char* n, bool header = TRUE, int len = 0)
{ _printertype = exportprinter; _exportfile = n; _export_header = header; _export_header_len = len;}
// @cmember Inserisce un file di export fatto da un'altra printer
void merge_export_file(const char* file, bool header = TRUE);
// @cmember Ritorna il numero di righe disponibili poer la stampa
word rows() const
{ return word(_formlen-_headersize-_footersize); }
// @cmember Ritorna il numero di righe che rimangono a disposizione per la stampa
word rows_left() const;
// @cmember Setta il record per la descrizione dello stato dell stampante
void set_printrcd();
// @cmember Ritorna il record per la descrizione dello stato dell stampante
PRINT_RCD* get_printrcd(int* size = NULL);
// @cmember Setta le caratteristiche della stampante leggendole da <p _print_rcd>
void init_formlen(WINDOW prwin = NULL_WIN);
// @cmember Setta la definizione della stampante in linee per pollice
void set_lines_per_inch(int n)
{ _lines_per_inch = n; }
// @cmember Ritorna la definizione della stampante in linee per pollice
int get_lines_per_inch() const
{ return _lines_per_inch; }
// @cmember Ritorna l'offset verticale
int get_vert_offset() const
{ return _vert_offset; }
// @cmember Ritorna l'offset orizzontale
int get_horz_offset() const
{ return _horz_offset; }
// @cmember Ritorna l'offset verticale in caratteri (linee)
int get_line_offset() const
{ return _l_offset; }
// @cmember Ritorna l'offset orizzontale in caratteri (colonne)
int get_column_offset() const
{ return _c_offset; }
// @cmember Ritorna la definizione di stampa in punti per linea
int get_dots_per_line() const { return _dots_per_line; }
// @cmember Ritorna se la stampante e' abilitata a stampare grafica
bool isgraphics() const;
// @cmember Setta la stampante per l'abilitazione a stampare in grafica
bool set_graphics(bool g);
// @cmember Setta l'offset verticale e orizzontale in caratteri
void set_offset(int a, int b) { _l_offset=a; _c_offset=b;}
// @cmember ritorna la riga di background se si stampa in modo testo
const char* background_chars(int l) const;
// @cmember Ritorna la dimensione dei caratteri da stampare
int get_char_size() const
{ return _ch_size; }
// @cmember Ritorna il nome del font di stampa
const TString& fontname() const
{ return _fontname; }
// @cmember Ritorna il nome della stampante
const TString& printername() const
{ return _prname; }
// @cmember Setta la dimensione dei caratteri da stampare
void set_char_size(int size)
{ _ch_size = size; }
// @cmember Setta il nome del font di stampa
void set_fontname(const char *name)
{ _fontname = name; }
void set_form_name(const char* n) { _formname = n; }
const TFilename& get_form_name() const { return _formname; }
// @cmember Legge la configurazione della stampante
void read_configuration(const char* parag = NULL);
// @cmember Salva i parametri di configurazione correnti
void save_configuration(const char* parag = NULL);
// @cmember Crea un segnalibro
int set_bookmark(const char* txt, int father = -1);
// @cmember Ritorna vero se la stampante e' generica/solo testo
bool is_generic() const;
// @cmember Ritorna vero se la stampante e' PDF
bool is_pdf() const;
// @cmember Calcola la dimensione del font per le colonne desiderate
int calc_font_size(int columns) const;
// @cmember Calcola il numero di colonne per il font/size attuale
int calc_num_cols() const;
void set_portrait_orientation(bool port = true);
void set_landscape_orientation(bool land = true) { set_portrait_orientation(!land); }
bool is_landscape() const;
bool is_portrait() const { return !is_landscape(); }
bool manual_setup() const { return _manual_setup; }
void force_default_printer(bool fdp) { _force_default = fdp; }
bool forced_default_printer() const { return _force_default; }
};
// @doc EXTERNAL
// @class TFile_printer | Classe per la definizione delle operazioni per la stampa su file
//
// @base public | TPrinter
class TFile_printer : public TPrinter
// @author:(INTERNAL) Nicola
// @access:(INTERNAL) Private Member
{
// @cmember:(INTERNAL) Dimensione del file
long _size;
// @cmember:(INTERNAL) Disco al quale appartiene il file
const char * _drive;
// @cmember:(INTERNAL) Numero progressivo volume
int _volume;
// @cmember:(INTERNAL) Numero di record per disco
int _num_rec_volume;
// @cmember:(INTERNAL) Numero di record per inizio e fine volume
int _num_rec_testa_coda;
// @cmember:(INTERNAL) Numero di record per inizio volume
int _num_rec_inizio;
// @cmember:(INTERNAL) Numero di record per coda volume
int _num_rec_fine;
// @cmember:(INTERNAL) Lunghezza del record
int _len_rec;
// @cmember:(INTERNAL) Array di tipi record
TArray _record;
// @cmember:(INTERNAL) Indica se il file sui dischetti deve avere un nome NON modificabile dall'utente
bool _nome_file_fissato;
// @cmember:(INTERNAL) Indica se l'etichetta dei dischetti deve essere fissa
bool _label_fissata;
// @cmember:(INTERNAL) File da generare sui dischetti
const char* _file;
// @cmember:(INTERNAL) Etichetta da scrivere sui dischetti
const char* _label;
// @cmember:(INTERNAL) Array dei file temporanei generati
TArray _tmp_files;
// @cmember:(INTERNAL) Puntatore al file creato
FILE* _fd;
// bool scrivi_volume();
// @access Public Member
public:
// @cmember Ritorna il valore di una newline
virtual char newline()
{ return '\0'; }
// @cmember Setta se il file sui dischetti deve avere un nome NON modificabile dall'utente
void set_file_fissato (bool fissato)
{ _nome_file_fissato = fissato; }
// @cmember Setta se l'etichetta dei dischetti deve essere fissa
void set_label_fissata (bool fissata)
{ _label_fissata = fissata; }
// @cmember Setta la lunghezza del record
void set_len_rec (int len)
{ _len_rec = len; }
// @cmember Setta il file da generare sui dischetti
void set_file (const char * ffile)
{ _file = ffile; }
// @cmember Setta l'etichetta da scrivere sui dischetti
void set_label (const char * label)
{ _label = label; }
// @cmember Aggiunge un array di tipo record alla posizione <p line>
void set_record (int record_to_set, TPrintrow* line)
{_record.add(line, record_to_set); }
// @cmember Ritorna l'array di tipo record della posizione <p line>
TPrintrow * get_record (int record_to_get)
{return (TPrintrow *)&_record[record_to_get]; }
// @cmember Ritorna il record di inizio volume
TPrintrow* get_record_inizio_volume() const
{ return (TPrintrow*)&_record[0];}
// @cmember Ritorna il record di inizio elenco
TPrintrow* get_record_inizio_elenco() const
{return (TPrintrow*)&_record[1];}
// @cmember Ritorna il record del dettaglio
TPrintrow* get_record_dettaglio() const
{ return (TPrintrow*)&_record[2]; }
// @cmember Ritorna il record di fine elenco
TPrintrow* get_record_fine_elenco() const
{return (TPrintrow*)&_record[3]; }
// @cmember Ritorna il record di fine volume
TPrintrow* get_record_fine_volume() const
{ return (TPrintrow*)&_record[4]; }
// @cmember Ritorna ???
TPrintrow* get_record_filler() const
{ return (TPrintrow*)&_record[5]; }
// @cmember Ritorna il numero di record per disco
int num_rec_volume ()
{ return _num_rec_volume; }
// @cmember Ritorna il numero progressivo <p volume>
int num_volumi ()
{ return _volume; }
// @cmember Ritorna il numero progressivo <p volume> dopo averlo incrementato
void inc_volume ()
{ _volume++; }
// @cmember Aggiunge il nome di un file temporaneo
void add_file (TFilename nomef)
{ _tmp_files.add(nomef); }
// @cmember Apre il file
void open();
// @cmember Chiude il file
void close();
// void scrivi();
// @cmember Genera i dischetti
bool genera_dischetti();
// @cmember Setta i parametri di stampa su disco
virtual bool set ();
//
// tipo_disco:
// 0 per 360
// 1 per 1.2
// 2 per 720
// 3 per 1,44
// 4 per 2,88
// @cmember Costruttore
TFile_printer (const char* file, const char* label, int len_rec, int num_rec_inizio = 1, int num_rec_fine = 1, int tipo_disco=0);
// @cmember Distruttore
virtual ~TFile_printer();
};
class TTabulator : public TObject
{
TArray _tab;
protected:
void add(int s, int e);
void split(int s0, int e0, int s1, int e1);
public:
void add_field(int column, int width);
void sort();
bool find_column(int column, int width, int &idx, int& col) const;
bool empty() const;
};
// @doc EXTERNAL
// @func Ritorna la stampante corrente
//
// @rdesc Ritorna l'identificatore della stamapnte corrente
TPrinter& printer();
// @func Distrugge l'oggetto della stampante corrente
void printer_destroy();
#endif // __PRINTER_H