Aggiunti commenti per docs

git-svn-id: svn://10.65.10.50/trunk@1954 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
villa 1995-10-13 09:23:08 +00:00
parent 31b97a6795
commit c56bf2bce0
4 changed files with 199 additions and 108 deletions

View File

@ -21,7 +21,9 @@
enum print_action { REPEAT_PAGE, NEXT_PAGE };
// user functions to pass field informations to setrow()
// allow passing file, field and optional substring or format informations
// no class or nice C++ interface since varargs is nasty
// vedi papiro per spiegazioni
// FLD(Num.logico, Nome campo [, da [, a]])
const char* FLD(int lognum, const char* f, int from = -1, int to = -1);
@ -64,7 +66,7 @@ class TPrint_application : public TApplication
char _fillchar; // fill character for empty fields
link_item* _pr_tree; // functions for autom. printing of relations
int _maxrow; // reference to maxrow
int _cur_file;
int _cur_file; // per questi vedi le funzioni inline
bool _print_defined;
bool _force_progind;
bool _force_setpage;
@ -80,10 +82,13 @@ class TPrint_application : public TApplication
void set_printer() { printer().set(); }
// print a single record; does not advance cursor
// returns failure or success
bool print_one(int file);
bool print_one(int file);
// to be documented but very fig
bool print_tree(link_item* head);
// metahandlers per controllare header, footer, e links quando si usa la
// viswin; servono per controllare handlers di altre classi e chiamano
// virtuali di TPrintapp
static void _pp_header(TPrinter& pr);
static void _pp_footer(TPrinter& pr);
static void _pp_link(int id, const char* s);
@ -164,6 +169,7 @@ protected:
// footer etc) sono spiegate nel seguito
// ****************************************************
// vedi sopra, per chi non l'ha capito
virtual bool user_create() pure;
virtual bool user_destroy() pure;
@ -193,7 +199,8 @@ protected:
// whole page (after all sons are printed) or print
// counter is the current page or print number
virtual print_action postprocess_page(int file, int counter)
{ return NEXT_PAGE; }
{ return NEXT_PAGE; }
// vedi papiro precedente
virtual print_action postprocess_print(int file, int counter)
{ return NEXT_PAGE; }
// executed after all print job is completed
@ -203,7 +210,6 @@ protected:
// preview window
virtual void process_link(int id, const char* text) {}
// called when user cancels print; returning TRUE
// actually stops printing; not called if no cancel
virtual bool cancel_hook() {return TRUE;}
@ -253,6 +259,8 @@ public:
// real, TParagraph_string e a TString, memorizzandoli. Non ci sono problemi con la resize.
// Comunque, il modo corretto di adoperare il codice # e'
// usarlo solo per stampare MEMBRI della classe derivata da TPrint_application
// Credo che Bonazzi abbia aggiunto #p per le TParagraph_string ma bisogna
// chiederlo a lui, che non si e' preoccupato di documentare
// ----------------------------------------------
// field codes (match one of FLD() functions)
// @@ -> @
@ -310,12 +318,14 @@ public:
// Includi ditte abilitato) per un esempio.
// --------------------------------------------------------
// azzera la definizione della riga row
void reset_row(int r);
// chiamare reset_print() durante la stampa forza la
// rilettura di set_page() alla prossima volta
void reset_print();
// se n'e' parlato diffusamente
void set_row(int r, const char* fmt, ...);
// ---------------------------------------------
@ -356,8 +366,39 @@ public:
// viene passata a enable_link una tokenstring con tutti i 'bottoni' dello
// stesso colore presenti sulla riga
void set_multiple_link(bool on);
// BACKGROUND PAINTING! Chefigata! poi vi spiego....
// -------------------------------------------------------------
// BACKGROUND PAINTING! Chefigata!
// -------------------------------------------------------------
// gli si passa uno stringone che contiene codici per stampare
// box, linee, bitmap sullo sfondo, e per variarne gli attributi:
// se null lo azzera. Il background e' stampato sia su viswin
// che su stampante, e riguarda una PAGINA fisica e non le righe o le
// "pages" relative al cursore; viene replicato ad ogni nuova
// pagina fisica a meno che non venga cancellato o ridefinito in una
// <qualcosa>process<qualcos'altro>().
// ---------------------------------------------------------------
// CODICI BACKGROUND
// ---------------------------------------------------------------
// Una stringa con n codici, opzionalmente separati da spazi o tab
//
// -- SETTINGS ----------------------------------------------------
//
// P<n> setta pen style (n = codice XVT)
// B<n> setta brush style (idem)
// W<n> line width in pixel
// C<n> pen color (codice colore solito)
//
// -- DRAWING COMMANDS --------------------------------------------
//
// i{string,x1,y1,x2,y2} disegna bitmap <string> (nome file)
// alle coordinate indicate
// l{x1,y1,x2,y2} linea da/a (la resa delle oblique
// dipende dalla stampante)
// b{x1,y1,x2,y2} box
// r{x1,y1,x2,y2} rounded box
// t{text,x,y} testo <text> a x,y
// -----------------------------------------------------------------
void set_background(const char* bgdesc = NULL);
@ -475,16 +516,14 @@ public:
// se header == TRUE gli header stanno nel file e non vengono stampati
// se direct == FALSE le rigne vengono aggiunte con set_row da printapp, altrimenti
// si usa printer::merge_export_file
void merge_export_file(const char* file, bool header = TRUE, bool direct = FALSE);
void merge_export_file(const char* file, bool header = TRUE, bool direct = FALSE);
void set_n_copies(int n) { _ncopies = n; }
int get_n_copies() const { return _ncopies; }
void repeat_print() { _repeat_print = TRUE; }
int get_n_copies() const { return _ncopies; }
void repeat_print() { _repeat_print = TRUE; }
bool is_cancelled() const { return _cancelled; }
TPrint_application();
virtual ~TPrint_application();
};

View File

@ -13,34 +13,43 @@
#include <text.h>
#endif
// Implementazione di una finestra XVT per la stampa: scrivendoci su tutto l'output
// va sulla stampante corrente. Usata direttamente da TPrinter.
class TPrintwin : public TWindow
{
bool _aborted;
PRINT_RCD* _printrcd;
int _formlen;
int _formwidth;
TArray* _bg;
TTextfile& _txt;
bool _aborted; // stampa abortita
PRINT_RCD* _printrcd; // record di stampa XVT
int _formlen; // indovina
int _formwidth; // indovina
TArray* _bg; // l'intero background della pagina (vedi TPrintapp)
TTextfile& _txt; // il TText da stampare
TArray _images;
TArray _images; // bitmaps da stampare sotto al testo
// un'orrenda quantita' di dettagli relativi ai font e alle loro dimensioni
int _lead, _ascent, _descent;
int _hofs, _vofs;
int _chary;
int _char_size;
// tutto ok per stampare
bool _inited;
void paint_background(long j);
void paint_row(long j);
bool print_band(int, RCT&);
// pitta lo sfondo della riga j
void paint_background(long j);
// pitta la riga j
void paint_row(long j);
// pitta la fetta di finestra che XVT gli lascia pittare per la pagina data
// (dipende dal driver, ma di solito pitta l'intera pagina)
bool print_band(int page, RCT&);
public:
// check if aborted; also returned by do_print
bool aborted() const { return _aborted; }
// starts printing; FALSE if aborted
// starts printing; FALSE if aborted; when possible starts concurrent thread
// (not possible in WIN 3.1)
bool do_print();
TPrintwin(TTextfile& txt);

View File

@ -27,42 +27,42 @@ class TTextfile: public TObject
{
enum {DEFAULT_PAGESIZE = 128};
TArray _page;
TBit_array _dirty_lines;
long _page_start;
long _page_end;
long _page_size;
long _lines;
long _cur_line;
TFilename _filename;
TFilename _indname;
FILE* _index;
FILE* _instr;
direction _direction;
TArray _page; // pagina di testo correntemente in memoria
TBit_array _dirty_lines; // un bit per ogni riga, TRUE se ci si e' fatto replace
long _page_start; // inizio...
long _page_end; // e fine della _page in coordinate testo
long _page_size; // n. righe in _page
long _lines; // n. totale linee testo
long _cur_line; // linea corrente
TFilename _filename; // nome file testo (puo' essere temporaneo)
TFilename _indname; // nome file indice (sempre temporaneo)
FILE* _index; // handle file indice
FILE* _instr; // handle file testo
direction _direction; // direzione ottimale lettura file
int _item; // Piece corrente
TToken_string _line; // Testo riga corrente
long _styles[256]; // Stile e colore carattere
bool _tabbed_piece;
bool _tabbed_piece; // uso dei tab con @t
TArray _hotspots;
TArray _spots;
bool _dirty;
bool _isopen;
bool _istemp;
bool _accept;
bool _interactive;
TArray _hotspots; // punti ipertestuali come passati da utente (viswin)
TArray _spots; // rappr. interna punti ipertestuali
bool _dirty; // modificato con replace
bool _isopen; // files aperti
bool _istemp; // si usa un file temporaneo
bool _accept; // append permessa
bool _interactive; // si sta modificando con add e si puo' fare replace
// for merging with database fields
TRelation* _rel;
TRelation* _rel; // gestisce sostituzione di campi al posto di tag nel testo
void _read_page(long line);
bool _in_page(long l)
void _read_page(long line); // riempi pagina contenente line, ottimizzando start/end
bool _in_page(long l) // la riga l e' nella pagina corrente
{ return l >= _page_start && l < _page_end; }
void _save_changes();
void _save_changes(); // salva i replace fatti sul file (anche temporaneo)
// void _parse_style(long j);
style _trans_style(char c);
style _trans_style(char c); // traduci il tag dello stile in stile XVT
public:
@ -71,34 +71,40 @@ public:
// line() ritorna la stringa di caratteri senza formattazione
// ed eventualmente con i campi sostituiti se la relazione
// non e' NULL
// non e' NULL; parte da row e column, per howmuch caratteri utili
// default tutta la riga
const char* line(long row, long column = 0, int howmuch = -1);
// line_formatted() la ritorna, come e' logico attendersi, con
// la formattazione
// la formattazione (ovvero tutti i @eccetera, che anche la printer capisce)
const char* line_formatted(long row);
// appende una riga al text (con i formati del caso)
bool append(const char* l);
// chide tutti i files per poter copiare o eseguire operazioni
// dopo close() non si puo' piu' fare nulla
void close();
void close();
// stampa sulla carta
void print();
// chiude l'aggiunta di nuove linee
void freeze() { _accept = FALSE; }
bool frozen() { return !_accept; }
// per leggere il testo formattato, si fa prima read_line, poi
// si prende un pezzo per volta
// si prende un pezzo per volta; le si passa la riga, pos e' la y iniziale
// (mai usato) e pg fa si' che se la linea non e' nella pagina corrente
// non si faccia nulla; diversamente rilegge una nuova pagina dal file
// style() ritorna lo stile (vedi enum) del piece() corrente
// se chiamata con parametri ritorna lo stile del carattere alla
// posizione data
// get_background() e get_foreground() ritornano il suo colore di bg e fg
// piece() ritorna il pezzo di linea successivo con stile e colore
// invarianti, o NULL quando non ce n'e' piu'
// bello, vero?
// bello, vero?
void read_line(long j, long b = 0, bool pg = TRUE);
const char* piece();
const char* piece();
// ritornano stile testo, colori bg e fg, o l'intero long contenente tutti gli
// attributi carattere alla pos corrente (piece corrente) o a quella specificata
int get_style(int pos = -1);
char get_background(int pos = -1);
char get_foreground(int pos = -1);
@ -139,8 +145,11 @@ public:
// <@file->fieldname@[format]@[len]@[just]>
void set_relation(TRelation* r) { _rel = r; }
// se si prevede lo scorrimento in una sola direzione, gli si dia
// up o down come 3o parametro, e si sara' felici
TTextfile(const char* file = NULL, int pagesize = DEFAULT_PAGESIZE,
direction preferred = updown, bool interactive = TRUE);
virtual ~TTextfile();
};

View File

@ -18,7 +18,7 @@ class TBrowsefile_field;
class TViswin : public TScroll_window
{
friend class TBrowsefile_field;
friend class TBrowsefile_field; // yes, perche' puo' anche essere un controllo di una mask
enum { MAXBUT = 4, MAXLEN = 256, BUFFERSIZE = 256, MAXPIC=4};
enum scroll { none, up, down, left, right };
@ -36,10 +36,10 @@ class TViswin : public TScroll_window
bool _istimer; // timer successivo attivo?
bool _isopen; // new lines may arrive
bool _selflag;
bool _sel_displayed;
bool _link_displayed;
bool _cross_displayed;
bool _point_displayed;
bool _sel_displayed; // selezione evidenziata
bool _link_displayed; // link ipertestuale evidenziato
bool _cross_displayed; // visualizzato cursore a croce
bool _point_displayed; // visualizzato cursore a carattere
long _timer; // timer per evitare autorepeat tasti
long _wtimer; // wait timer before close()
scroll _need_scroll; // scrolling required?
@ -48,8 +48,8 @@ class TViswin : public TScroll_window
int _curbut; // button which currently has focus
int _buttons; // button count
WINDOW _link_button;
WINDOW _print_button;
WINDOW _link_button; // ID bottone "Collega"
WINDOW _print_button; // ID bottone "Stampa"
long _textrows; // righe di testo
long _textcolumns; // indovina indovinello
@ -57,11 +57,12 @@ class TViswin : public TScroll_window
TTextfile _txt; // text being displayed
long _firstline; // 1rst text line being displayed
long _lastline; // last text line being displayed
TString _txt_to_find; // text to find
TPoint _last_found; // position of last find
bool _down_dir; // search direction
bool _case_sensitive;
// Ricerca testo
TString _txt_to_find; // text to find
TPoint _last_found; // position of last find
bool _down_dir; // search direction
bool _case_sensitive; // case sensitivity
int _formlen; // length of a page
@ -78,21 +79,23 @@ class TViswin : public TScroll_window
TArray _modules; // Scrolling module icons
TArray _images; // pictures properly resized
bool _multiple;
TString80 _linktxt;
int _linkID;
TToken_string _multiple_link;
TArray* _bg;
bool _frozen;
bool _toplevel;
bool _rulers;
bool _showbuts;
bool _inside_linkexec;
bool _menu_present;
// link multiplo: se si' vengono passati all'handler tutti i link presenti sulla
// stessa riga anziche' solo il selezionato
bool _multiple; // si/no
TString80 _linktxt; // testo del link
int _linkID; // ID del link specificata
TToken_string _multiple_link; // tutti i link della riga
// viene istanziato soltanto se e' usata come controllo BROWSEFILE
TArray* _bg; // internal structure to hold parsed background
bool _frozen; // non si tocca piu' nulla (files temp. cancellati), gestito internamente
bool _toplevel; // e' una finestra colle palle (se FALSE e' un campo di una mask)
bool _rulers; // righello mostrato
bool _showbuts; // bottoni mostrati
bool _inside_linkexec; // var di comodo per sapere se si sta attivando un link
bool _menu_present; // c'e' il menu specifico della viswin
// viene istanziato soltanto se e' usata come controllo BROWSEFILE in una mask
TBrowsefile_field* _brwfld;
protected:
@ -103,43 +106,71 @@ protected:
int tabx(int x) const; // Convert charx to pixels
int taby(int y) const; // Convert chary to pixels
void shift_screen(scroll);
void paint_screen();
void draw_crossbars();
void shift_screen(scroll); // shift di 1 su, giu', dx, sin a seconda di scroll passato
void paint_screen(); // pittura lo schermo sulla porzione corrente di testo
void draw_crossbars(); // pittura il cursore a crossbar in xor
void paint_header();
void paint_point(bool erase = FALSE);
void paint_row(long r);
void paint_column(long r, bool end);
void paint_selection();
void paint_waitbar(bool xor = TRUE);
void paint_background(long, int);
bool call_editor();
bool in_text(const TPoint& p) const;
// pittura header (righello)
void paint_header();
// pittura il cursore (in xor) nello stile del momento, se
// necessario e erase == TRUE cancella quello di prima
void paint_point(bool erase = FALSE);
// pittura la riga r (in coordinate testo)
void paint_row(long r);
// pittura una sola colonna: se end == true e' l'ultima e implica uno scroll orizz. avvenuto
void paint_column(long r, bool end);
// pittura (in xor) la selezione corrente a meno che non sia gia' pitturata
void paint_selection();
// controlla l'immaginetta di 'busy'; xor serve solo per UNIX, dove si
// pittura una barretta che viene cancellata alla prossima paint
void paint_waitbar(bool xor = TRUE);
// pittura il background specificato a riga long e colonna int
void paint_background(long, int);
// chiama l'editor definito nei parametri con il testo corrente
bool call_editor();
// utility per sapere se il punto e' nel testo mostrato
bool in_text(const TPoint& p) const;
WINDOW add_button(short id, const char* caption);
void repos_buttons();
void adjust_selection(TPoint& p1, TPoint& p2);
// assicura che la selezione rimanga nei limiti fisici del testo
void adjust_selection(TPoint& p1, TPoint& p2);
// interfaccia furba a paint_selection: display mostra se non c'e', erase cancella se c'e'
void display_selection();
void erase_selection();
// interfaccia furba a paint_point (se cross): display mostra se non c'e', erase cancella se c'e'
void display_crossbar();
void erase_crossbar();
// interfaccia furba a paint_point (se point): display mostra se non c'e', erase cancella se c'e'
void display_point();
void erase_point();
bool check_link(TPoint* where = NULL);
void erase_point();
// controlla se la nuova posizione cursore (se NULL e' il curs. corrente) cade su un
// link ipertestuale e si comporta di conseguenza
bool check_link(TPoint* where = NULL);
// sistema x1 e x2 in modo che il minore sia il primo, e controlla che y sia
// nel testo (box e' su una sola riga, usata solo per i link)
bool adjust_box(long& x1, long& x2, long y);
// display mostra il link ipertestuale se non c'e', erase cancella se c'e'
void paint_link(long, long, long);
void erase_link(long, long, long);
void erase_link(long, long, long);
// mostra in xor sto cazzo di link ipertesticolare (usata da paint/erase link)
void display_link(long, long, long, const char*);
void freeze() { _frozen = TRUE; }
void exec_link();
// usata internamente per bloccare l'aggiunta di nuove righe
void freeze() { _frozen = TRUE; }
// chiama l'handler del link se si preme collega o si batte spazio su un link
void exec_link();
// controlla la generazione del menu indice se ci sono bookmarks
void build_index_menu();
protected:
void scroll_error(long x, long y);
protected:
// chiamata quando si fa uno scroll impossibile da x,y
// fa beep e torna li'
void scroll_error(long x, long y);
// son tutte figlie di mamma application
virtual void update();
virtual void handler(WINDOW win, EVENT* ep);
virtual void handler(WINDOW win, EVENT* ep);
void check_menu_item(MENU_TAG item, bool on = TRUE);
void enable_menu_item(MENU_TAG item, bool on = TRUE);
@ -150,29 +181,32 @@ public:
// non c'e' selezione non viene chiamata affatto (il bottone non fa nulla)
// Se serve, si faccia stop_run() qui dentro
virtual void process_link(TTextfile& txt, TPoint start, TPoint end) { }
// termina la stampa su video e crea il menu indice se c'e'
void close_print();
bool frozen() { return _frozen; }
bool frozen() { return _frozen; }
// terminazione by user (ESC durante stampa)
void abort_print();
long lines() { return _txt.lines(); }
TTextfile& text() { return _txt; }
// bound to keys and menu actions
void goto_end();
void goto_top();
void goto_pos(long r, long c, bool moveorigin = TRUE);
void refresh();
void show_rulers (bool on = TRUE);
void show_buttons(bool on = TRUE);
// usata da chi la usa (es. printer) per stampare nella finestra
void add_line(const char* l);
// non_interactive search and replace
// non-interactive search and replace
long search (const char* txt, int& pos, long from = 0,
bool down = TRUE, bool casesens = FALSE);
int replace(long line, const char* txt, int pos = 0, int len = -1);
// interactive search
// interactive search (con maschera, bound to F7/F8)
void find();
void find_next();