Aggiunta documentazione in linea
git-svn-id: svn://10.65.10.50/trunk@1987 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
parent
28f6eaba95
commit
c59d3540c2
@ -866,7 +866,7 @@ bool TMask_field::on_hit()
|
||||
// @flag FALSE | Se il check ha dato esito negativo
|
||||
bool TMask_field::to_check(
|
||||
KEY k, // @parm Tasto da passare al campo come simulazione di inizio controllo
|
||||
bool checkrun) const // @parm Indice se il controllo va effettuato mentre il campo ha il focus??
|
||||
bool checkrun) const // @parm Permette di testare sanche e la maschera e' in esecuzione
|
||||
{
|
||||
bool yes = (k == K_TAB && focusdirty()) || (k == K_ENTER && dirty());
|
||||
|
||||
@ -1412,7 +1412,7 @@ int TBrowse::inputs()
|
||||
|
||||
// @mfunc Ritorna il numero di campi non vuoti e non filtrati
|
||||
//
|
||||
// @rdesc Numero di campi vuoti e non filtrati
|
||||
// @rdesc Numero di campi non vuoti e non filtrati
|
||||
int TBrowse::do_input(
|
||||
bool filter) // @parm ??
|
||||
|
||||
|
@ -56,7 +56,7 @@ class TMask_field : public TObject
|
||||
// @cmember Gruppo al quale appartiene il campo
|
||||
TBit_array _groups;
|
||||
|
||||
// @cmember User Data??
|
||||
// @cmember Stringa definibile dall'utilizzatore della classe da utilizzare a piacimento
|
||||
TToken_string _userdata;
|
||||
|
||||
// @access Protected Member
|
||||
@ -624,7 +624,7 @@ protected:
|
||||
int do_input();
|
||||
// @cmember Scrive l'output della ricerca sulla maschera
|
||||
void do_output(CheckTime = RUNNING_CHECK);
|
||||
// non esiste nel cpp??
|
||||
// @cmember Chiamata dal tasto Gestione. Non essendo presente nei list_sheet non fa niente
|
||||
bool do_insert();
|
||||
// @cmember Ritorna il campo <p id>
|
||||
TMask_field& field(short id) const;
|
||||
@ -896,9 +896,9 @@ class TButton_field : public TMask_field
|
||||
{
|
||||
// @access Private Member
|
||||
|
||||
// @access Valore della combinazione di tasti che sostituisce il bottone??
|
||||
// @cmember Valore della combinazione di tasti che sostituisce il bottone
|
||||
KEY _virtual_key;
|
||||
// @access Tasto d'uscita (cos'e'??)
|
||||
// @cmember Tasto generato quando viene premuto il bottone che si sta gestendo
|
||||
KEY _exit_key;
|
||||
|
||||
// @access Protected Member
|
||||
@ -1006,9 +1006,10 @@ public:
|
||||
|
||||
|
||||
// @struct TField_Flags | ATTENZIONE: questa struttura e' deifnita nella calsse <c TMask_field>.
|
||||
// <nl>Serve per definire i flegs di settaggio di un campo
|
||||
// <nl>Serve per definire i flegs di settaggio di un campo
|
||||
//
|
||||
// @field bool | automagic | TRUE se il campo e' automagic??
|
||||
// @field bool | automagic | TRUE se il campo e' automagic (campi data e numero che assumono data
|
||||
// odierna e anno corrente nel caso non venga inserito nessun valore)
|
||||
// @field bool | dirty | TRUE se il campo e' stato modificato durante l' esecuzione della maschera
|
||||
// @field bool | enabled | TRUE se il campo e' editabile
|
||||
// @field bool | enable_default | TRUE se il campo e' abilitato di default
|
||||
@ -1022,9 +1023,9 @@ public:
|
||||
// @field bool | shown | TRUE se il campo e' visibile
|
||||
// @field bool | show_default | TRUE se il campo e' visibile di default
|
||||
// @field bool | trim | TRUE se occorre fare la trim su una stringa (vedi <mf TString::ltrim> e
|
||||
// <mf TString::rtrim>
|
||||
// <mf TString::rtrim>)
|
||||
// @field bool | uppercase | TRUE se il campo e' maiuscolo
|
||||
// @field bool | exchange | TRUE se il campo e' in valuta
|
||||
// @field bool | zerofilled | TRUE se il campo
|
||||
// @field void | TField_Flags() | Costruttore
|
||||
// @field char | update(const char*) | ??
|
||||
// @field char | update(const char*) | Aggiorna i bit della struttura secondo i valori letti da file
|
||||
|
@ -1,4 +1,3 @@
|
||||
// $Id: printapp.cpp,v 1.28 1995-05-30 14:14:40 angelo Exp $
|
||||
#include <ctype.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
@ -10,6 +9,8 @@
|
||||
#include <printapp.h>
|
||||
#include <urldefid.h>
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
TLocalisamfile *fff;
|
||||
|
||||
const char* const printf_types = "dDiIuUoOxXfeEgGcCnNsSpPrRtTaA";
|
||||
@ -158,11 +159,16 @@ void TPrint_application::_reset_tree(link_item * head)
|
||||
}
|
||||
}
|
||||
|
||||
link_item *TPrint_application::_look_print_node (link_item * head, int logicnum)
|
||||
// @mfunc Cerca per il nodo <p head> dove agganciarsi per rispettare la relazione
|
||||
//
|
||||
// @rdesc Ritorna il nodo a cui agganciarsi
|
||||
link_item *TPrint_application::_look_print_node (
|
||||
link_item * head, // @parm Nodo per cui effettuare la ricerca
|
||||
int logicnum) // @parm Numero logico del file
|
||||
|
||||
// @comm E' necessario che non esistano piu' nodi per lo stesso file/alias, altrimenti la
|
||||
// la ricerca termina alla proma occorrenza incontrata
|
||||
{
|
||||
// look for <from> node to attach to
|
||||
// since it reflects a relation, it won't have more than
|
||||
// one node for the same file/alias, so it stops at first match
|
||||
link_item *s;
|
||||
while (head)
|
||||
{
|
||||
@ -176,7 +182,18 @@ link_item *TPrint_application::_look_print_node (link_item * head, int logicnum)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
int TPrint_application::set_bookmark(const char* txt, int father)
|
||||
// @mfunc Setta un segnalibro nell'anteprima di stampa
|
||||
//
|
||||
// @rdesc Ritorna il numero identificatore il segnalibro creato
|
||||
int TPrint_application::set_bookmark(
|
||||
const char* txt, // @parm Testo del segnalibro
|
||||
int father) // @parm Identificatore del segnalibro padre (default -1)
|
||||
|
||||
// @comm L'aggiunta dei segnalibri causa la comparsa del menu 'Indice' nella viswin,
|
||||
// con la lista dei segnalibri inseriti; questi possono essere legati ad albero n-ario
|
||||
// specificando il bookmark padre, in tal caso il menu sara' gerarchico a sua volta.
|
||||
// <nl>Nella prossima release di XVT il menu indice sara' pop-up nella finestra
|
||||
|
||||
{
|
||||
return printer().set_bookmark(txt, father);
|
||||
}
|
||||
@ -186,7 +203,15 @@ void TPrint_application::add_file (const char *tab, int from)
|
||||
add_file(TTable::name2log (tab), from);
|
||||
}
|
||||
|
||||
void TPrint_application::add_file (int file, int from)
|
||||
// @mfunc Aggiunge un file del cursore nell'albero di stampa
|
||||
void TPrint_application::add_file (
|
||||
int file, // @parm Numero logico del file da aggiungere
|
||||
int from) // @parm Posizione nell'albero di stampa nel quale aggiungere il file
|
||||
// @parm const char* | tab | Nome del del file da aggiungere
|
||||
|
||||
// @syntax add_file(int file, int from = 0);
|
||||
// @syntax add_file(const char* tab, int from = 0);
|
||||
|
||||
{
|
||||
link_item *nw = new link_item (file);
|
||||
if (_pr_tree == NULL)
|
||||
@ -218,7 +243,14 @@ void TPrint_application::add_file (int file, int from)
|
||||
|
||||
static char tb[120];
|
||||
|
||||
int TPrint_application::find_link(const char* descr) const
|
||||
// @mfunc Permette di trovare un link ipertestuale
|
||||
//
|
||||
// @rdesc Ritorna l'ID del link ipertestuale trovato (-1 se non viene trovato)
|
||||
int TPrint_application::find_link(
|
||||
const char* descr) const // @parm Testo del link da trovare
|
||||
|
||||
// @xref <mf TPrint_application::enable_link>
|
||||
|
||||
{
|
||||
const TArray& arr = printer().links();
|
||||
for (int i = 0; i < arr.items(); i++)
|
||||
@ -231,7 +263,18 @@ int TPrint_application::find_link(const char* descr) const
|
||||
return -1;
|
||||
}
|
||||
|
||||
int TPrint_application::enable_link(const char *descr, char fg, char bg)
|
||||
// @mfunc Permette di abilitare determinati colori come indicatori di legame ipertestuale
|
||||
//
|
||||
// @rdesc Ritorna l'ID del link ipertestuale di cui sono stati abilitati i colori
|
||||
int TPrint_application::enable_link(
|
||||
const char *descr, // @parm Testo del link da abilitare
|
||||
char fg, // @parm Colore del carattere
|
||||
char bg) // @parm Colore dello sfondo (default 'w')
|
||||
|
||||
// @comm Quando si vogliono abilitare determinati colori come indicatori di legame ipertestuale,
|
||||
// si faccia enable_link nella create. L' ID ritornato viene passato a process_link
|
||||
// assieme al testo selezionato.
|
||||
|
||||
{
|
||||
int lnk = find_link(descr);
|
||||
if (lnk < 0)
|
||||
@ -264,7 +307,14 @@ void TPrint_application::disable_link (char fg, char bg)
|
||||
}
|
||||
}
|
||||
|
||||
void TPrint_application::set_multiple_link (bool on)
|
||||
// @mfunc Abilita/disabilita più link per la <mf TPrint_application::enable_link>
|
||||
void TPrint_application::set_multiple_link (
|
||||
bool on) // @parm Indica se effettuare il link con tutti gli elementi selezioanti della riga
|
||||
|
||||
// @comm Se si setta <p on> a TRUE anziche' la descrizione del testo selezionato
|
||||
// viene passata a <mf TPrint_application::enable_link> una tokenstring con tutti i
|
||||
// 'bottoni' dello stesso colore presenti sulla riga.
|
||||
|
||||
{
|
||||
printer().setmultiplelink (on);
|
||||
}
|
||||
@ -300,7 +350,32 @@ void TPrint_application::_pp_footer (TPrinter &)
|
||||
new TPrintrow ((TPrintrow &) (prapp._footer)[i]));
|
||||
}
|
||||
|
||||
void TPrint_application::set_background (const char *bgdesc)
|
||||
|
||||
// @mfunc Permette di stampare sullo sfondo e per variarne gli attributi
|
||||
void TPrint_application::set_background (
|
||||
const char *bgdesc) // @parm Stringa contente i codici per la stampa (vedi descrizione)
|
||||
|
||||
|
||||
// @comm Occorre passare una stringa che contiene codici per stampare box, linee, bitmap
|
||||
// sullo sfondo, e per variarne gli attributi: se NULL lo azzera.
|
||||
// <nl>Il background e' stampato sia su <c TViswin> 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 <lt>qualcosa<gt>process<lt>qualcos'altro<gt>().
|
||||
// <nl><nl>CODICI BACKGROUND
|
||||
// <nl>Una stringa con n codici, opzionalmente separati da spazi o tab
|
||||
// <nl>SETTINGS
|
||||
// @flag P<lt>n<gt> | Setta pen style (n = codice XVT)
|
||||
// @flag B<lt>n<gt> | Setta brush style (idem)
|
||||
// @flag W<lt>n<gt> | Altezza della linea in pixel
|
||||
// @flag C<lt>n<gt> | Colore della penna (codice colore solito)
|
||||
// @comm <nl><nl> DRAWING COMMANDS
|
||||
// @flag i{string,x1,y1,x2,y2} | Disegna la bitmap <p string> (nome file) alle coordinate indicate
|
||||
// @flag l{x1,y1,x2,y2} | Linea da/a (la resa delle oblique dipende dalla stampante)
|
||||
// @flag b{x1,y1,x2,y2} | Box
|
||||
// @flag r{x1,y1,x2,y2} | Rounded box
|
||||
// @flag t{text,x,y} | Testo <lt>text<gt> a <p x>, <p y>
|
||||
|
||||
{
|
||||
printer().setbackground (bgdesc);
|
||||
}
|
||||
@ -385,7 +460,16 @@ TCursor* TPrint_application::get_cursor (int c)
|
||||
return (TCursor *) & _cursors[c];
|
||||
}
|
||||
|
||||
int TPrint_application::add_cursor (TCursor * c)
|
||||
// @mfunc Aggiunge un cursore alla classe
|
||||
//
|
||||
// @rdesc Ritorna l'identificatore del cursore aggiunto
|
||||
int TPrint_application::add_cursor (
|
||||
TCursor * c) // @parm Cursore da aggiungere all'albero
|
||||
|
||||
// @comm Nel caso sia passato NULL a <p c> non viene utilizzato nessun file, ma la
|
||||
// <mf TPirnt_application::print_one> viene chaiamta e le iterazione sono valoutate da
|
||||
// pre_ e post_ process.
|
||||
|
||||
{
|
||||
if (c == NULL)
|
||||
return -1;
|
||||
@ -419,7 +503,12 @@ void TPrint_application::reset_print ()
|
||||
_print_defined = FALSE;
|
||||
}
|
||||
|
||||
void TPrint_application::set_header (int r, const char *fmt, ...)
|
||||
// @mfunc Permette di definire l'header della stampa
|
||||
void TPrint_application::set_header (
|
||||
int r, // @parm Numero della riga nella quale stampare l'header
|
||||
const char *fmt, // @parm Testo dell'header da stampare
|
||||
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
|
||||
|
||||
{
|
||||
CHECK (r >= 1, "Header rows start at 1");
|
||||
va_list vl;
|
||||
@ -436,7 +525,12 @@ void TPrint_application::set_header (int r, const char *fmt, ...)
|
||||
pp->put (__tmp_string);
|
||||
}
|
||||
|
||||
void TPrint_application::set_footer (int r, const char *fmt,...)
|
||||
// @mfunc Permette di definire il footer della stampa
|
||||
void TPrint_application::set_footer (
|
||||
int r, // @parm Numero della riga nella quale stampare il footer
|
||||
const char *fmt, // @parm Testo del footer da stampare
|
||||
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p fmt>
|
||||
|
||||
{
|
||||
CHECK (r >= 1, "Footer rows start at 1");
|
||||
va_list vl;
|
||||
@ -486,8 +580,100 @@ void TPrint_application::merge_export_file(const char* file, bool header, bool d
|
||||
}
|
||||
}
|
||||
|
||||
// @mfunc Permette di settare una riga di stampa
|
||||
void TPrint_application::set_row (
|
||||
int r, // @parm Numero della riga da settare
|
||||
const char *frmt, // @parm Contenuto della riga da stampare
|
||||
...) // @parmvar Uno o piu' parametri corrispondenti ai codici in <p frmt>
|
||||
|
||||
// @comm COME SETTARE LE RIGHE DI STAMPA
|
||||
// <nl><nl>Questa funzione si usa come una printf per settare le righe di stampa
|
||||
// che vengono stampate da <mf TPrint_application::print>.
|
||||
// <nl>I codici per gli argomenti variabili sono di 3 tipi:
|
||||
// @flag @ | Si usa per stampare campi di database o informazioni di controllo
|
||||
// posizione carrello e font
|
||||
// ATTENZIONE: i codici di formato sono diversi da quelli di printf e
|
||||
// sono elencati sotto. Per i campi di database occorre che il codice
|
||||
// sia accoppiato ad una delle funzioni <f FLD> passata come argomento;
|
||||
// questa provoca la stampa di campi della relazione corrente,
|
||||
// posizionata come e' stato deciso nell'inizializzazione
|
||||
// @flag % | Si usa esattamente come in una printf con un plus: se il codice di
|
||||
// formato e' maiuscolo (es. S per stringa, D per intero) viene
|
||||
// ignorato il carattere di riempimento eventualmente specificato
|
||||
// con <mf TPrint_application::set_fillchar>. Cio' vale anche per i codici @ (vedi)
|
||||
// <nl>E' possibile usare due codici aggiuntivi: r(R) e t(T). A questi
|
||||
// va fatto seguire un PUNTATORE a <c real> o a <c TString>. Il formato
|
||||
// viene interpretato con le stesse regole di %t in dsprintf per real
|
||||
// (come %d o %f) e di %s per TString. Il puntatore NON
|
||||
// viene memorizzato; per questo occorre il codice # (sotto).
|
||||
// @flag # | Si usa come % (stessi codici di printf) ma memorizza gli argomenti
|
||||
// per riferimento: ovvero, ogni volta che la riga viene stampata
|
||||
// viene stampato il contenuto in quel momento (che si puo' cambiare
|
||||
// in una delle pre- o post- process). Cio' implica che:
|
||||
// 1) gli argomenti vanno passati per RIFERIMENTO (set_row(1,"#5d",&i))
|
||||
// 2) i puntatori devono rimanere validi e costanti tra la set_row e
|
||||
// la fine della stampa
|
||||
// Quindi, attenzione a %s con <c TString> ridimensionate; si possono
|
||||
// usare solo se predimensionate alla dimensione massima, ma e' meglio
|
||||
// usare char* o il codice apposito. I codici #r, #a e #t prendono puntatori a
|
||||
// real, <c TParagraph_string> e a <c 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
|
||||
//
|
||||
// @comm <nl><nl>CODICI DI CAMPO (da utilizzare con una delle funzione <f FLD>):
|
||||
// @flag @@ | Carattere @
|
||||
// @flag @[n[,{l<pipe>c<pipe>r}]s | STRING: n = pad, lcr = alignment
|
||||
// @flag @{[n[.d=0]]<pipe>[n[,{l<pipe>c<pipe>r}]]p}n | NUMBER: n = digits, d = decimals
|
||||
// p = picture string (first matching arg)
|
||||
// @flag @[l]d | DATE: l = full year
|
||||
// @flag @f | BOOL: prints si/no
|
||||
// @flag @[n,{l<pipe>c<pipe>r}]t | Translated field (must set translation)
|
||||
//
|
||||
// @comm Tutti questi codici possono essere usati anche maiuscoli, il che inibisce
|
||||
// l'uso del carattere di riempimento (set_fillchar) per uno specifico campo.
|
||||
//
|
||||
// <nl><nl>Per tutti i codici che riguardano la stampa di <c real> (@n, %r, #r)
|
||||
// se non vengono date ulteriori specifiche di formato viene usata
|
||||
// una picture che e' "" per default, ma puo' essere modificata con
|
||||
// <mf TPint_application::set_real_picture>.
|
||||
// <nl>Normalmente un real uguale a zero viene stampato come stringa vuota
|
||||
// a meno che non si specifichi TRUE nella <mf TPrint_application::set_print_zero>.
|
||||
//
|
||||
// <nl><nl>CODICI POSIZIONAMENTO E MOVIMENTO CARRELLO
|
||||
// @flag @<lt>n<gt>g | Vai a posizione n
|
||||
// @flag @<lt>n<gt>j | Salta di n posizioni (in orizzontale)
|
||||
// @comm <nl><nl>CODICI STILE
|
||||
// @flag @b | Grassetto
|
||||
// @flag @i | Corsivo
|
||||
// @flag @u | Sottolineato
|
||||
// @flag @r | Ritorna allo stile normale
|
||||
//
|
||||
// @comm <nl><nl>CODICI COLORE PER VISUALIZZAZIONE E COLLEGAMENTO
|
||||
//
|
||||
// <nl><nl>Se si vuole che in visualizzazione il testo sia colorato
|
||||
// si usa il codice $[]; tra le quadre si scrive il colore
|
||||
// di foreground, opzionalmente seguito da una virgola e dal
|
||||
// colore di background (bianco per default). I colori si
|
||||
// specificano con un singolo carattere come segue:
|
||||
// @flag n | Nero
|
||||
// @flag g | Verde
|
||||
// @flag b | Blu
|
||||
// @flag c | Cyan
|
||||
// @flag y | Giallo
|
||||
// @flag v | Magenta
|
||||
// @flag m | Colore background maschere (azzurrotto)
|
||||
// @flag d | Grigio scuro
|
||||
// @flag l | Grigio chiaro
|
||||
// @flag k | Grigio normale
|
||||
//
|
||||
// @comm <nl><nl>Se si fa <mf TPrint_application::enable_link> con un certo colore, tutto
|
||||
// cio che e' scritto in quel colore diventa selezionabile
|
||||
// e alla sua selezione (premendo 'Collega') si puo' associare
|
||||
// un'azione in <mf TPrint_application::process_link>. A quest'ultima viene passata
|
||||
// l'ID ritornata da enable_link() e il testo selezionato alla
|
||||
// pressione di Collega. Vedere ba6 e stampare l'elenco (con
|
||||
// Includi ditte abilitato) per un esempio.
|
||||
|
||||
void TPrint_application::set_row (int r, const char *frmt,...)
|
||||
{
|
||||
CHECK (r >= 1, "Print rows start at 1");
|
||||
|
||||
@ -782,8 +968,18 @@ void TPrint_application::set_row (int r, const char *frmt,...)
|
||||
va_end (params);
|
||||
}
|
||||
|
||||
void TPrint_application::set_translation (int lognum, const char *field,
|
||||
const char *from, const char *to)
|
||||
// @mfunc Setta i valori di traduzione dei campi
|
||||
void TPrint_application::set_translation (
|
||||
int lognum, // @parm Numero logido del file condenete il campo da tradurre
|
||||
const char *field, // @parm Campo di cui effettuare la straduzione
|
||||
const char *from, // @parm Valore da tradurre
|
||||
const char *to) // @parm Valore che assume il campo
|
||||
|
||||
// @comm Questa funzione occorre che sia chiamata per ogni traduzione da effettuare.
|
||||
// <nl>Esempio: set_translation(12,"STATOCIV","1","Celibe") provoca la stampa
|
||||
// automatica di stringhe al posto di determinati valori dei campi se e' dato
|
||||
// il codice @t.
|
||||
// <nl>Il posto giusto per chiamarla e' nella <mf TPrint_application::user_create>.
|
||||
{
|
||||
_transtab.add (new _Transfield (lognum, field, from, to));
|
||||
}
|
||||
@ -919,7 +1115,17 @@ bool TPrint_application::print_tree (link_item * head)
|
||||
return go;
|
||||
}
|
||||
|
||||
bool TPrint_application::print_one (int file)
|
||||
|
||||
// @mfunc Stampa un singolo record
|
||||
//
|
||||
// @rdesc Ritorna il risultato dell'operazione:
|
||||
//
|
||||
// @flag TRUE | Se e' riuscito a stampare il record
|
||||
// @flag FALSE | Se la stampa non ha avuto successo
|
||||
bool TPrint_application::print_one (
|
||||
int file) // @parm Numero logico del file di cui stampare il record
|
||||
|
||||
// @comm Dopo la stampa del record non viene spostato in avanti il cursore
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
// trattasi di -*-c++-*-
|
||||
#ifndef __PRINTAPP_H
|
||||
#define __PRINTAPP_H
|
||||
|
||||
@ -17,519 +16,445 @@
|
||||
// compatibility
|
||||
#define TPrintapp TPrint_application
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
enum print_action { REPEAT_PAGE, NEXT_PAGE };
|
||||
// @enum print_action
|
||||
enum print_action {
|
||||
REPEAT_PAGE, // @emem Ripeta la stampa dell'ultima pagina
|
||||
NEXT_PAGE }; // @emem Stampa la prossima pagina
|
||||
|
||||
// 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);
|
||||
// FLD(Num. logico, Nome campo numerico, Picture string)
|
||||
const char* FLD(int lognum, const char* f, const char* picture);
|
||||
// FLD(Nome tabella, Nome campo numerico, Picture string)
|
||||
const char* FLD(const char* tabname, const char* f, const char* picture);
|
||||
// FLD(Num.logico, Nome campo [, da [, a]])
|
||||
const char* FLD(const char* tabname, const char* f, int from = -1, int to = -1);
|
||||
// @func funzione per il passaggio delle informazioni alla <mf TPrint_application::set_row>
|
||||
//
|
||||
// @rdesc Ritorna una stringa contenente i parametri passati separati dal pipe
|
||||
const char* FLD(
|
||||
int lognum, // @parm Numero logico
|
||||
const char* f, // @parm Nome campo numerico
|
||||
int from = -1, // @parm Da (default -1)
|
||||
int to = -1); // @parm A (default -1)
|
||||
// @parm const char* | picture | Picture string
|
||||
// @parm const char* | tabname | Nome tabella
|
||||
|
||||
struct link_item {
|
||||
int _logicnum;
|
||||
link_item* _son;
|
||||
link_item* _brother;
|
||||
int _cnt;
|
||||
// @syntax const char* FLD(int lognum, const char* f, int from, int to);
|
||||
// @syntax const char* FLD(int lognum, const char* f, const char* picture);
|
||||
// @syntax const char* FLD(const char* tabname, const char* f, const char* picture);
|
||||
// @syntax const char* FLD(const char* tabname, const char* f, int from, int to);
|
||||
|
||||
// @devnote Non viene creata una classe o una interfaccia C++ gradevole fino a quando varargs
|
||||
// non assume un aspetto adeguato
|
||||
|
||||
const char* FLD(int lognum, const char* f, const char* picture);
|
||||
|
||||
const char* FLD(const char* tabname, const char* f, const char* picture);
|
||||
|
||||
const char* FLD(const char* tabname, const char* f, int from = -1, int to = -1);
|
||||
|
||||
// @struct link_item | Definisce il file a cui si riferisce il link da effettuare sulla stampa
|
||||
struct link_item {
|
||||
int _logicnum; // @field Numero logico del link (default l)
|
||||
link_item* _son; // @field File link figlio (default NULL)
|
||||
link_item* _brother; // @field File link fratello (default NULL)
|
||||
int _cnt; // @field Contatore indicante il numero di volte che viene ripetuta
|
||||
// la stampa (default 0)
|
||||
|
||||
link_item(int l) // @field void | link_item(int l) | Inizializza il numero logico del link
|
||||
{ _logicnum = l; _son = NULL; _brother = NULL; _cnt = 0; }
|
||||
};
|
||||
|
||||
link_item(int l)
|
||||
{ _logicnum = l; _son = NULL; _brother = NULL; _cnt = 0; }
|
||||
};
|
||||
|
||||
class TProgind;
|
||||
|
||||
|
||||
// @class TPrint_application | Classe per la definizione delle applicazioni per la stampa
|
||||
//
|
||||
// @base public | TApplication
|
||||
class TPrint_application : public TApplication
|
||||
|
||||
// @author:(INTERNAL)Villa
|
||||
|
||||
// @comm ISTRUZIONI PER l'USO
|
||||
// <nl>La Printapp consente di operare su uno
|
||||
// o piu' cursori stampando automaticamente anche files
|
||||
// collegati. La sequenza delle operazioni e' la seguente:
|
||||
//
|
||||
// <nl>1) Derivare una classe da TPrint_application
|
||||
// <nl>2) Implementare <mf TPrint_application::user_create> e <mf TPrint_application::user_destroy>;
|
||||
// Nella user_create() si creino i necessari cursori,
|
||||
// che vengono passati alla Printapp usando <mf TPrint_application::add_cursor>.
|
||||
// Si puo' fare add_cursor (new TCursor(...))
|
||||
// dato che il cursore viene distrutto automaticamente.
|
||||
// <nl>3) Per ciascun file del cursore che si desidera porre
|
||||
// nell'albero di stampa, si chiami la <mf TPrint_application::add_file>
|
||||
// es.: add_file(logicnum [,from]); <p from> sara' il file a cui e'
|
||||
// collegato nella relazione. add_file VA FATTA anche per il file principale,
|
||||
// altrimenti non stampera' nulla;
|
||||
// <nl><nl>FUNZIONI VIRTUALI OBBLIGATORIE
|
||||
// <nl>4) Si definiscono le necessarie funzioni virtuali: e'
|
||||
// necessaria la <mf TPrint_application::set_page> nella quale
|
||||
// si metteranno (sotto if o switch) le istruzioni
|
||||
// <mf TPrint_application::set_row> corrispondenti alla pagina
|
||||
// logica relativa a ciascun record di ogni file da stampare.
|
||||
// Va definita anche <mf TPrint_application::set_print> in cui si presentera'
|
||||
// la maschera di scelta se necessaria o una box yes_no.
|
||||
// Ritornando TRUE da set_print la stampa viene eseguita
|
||||
// automaticamente (in genere ritorna FALSE se l'utente
|
||||
// annulla la stampa con ESC.)
|
||||
//
|
||||
// <nl><nl>Alla set_page, come alle pre_ e post_ process, viene
|
||||
// passato 0 se il cursore attuale e' nullo (vedi sotto).
|
||||
// <nl><nl>FUNZIONI VIRTUALI FACOLTATIVE
|
||||
// <nl>5) Le varie funzioni <mf TApplication::pre_process_page>
|
||||
// <mf TApplication::pre_process_print> <mf TApplication::post_process_page>
|
||||
// <mf TApplication::post_process_print>
|
||||
// vengono chiamate prima e dopo la stampa di ogni record
|
||||
// o gruppo di record relativo alla relazione immessa;
|
||||
// ad esempio, post_process_print() viene chiamata per il
|
||||
// file principale una volta dopo l'intera stampa; per
|
||||
// un file collegato nella relazione, e' chiamata tante
|
||||
// volte quanti gruppi di almeno un record esistono per
|
||||
// record del file genitore. Qui si possono modificare
|
||||
// righe, calcolare totali etc. A queste funzioni
|
||||
// viene sempre passato il file (logicnum) in corso di stampa e
|
||||
// un contatore che indica quante volte la stampa e' stata
|
||||
// ripetuta. le pre_ ritornano TRUE o FALSE, nell'ultimo
|
||||
// caso interrompono la stampa; le post_ ritornano
|
||||
// <e print_action.NEXT_PAGE> (comportamento normale) o <e print_action.REPEAT_PAGE>
|
||||
// <nl>6) <mf Tprint_application::set_print> viene chiamata dalla voce Selezione,
|
||||
// unica del secondo menu. E' il posto dove mettere
|
||||
// una buona maschera di selezione di cosa stampare.
|
||||
// Alla fine, si esegua <mf TPrint_application::enable_print_menu> per
|
||||
// abilitare la voce Stampa, inizialmente inattiva.
|
||||
// <nl>7) <mf TPrint_application::cancel_hook> permette di intercettare la
|
||||
// cancellazione della stampa; ritornando TRUE
|
||||
// la stampa viene effettivamente cancellata
|
||||
// Tutti i parametri relativi al progress indicator
|
||||
// vengono settati da funzioni apposite (vedi oltre)
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
TArray _rows; // rows descriptor
|
||||
TArray _cursors; // cursor array
|
||||
TCursor* _cur; // current cursor
|
||||
TArray _transtab; // field translation table
|
||||
TArray _header; // header lines
|
||||
TArray _footer; // footer lines
|
||||
int _currow; // current print row
|
||||
TPrintstyle _curstyle; // current print style
|
||||
bool _auto_ff; // automatic form feed after each page
|
||||
const char* _wmess; // wait message for progind
|
||||
bool _wbar; // bar y/n for progind
|
||||
bool _wcancel; // cancel button enabled
|
||||
int _wthr; // minimum # of items to show print progind
|
||||
const char* _confpr; // config filename for printer
|
||||
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; // per questi vedi le funzioni inline
|
||||
bool _print_defined;
|
||||
bool _force_progind;
|
||||
bool _force_setpage;
|
||||
bool _print_zero;
|
||||
TProgind* _prind;
|
||||
// @cmember Descrittore delle righe
|
||||
TArray _rows;
|
||||
// @cmember Array di cursroi
|
||||
TArray _cursors;
|
||||
// @cmember Cursore corrente
|
||||
TCursor* _cur;
|
||||
// @cmember Tabella di traduzione dei campi
|
||||
TArray _transtab;
|
||||
// @cmember Header delle linee
|
||||
TArray _header;
|
||||
// @cmember Footer delle linee
|
||||
TArray _footer;
|
||||
// @cmember Riga corrente di stampa
|
||||
int _currow;
|
||||
// @cmember Stile corrente di stampa
|
||||
TPrintstyle _curstyle;
|
||||
// @cmember Indica se effettuare il form feed automatico dopo ogni pagina
|
||||
bool _auto_ff;
|
||||
// @cmember Messaggio di attesa per la classe <c TProgind>
|
||||
const char* _wmess;
|
||||
// @cmember Indica se attivare barra per la classe <c TProgind>
|
||||
bool _wbar;
|
||||
// @cmember Indica se abilitare o disabilitare il bottone Annulla
|
||||
bool _wcancel;
|
||||
// @cmember Numero minimo di item per mostrare la barra di attesa
|
||||
int _wthr;
|
||||
// @cmember Nome del file di configurazione per la stampante
|
||||
const char* _confpr;
|
||||
// @cmember Carattere di riempimento per campi vuoti
|
||||
char _fillchar;
|
||||
// @cmember Funzioni per la stampa automatica delle relazioni
|
||||
link_item* _pr_tree;
|
||||
// @cmember Numero massimo di righe
|
||||
int _maxrow;
|
||||
// @cmember Identificatore del file corrente
|
||||
int _cur_file;
|
||||
// @cmember Indica se è stat definita la stampante
|
||||
bool _print_defined;
|
||||
// @cmember Indica se forzare la presenza della barra di attesa anche nella stampe a video
|
||||
bool _force_progind;
|
||||
// @cmember Indica se forzare la rilettura delle <mf TPrint_application::set_row>
|
||||
bool _force_setpage;
|
||||
// @cmember Indica se stampare il valore 0 per i campi vuoti
|
||||
bool _print_zero;
|
||||
// @cmember Barra di attesa
|
||||
TProgind* _prind;
|
||||
// @cmember Picture default per i reali
|
||||
const char* _picture;
|
||||
MENU_TAG _last_choice;
|
||||
int _ncopies;
|
||||
bool _repeat_print;
|
||||
bool _cancelled;
|
||||
|
||||
// @cmember Ultima scelta di menù
|
||||
MENU_TAG _last_choice;
|
||||
// @cmember Numero di copie da stampare
|
||||
int _ncopies;
|
||||
// @cmember Indica se si volgia ripetere la stampa
|
||||
bool _repeat_print;
|
||||
// @cmember Indica se la stampa e' stata interrotta
|
||||
bool _cancelled;
|
||||
|
||||
// set the printer
|
||||
void set_printer() { printer().set(); }
|
||||
// print a single record; does not advance cursor
|
||||
// returns failure or success
|
||||
bool print_one(int file);
|
||||
// to be documented but very fig
|
||||
// @cmember Setta la stampante
|
||||
void set_printer()
|
||||
{ printer().set(); }
|
||||
// @cmember Stampa un singolo record
|
||||
bool print_one(int file);
|
||||
// @cmember Permette di stampare tutti i campi record cercando nell'albero i file corrispondenti
|
||||
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
|
||||
|
||||
// @cmember Metahandlers per controllare l'header quando si usa la
|
||||
// <c TViswin>; servono per controllare handlers di altre classi e chiamano
|
||||
// virtuali di <c TPrintapp>.
|
||||
static void _pp_header(TPrinter& pr);
|
||||
// @cmember Metahandlers per controllare il footer quando si usa la
|
||||
// <c TViswin>; servono per controllare handlers di altre classi e chiamano
|
||||
// virtuali di <c TPrintapp>.
|
||||
static void _pp_footer(TPrinter& pr);
|
||||
// @cmember Metahandlers per controllare i links quando si usa la
|
||||
// <c TViswin>; servono per controllare handlers di altre classi e chiamano
|
||||
// virtuali di <c TPrintapp>.
|
||||
static void _pp_link(int id, const char* s);
|
||||
|
||||
// @cmember Cerca per il nodo <p head> dove agganciarsi per rispettare la relazione
|
||||
link_item* _look_print_node(link_item* head, int logicnum);
|
||||
void _reset_tree(link_item* head);
|
||||
// @cmember Annulla l'aleber a partire dal nodo <p head>
|
||||
void _reset_tree(link_item* head);
|
||||
// @cmember ???!!!???
|
||||
virtual bool create();
|
||||
// @cmember ???!!!???
|
||||
virtual bool destroy();
|
||||
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
|
||||
// ****************************************************
|
||||
// ISTRUZIONI PER l'USO
|
||||
// ****************************************************
|
||||
//
|
||||
// La Printapp, saggiamente, consente di operare su uno
|
||||
// o piu' cursori stampando automaticamente anche files
|
||||
// collegati. La sequenza delle operazioni e' la seguente:
|
||||
//
|
||||
// 1) Derivare una classe da TPrint_application
|
||||
// 2) Implementare user_create() e user_destroy();
|
||||
// Nella user_create() si creino i
|
||||
// necessari cursori, e li si dia in pasto a Printapp
|
||||
// usando add_cursor(). Si puo' fare add_cursor(new TCursor(...))
|
||||
// dato che il cursore viene distrutto automaticamente.
|
||||
// 3) Per ciascun file del cursore che si desidera porre
|
||||
// nell'albero di stampa, si faccia add_file(logicnum [,from]);
|
||||
// [from] sara' il file a cui e' collegato nella relazione.
|
||||
// add_file VA FATTA anche per il file principale, se no
|
||||
// non stampera' nulla;
|
||||
// *********************************************************
|
||||
// FUNZIONI VIRTUALI OBBLIGATORIE
|
||||
// *********************************************************
|
||||
// 4) Si definiscono le necessarie funzioni virtuali: e'
|
||||
// sicuramente necessaria la set_page(file) nella quale
|
||||
// si metteranno (sotto if o switch) le istruzioni
|
||||
// set_row (vedi sotto) corrispondenti alla pagina
|
||||
// logica relativa a ciascun record di ogni file da stampare.
|
||||
// Va definita anche set_print() in cui si presentera' ;a
|
||||
// maschera di scelta se necessaria o una box yes_no;
|
||||
// Ritornando TRUE da set_print la stampa viene eseguita
|
||||
// automaticamente (in genere ritorna FALSE se l'utente
|
||||
// annulla la stampa con ESC.)
|
||||
//
|
||||
// Alla set_page, come alle pre_ e post_ process, viene
|
||||
// passato 0 se il cursore attuale e' nullo (vedi sotto).
|
||||
// *********************************************************
|
||||
// FUNZIONI VIRTUALI FACOLTATIVE
|
||||
// *********************************************************
|
||||
// 5) Le varie funzioni pre_ e post_ process _page e _print
|
||||
// vengono chiamate prima e dopo la stampa di ogni record
|
||||
// o gruppo di record relativo alla relazione immessa;
|
||||
// ad esempio, postprocess_print() viene chiamata per il
|
||||
// file principale una volta dopo l'intera stampa; per
|
||||
// un file collegato nella relazione, e' chiamata tante
|
||||
// volte quanti gruppi di almeno un record esistono per
|
||||
// record del file genitore. Qui si possono modificare
|
||||
// righe, calcolare totali etc. A queste funzioni
|
||||
// viene sempre passato il file (logicnum) in corso di stampa e
|
||||
// un contatore che indica quante volte la stampa e' stata
|
||||
// ripetuta. le pre_ ritornano TRUE o FALSE, nell'ultimo
|
||||
// caso interrompono la stampa; le post_ ritornano
|
||||
// NEXT_PAGE (comportamento normale) o REPEAT_PAGE
|
||||
// (indovina cosa fa).
|
||||
// 6) set_print() viene chiamata dalla voce Selezione,
|
||||
// unica del secondo menu. E' il posto dove mettere
|
||||
// una buona maschera di selezione di cosa stampare.
|
||||
// Alla fine, si esegua enable_print_menu() per
|
||||
// abilitare la voce Stampa, inizialmente inattiva.
|
||||
// 7) cancel_hook() permette di intercettare la
|
||||
// cancellazione della stampa; ritornando TRUE
|
||||
// la stampa viene effettivamente cancellata
|
||||
// Tutti i parametri relativi al progress indicator
|
||||
// vengono settati da funzioni apposite (vedi oltre)
|
||||
// ****************************************************
|
||||
// Molte altre minchiatine (form feed automatici, header,
|
||||
// footer etc) sono spiegate nel seguito
|
||||
// ****************************************************
|
||||
|
||||
// vedi sopra, per chi non l'ha capito
|
||||
virtual bool user_create() pure;
|
||||
// @cmember Utilizzata per la creazione dei cursori necessari
|
||||
virtual bool user_create() pure;
|
||||
// @cmember Utilizzata per la distruzione dei cursori
|
||||
virtual bool user_destroy() pure;
|
||||
|
||||
// set print, bound to menu :Selezione:Stampa
|
||||
// chiamata automaticamente dopo user_create()
|
||||
virtual bool set_print(int i = 1) { return FALSE; }
|
||||
// @cmember Chiamata automaticamente dopo <mf TPrint_application::user_create>
|
||||
virtual bool set_print(int i = 1)
|
||||
{ return FALSE; }
|
||||
|
||||
// set_row functions MUST be called here in a switch
|
||||
// for each particular file being printed
|
||||
virtual void set_page(int file, int cnt) {}
|
||||
// @cmember Setta la pagina logica logica. La funzione <mf TPrint_application::set_row>
|
||||
// DEVE essere chiamata qui in uno switch per ogni file particolare da stampare.
|
||||
virtual void set_page(int file, int cnt)
|
||||
{}
|
||||
|
||||
// called before processing each page
|
||||
// used to set print strings from tables or files
|
||||
// not included in relation
|
||||
// returning FALSE cancels page printing
|
||||
// counter is the current print page number
|
||||
// @cmember Setta la strina di stampa dalla tabella o dal file. Viene chiamata prima di
|
||||
// processare ogni pagina, Non è inclusa nelle relazioni. <p count> è il numero
|
||||
// corrente della pagina da stampare.
|
||||
// <nl>Ritornando FALSE viene cancellata la stampa delle pagine
|
||||
virtual bool preprocess_page(int file, int counter)
|
||||
{ return TRUE; }
|
||||
|
||||
// same before each print request
|
||||
// e.g. to initialize counters
|
||||
// returning FALSE cancels print request or subtree
|
||||
// @cmember Permette di eseguire qualcosa prima della richiesta di un processo di stampa
|
||||
// (es. per inizializzare i contatori).
|
||||
// <nl> Ritornando FALSE cencella la richeista di stampa o i sottoalberi
|
||||
virtual bool preprocess_print(int file, int counter)
|
||||
{ return TRUE; }
|
||||
|
||||
// postprocessing; returning REPEAT_PAGE reprints the
|
||||
// whole page (after all sons are printed); print
|
||||
// counter is the current page or print number
|
||||
// @cmember Ritornando <e print_action.REPEAT_PAGE> ristampa l'intera pagina (dopo che sono
|
||||
// stati stampanti tutti i figli); <p counter> e' la pagina corrente o il numero di
|
||||
// stampe effettuate.
|
||||
virtual print_action postprocess_page(int file, int counter)
|
||||
{ return NEXT_PAGE; }
|
||||
// vedi papiro precedente
|
||||
{ return NEXT_PAGE; }
|
||||
|
||||
// @cmember Utilizzata per modificare righe, calcolare totali, ecc. Per maggiori dettagli
|
||||
// vedere punto 5)
|
||||
virtual print_action postprocess_print(int file, int counter)
|
||||
{ return NEXT_PAGE; }
|
||||
// executed after all print job is completed
|
||||
virtual void postclose_print() {}
|
||||
|
||||
// called when LINK button is pressed with active selection in
|
||||
// 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;}
|
||||
// @cmember Viene eseguita dopo che tutti i lavori di stampa sono stati completati
|
||||
virtual void postclose_print()
|
||||
{}
|
||||
// @cmember Chiamata quando viene premuto il bottone Collega con la selezione attiva nella
|
||||
// finestra di anteprima
|
||||
virtual void process_link(int id, const char* text)
|
||||
{}
|
||||
// @cmember Chiamata quando l'utente annulla la stampa. Ritornando TRUE viene immediata fermata
|
||||
// la stampa. Non viene chaimata nel caso non si voglia interrompere la stampa
|
||||
virtual bool cancel_hook()
|
||||
{return TRUE;}
|
||||
|
||||
// bound to TApplication print menu
|
||||
// redefined ONLY for very special purposes
|
||||
// @cmember Legata al menu' di stampa della <c TApplication>. Viene ridefinita solo in casi
|
||||
// particolari
|
||||
virtual void print();
|
||||
|
||||
// bound to <select> menu and automatically called after
|
||||
// user_create()
|
||||
void do_print(int n);
|
||||
// @cmember Legata alla voce Selezione del menu' e chiamata dopo <mf TPrint_application::user_create>
|
||||
void do_print(int n);
|
||||
|
||||
// access Public Member
|
||||
public:
|
||||
|
||||
// --------------------------------------------------------------
|
||||
// COME SETTARE LE RIGHE DI STAMPA
|
||||
// --------------------------------------------------------------
|
||||
// setrow() si usa come una printf per settare le righe di stampa
|
||||
// che vengono stampate da print()
|
||||
// I codici per gli argomenti variabili sono di 3 tipi:
|
||||
// @ si usa per stampare campi di database o informazioni di controllo
|
||||
// posizione carrello e font
|
||||
// ACHTUNG: i codici di formato sono diversi da quelli di printf e
|
||||
// sono elencati sotto. Per i campi di database occorre che il codice
|
||||
// sia accoppiato ad una delle funzioni FLD() passata come argomento;
|
||||
// questa provoca la stampa di campi della relazione corrente,
|
||||
// posizionata come e' stato deciso nell'inizializzazione
|
||||
// % si usa esattamente come in una printf con un plus: se il codice di
|
||||
// formato e' maiuscolo (es. S per stringa, D per intero) viene
|
||||
// ignorato il carattere di riempimento eventualmente specificato
|
||||
// con set_fillchar. Cio' vale anche per i codici @ (vedi)
|
||||
// E' possibile usare due codici aggiuntivi: r(R) e t(T). A questi
|
||||
// va fatto seguire un PUNTATORE a real o a TString. Il formato
|
||||
// viene interpretato con le stesse regole di %t in dsprintf per real
|
||||
// (come %d o %f) e di %s per TString. Il puntatore NON
|
||||
// viene memorizzato; per questo occorre il codice # (sotto).
|
||||
// # si usa come % (stessi codici di printf) ma memorizza gli argomenti
|
||||
// per riferimento: ovvero, ogni volta che la riga viene stampata
|
||||
// viene stampato il contenuto in quel momento (che si puo' cambiare
|
||||
// in una delle pre- o post- process). Cio' implica che:
|
||||
// 1) gli argomenti vanno passati per RIFERIMENTO (set_row(1,"#5d",&i))
|
||||
// 2) i puntatori devono rimanere validi e costanti tra la set_row e
|
||||
// la fine della stampa
|
||||
// Quindi, attenzione a %s con TString ridimensionate; si possono
|
||||
// usare solo se predimensionate alla dimensione massima, ma e' meglio
|
||||
// usare char* o il codice apposito. I codici #r, #a e #t prendono puntatori a
|
||||
// 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)
|
||||
// @@ -> @
|
||||
// @[n[,{l|c|r}]s -> STRING: n = pad, lcr = alignment
|
||||
// @{[n[.d=0]]|[n[,{l|c|r}]]p}n
|
||||
// -> NUMBER: n = digits, d = decimals
|
||||
// p = picture string (first matching arg)
|
||||
// @[l]d -> DATE: l = full year
|
||||
// @f -> BOOL: prints si/no
|
||||
// @[n,{l|c|r}]t -> Translated field (must set translation)
|
||||
//
|
||||
// Tutti questi codici possono essere usati anche maiuscoli, il che inibisce
|
||||
// l'uso del carattere di riempimento (set_fillchar) per uno specifico campo.
|
||||
// ---------------------------------------------
|
||||
// Per tutti i codici che riguardano la stampa di real (@n, %r, #r)
|
||||
// se non vengono date ulteriori specifiche di formato viene usata
|
||||
// una picture che e' "" per default, ma puo' essere modificata con
|
||||
// set_real_picture(). Anche questo e' assai carino.
|
||||
// Normalmente un real uguale a zero viene stampato come stringa vuota
|
||||
// a meno che non si specifichi set_print_zero([TRUE]).
|
||||
// ---------------------------------------------
|
||||
// codici posizionamento e movimento carrello
|
||||
// @<n>g vai a posizione n
|
||||
// @<n>j salta di n posizioni (in orizzontale)
|
||||
// codici stile
|
||||
// @b bold
|
||||
// @i italic
|
||||
// @u underlined
|
||||
// @r reset to normal
|
||||
// ---------------------------------------------------
|
||||
// CODICI COLORE PER VISUALIZZAZIONE E COLLEGAMENTO
|
||||
// ---------------------------------------------------
|
||||
// Se si vuole che in visualizzazione il testo sia colorato
|
||||
// si usa il codice $[]; tra le quadre si scrive il colore
|
||||
// di foreground, opzionalmente seguito da una virgola e dal
|
||||
// colore di background (bianco per default). I colori si
|
||||
// specificano con un singolo carattere come segue:
|
||||
// n nero
|
||||
// g verde
|
||||
// b blu
|
||||
// c cyan
|
||||
// y giallo
|
||||
// v magenta
|
||||
// m colore background maschere (azzurrotto)
|
||||
// d grigio scuro
|
||||
// l grigio chiaro
|
||||
// k grigio normale
|
||||
// ------------------------------------------------------
|
||||
// Se si fa enable_link(..) con un certo colore, tutto
|
||||
// cio; che e' scritto in quel colore diventa selezionabile
|
||||
// e alla sua selezione (premendo 'Collega') si puo' associare
|
||||
// un'azione in process_link. A quest'ultima viene passata
|
||||
// l'ID ritornata da enable_link() e il testo selezionato alla
|
||||
// pressione di Collega. Vedere ba6 e stampare l'elenco (con
|
||||
// Includi ditte abilitato) per un esempio.
|
||||
// --------------------------------------------------------
|
||||
|
||||
// azzera la definizione della riga row
|
||||
// @cmember Riporta i valori standard per la riga <p r>-esima
|
||||
void reset_row(int r);
|
||||
|
||||
// chiamare reset_print() durante la stampa forza la
|
||||
// rilettura di set_page() alla prossima volta
|
||||
// @cmember Durante la stampa forza la rilettura di <mf TPrint_application::set_page> alla prossima volta
|
||||
void reset_print();
|
||||
|
||||
// se n'e' parlato diffusamente
|
||||
|
||||
// @cmember Permette di settare una riga di stampa
|
||||
void set_row(int r, const char* fmt, ...);
|
||||
|
||||
// ---------------------------------------------
|
||||
// set translation values for field
|
||||
// called once for each translation: example
|
||||
// set_translation(12,"STATOCIV","1","Celibe")
|
||||
// provoca la stampa automatica di stringhe al
|
||||
// posto di determinati valori dei campi se e' dato
|
||||
// il codice @t
|
||||
// Il posto giusto per chiamarla: user_create()
|
||||
// ---------------------------------------------
|
||||
void set_translation(int lognum, const char* field,
|
||||
const char* from, const char* to);
|
||||
// @cmember Setta i valori di traduzione per campi
|
||||
void set_translation(int lognum, const char* field, const char* from, const char* to);
|
||||
|
||||
// --------------------------------------------------------
|
||||
// bookmarks for viswin
|
||||
// --------------------------------------------------------
|
||||
// Aggiungere 'bookmarks' causa la comparsa del menu
|
||||
// 'Indice' nella viswin, con la lista dei bookmark inseriti;
|
||||
// questi possono essere legati ad albero n-ario specificando
|
||||
// il bookmark padre, in tal caso il menu sara' gerarchico a
|
||||
// sua volta. Prossima release di XVT il menu indice sara'
|
||||
// pop-up nella finestra
|
||||
// @cmember Setta un segnalibro nell'anteprima di stampa
|
||||
int set_bookmark(const char* txt, int father = -1);
|
||||
|
||||
// --------------------------------------------------------
|
||||
// hypertext interface for viswin
|
||||
// --------------------------------------------------------
|
||||
// Quando si vogliono abilitare determinati colori come
|
||||
// indicatori di legame ipertestuale, si faccia enable_link
|
||||
// nella create. L' ID ritornato viene passato a process_link
|
||||
// assieme al testo selezionato
|
||||
int find_link(const char* descr) const;
|
||||
int enable_link (const char* descr, char fg, char bg = 'w');
|
||||
// @cmember Permette di trovare un link ipertestuale
|
||||
int find_link(const char* descr) const;
|
||||
// @cmember Permette di abilitare determinati colori come indicatori di legame ipertestuale
|
||||
int enable_link (const char* descr, char fg, char bg = 'w');
|
||||
// @cmember Permette di disabilitare i link ipertestuali
|
||||
void disable_link(char fg, char bg = 'w');
|
||||
void disable_links() { printer().links().destroy(); }
|
||||
// se si setta multiple a TRUE anziche' la descrizione del testo selezionato
|
||||
// viene passata a enable_link una tokenstring con tutti i 'bottoni' dello
|
||||
// stesso colore presenti sulla riga
|
||||
// @cmember Elimina tutti i legami ipertestuali
|
||||
void disable_links()
|
||||
{ printer().links().destroy(); }
|
||||
|
||||
// @cmember Abilita/disabilita più link per la <mf TPrint_application::enable_link>
|
||||
void set_multiple_link(bool on);
|
||||
|
||||
// -------------------------------------------------------------
|
||||
// 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
|
||||
// -----------------------------------------------------------------
|
||||
|
||||
// @cmember Permette di stampare sullo sfondo e per variarne gli attributi
|
||||
void set_background(const char* bgdesc = NULL);
|
||||
|
||||
|
||||
// ---------------------------------------------
|
||||
// set/select cursor
|
||||
// ---------------------------------------------
|
||||
// selects i-th cursor
|
||||
// inutile se c'e' un cursore solo
|
||||
// @cmember Setta/seleziona l'<p i>-esimo cursore. Inutile sec'e' un solo cursore
|
||||
void select_cursor(int i);
|
||||
|
||||
// return i-th cursor without making it current
|
||||
// @cmember Ritorna l'<p i>-esimo cursore senza renderlo corrente
|
||||
TCursor* get_cursor(int i);
|
||||
// returns maximum row defined
|
||||
int get_maxrow() { return _maxrow; }
|
||||
|
||||
// adds cursor to class; return identifier
|
||||
// cursor* can be NULL: no file is used but
|
||||
// print_one is called and iterations are performed
|
||||
// by pre_ and post_ process
|
||||
int add_cursor(TCursor* c);
|
||||
// @cmember Ritorna il numero massimo di righe definite
|
||||
int get_maxrow()
|
||||
{ return _maxrow; }
|
||||
|
||||
// retrieve current cursor
|
||||
TCursor* current_cursor() { return _cur; }
|
||||
// @cmember Aggiunge un cursore alla classe
|
||||
int add_cursor(TCursor* c);
|
||||
|
||||
// ---------------------------------------------
|
||||
// set_auto_ff(TRUE) fa si' che dopo ogni pagina logica (relativa ad
|
||||
// un record) si stampi un form feed. (anche se il cursore e' nullo)
|
||||
// @cmember Ritorna il cursore corrente
|
||||
TCursor* current_cursor()
|
||||
{ return _cur; }
|
||||
|
||||
// @cmember Permette di stampare (<p b>=TRUE) o non stampare (<p b>=FALSE) dopo ogni pagina
|
||||
// logica (relativa ad un record) un form feed, anche se il cursore e' nullo.
|
||||
void set_auto_ff( bool b = TRUE)
|
||||
{ _auto_ff = b; }
|
||||
|
||||
// il carattere specificato con set_fillchar (default ' ') viene
|
||||
// usato per riempire davanti e dietro i campi in cui si e' specificata
|
||||
// una dimensione maggiore della lunghezza effettiva del contenuto,
|
||||
// (a meno che non si sia usato un codice di formato maiuscolo)
|
||||
// @cmember Permette di definire il carattere di riempimento.
|
||||
// <nl>Il carattere specificato con set_fillchar (default ' ') viene
|
||||
// usato per riempire a destra e a sinistra i campi in cui si e' specificata
|
||||
// una dimensione maggiore della lunghezza effettiva del contenuto,
|
||||
// (a meno che non si sia usato un codice di formato maiuscolo)
|
||||
void set_fillchar(char c)
|
||||
{ _fillchar = c; }
|
||||
|
||||
// riempie di righe vuote la pagina corrente fino alla dimensione
|
||||
// della pagina
|
||||
// @cmember Riempie di righe vuote la pagina corrente fino alla dimensione della pagina
|
||||
void fill_page(int from = -1);
|
||||
|
||||
// di solito basta e avanza quella di default
|
||||
// @cmember Aggiunge un menu nella barra dei menu. Di solito basta e avanza quella di default
|
||||
virtual bool menu(MENU_TAG m);
|
||||
|
||||
virtual word class_id() const { return CLASS_PRINT_APPLICATION; }
|
||||
// @cmember Ritorna l'identificatore della classe
|
||||
virtual word class_id() const
|
||||
{ return CLASS_PRINT_APPLICATION; }
|
||||
|
||||
// print menu is enabled when set_print returns TRUE
|
||||
// @cmember Permette di abilitare il menu' di stampa. In genere e' abilitato quando
|
||||
// <mf TPrint_application::set_print> ritorna TRUE
|
||||
void enable_print_menu();
|
||||
// @cmember Permette di disabilitare il menu' di stampa.
|
||||
void disable_print_menu();
|
||||
// @cmember Permette di abilitare il menu' di settaggio della stampante.
|
||||
void enable_setprint_menu();
|
||||
// @cmember Permette di disabilitare il menu' di settaggio della stampante.
|
||||
void disable_setprint_menu();
|
||||
|
||||
// header/footer (printf, not set_row analogues)
|
||||
// only understand @-codes for setting font attributes,
|
||||
// date and page number
|
||||
// plus every printf %-code
|
||||
|
||||
// con queste si possono ridefinire header e footer al
|
||||
// verificarsi di condizioni durante la stampa
|
||||
virtual void preprocess_header() {}
|
||||
virtual void preprocess_footer() {}
|
||||
|
||||
// @cmember Permette di ridefinire l'header al verificarsi di condizioni durante la stampa
|
||||
virtual void preprocess_header()
|
||||
{}
|
||||
// @cmember Permette di ridefinire il footer al verificarsi di condizioni durante la stampa
|
||||
virtual void preprocess_footer()
|
||||
{}
|
||||
|
||||
// @cmember Permette di definire l'header della stampa
|
||||
void set_header(int row, const char* fmt, ...);
|
||||
// @cmember Permette di definire il footer della stampa
|
||||
void set_footer(int row, const char* fmt, ...);
|
||||
// @cmember Elimina l'header della stampa
|
||||
void reset_header();
|
||||
// @cmember Elimina il footer della stampa
|
||||
void reset_footer();
|
||||
|
||||
// vedi sopra per capire
|
||||
// @cmember Azzera l'albero di stampa con i file presenti
|
||||
void reset_files();
|
||||
// @cmember Aggiunge un file del cursore nell'albero di stampa
|
||||
void add_file(int file, int from = 0);
|
||||
// @cmember Aggiunge un file del cursore nell'albero di stampa
|
||||
void add_file(const char* tab, int from = 0);
|
||||
|
||||
// set default picture for reals
|
||||
void set_real_picture(const char* p) { _picture = p; }
|
||||
void set_print_zero(bool b = TRUE) { _print_zero = b; }
|
||||
// @cmember Setta la picture default per i reali
|
||||
void set_real_picture(const char* p)
|
||||
{ _picture = p; }
|
||||
// @cmember Permette di stampare (<p b>=TRUE) o di non stampare (<p b>=FALSE) il valore 0
|
||||
// nel caso di campo vuoto.
|
||||
void set_print_zero(bool b = TRUE)
|
||||
{ _print_zero = b; }
|
||||
|
||||
// progress indicator control
|
||||
void set_wait_message(const char* m)
|
||||
{ _wmess = m; }
|
||||
void set_wait_bar(bool m)
|
||||
// default yes
|
||||
// @cmember Setta il messaggio della barra di attesa
|
||||
void set_wait_message(const char* m)
|
||||
{ _wmess = m; }
|
||||
// @cmember Abilita (<p m>=TRUE) o disabilita (<p m>=FALSE) la barra di attesa (default abilitata)
|
||||
void set_wait_bar(bool m)
|
||||
{ _wbar = m; }
|
||||
void set_wait_cancel(bool m)
|
||||
// default yes
|
||||
// @cmember Abilita (<p m>=TRUE) o disabilita (<p m>=FALSE) il bottone Annulla nella barra
|
||||
// di attesa (default abilitato)
|
||||
void set_wait_cancel(bool m)
|
||||
{ _wcancel = m; }
|
||||
void set_wait_threshold(int m)
|
||||
// minimum number of print items to show progress indicator;
|
||||
// default 2
|
||||
// @cmember Setta il numero minimo di elementi per mostrare la barra di attesa (default 2)
|
||||
void set_wait_threshold(int m)
|
||||
{ _wthr = m; }
|
||||
|
||||
// questa forza la progind anche se si stampa su video
|
||||
// @cmember Permette di forzare (<p b>=TRUE) o non forzare (<p b>=FALSE) la progind anche per
|
||||
// le stampe a video
|
||||
void force_progind(bool b = TRUE)
|
||||
{ _force_progind = b; }
|
||||
|
||||
// questa forza la rilettura delle setrow in set_page ad ogni
|
||||
// record stampato, in modo che i dati siano
|
||||
// sempre quelli del record corrente anche se si usano codici %
|
||||
// s'intende che rallenta un po' la stampa
|
||||
|
||||
// @cmember Permette di forzare (<p b>=TRUE) o non forzare (<p b>=FALSE) la rilettura delle
|
||||
// <mf TPrint_application::set_row> in <mf TPirnt_application::set_page> ad ogni
|
||||
// record stampato, in modo che i dati siano sempre quelli del record corrente
|
||||
// anche se si usano codici %. Chiaramente la stampa viene un po' rallentata
|
||||
void force_setpage(bool b = TRUE)
|
||||
{ _force_setpage = b; }
|
||||
|
||||
// @cmember Setta il nome del file di configurazione per la stampante
|
||||
void set_config_file(const char* s)
|
||||
{ _confpr = s; }
|
||||
// @cmember Ritorna il numero della pagina attualmente in stampa
|
||||
word get_page_number()
|
||||
{ return printer().getcurrentpage(); }
|
||||
// @cmember Setta il numero della pagina attualmente in stampa
|
||||
void set_page_number(word n)
|
||||
{ printer().setcurrentpage(n); }
|
||||
|
||||
// dirige la stampa sul file specificato, preservando gli attributi di formato
|
||||
// se header == TRUE si stampano su file anche gli header
|
||||
void set_export_file(const char* name, bool header = TRUE)
|
||||
// @cmember Dirige la stampa sul file specificato con <p name>, preservando gli attributi
|
||||
// di formato. Se <p header> == TRUE si stampano su file anche gli header.
|
||||
void set_export_file(const char* name, bool header = TRUE)
|
||||
{ printer().set_export_file(name,header); }
|
||||
// infila un file di export fatto da un'altra printer (con formati e tutto, ignora
|
||||
// gli header supponendo che siano gia' presenti nel file)
|
||||
// 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
|
||||
// @cmember Inserisce un file di export fatto da un'altra printer (con formati e tutto).
|
||||
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; }
|
||||
// @cmember Setta il numero di copie da stampare
|
||||
void set_n_copies(int n)
|
||||
{ _ncopies = n; }
|
||||
// @cmember Ritorna il numero di copie da stampare
|
||||
int get_n_copies() const
|
||||
{ return _ncopies; }
|
||||
// @cmember Setta la ripetizione della stampa
|
||||
void repeat_print()
|
||||
{ _repeat_print = TRUE; }
|
||||
|
||||
bool is_cancelled() const { return _cancelled; }
|
||||
// @cmember Ritorna se la stampa e' stata interrotta
|
||||
bool is_cancelled() const
|
||||
{ return _cancelled; }
|
||||
|
||||
// @cmember Costruttore
|
||||
TPrint_application();
|
||||
// @cmember Distruttore
|
||||
virtual ~TPrint_application();
|
||||
};
|
||||
|
||||
// buon divertimento
|
||||
|
||||
|
||||
#endif
|
||||
|
||||
|
@ -27,6 +27,8 @@
|
||||
|
||||
HIDDEN TPrinter* _printer = NULL;
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
TPrinter& printer()
|
||||
{
|
||||
if (_printer == NULL)
|
||||
@ -318,7 +320,15 @@ bool printers_on_key(TMask_field & f, KEY key);
|
||||
|
||||
// fv support structs for config
|
||||
|
||||
bool PrinterDef::read(const char *name, FILE * fd)
|
||||
// @mfunc Legge la descrizione della stampante dal file
|
||||
//
|
||||
// @rdesc Ritorna il risultato dell'operazione:
|
||||
//
|
||||
// @flag TRUE | Se e' riuscito a leggere la descrizione della stampante
|
||||
// @flag FALSE | Se non e' riuscito a leggere la descrizione della stampante
|
||||
bool PrinterDef::read(
|
||||
const char *name, // @parm Nome della stampante di cui cercarne la descrizione
|
||||
FILE * fd) // @parm Puntatore al file contenente la descrizione
|
||||
{
|
||||
_printername = name;
|
||||
_printername.trim ();
|
||||
@ -462,7 +472,7 @@ TPrintrow & TPrintrow::reset ()
|
||||
|
||||
const char* TPrintrow::row_codified() const
|
||||
{
|
||||
// returns the row with @-codes for font style and color
|
||||
|
||||
char last_attr = -1;
|
||||
int last_color = -1;
|
||||
int last = 0, k = 0, len = -1;
|
||||
@ -681,7 +691,11 @@ PRINT_RCD* TPrinter::get_printrcd(int *size)
|
||||
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
|
||||
void TPrinter::set_win_formlen(WINDOW prwin)
|
||||
// @mfunc Setta le caratteristiche della stampante leggendole da <p _print_rcd>
|
||||
void TPrinter::set_win_formlen(
|
||||
WINDOW prwin) // @parm Finestra effettiva di stampa (default NULL_WIN)
|
||||
|
||||
// @comm Nel caso <p prwin> sia NULL_WIN vengono solamente aggiornati i valori
|
||||
{
|
||||
long pw, ph, phr, pvr; // Printer width, height, horizontal and vertical resolution
|
||||
xvt_app_escape (XVT_ESC_GET_PRINTER_INFO, get_printrcd(), &ph, &pw, &pvr, &phr);
|
||||
@ -876,7 +890,11 @@ TToken_string& TPrinter::getprinternames ()
|
||||
return _printer_names;
|
||||
}
|
||||
|
||||
void TPrinter::read_configuration(const char* parag)
|
||||
// @mfunc Legge la configurazione della stampante
|
||||
void TPrinter::read_configuration(
|
||||
const char* parag) // parm Nome del file di configurazione della stampante (default NULL)
|
||||
|
||||
// @comm Se <p parag> e' NULL viene letta la configurazione della stamapnte di default.
|
||||
{
|
||||
main_app().begin_wait();
|
||||
|
||||
@ -1080,7 +1098,16 @@ TPrintrow *TPrinter::getfooterline (int linetoget)
|
||||
return ((TPrintrow *) _footer.objptr (linetoget));
|
||||
}
|
||||
|
||||
void TPrinter::setheaderline (int linetoset, TPrintrow * line)
|
||||
// @mfunc Setta il contenuto di una line dell'header
|
||||
void TPrinter::setheaderline (
|
||||
int linetoset, // @parm Numero della linea da settare
|
||||
TPrintrow * line) // @parm Contenuto della linea dell'header
|
||||
// @parm const TPrintrow& | line | Indirizzo con il contenuto della
|
||||
// linea dell'header
|
||||
|
||||
// @syntax void setheaderline (int linetoset, TPrintrow* line);
|
||||
// @syntax void setheaderline (int linetoset, const TPrintrow& line);
|
||||
|
||||
{
|
||||
_header.add (line, linetoset);
|
||||
if (linetoset >= _headersize)
|
||||
@ -1093,7 +1120,16 @@ void TPrinter::setheaderline (int linetoset, const TPrintrow & line)
|
||||
setheaderline (linetoset, p);
|
||||
}
|
||||
|
||||
void TPrinter::setfooterline (int linetoset, TPrintrow* line)
|
||||
// @mfunc Setta il contenuto di una line dell'header
|
||||
void TPrinter::setfooterline (
|
||||
int linetoset, // @parm Numero della linea da settare
|
||||
TPrintrow * line) // @parm Contenuto della linea del footer
|
||||
// @parm const TPrintrow& | line | Indirizzo con il contenuto della
|
||||
// linea del footer
|
||||
|
||||
// @syntax void setfooterline (int linetoset, TPrintrow* line);
|
||||
// @syntax void setfooterline (int linetoset, const TPrintrow& line);
|
||||
|
||||
{
|
||||
_footer.add (line, linetoset);
|
||||
}
|
||||
@ -1116,7 +1152,17 @@ void TPrinter::resetfooter ()
|
||||
// _footersize = 0;
|
||||
}
|
||||
|
||||
bool TPrinter::printrow(TPrintrow* rowtoprint)
|
||||
// @mfunc Metodo base per la stampa
|
||||
//
|
||||
// @rdesc Ritorna il risulato della stampa:
|
||||
//
|
||||
// @flag TRUE | Se la stampa ha avuto successo
|
||||
// @flag FALSE | Se la stampante non e' attiva
|
||||
bool TPrinter::printrow(
|
||||
TPrintrow* rowtoprint) // @parm Riga da stampare
|
||||
|
||||
// @comm Se la pagina logica corrente e' precedente alla prima pagina logica o successiva
|
||||
// all'ultima pagina logica viene ritornato TRUE.
|
||||
{
|
||||
if (!isopen ())
|
||||
return FALSE;
|
||||
@ -1216,8 +1262,18 @@ word TPrinter::rows_left() const
|
||||
return left;
|
||||
}
|
||||
|
||||
// @mfunc Permette di stampare una riga
|
||||
//
|
||||
// @rdesc Ritorna il risultato della stampa:
|
||||
//
|
||||
// @flag TRUE | Se la stampa ha avuto successo
|
||||
// @flag FALSE | Se non e' riuscito ad effettuare la stampa
|
||||
bool TPrinter::print(
|
||||
TPrintrow& rowtoprint) // @parm Riga da stampare
|
||||
|
||||
bool TPrinter::print(TPrintrow& rowtoprint)
|
||||
// @comm Nel caso la riga non ci stia nella pagina logica corrente vengono stampanti il footer
|
||||
// della pagina corrente e l'header della successiva prima prima della stampa della riga
|
||||
// vera e propria.
|
||||
{
|
||||
bool ok = TRUE;
|
||||
|
||||
@ -1271,7 +1327,16 @@ bool TPrinter::printfooter()
|
||||
return ok;
|
||||
}
|
||||
|
||||
bool TPrinter::skip(int linestoskip)
|
||||
// @mfunc Permette di saltare alcune righe dalla posizione corrente
|
||||
//
|
||||
// @rdesc Ritorna il risulato dell'operazione:
|
||||
//
|
||||
// @flag TRUE | Se e' riuscito a saltare le righe
|
||||
// @flag FALSE | Se non e' riuscito a saltare le righe
|
||||
bool TPrinter::skip(
|
||||
int linestoskip) // @parm Vengono accettai solo valori positivi
|
||||
|
||||
// @xref <mf TPrinter::jump>
|
||||
{
|
||||
int jumpline;
|
||||
|
||||
@ -1280,7 +1345,20 @@ bool TPrinter::skip(int linestoskip)
|
||||
return jump(jumpline);
|
||||
}
|
||||
|
||||
bool TPrinter::jump(int jumpline)
|
||||
// @mfunc Permette di saltare alla riga indicata
|
||||
//
|
||||
// @rdesc Ritorna il risultato dell'operazione
|
||||
//
|
||||
// @flag TRUE | Se e' riuscito a saltare alla riga
|
||||
// @flag FALSE | Se non e' riuscito a saltare alla riga o se viene inserito un formfeed
|
||||
bool TPrinter::jump(
|
||||
int jumpline) // @parm Numero della riga a cui saltare nella stampa. Vengono accettai
|
||||
// solo valori positivi
|
||||
|
||||
// @comm Nel caso si cerchi di saltare ad una riga superiore alla lunghezza della pagina attiva
|
||||
// viene inserito un formfeed.
|
||||
|
||||
// @xref <mf TPrinter::skip>
|
||||
{
|
||||
int i = 0;
|
||||
bool ok = TRUE;
|
||||
@ -1619,7 +1697,16 @@ bool TPrinter::set()
|
||||
}
|
||||
|
||||
|
||||
void TPrinter::merge_export_file(const char* file, bool header)
|
||||
// @mfunc Inserisce un file di export fatto da un'altra printer
|
||||
void TPrinter::merge_export_file(
|
||||
const char* file,
|
||||
bool header) // @parm Indica se gli header sono presenti nel file:
|
||||
//
|
||||
// @flag TRUE | Gli header sono nel file e quindi non vengono stampanti (default)
|
||||
// @flag FALSE | Gli header non sono nel file e quindi vengono stampanti
|
||||
|
||||
// @comm Vengono inseriti nel file di export i formati e tutto il resto. Vengono ignorati gli
|
||||
// header supponendo che siano gia' presenti nel file
|
||||
{
|
||||
TTextfile txt(file);
|
||||
|
||||
@ -1633,7 +1720,13 @@ void TPrinter::merge_export_file(const char* file, bool header)
|
||||
}
|
||||
|
||||
|
||||
int TPrinter::set_bookmark(const char* txt, int father)
|
||||
// @mfunc Crea un segnalibro
|
||||
//
|
||||
// @rdesc Ritorna l'identificatore del segnalibro creato
|
||||
int TPrinter::set_bookmark(
|
||||
const char* txt, // @parm Nome del segnalibro da creare
|
||||
int father) // @parm Identificatore del segnalibro padre a cui collegare quello
|
||||
// da creare
|
||||
{
|
||||
if (_printertype == screenvis)
|
||||
{
|
||||
|
@ -14,371 +14,688 @@
|
||||
#endif
|
||||
|
||||
|
||||
// @DPUB
|
||||
// @doc EXTERNAL
|
||||
|
||||
// @enum TPrintstyle | Indica lo stile da assegnare al carattere
|
||||
enum TPrintstyle
|
||||
{
|
||||
normalstyle = 0,
|
||||
boldstyle = 1,
|
||||
underlinedstyle = 2,
|
||||
italicstyle = 4
|
||||
normalstyle = 0, // @emem Stile normale
|
||||
boldstyle = 1, // @emem Stile grassetto
|
||||
underlinedstyle = 2, // @emem Stile sttolineato
|
||||
italicstyle = 4 // @emem Stile corsivo
|
||||
};
|
||||
|
||||
// @enum TPrtype | Indica il tipo di stampante da utilizzare per la stampa
|
||||
enum TPrtype
|
||||
{
|
||||
normprinter = 0,
|
||||
fileprinter = 1,
|
||||
spoolprinter = 2,
|
||||
localprinter = 3,
|
||||
screenvis = 4,
|
||||
winprinter = 5,
|
||||
export = 6
|
||||
normprinter = 0, // @emem Stampa su stampante normale
|
||||
fileprinter = 1, // @emem Stampa su file
|
||||
spoolprinter = 2, // @emem Stampa utilizzando lo spool
|
||||
localprinter = 3, // @emem Stampa su la stampante locale
|
||||
screenvis = 4, // @emem Anteprima a video
|
||||
winprinter = 5, // @emem Stampa su stampante definita da Windows<tm>
|
||||
export = 6 // @emem Esporatzione di stampa
|
||||
};
|
||||
|
||||
|
||||
// @END
|
||||
|
||||
// @C
|
||||
// class TPrintrow : public TObject
|
||||
// @END
|
||||
|
||||
// @class TPrintrow | Classe per la definizione della stampa di una riga
|
||||
//
|
||||
// @base public | TObject
|
||||
class TPrintrow : public TObject
|
||||
|
||||
// @author(:INETRNAL)Villa
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
// @ccost MAXSTR | 256 | Lunghezza massima della riga da stampare
|
||||
enum { MAXSTR = 256 };
|
||||
|
||||
// @DPROT
|
||||
TString256 _row; // the actual string to print
|
||||
char _attr[MAXSTR]; // contains char attributes of _row
|
||||
int _cols[MAXSTR]; // contains color attributes of _row
|
||||
TBit_array _tab;
|
||||
// @cmember Stringa da stampare nella riga
|
||||
TString256 _row;
|
||||
// @cmember Attributi carattere dei caratteri
|
||||
char _attr[MAXSTR];
|
||||
// @cmember Attributi colore dei caratteri
|
||||
int _cols[MAXSTR];
|
||||
// @cmember Inizio delle nuove posizioni di tabulazione
|
||||
TBit_array _tab;
|
||||
|
||||
TPrintstyle _currentstyle; // the current char attribute
|
||||
int _currentcolor; // the current color attribute
|
||||
int _lastpos; // last print position
|
||||
// @cmember Attributo carattere corrente
|
||||
TPrintstyle _currentstyle;
|
||||
// @cmember Attributo colore corrente
|
||||
int _currentcolor;
|
||||
// @cmember Ultima posizione di stampa
|
||||
int _lastpos;
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @FPUB
|
||||
// @cmember Costruttore
|
||||
TPrintrow();
|
||||
// @cmember Costruttore
|
||||
TPrintrow(const TPrintrow& pr);
|
||||
virtual ~TPrintrow() {}
|
||||
// @cmember Distruttore
|
||||
virtual ~TPrintrow()
|
||||
{}
|
||||
|
||||
// TPrintrow& center(const char* str, int position);
|
||||
virtual word class_id() const;
|
||||
// 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;
|
||||
|
||||
const char* row() const { return _row; }
|
||||
// @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();
|
||||
|
||||
TPrintstyle get_style(int position) const { return (TPrintstyle)_attr[position]; }
|
||||
TPrintstyle get_style() const { return _currentstyle; }
|
||||
int get_color(int position) const { return (TPrintstyle)_cols[position]; }
|
||||
int get_color() const { return _currentcolor; }
|
||||
// @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);
|
||||
void set_style(TPrintstyle style) { _currentstyle=style; }
|
||||
int lastpos() const { return _lastpos; }
|
||||
// @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; }
|
||||
};
|
||||
|
||||
// @class PrinterDef | Classe per la definizione delle stampanti da utilizzare
|
||||
//
|
||||
// @base public | TObject
|
||||
class PrinterDef : public TObject
|
||||
{
|
||||
friend class TPrinter;
|
||||
TString _printername; // name of the printer file
|
||||
TString _printertype; // type of printer (0=diretta,1=locale,2=spool)
|
||||
TString _filtername; // filter for the pipe (UNIX only)
|
||||
TString _devicename; // name of print device
|
||||
char _atstr[4][10]; // attribute codes for the current printer
|
||||
TString_array _codes; // print codes
|
||||
TString_array _names; // name of print codes
|
||||
TString _ffcode; // formfeed code for the current printer
|
||||
TString _nlcode; // special newline code for the current printer
|
||||
|
||||
// @author(:INTERNAL)Villa
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
// @cfriend TPrinter
|
||||
friend class TPrinter;
|
||||
|
||||
// @cmember Nome del file della stampante
|
||||
TString _printername;
|
||||
// @cmember Tipo di stampante da utilizzare (0=diretta,1=locale,2=spool)
|
||||
TString _printertype;
|
||||
// @cmember Filtro pèer la pipe '<pipe>' (solo per unix
|
||||
TString _filtername;
|
||||
// @cmember Nome del device di stampa
|
||||
TString _devicename;
|
||||
// @cmember Codici attributo per la stampante corrente
|
||||
char _atstr[4][10];
|
||||
// @cmember Codici di stampa
|
||||
TString_array _codes;
|
||||
// @cmember Nome dei codici di stampa
|
||||
TString_array _names;
|
||||
// @cmember Codice del formfeed per la stampante corrente
|
||||
TString _ffcode;
|
||||
// @cmember Codice del new line per la stampante corrente
|
||||
TString _nlcode;
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
bool read(const char* name, FILE* fd); // read description from file;
|
||||
bool isdefault(); // name matches "Default"
|
||||
const char* get_codenames(word i) const { return i < (word)_names.items() ? (const char*)_names.row(i) : NULL; }
|
||||
const char* get_codes(word i) const { return i < (word)_codes.items() ? (const char*)_codes.row(i) : NULL; }
|
||||
PrinterDef() : _printername(10), _filtername(10), _ffcode("\f"), _nlcode("\n") {}
|
||||
// @cmember Legge la descrizione della stampante dal file
|
||||
bool read(const char* name, FILE* fd);
|
||||
// @cmember Controlla se il nome del file della stampante e' "Default"
|
||||
bool isdefault();
|
||||
// @cmember Ritorna l'<p i>-esimo nome del codice di stampa
|
||||
const char* get_codenames(word i) const
|
||||
{ return i < (word)_names.items() ? (const char*)_names.row(i) : NULL; }
|
||||
// @cmember Ritorna l'<p i>-esimo codice di stampa
|
||||
const char* get_codes(word i) const
|
||||
{ return i < (word)_codes.items() ? (const char*)_codes.row(i) : NULL; }
|
||||
// @cmember Costruttore
|
||||
PrinterDef() : _printername(10), _filtername(10), _ffcode("\f"), _nlcode("\n")
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
// @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 costrutire l'intero menu' gerarchico dei bookmark
|
||||
{
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
int _id;
|
||||
int _father_id;
|
||||
// @cmember Identificatore del bookmark creato
|
||||
int _id;
|
||||
// @cmember Identificatore del bookmark padre
|
||||
int _father_id;
|
||||
// @cmember Testo del bookmark
|
||||
TString _txt;
|
||||
long _row;
|
||||
// @cmember Numero della riga sulla quale e' inserito il bookmark
|
||||
long _row;
|
||||
|
||||
BkDef() {}
|
||||
virtual ~BkDef() {}
|
||||
// @cmember Costruttore
|
||||
BkDef()
|
||||
{}
|
||||
// @cmember Distruttore
|
||||
virtual ~BkDef()
|
||||
{}
|
||||
};
|
||||
|
||||
|
||||
class TPrinter;
|
||||
|
||||
// @type PRINTSECTIONHANDLER | Funzione definita dall'utente chiamata all'inizio della stampa
|
||||
// dell'header o del footer
|
||||
typedef void (*PRINTSECTIONHANDLER)(TPrinter& printer);
|
||||
// @type LINKHANDLER | Funzione definita dall'utente per la gestione del link
|
||||
typedef void (*LINKHANDLER)(int, const char*);
|
||||
|
||||
|
||||
// @C
|
||||
// class TPrinter : public TObject
|
||||
// @END
|
||||
|
||||
class TViswin;
|
||||
|
||||
// @class TPrinter | Classe per la definzione delle operazioni sulla stampante
|
||||
//
|
||||
// @base public | TObject
|
||||
class TPrinter : public TObject
|
||||
// @author(:INTERNAL) Villa
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
// @DPROT
|
||||
|
||||
FILE* _cnfptr; // config file
|
||||
FILE* _fp; // pointer to the printer file
|
||||
TViswin* _vf; // pointer to file visualizer
|
||||
// @cmember Puntatore al file di configurazione
|
||||
FILE* _cnfptr;
|
||||
// @cmember Puntatore al file della stampante
|
||||
FILE* _fp;
|
||||
// @cmember Puntatore al file di visualizzaizone
|
||||
TViswin* _vf;
|
||||
|
||||
// @cmember Testo da stampare
|
||||
TTextfile _txt;
|
||||
TFilename _exportfile; // name of export file
|
||||
// @cmember Nome del file di esportazione
|
||||
TFilename _exportfile;
|
||||
// @cmember Dimensione dell'header
|
||||
int _headersize;
|
||||
// @cmember Dimensione del footer
|
||||
int _footersize;
|
||||
// @cmember Contenuto dell'header
|
||||
TArray _header;
|
||||
// @cmember Contenuto del footer
|
||||
TArray _footer;
|
||||
TArray _printers; // printers descriptions
|
||||
int _curprn; // current printer index
|
||||
int _curcode; // current printer index
|
||||
int _formlen; // length of the logic page
|
||||
int _formwidth; // size of the logic page
|
||||
int _currentrow; // next row to print
|
||||
// @cmember Descrizione delle stampanti
|
||||
TArray _printers;
|
||||
// @cmember Indice corrente della stampante
|
||||
int _curprn;
|
||||
// @cmember Codice corrente della stampante
|
||||
int _curcode;
|
||||
// @cmember Lunghezza della pagina logica
|
||||
int _formlen;
|
||||
// @cmember Larghezza della pagina logica
|
||||
int _formwidth;
|
||||
// @cmember Prossima riga da stampare
|
||||
int _currentrow;
|
||||
|
||||
TString80 _fontname; // Font name
|
||||
int _ch_size; // Font height
|
||||
// @cmember Nome del font per la stampa
|
||||
TString80 _fontname;
|
||||
// @cmember Dimensione del font per la stampa
|
||||
int _ch_size;
|
||||
|
||||
word _currentpage; // logic page containing _currentrow
|
||||
word _frompage; // first page to print (normally 0)
|
||||
word _topage; // last page to print (normally = USHRT_MAX)
|
||||
bool _hwformfeed; // if TRUE a ff will be printed after any footer
|
||||
TPrtype _printertype; // specifies the kind of output the user wants
|
||||
bool _isopen; // printer open
|
||||
TDate _date; // printing date
|
||||
TFilename _printerfile; // filename for printing on file
|
||||
TArray _linksdescr;
|
||||
TArray _bookmarks; // bookmarks
|
||||
bool _multiple_link; //
|
||||
// @cmember Pagina logica contenente la prossima riga da stampare
|
||||
word _currentpage;
|
||||
// @cmember Prima pagina da stampare (normalmente 0)
|
||||
word _frompage;
|
||||
// @cmember Ultima pagina da stampare (normalmente USHRT_MAX)
|
||||
word _topage;
|
||||
// @cmember Indica la stampa di un form feed dopo ogni footer
|
||||
bool _hwformfeed;
|
||||
// @cmember Indica il tipo di output selezionato dall'utente per la stampa
|
||||
TPrtype _printertype;
|
||||
// @cmember Indica se la stampante e' inizializzata
|
||||
bool _isopen;
|
||||
// @cmember Data di stampa
|
||||
TDate _date;
|
||||
// @cmember Nome del file per la stampa su disco
|
||||
TFilename _printerfile;
|
||||
// @cmember Array di nomi dei link
|
||||
TArray _linksdescr;
|
||||
// @cmember Array di nomi di segnalibri
|
||||
TArray _bookmarks;
|
||||
// @cmember Indica se e' attivo il link multiplo (vedi <mf TPrint_application::set_multiple_link>)
|
||||
bool _multiple_link;
|
||||
|
||||
TString _config; // Nome del paragrafo di configurazione
|
||||
// @cmember Nome del paragrafo di configurazione
|
||||
TString _config;
|
||||
|
||||
// @cmember Array di stringhe per la desccrizione del background
|
||||
TString_array _background;
|
||||
// @cmember Nomi dei file delle immagini da stampare
|
||||
TString_array _image_names;
|
||||
|
||||
const char* _bg_desc;
|
||||
// @cmember Stringa contenente i @codes per il disegno dello sfondo
|
||||
const char* _bg_desc;
|
||||
// @cmember Nomi delle stampanti utilizzabile
|
||||
TToken_string _printer_names;
|
||||
bool _isgraphics;
|
||||
bool _frozen;
|
||||
int _ncopies;
|
||||
PRINT_RCD* _print_rcd;
|
||||
int _print_rcd_size;
|
||||
int _lines_per_inch;
|
||||
int _vert_offset;
|
||||
int _horz_offset;
|
||||
int _dots_per_line;
|
||||
// @cmember Indica se la stampante e' abilitata a trattare grafica
|
||||
bool _isgraphics;
|
||||
// @cmember Indica se la stampante e' stata momentaneamente interrotta
|
||||
bool _frozen;
|
||||
// @cmember Numero di copie da fare
|
||||
int _ncopies;
|
||||
// @cmember Descrizione completa dello stato della stampante
|
||||
PRINT_RCD* _print_rcd;
|
||||
// @cmember Dimensione del record per la descrizione completa dello stato della stampante
|
||||
int _print_rcd_size;
|
||||
// @cmember Numero di linee per pollice
|
||||
int _lines_per_inch;
|
||||
// @cmember Offset verticale
|
||||
int _vert_offset;
|
||||
// @cmember Offset orizzontale
|
||||
int _horz_offset;
|
||||
// @cmember Definizione dell stampa in punti per linea
|
||||
int _dots_per_line;
|
||||
|
||||
void _get_windows_printer_names(TToken_string& t);
|
||||
bool _multiple_copies;
|
||||
bool _export_header;
|
||||
int _export_header_len;
|
||||
// @cmember Setta <p t> con il profilo della stampante
|
||||
void _get_windows_printer_names(TToken_string& t);
|
||||
// @cmember Indica se si tratta di copia multipla
|
||||
bool _multiple_copies;
|
||||
// @cmember Indica se occorre esportare l'header di stampa
|
||||
bool _export_header;
|
||||
// @cmember Lunghezza dell'header di stampa da esportare
|
||||
int _export_header_len;
|
||||
|
||||
PRINTSECTIONHANDLER _headerhandler, _footerhandler;
|
||||
LINKHANDLER _linkhandler;
|
||||
// @cmember Handler dell'header
|
||||
PRINTSECTIONHANDLER _headerhandler;
|
||||
// @cmember Handler del footer
|
||||
PRINTSECTIONHANDLER _footerhandler;
|
||||
// @cmember Header del link ipertestuale
|
||||
LINKHANDLER _linkhandler;
|
||||
|
||||
// @END
|
||||
|
||||
// @FPROT
|
||||
// @access Protected Member
|
||||
protected:
|
||||
virtual char newline() { return '\n'; }
|
||||
bool printrow (TPrintrow* rowtoprint=NULL); // base methods for printing
|
||||
// @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 Salva i parametri di configurazione correnti
|
||||
void save_configuration();
|
||||
// @cmember Stampa il testo
|
||||
void print_txt(TTextfile& txt);
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
|
||||
// @FPUB
|
||||
// @cmember Costruttore
|
||||
TPrinter ();
|
||||
// @cmember Distruttore
|
||||
virtual ~TPrinter();
|
||||
|
||||
|
||||
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
// @cmember Inizia una nuova sessione di stampa. Viene passata alla <mf TPrintwin::do_print>
|
||||
static BOOLEAN XVT_CALLCONV1 start_winprint(long);
|
||||
#endif
|
||||
|
||||
void set_from_page (word from) { _frompage = from; }
|
||||
void set_to_page (word to) { _topage = to; }
|
||||
void set_hwff (bool hwff) { _hwformfeed = hwff; }
|
||||
// @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; }
|
||||
|
||||
// resa pubblica per farsi usare dagli altri
|
||||
// la stampante e' un servizio, se non si fa usare
|
||||
// che servizio e'?
|
||||
// @cmember Permette di tradurre la stringa con i codici @codes in un array utilizzabile dalla stampa
|
||||
void parse_background(const char* bgdesc, TArray& bg);
|
||||
|
||||
int descriptions() { return _printers.items(); }
|
||||
const PrinterDef& get_description(word i) const { return (const PrinterDef&) _printers[i]; }
|
||||
// @cmember Ritorna il numero delle stampanti disponibili
|
||||
int descriptions()
|
||||
{ return _printers.items(); }
|
||||
// @cmember Ritorna il nome della <p i>-esima stampante disponibile
|
||||
const PrinterDef& get_description(word i) const
|
||||
{ return (const PrinterDef&) _printers[i]; }
|
||||
|
||||
// @cmember Ritorna il nome della classe
|
||||
virtual const char* class_name() const;
|
||||
virtual word class_id() const;
|
||||
// @cmember Ritorna l'identificatore della classe
|
||||
virtual word class_id() const;
|
||||
|
||||
int formlen () const { return _formlen; }
|
||||
int formwidth () const { return _formwidth; }
|
||||
// @cmember Ritorna la lunghezza della pagina logica
|
||||
int formlen () const
|
||||
{ return _formlen; }
|
||||
// @cmember Ritorna la larghezza della pagina logica
|
||||
int formwidth () const
|
||||
{ return _formwidth; }
|
||||
|
||||
word frompage () const { return _frompage; }
|
||||
word topage () const { return _topage; }
|
||||
int headersize () const { return _headersize; }
|
||||
int footersize () const { return _footersize; }
|
||||
// @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 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);
|
||||
int formlen (int fl) { return (_formlen=fl); }
|
||||
int footerlen (int fl) { return (_footersize=fl); }
|
||||
int headerlen (int hl) { return (_headersize=hl); }
|
||||
word frompage (word fp) { return (_frompage=fp);}
|
||||
word topage (word tp) { return (_topage=tp); }
|
||||
void setheaderline (int linetoset, TPrintrow* line);
|
||||
void setheaderline (int linetoset, const TPrintrow& line);
|
||||
void setfooterline (int linetoset, TPrintrow* line);
|
||||
void setfooterline (int linetoset, const TPrintrow& line);
|
||||
void resetheader();
|
||||
void resetfooter();
|
||||
void setbackground(const char* bg);
|
||||
TString_array& image_names() { return _image_names; }
|
||||
TString_array& getbgdesc() { return _background; }
|
||||
TArray& get_bookmarks() { return _bookmarks; }
|
||||
bool frozen() { return _frozen; }
|
||||
void freeze(bool b = TRUE) { _frozen = b; }
|
||||
int n_copies() { return _ncopies; }
|
||||
void enable_multiple_copies(bool b = TRUE) { _multiple_copies = b; }
|
||||
// @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)
|
||||
{ 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);
|
||||
// @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()
|
||||
{ return _background; }
|
||||
// @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 numero delle copie da stampare
|
||||
int n_copies() { return _ncopies; }
|
||||
// @cmember Abilita/disabilita la copia multipla!!!
|
||||
void enable_multiple_copies(bool b = TRUE)
|
||||
{ _multiple_copies = b; }
|
||||
|
||||
// @cmember Ritorna il nome delle stampanti utilizzabili
|
||||
TToken_string& getprinternames();
|
||||
TTextfile& get_txt() { return _txt; }
|
||||
// @cmember Ritorna il testo da stampare
|
||||
TTextfile& get_txt()
|
||||
{ return _txt; }
|
||||
|
||||
void setheaderhandler(PRINTSECTIONHANDLER h) { _headerhandler = h; }
|
||||
void setfooterhandler(PRINTSECTIONHANDLER h) { _footerhandler = h; }
|
||||
// @cmember Setta l'handle dell'header
|
||||
void setheaderhandler(PRINTSECTIONHANDLER h)
|
||||
{ _headerhandler = h; }
|
||||
// @cmember Setta l'handle del footer
|
||||
void setfooterhandler(PRINTSECTIONHANDLER h)
|
||||
{ _footerhandler = h; }
|
||||
|
||||
// used by viswin()
|
||||
// sono qui e non nella printapp per poter usare una viswin
|
||||
// completamente anche da un'altra application
|
||||
void setlinkhandler(LINKHANDLER h) { _linkhandler = h; }
|
||||
LINKHANDLER getlinkhandler() { return _linkhandler; }
|
||||
TArray& links() { return _linksdescr; }
|
||||
void setmultiplelink(bool on) { _multiple_link = on; }
|
||||
bool ismultiplelink() { return _multiple_link; }
|
||||
// @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
|
||||
TArray& 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; }
|
||||
|
||||
bool skip (int linetoskip);
|
||||
bool jump (int linestojump);
|
||||
void reset ();
|
||||
virtual bool set ();
|
||||
bool open ();
|
||||
void close ();
|
||||
bool formfeed ();
|
||||
bool print (TPrintrow& rowtoprint);
|
||||
bool isopen() { return _isopen; }
|
||||
void setdate(const TDate& d) { _date = d; }
|
||||
const TDate& getdate() const { return _date; }
|
||||
TPrtype printtype() { return _printertype; }
|
||||
void set_printtype(TPrtype dest) { _printertype=dest; }
|
||||
void set_printerfile(const char * ffile) { _printerfile=ffile; }
|
||||
word getcurrentpage() const { return _currentpage; }
|
||||
void setcurrentpage(word n) { _currentpage = n; }
|
||||
// dirige la stampa sul file specificato, preservando gli attributi di formato
|
||||
// se header == TRUE si stampano su file anche gli header
|
||||
void set_export_file(const char* n, bool header = TRUE, int len = 0)
|
||||
{ _printertype = export; _exportfile = n; _export_header = header;
|
||||
_export_header_len = len;}
|
||||
// infila un file di export fatto da un'altra printer (con formati e tutto, ignora
|
||||
// gli header supponendo che siano gia' presenti nel file)
|
||||
// se header == TRUE gli header stanno nel file e non vengono stampati
|
||||
void merge_export_file(const char* file, bool header = TRUE);
|
||||
word rows() const { return _formlen-_headersize-_footersize; }
|
||||
// @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()
|
||||
{ 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; }
|
||||
// @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; }
|
||||
// @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 = export; _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 _formlen-_headersize-_footersize; }
|
||||
// @cmember Ritorna il numero di righe che rimangono a disposizione per la stampa
|
||||
word rows_left() const;
|
||||
void set_printrcd();
|
||||
PRINT_RCD* get_printrcd(int* size = NULL);
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
void set_win_formlen(WINDOW prwin = NULL_WIN);
|
||||
// @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);
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
// @cmember Setta le caratteristiche della stampante leggendole da <p _print_rcd>
|
||||
void set_win_formlen(WINDOW prwin = NULL_WIN);
|
||||
#endif
|
||||
void set_lines_per_inch(int n) { _lines_per_inch = n; }
|
||||
int get_lines_per_inch() const { return _lines_per_inch; }
|
||||
int get_vert_offset() const { return _vert_offset; }
|
||||
int get_horz_offset() const { return _horz_offset; }
|
||||
int get_dots_per_line() const { return _dots_per_line; }
|
||||
bool isgraphics() const { return _isgraphics; }
|
||||
// @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 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 { return _isgraphics; }
|
||||
|
||||
int get_char_size() const { return _ch_size; }
|
||||
char* fontname() const { return (char*)(const char*)_fontname; }
|
||||
// @cmember Ritorna la dimensione dei caratteri da stampare
|
||||
int get_char_size() const
|
||||
{ return _ch_size; }
|
||||
// @cmember Ritorna il nome del font di stampa
|
||||
char* fontname() const
|
||||
{ return (char*)(const char*)_fontname; }
|
||||
|
||||
void set_char_size(int size) { _ch_size = size; }
|
||||
void set_fontname(const char *name) { _fontname = name; }
|
||||
// @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; }
|
||||
|
||||
// @cmember Legge la configurazione della stampante
|
||||
void read_configuration(const char* parag = NULL);
|
||||
|
||||
// bookmarks
|
||||
// @cmember Crea un segnalibro
|
||||
int set_bookmark(const char* txt, int father = -1);
|
||||
};
|
||||
|
||||
|
||||
|
||||
// @class TFile_printer | Classe per la definizione delle operazini per la stampa su file
|
||||
//
|
||||
// @base public | TPrinter
|
||||
class TFile_printer : public TPrinter
|
||||
// @author(:INTERNAL) Nicola
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
long _size;
|
||||
// @cmember Dimensione del file
|
||||
long _size;
|
||||
// @cmember Disco al quale appertiene il file
|
||||
const char * _drive;
|
||||
int _volume; // numero progressivo volume
|
||||
int _num_rec_volume; // numero di record per disco
|
||||
int _num_rec_testa_coda; // numero di record per inizio e fine volume
|
||||
int _num_rec_inizio; // numero di record per inizio volume
|
||||
int _num_rec_fine; // numero di record per coda volume
|
||||
int _len_rec; // lunghezza record
|
||||
TArray _record; // array di tipi record
|
||||
bool _nome_file_fissato; // se il file sui dischetti deve avere un nome NON modificabile dall'utente
|
||||
bool _label_fissata; // se l'etichetta dei dischetti deve essere fissa
|
||||
bool _formatta;
|
||||
const char * _file; // file da generare sui dischetti
|
||||
const char * _label; // etichetta da scrivere sui dischetti
|
||||
TArray _tmp_files; // array dei file temporanei generati
|
||||
FILE * _fd;
|
||||
// @cmember Numero progressivo volume
|
||||
int _volume;
|
||||
// @cmember Numero di record per disco
|
||||
int _num_rec_volume;
|
||||
// @cmember Numero di record per inizio e fine volume
|
||||
int _num_rec_testa_coda;
|
||||
// @cmember Numero di record per inizio volume
|
||||
int _num_rec_inizio;
|
||||
// @cmember Numero di record per coda volume
|
||||
int _num_rec_fine;
|
||||
// @cmember Lunghezza del record
|
||||
int _len_rec;
|
||||
// @cmember Array di tipi record
|
||||
TArray _record;
|
||||
// @cmember Indica se il file sui dischetti deve avere un nome NON modificabile dall'utente
|
||||
bool _nome_file_fissato;
|
||||
// @cmember Indica se l'etichetta dei dischetti deve essere fissa
|
||||
bool _label_fissata;
|
||||
// @cmember Indica se il disco deve essere formattato prima di fare la stampa
|
||||
bool _formatta;
|
||||
// @cmember File da generare sui dischetti
|
||||
const char* _file;
|
||||
// @cmember Etichetta da scrivere sui dischetti
|
||||
const char* _label;
|
||||
// @cmember Array dei file temporanei generati
|
||||
TArray _tmp_files;
|
||||
// @cmember Puntatore al file creato
|
||||
FILE* _fd;
|
||||
|
||||
// bool scrivi_volume();
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @cmember Ritorna il nalore 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; }
|
||||
|
||||
virtual char newline() { return '\0'; }
|
||||
void set_file_fissato (bool fissato) { _nome_file_fissato = fissato; }
|
||||
void set_label_fissata (bool fissata) { _label_fissata = fissata; }
|
||||
void set_len_rec (int len) { _len_rec = len; }
|
||||
|
||||
void set_file (const char * ffile) { _file = ffile; }
|
||||
void set_label (const char * label) { _label = label; }
|
||||
// @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]; }
|
||||
|
||||
TPrintrow* get_record_inizio_volume() const { return (TPrintrow*)&_record[0];}
|
||||
TPrintrow* get_record_inizio_elenco() const {return (TPrintrow*)&_record[1];}
|
||||
TPrintrow* get_record_dettaglio() const { return (TPrintrow*)&_record[2]; }
|
||||
TPrintrow* get_record_fine_elenco() const {return (TPrintrow*)&_record[3]; }
|
||||
TPrintrow* get_record_fine_volume() const { return (TPrintrow*)&_record[4]; }
|
||||
TPrintrow* get_record_filler() const { return (TPrintrow*)&_record[5]; }
|
||||
// @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]; }
|
||||
|
||||
int num_rec_volume () { return _num_rec_volume; }
|
||||
int num_volumi () { return _volume; }
|
||||
void inc_volume () { _volume++; }
|
||||
// @cmember Ritorna il numero di record per disco
|
||||
int num_rec_volume ()
|
||||
{ return _num_rec_volume; }
|
||||
// @cmember Ritorna il numero progressivo volume
|
||||
int num_volumi ()
|
||||
{ return _volume; }
|
||||
// @cmember Incremente il numero progressivo volume
|
||||
void inc_volume ()
|
||||
{ _volume++; }
|
||||
|
||||
void add_file (TFilename nomef) { _tmp_files.add(nomef); }
|
||||
// @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 ();
|
||||
|
||||
//
|
||||
@ -388,17 +705,18 @@ public:
|
||||
// 2 per 720
|
||||
// 3 per 1,44
|
||||
// 4 per 2,88
|
||||
//
|
||||
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 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();
|
||||
};
|
||||
|
||||
// @func Ritorna la stampante corrente
|
||||
//
|
||||
// @rdesc Ritorna l'identificatore della stamapnte corrente
|
||||
TPrinter& printer();
|
||||
// @func Distrugge la stampante corrente
|
||||
void printer_destroy();
|
||||
|
||||
#endif // __PRINTER_H
|
||||
|
@ -207,8 +207,14 @@ void TPrintwin::paint_row(long j)
|
||||
}
|
||||
}
|
||||
|
||||
// @mfunc Permette di stampare un rettangolo a video
|
||||
//
|
||||
// @rdesc Ritorna se e' riuscito a stampare in una unica pagina
|
||||
bool TPrintwin::print_band(
|
||||
int page, // @parm Numero della pagina in cui stampare
|
||||
RCT& r) // @parm Parte di finestra da stampare
|
||||
|
||||
bool TPrintwin::print_band(int page, RCT& r)
|
||||
// @comm Di solito viene disegnata l'intera pagina, ma la cosa dipende dal driver di stampa
|
||||
{
|
||||
const long j = ((long)page) * _formlen;
|
||||
const int rows = (r.bottom - r.top) / _chary;
|
||||
@ -223,8 +229,16 @@ bool TPrintwin::print_band(int page, RCT& r)
|
||||
return j+k < _txt.lines();
|
||||
}
|
||||
|
||||
|
||||
// @mfunc Inizia la stampa
|
||||
//
|
||||
// @rdesc Ritorna se viene interrotta la stampa:
|
||||
//
|
||||
// @flag TRUE | La stampa e' andata a buon fine
|
||||
// @flag FALSE | La stampa e' stata interrotta
|
||||
bool TPrintwin::do_print()
|
||||
|
||||
// @comm Quando possibile parte un processo concorrente (dipende dal sistema operativo)
|
||||
|
||||
{
|
||||
int page = 0;
|
||||
RCT* rct;
|
||||
|
@ -13,46 +13,73 @@
|
||||
#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.
|
||||
// @doc EXTERNAL
|
||||
|
||||
|
||||
// @class TPrintwin | Classe per la implementazione di una finestra XVT per la stampa:
|
||||
// scrivendoci su tutto l'output va sulla stampante corrente.
|
||||
// Usata direttamente da <c TPrinter>.
|
||||
//
|
||||
// @base public | TWindow
|
||||
class TPrintwin : public TWindow
|
||||
// @author:(INTERNAL)Viila
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
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
|
||||
// @cmember Indica se la stampa e' stata interrotta
|
||||
bool _aborted;
|
||||
// @cmember Descrizione completa dello stato della stampante
|
||||
PRINT_RCD* _printrcd;
|
||||
// @cmember Lunghezza del modulo di stampa
|
||||
int _formlen;
|
||||
// @cmember Larghezza del modulo di stampa
|
||||
int _formwidth;
|
||||
// @cmember L'intero background della pagina (vedi <c TPrintapp>)
|
||||
TArray* _bg;
|
||||
// @cmember TText da stampare
|
||||
TTextfile& _txt;
|
||||
|
||||
// @cmember Array di immagini di stampare nel modulo sotto al testo
|
||||
TArray _images;
|
||||
|
||||
TArray _images; // bitmaps da stampare sotto al testo
|
||||
// @cmember Distanza in pixel tra una riga e la successiva
|
||||
int _lead;
|
||||
// @cmember Numero di pixel dalla linea base al limite superiore del font
|
||||
int _ascent;
|
||||
// @cmember Numero di pixel dalla linea base al limite inferiore del font
|
||||
int _descent;
|
||||
// @cmember Dimensione dell'offset orizzontale
|
||||
int _hofs;
|
||||
// @cmember Dimensione dell'offset verticale
|
||||
int _vofs;
|
||||
// @cmember Altre caratteristihce del font (vedi XVT)
|
||||
int _chary;
|
||||
// @cmember Dimensione del font di stampa
|
||||
int _char_size;
|
||||
// @cmember Altre caratteristihce del font (vedi XVT)
|
||||
bool _inited;
|
||||
|
||||
// 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;
|
||||
|
||||
// pitta lo sfondo della riga j
|
||||
void paint_background(long j);
|
||||
// pitta la riga j
|
||||
// @cmember Permette di disegnare lo sfondo della riga <p j>-esima
|
||||
void paint_background(long j);
|
||||
// @cmember Permette di disegnare la riga <p j>-esima
|
||||
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)
|
||||
// @cmember Permette di disegnare la parte di finestra per la pagina <p page>
|
||||
bool print_band(int page, RCT&);
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
|
||||
// check if aborted; also returned by do_print
|
||||
bool aborted() const { return _aborted; }
|
||||
// @cmember Ritorna se la stampa e' stata interrotta (viene ritornata anche della
|
||||
// <mf TPrintwin::do_print>)
|
||||
bool aborted() const
|
||||
{ return _aborted; }
|
||||
|
||||
// starts printing; FALSE if aborted; when possible starts concurrent thread
|
||||
// (not possible in WIN 3.1)
|
||||
// @cmember Inizia la stampa (Ritorna FALSE se viene interrotta)
|
||||
bool do_print();
|
||||
|
||||
|
||||
// @cmember Costruttore
|
||||
TPrintwin(TTextfile& txt);
|
||||
// @cmember Distruttore
|
||||
virtual ~TPrintwin();
|
||||
};
|
||||
|
||||
|
121
include/sheet.h
121
include/sheet.h
@ -18,36 +18,69 @@ class TEdit_field;
|
||||
#endif
|
||||
|
||||
|
||||
// @C
|
||||
// class TSheet : public TScroll_window
|
||||
// @END
|
||||
// @doc EXTERNAL
|
||||
|
||||
// @class TSheet | Classe per la definizione e la gestione degli sheet per le ricerche
|
||||
//
|
||||
// @base public | TScroll_window
|
||||
class TSheet : public TScroll_window
|
||||
|
||||
// @author(:INTERNAL) Guido
|
||||
|
||||
// @access Privete Member
|
||||
{
|
||||
// @DPRIV
|
||||
enum { MAX_BUT = 8, MAX_COL = 128 };
|
||||
// @ccost MAX_BUT | 8 | Numero massimo di bottoni
|
||||
enum { MAX_BUT = 8,
|
||||
// @ccost MAX_COL | 128 | Numero massimo di colonne
|
||||
MAX_COL = 128 };
|
||||
|
||||
// @cmember Array di stringhe con il contenuto dello sheet
|
||||
TString_array _page;
|
||||
|
||||
// @cmember Numero di colonne dello sheet
|
||||
byte _columns;
|
||||
byte _size[MAX_COL], _type[MAX_COL];
|
||||
long _curr, _last_update;
|
||||
// @cmember Dimensione di ogni colonna
|
||||
byte _size[MAX_COL];
|
||||
// @cmember Tipo di ogni colonne
|
||||
byte _type[MAX_COL];
|
||||
// @cmember Riga corrente
|
||||
long _curr;
|
||||
// @cmember Indice della prima riga visibile
|
||||
long _last_update;
|
||||
|
||||
// @cmember Numero di righe visibili
|
||||
short _visible_rows;
|
||||
|
||||
// @cmember Indica se e' possibile inserire un check (X di selezione) sulle righe sheet
|
||||
bool _checkable;
|
||||
// @cmember Indica se e attivata la gestione dei check delle righe
|
||||
bool _check_enabled;
|
||||
TBit_array _checked, _disabled;
|
||||
// @cmember Array di righe attivate
|
||||
TBit_array _checked;
|
||||
// @cmember Array di righe disabilitate
|
||||
TBit_array _disabled;
|
||||
|
||||
// @cmember Handles dei bottoni presenti nella finestra
|
||||
WINDOW _button[MAX_BUT];
|
||||
KEY _key[MAX_BUT];
|
||||
// @cmember Tasto associato ad ogni bottone
|
||||
KEY _key[MAX_BUT];
|
||||
// @cmember Maschera di bit corrispondente ai bottoni standard
|
||||
byte _buttonmask;
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
// @FPROT
|
||||
bool head_on() const { return _columns > 1; }
|
||||
bool buttons_on() const { return *_button != NULL_WIN; }
|
||||
short visible_rows() const { return _visible_rows; }
|
||||
// @cmember Ritorna se il numero di colonne e' maggioer di 1!!!
|
||||
bool head_on() const
|
||||
{ return _columns > 1; }
|
||||
// @cmember Indica se esitono i bottoni in fondo
|
||||
bool buttons_on() const
|
||||
{ return *_button != NULL_WIN; }
|
||||
// @cmember Ritorna il numero di righe!!! visibili
|
||||
short visible_rows() const
|
||||
{ return _visible_rows; }
|
||||
// @cmember Ritorna il numero di righe riservate ai bottoni
|
||||
virtual short reserved_rows() const;
|
||||
//ANDREA//
|
||||
void build_page(long first = -1);
|
||||
|
||||
PNT log2dev(long x, long y) const;
|
||||
@ -57,13 +90,17 @@ protected:
|
||||
virtual void open();
|
||||
|
||||
void set_first(long n);
|
||||
bool is_visible(long n) const { return n >= first() && n < first()+visible_rows(); }
|
||||
// @cmember Ritorna se la riga!!! <p n>-esima e' visibile
|
||||
bool is_visible(long n) const
|
||||
{ return n >= first() && n < first()+visible_rows(); }
|
||||
|
||||
int width() const;
|
||||
int row_to_page(long n) const;
|
||||
int row_to_win(long n) const;
|
||||
|
||||
long first() const { return origin().y; }
|
||||
// @cmember ???
|
||||
long first() const
|
||||
{ return origin().y; }
|
||||
bool update_row(long n);
|
||||
void invert_row(long n);
|
||||
|
||||
@ -74,35 +111,54 @@ protected:
|
||||
virtual void page_build(long first, byte num) pure;
|
||||
|
||||
void print();
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @FPUB
|
||||
TSheet(short x, short y, short dx, short dy,
|
||||
const char* title, const char* head, byte buttons = 0,
|
||||
long first = 0L, WINDOW parent = NULL_WIN);
|
||||
// @cmember Costruttore
|
||||
TSheet(short x,short y,short dx,short dy,const char* title,const char* head,byte buttons = 0,long first = 0L,WINDOW parent = NULL_WIN);
|
||||
void add_button(short id, const char* caption, KEY key = K_ESC);
|
||||
|
||||
virtual long items() const pure;
|
||||
virtual TToken_string& row(long s = -1);
|
||||
|
||||
long selected() const { return _curr; }
|
||||
// @cmember Ritorna il numero di cella corrente
|
||||
long selected() const
|
||||
{ return _curr; }
|
||||
void select(long n);
|
||||
|
||||
byte column_flag(int c) const { return _type[c]; }
|
||||
byte& column_flag(int c) { return _type[c]; }
|
||||
// @cmember Ritorna il tipo della colonna <p c>-esima
|
||||
byte column_flag(int c) const
|
||||
{ return _type[c]; }
|
||||
// @cmember Ritorna l'indirizzo??? del tipo della colonna <p c>-esima
|
||||
byte& column_flag(int c)
|
||||
{ return _type[c]; }
|
||||
|
||||
bool checked(long n) const { return _checked[n]; }
|
||||
// @cmember Ritorna se la cella <p n>-esima possiede un check
|
||||
bool checked(long n) const
|
||||
{ return _checked[n]; }
|
||||
void check(long n, bool on = TRUE);
|
||||
void uncheck(long n) { check(n, FALSE); }
|
||||
void enable_check(bool yn = TRUE) { _check_enabled = yn; }
|
||||
void disable_check() { enable_check(FALSE); }
|
||||
void uncheck(long n)
|
||||
{ check(n, FALSE); }
|
||||
// @cmember Permette di abilitare (<p yn> = TRUE) o disbilitare (<p yn> = FALSE)
|
||||
// i check sullo sheet
|
||||
void enable_check(bool yn = TRUE)
|
||||
{ _check_enabled = yn; }
|
||||
// @cmember Permette di disbilitare (<p yn> = FALSE) i check sullo sheet
|
||||
void disable_check()
|
||||
{ enable_check(FALSE); }
|
||||
|
||||
void enable(long n = -1, bool on = TRUE);
|
||||
void disable(long n = -1) { enable(n, FALSE); }
|
||||
bool enabled(long n) const { return !_disabled[n]; }
|
||||
bool disabled(long n) const { return _disabled[n]; }
|
||||
void disable(long n = -1)
|
||||
{ enable(n, FALSE); }
|
||||
bool enabled(long n) const
|
||||
{ return !_disabled[n]; }
|
||||
bool disabled(long n) const
|
||||
{ return _disabled[n]; }
|
||||
|
||||
bool one_checked() const { return _checked.first_one() != -1; }
|
||||
long checked() const { return _checked.ones(); }
|
||||
bool one_checked() const
|
||||
{ return _checked.first_one() != -1; }
|
||||
long checked() const
|
||||
{ return _checked.ones(); }
|
||||
};
|
||||
|
||||
class TArray_sheet : public TSheet
|
||||
@ -112,7 +168,8 @@ class TArray_sheet : public TSheet
|
||||
protected:
|
||||
|
||||
virtual void page_build(long first, byte num);
|
||||
TToken_string& data(long n) { return _data.row((int)n); }
|
||||
TToken_string& data(long n)
|
||||
{ return _data.row((int)n); }
|
||||
|
||||
public:
|
||||
TArray_sheet(short x, short y, short dx, short dy, const char* caption,
|
||||
|
@ -282,6 +282,12 @@ public:
|
||||
// gli stessi, la differenza e' solo nel numero di caratteri della stringa.
|
||||
};
|
||||
|
||||
// @class TString80 | Definisce le stringhe di 80 caratteri
|
||||
//
|
||||
// @base public | TFixed_string
|
||||
//
|
||||
// @comm Questa classe e' identica alla <c TString16> per quanto riguarda i public member e quindi
|
||||
// si rimanda a tale classe per ulteriori spiegazioni.
|
||||
class TString80 : public TFixed_string
|
||||
{
|
||||
char _str80[81];
|
||||
@ -293,6 +299,12 @@ public:
|
||||
const TString& operator =(const TString& s) { return set((const char*)s); }
|
||||
};
|
||||
|
||||
// @class TString256 | Definisce le stringhe di 256 caratteri
|
||||
//
|
||||
// @base public | TFixed_string
|
||||
//
|
||||
// @comm Questa classe e' identica alla <c TString16> per quanto riguarda i public member e quindi
|
||||
// si rimanda a tale classe per ulteriori spiegazioni.
|
||||
class TString256 : public TFixed_string
|
||||
{
|
||||
char _str256[257];
|
||||
|
127
include/text.cpp
127
include/text.cpp
@ -5,6 +5,8 @@
|
||||
|
||||
static char TEXT_TMP[257];
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
class _HotSpot : public TObject
|
||||
{
|
||||
public:
|
||||
@ -21,7 +23,14 @@ public:
|
||||
}
|
||||
};
|
||||
|
||||
void TTextfile::set_hotspots (char fg, char bg)
|
||||
|
||||
// @mfunc Permette di settare gli hot_spot!!!
|
||||
void TTextfile::set_hotspots (
|
||||
char fg, // @parm Colore di foreground da utilizzare per l'hotspot
|
||||
char bg) // @parm Colore di background da utilizzare per l'hotspot
|
||||
|
||||
// @comm Aggiunge all'array gli hotspots relativi alla pagina in memoria
|
||||
// (come <c TToken_string> con x<pipe>y<pipe>text)
|
||||
{
|
||||
_HotSpot *hp = new _HotSpot (fg, bg);
|
||||
_hotspots.add (hp);
|
||||
@ -186,7 +195,14 @@ void TTextfile::_read_page (long n)
|
||||
}
|
||||
}
|
||||
|
||||
void TTextfile::read_line (long n, long pos, bool pg)
|
||||
|
||||
// @mfunc Legge il testo formattato
|
||||
void TTextfile::read_line (
|
||||
long n, // @parm Numero della linea da leggere
|
||||
long pos, // @parm Numero della colonna da leggere (mai utilizzata)
|
||||
bool pg) // @parm Fa si' che se la linea non e' nella pagina corrente non si faccia nulla,
|
||||
// diversamente rilegge una nuova pagina dal file.
|
||||
|
||||
{
|
||||
CHECK (_isopen, "Attempt operation on closed file");
|
||||
CHECKD (n >= 0 && n < _lines, "Line not present", n);
|
||||
@ -367,7 +383,17 @@ void TTextfile::read_line (long n, long pos, bool pg)
|
||||
_item = 0;
|
||||
}
|
||||
|
||||
const char *TTextfile::line(long j, long pos, int howmuch)
|
||||
|
||||
// @mfunc Ritorna la stringa di caratteri senza formattazione
|
||||
//
|
||||
// @rdesc Ritorna la stringa di caratteri ed eventualmente con i campi sostituiti
|
||||
// se la relazione non e' NULL
|
||||
const char *TTextfile::line(
|
||||
long j, // @parm Riga di cui ritornare la stringa
|
||||
long pos, // @parm Colonna di cui ritornare la stringa
|
||||
int howmuch) // @parm Numero di caratteri utili della stringa da ritornare (default -1)
|
||||
|
||||
// @comm Se <p howmuch> assume valore -1 ritorna tutta la pagina
|
||||
{
|
||||
if (_cur_line != j)
|
||||
read_line (j);
|
||||
@ -383,9 +409,24 @@ const char *TTextfile::line(long j, long pos, int howmuch)
|
||||
return strlen(TEXT_TMP) > (word)pos ? &(TEXT_TMP[pos]) : "";
|
||||
}
|
||||
|
||||
// search and replace (una riga per volta, rispetta i formati)
|
||||
// txt = text to search; pos = int to put the char position in;
|
||||
// from = where to start; down = FALSE == up
|
||||
// @mfunc Cerca una stringa di testo all'interno di una riga
|
||||
//
|
||||
// @rdesc Ritorna la posizione in cui e' stato rintracciato il testo. Ritorna -1 se non e' stato
|
||||
// trovato il testo passato.
|
||||
long TTextfile::search(
|
||||
const char* txt, // @parm Testo da cercare
|
||||
int& ret, // @parm Intero in cui posizionare la posizne del carattere
|
||||
long from, // @parm Posizione all'interno della riga da cui iniziare la ricerca (default 0)
|
||||
bool down, // @parm Indica se la ricerca va effettuata all'indietro:
|
||||
//
|
||||
// @flag TRUE | Ricerca dalla posizione indicata all'inizio della riga (default)
|
||||
// @flag FALSE | Ricerca dalla posizione indicata alla fine della riga
|
||||
bool casesens) // @parm Indica se ricerca il testo con criterio case sensitive (default FALSE)
|
||||
|
||||
long TTextfile::search(const char* txt, int& ret, long from, bool down,
|
||||
bool casesens)
|
||||
// @comm Cerca in una riga per volta rispettando i formati
|
||||
{
|
||||
TString256 lin; TString80 text(txt);
|
||||
if (!casesens)
|
||||
@ -401,7 +442,15 @@ long TTextfile::search(const char* txt, int& ret, long from, bool down,
|
||||
return -1l;
|
||||
}
|
||||
|
||||
int TTextfile::replace(long l, const char* txt, int pos, int len)
|
||||
// @mfunc Sostituisce un testo all'interno di una riga
|
||||
//
|
||||
// @rdesc Ritorna la posizione in cui e' stato sostituito il testo. Ritorna -1 se non e' stata
|
||||
// fatto nessuna operazione di sostituzione.
|
||||
int TTextfile::replace(
|
||||
long l, // @parm Numero della riga nella quale sostituire il testo
|
||||
const char* txt, // @parm Test da inserire nella riga
|
||||
int pos, // @parm Posizione nella quale inserire il testo (default 0)
|
||||
int len) // @parm Lunghezza del testo da sostituire (default 0)
|
||||
{
|
||||
if (_cur_line != l)
|
||||
read_line(l);
|
||||
@ -445,8 +494,12 @@ int TTextfile::replace(long l, const char* txt, int pos, int len)
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
const char *TTextfile::line_formatted(long j)
|
||||
// @mfunc Ritorna la stringa di caratteri con la formattazione
|
||||
//
|
||||
// @rdesc La stringa ritornata ha la formattazione (ovvere tutti i @codes, in modo che anche
|
||||
// la printer la possa utilizzare)
|
||||
const char *TTextfile::line_formatted(
|
||||
long j) //parm Numero della riga da ritornare
|
||||
{
|
||||
if (_cur_line != j)
|
||||
read_line (j);
|
||||
@ -479,19 +532,44 @@ long TTextfile::get_attribute (int pos)
|
||||
return stl;
|
||||
}
|
||||
|
||||
int TTextfile::get_style (int pos)
|
||||
// @mfunc Ritorna lo stile del piece
|
||||
//
|
||||
// @rdesc Ritorna un numero (vedi <t style>) indicante lo stile
|
||||
int TTextfile::get_style (
|
||||
int pos) // @parm Posizione del carattere di cui ritornare lo stile (default -1)
|
||||
|
||||
// @comm Se viene passato a <p pos> valore -1 ritorna lo stile di tutta la piece, altrimente
|
||||
// solamente quello del carattere selezionato.
|
||||
{
|
||||
const long x = get_attribute(pos) & ~tabbed;
|
||||
return (int) (x & 0x0000ffff);
|
||||
}
|
||||
|
||||
char TTextfile::get_background (int pos)
|
||||
// @mfunc Ritorna il colore di background del piece
|
||||
//
|
||||
// @rdesc Ritorna il codice del colore, NULL se il carattere non esiste
|
||||
char TTextfile::get_background (
|
||||
int pos) // @parm Posizione del carattere di cui conoscere il colore di background (default -1)
|
||||
|
||||
// @comm Se <p pos> e' minore di 0 ritorna il colore dell'intero piece, altrimenti solamente
|
||||
// quello del carattere selezionato.
|
||||
//
|
||||
// @xref <mf TTextfile::get_foreground>
|
||||
{
|
||||
long x = get_attribute (pos);
|
||||
return (char) (x >> 24);
|
||||
}
|
||||
|
||||
char TTextfile::get_foreground (int pos)
|
||||
// @mfunc Ritorna il colore di foreground del piece
|
||||
//
|
||||
// @rdesc Ritorna il codice del colore, NULL se il carattere non esiste
|
||||
char TTextfile::get_foreground (
|
||||
int pos) // @parm Posizione del carattere di cui conoscere il colore di background (default -1)
|
||||
|
||||
// @comm Se <p pos> e' minore di 0 ritorna il colore dell'intero piece, altrimenti solamente
|
||||
// quello del carattere selezionato.
|
||||
//
|
||||
// @xref <mf TTextfile::get_bakcground>
|
||||
{
|
||||
long x = get_attribute (pos);
|
||||
return (char) ((x >> 16) & 0x000000ff);
|
||||
@ -506,7 +584,12 @@ const char* TTextfile::piece()
|
||||
return strcpy(TEXT_TMP, l);
|
||||
}
|
||||
|
||||
const char *TTextfile::word_at (long x, long y)
|
||||
// @mfunc Ritorna la parola alla posizione indicata
|
||||
//
|
||||
// @rdesc Stringa indicante la parola cercate
|
||||
const char *TTextfile::word_at (
|
||||
long x, // @parm Numero della parola da ritornare
|
||||
long y) // @parm Numero della linea su cui cercare la parole
|
||||
{
|
||||
CHECK (_isopen, "Attempt operation on closed file");
|
||||
TString s (line (y));
|
||||
@ -533,7 +616,14 @@ const char *TTextfile::word_at (long x, long y)
|
||||
return TEXT_TMP;
|
||||
}
|
||||
|
||||
bool TTextfile::append (const char *l)
|
||||
// @mfunc Aggiunge una riga al text (con i formati del caso)
|
||||
//
|
||||
// @rdesc Ritorna il risultato dell'operazione:
|
||||
//
|
||||
// @flag TRUE | Se la riga e' stat aggiuntac correttamente
|
||||
// @flag FALSE | Se non e' riuscot ad aggiungere la riga
|
||||
bool TTextfile::append (
|
||||
const char *l) // @parm Riga da aggiungere
|
||||
{
|
||||
CHECK (_isopen, "Attempt operation on closed file");
|
||||
|
||||
@ -611,7 +701,16 @@ void TTextfile::print ()
|
||||
// print
|
||||
}
|
||||
|
||||
bool TTextfile::write (const char *path, TPoint * from, TPoint * to)
|
||||
// @mfunc Scrive il testo (non formattato) su file
|
||||
//
|
||||
// @rdesc Rtirna il risultato dell'operazione di scrittura
|
||||
//
|
||||
// @flag TRUE | Se e' riuscito a scrivere il testo
|
||||
// @flag FALSE | Se ha avuto qualche problema nella gestione del file in cui scrivere
|
||||
bool TTextfile::write (
|
||||
const char *path, // @parm Nome del file in cui scrivere il testo
|
||||
TPoint * from, // @parm Punto da cui iniziare a scrivere il testo
|
||||
TPoint * to) // @parm Punto a cui terminare di scrivere il testo
|
||||
{
|
||||
bool ok = FALSE;
|
||||
FILE *fp;
|
||||
|
257
include/text.h
257
include/text.h
@ -1,4 +1,3 @@
|
||||
/* actually -*-c++-*- */
|
||||
#ifndef __TEXTFILE_H
|
||||
#define __TEXTFILE_H
|
||||
|
||||
@ -19,137 +18,181 @@
|
||||
#include <relation.h>
|
||||
#endif
|
||||
|
||||
enum direction {up, down, updown};
|
||||
enum style {normal = XVT_FS_NONE, bold = XVT_FS_BOLD, italic = XVT_FS_ITALIC,
|
||||
underlined = XVT_FS_UNDERLINE, tabbed = XVT_FS_SCALE };
|
||||
// @doc EXTERNAL
|
||||
|
||||
// @enum direction | Direzioni da seguire nella lettura del file di testo
|
||||
enum direction {
|
||||
up, // @emem Direzione verso l'alto
|
||||
down, // @emem Direzione verso il basso
|
||||
updown}; // @emem Entrambe le direzioni
|
||||
|
||||
// @enum style | Stile del carattere da utilizzare per il disegno del testo
|
||||
enum style {
|
||||
normal = XVT_FS_NONE, // @emem Stile carattere normale
|
||||
bold = XVT_FS_BOLD, // @emem Stile carattere in grassetto
|
||||
italic = XVT_FS_ITALIC, // @emem Stile carattere in corsivo
|
||||
underlined = XVT_FS_UNDERLINE, // @emem Stile carattere sottolineato
|
||||
tabbed = XVT_FS_SCALE }; // @emem Stile carattere scalato
|
||||
|
||||
// @class TTextfile | Classe per la definizione delle procedure di stampa di un testo
|
||||
//
|
||||
// @base public | TObject
|
||||
class TTextfile: public TObject
|
||||
// @author(:INTERNAL) Villa
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
// @ccost DEFAULT_PAGESIZE | 128 | Dimensione di default della pagina
|
||||
enum {DEFAULT_PAGESIZE = 128};
|
||||
|
||||
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
|
||||
// @cmember Pagina di testo correntemente in memoria
|
||||
TArray _page;
|
||||
// @cmember Un bit per ogni riga, TRUE se ci si e' fatto replace
|
||||
TBit_array _dirty_lines;
|
||||
// @cmember Inizio della pagina in coordinate testo
|
||||
long _page_start;
|
||||
// @cmember Fine della pagina in coordinate testo
|
||||
long _page_end;
|
||||
// @cmember Numero di righe di <p _page>
|
||||
long _page_size;
|
||||
// @cmember Numero totale delle linee di testo
|
||||
long _lines;
|
||||
// @cmember Numero della linea corrente
|
||||
long _cur_line;
|
||||
// @cmember Nome del file di testo (puo' essere temporaneo)
|
||||
TFilename _filename;
|
||||
// @cmember Nome del file indice (sempre temporaneo)
|
||||
TFilename _indname;
|
||||
// @cmember Puntatore al file indice
|
||||
FILE* _index;
|
||||
// @cmember Puntatore al file di testo
|
||||
FILE* _instr;
|
||||
// @cmember Direzione ottimale di lettura del file (vedi <t direction>)
|
||||
direction _direction;
|
||||
|
||||
int _item; // Piece corrente
|
||||
TToken_string _line; // Testo riga corrente
|
||||
long _styles[256]; // Stile e colore carattere
|
||||
bool _tabbed_piece; // uso dei tab con @t
|
||||
|
||||
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
|
||||
// @cmember Piece corrente
|
||||
int _item;
|
||||
// @cmember Testo della riga corrente
|
||||
TToken_string _line;
|
||||
// @cmember Codifica delllo stile e del colore del carattere
|
||||
long _styles[256];
|
||||
// @cmember Indica se la piece e' <e style.tabbed>
|
||||
bool _tabbed_piece;
|
||||
|
||||
// for merging with database fields
|
||||
TRelation* _rel; // gestisce sostituzione di campi al posto di tag nel testo
|
||||
// @cmember Punti ipertestuali come passati da utente (<c TViswin>)
|
||||
TArray _hotspots;
|
||||
// @cmember Rappresentazione interna punti ipertestuali
|
||||
TArray _spots;
|
||||
// @cmember Indice se e' stato modificato
|
||||
bool _dirty;
|
||||
// @cmember Indica se i file sono aperti
|
||||
bool _isopen;
|
||||
// @cmember Indica se si tratta di un file temporaneo
|
||||
bool _istemp;
|
||||
// @cmember Indica se e' permessao dare una <mf TTextfile::append>
|
||||
bool _accept;
|
||||
// @cmember Indica se si sta modificando con <mf TTextfile::add> e si puo' fare <mf TTextfile::replace>
|
||||
bool _interactive;
|
||||
|
||||
void _read_page(long line); // riempi pagina contenente line, ottimizzando start/end
|
||||
bool _in_page(long l) // la riga l e' nella pagina corrente
|
||||
// @cmember Gestisce la sostituzione di campi al posto di tag nel testo
|
||||
TRelation* _rel;
|
||||
|
||||
// @cmember Riempe la pagina contenente <p line>, ottimizzando start ed end
|
||||
void _read_page(long line);
|
||||
// @cmember Ritorna TRUE se la roga <p l> e' nella pagina corrente
|
||||
bool _in_page(long l)
|
||||
{ return l >= _page_start && l < _page_end; }
|
||||
void _save_changes(); // salva i replace fatti sul file (anche temporaneo)
|
||||
// @cmember Salva i replace fatti sul file (anche temporaneo)
|
||||
void _save_changes();
|
||||
|
||||
// void _parse_style(long j);
|
||||
style _trans_style(char c); // traduci il tag dello stile in stile XVT
|
||||
|
||||
// @cmember Traduce il tag dello stile passato in <p c> (tag) con uno di <t style> (stile XVT)
|
||||
style _trans_style(char c);
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
// @cmember Ritorna il numero totale delle linee di testo
|
||||
long lines()
|
||||
{ return _lines; }
|
||||
// @cmember Ritorna se sono state effettuate delle modifiche
|
||||
bool changed()
|
||||
{ return _dirty; }
|
||||
|
||||
long lines() { return _lines; }
|
||||
bool changed() { return _dirty; }
|
||||
|
||||
// line() ritorna la stringa di caratteri senza formattazione
|
||||
// ed eventualmente con i campi sostituiti se la relazione
|
||||
// non e' NULL; parte da row e column, per howmuch caratteri utili
|
||||
// default tutta la riga
|
||||
|
||||
// @cmember Ritorna la stringa di caratteri senza formattazione
|
||||
const char* line(long row, long column = 0, int howmuch = -1);
|
||||
// line_formatted() la ritorna, come e' logico attendersi, con
|
||||
// la formattazione (ovvero tutti i @eccetera, che anche la printer capisce)
|
||||
|
||||
// @cmember Ritorna la stringa di caratteri con la formattazione
|
||||
const char* line_formatted(long row);
|
||||
// appende una riga al text (con i formati del caso)
|
||||
bool append(const char* l);
|
||||
|
||||
// @cmember Aggiunge una riga al text (con i formati del caso)
|
||||
bool append(const char* l);
|
||||
|
||||
// @cmember Chiude tutti i files per poter copiare o eseguire operazioni. Dopo aver chiamato
|
||||
// questa funzione non si puo' piu' fare nulla.
|
||||
void close();
|
||||
// @cmember Stampa su carta
|
||||
void print();
|
||||
// @cmember Chiude l'aggiunta di nuove linee
|
||||
void freeze()
|
||||
{ _accept = FALSE; }
|
||||
// @cmember Ritorna se e' possibile aggiungere delle nuove righe (TRUE se non vengono accettate)
|
||||
bool frozen()
|
||||
{ return !_accept; }
|
||||
|
||||
// chide tutti i files per poter copiare o eseguire operazioni
|
||||
// dopo close() non si puo' piu' fare nulla
|
||||
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; 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?
|
||||
void read_line(long j, long b = 0, bool pg = TRUE);
|
||||
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);
|
||||
long get_attribute(int pos = -1);
|
||||
|
||||
// ritorna la parola alla posizione indicata
|
||||
// @cmember Legge il testo formattato
|
||||
void read_line(long j, long b = 0, bool pg = TRUE);
|
||||
// @cmember Ritorna il pezzo di linea successivo con stile e colore
|
||||
const char* piece();
|
||||
// @cmember Ritorna lo stile del piece (vedi <t style>)
|
||||
int get_style(int pos = -1);
|
||||
// @cmember Ritorna il colore di background del piece
|
||||
char get_background(int pos = -1);
|
||||
// @cmember Ritorna il colore di foreground del piece
|
||||
char get_foreground(int pos = -1);
|
||||
// @cmember Ritorna gli attributi alla posizione <p pos>
|
||||
long get_attribute(int pos = -1);
|
||||
|
||||
// @cmember Ritorna la parola alla posizione indicata
|
||||
const char* word_at(long x, long y);
|
||||
|
||||
// TBI ritorna il pezzo di testo da x a y
|
||||
// allochera' un altro TText che deve essere disfatto dall'utente
|
||||
TTextfile* section(TPoint& from, TPoint& to) { return this; }
|
||||
const char* name() { return (const char*)_filename; }
|
||||
void interactive(bool on = TRUE) { _interactive = on; }
|
||||
// @cmember Ritorna il pezzo di testo indicato (da <p form> a <p to>), allochera' un altro
|
||||
// TText che deve essere disfatto dall'utente.
|
||||
TTextfile* section(TPoint& from, TPoint& to)
|
||||
{ return this; }
|
||||
// @cmember Ritorna il nome del file su cui si sta lavorando
|
||||
const char* name()
|
||||
{ return (const char*)_filename; }
|
||||
// @cmember Permette di settare il valore di <p _iteractive> (vedi sopra)
|
||||
void interactive(bool on = TRUE)
|
||||
{ _interactive = on; }
|
||||
|
||||
// scrive il testo (non formattato) su file, da punto a punto
|
||||
// (tutto per default)
|
||||
bool write(const char* path, TPoint* from = NULL, TPoint* to = NULL);
|
||||
// disfa tutto e svuota il file
|
||||
void destroy();
|
||||
// @cmember Scrive il testo (non formattato) su file
|
||||
bool write(const char* path, TPoint* from = NULL, TPoint* to = NULL);
|
||||
// @cmember Disfa tutto e svuota il file
|
||||
void destroy();
|
||||
|
||||
// search and replace (una riga per volta, rispetta i formati)
|
||||
// txt = text to search; pos = int to put the char position in;
|
||||
// from = where to start; down = FALSE == up
|
||||
long search (const char* txt, int& pos, long from = 0,
|
||||
bool down = TRUE, bool casesens = FALSE);
|
||||
// replace txt=txt in line=line at pos=pos for len=len
|
||||
int replace(long line, const char* txt, int pos = 0, int len = -1);
|
||||
// @cmember Cerca una stringa di testo all'interno di una riga
|
||||
long search (const char* txt, int& pos, long from = 0, bool down = TRUE, bool casesens = FALSE);
|
||||
// @cmember Sostituisce un testo all'interno di una riga
|
||||
int replace(long line, const char* txt, int pos = 0, int len = -1);
|
||||
|
||||
// hypertext cazzuls
|
||||
// le si dice il colore che devono avere i punti selezionabili;
|
||||
// ritorna l'array in cui vengono messi gli hotspots relativi alla
|
||||
// pagina in memoria (come TToken_string con x|y|text)
|
||||
// @cmember Permette di settare gli hot_spot
|
||||
void set_hotspots(char fg, char bg = 'w');
|
||||
TArray& hotspots() { return _spots; }
|
||||
// @cmember Ritorna l'array di hotspots
|
||||
TArray& hotspots()
|
||||
{ return _spots; }
|
||||
|
||||
// associa una relazione che viene usata (nello stato corrente) per
|
||||
// risolvere eventuali campi per merge (marcati nel testo come
|
||||
// <@file->fieldname@[format]@[len]@[just]>
|
||||
void set_relation(TRelation* r) { _rel = r; }
|
||||
// @cmember Associa una relazione che viene usata (nello stato corrente) per
|
||||
// risolvere eventuali campi per merge (marcati nel testo come
|
||||
// <lt>@file-<gt>fieldname@[format]@[len]@[just]<gt>
|
||||
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);
|
||||
|
||||
// @cmember Costruttore
|
||||
TTextfile(const char* file = NULL, int pagesize = DEFAULT_PAGESIZE, direction preferred = updown, bool interactive = TRUE);
|
||||
// @cmember DIstruttore
|
||||
virtual ~TTextfile();
|
||||
};
|
||||
|
||||
|
@ -13,6 +13,8 @@
|
||||
|
||||
#include <bagn005.h>
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
const char* const PRINT_FONT = XVT_FFN_FIXED;
|
||||
const int PRINT_HEIGHT = 10;
|
||||
|
||||
@ -289,8 +291,11 @@ void TViswin::display_link (long y, long x1, long x2, const char *d)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void TViswin::erase_link (long y, long x1, long x2)
|
||||
// @mfunc Cancella il link
|
||||
void TViswin::erase_link (
|
||||
long y, // @parm Altezza del link da disegnare
|
||||
long x1, // @parm Prima coordinata x del link da cancellare
|
||||
long x2) // @parm Seconda coordinata x del link da cancellare
|
||||
{
|
||||
if (_link_displayed)
|
||||
{
|
||||
@ -312,14 +317,30 @@ void TViswin::erase_link (long y, long x1, long x2)
|
||||
}
|
||||
}
|
||||
|
||||
void TViswin::paint_link (long y, long x1, long x2)
|
||||
// @mfunc Disegna il link
|
||||
void TViswin::paint_link (
|
||||
long y, // @parm Altezza del link da disegnare
|
||||
long x1, // @parm Prima coordinata x del link da disegnare
|
||||
long x2) // @parm Seconda coordinata x del link da disegnare
|
||||
{
|
||||
if (adjust_box (x1, x2, y))
|
||||
invert_bar ((int)(x1 + (long)X_OFFSET), (int)(y + (long)Y_OFFSET),
|
||||
(int)(x2 + (long)X_OFFSET), (int)(y + (long)Y_OFFSET+1l));
|
||||
}
|
||||
|
||||
bool TViswin::adjust_box (long &x1, long &x2, long y)
|
||||
// @mfunc Modifica le dimensione di un box
|
||||
//
|
||||
// @rdesc Ritorna se sono state modificate le dimensioni del box:
|
||||
//
|
||||
// @flag TRUE | Sono state riassegante le coordinate a <p x1> e <p x2>
|
||||
// @flag FALSE | Non sono state riassegnate le misure del box poiche' <p y> e' nel testo
|
||||
bool TViswin::adjust_box (
|
||||
long &x1, // @parm Prima coordinata da riassegnare
|
||||
long &x2, // @parm Seconda coordinata da riassegnare
|
||||
long y) // @parm Valore della riga che deve essere nel testo
|
||||
|
||||
// @comm Sistema <p x1> e <p x2> in modo che il minore sia il primo, e controlla che <p y> sia
|
||||
// nel testo (box e' su una sola riga, usata solo per i link)
|
||||
{
|
||||
if (y < origin ().y || y > origin ().y + _textrows)
|
||||
return FALSE;
|
||||
@ -330,7 +351,18 @@ bool TViswin::adjust_box (long &x1, long &x2, long y)
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
bool TViswin::check_link (TPoint * p)
|
||||
// @mfunc Controlla se la posizione cursore <p where> cade su un link ipertestuale e si
|
||||
// comporta di conseguenza
|
||||
//
|
||||
// @rdesc Ritorna se la posizione cade sul link
|
||||
//
|
||||
// @flag TRUE | Se ha constatato la corrispondenza
|
||||
// @flag FALSE | Se non ha constatato la corrispondenza
|
||||
bool TViswin::check_link (
|
||||
TPoint * p) // @parm Posizione del cursore (default NULL)
|
||||
|
||||
// @comm Se <p p> e' NULL indica la posizione corrente del cursore
|
||||
|
||||
{
|
||||
static char descr[128], pdescr[128];
|
||||
static int old_id = -1, plinkID = -1;
|
||||
@ -437,7 +469,14 @@ bool TViswin::in_text (const TPoint & p) const
|
||||
}
|
||||
|
||||
|
||||
bool TViswin::need_paint_sel (bool smart)
|
||||
// @mfunc Indica se occorre ridisegnare la selezione
|
||||
//
|
||||
// @rdesc Ritorna se e' necessario ridipingere la selezione
|
||||
bool TViswin::need_paint_sel (
|
||||
bool smart) // @parm Indica se ridisegnarla in ogni caso
|
||||
//
|
||||
// @flag TRUE | Indica il ridisegno solamente se e' necessario
|
||||
// @flag FALSE | Indica il ridisegno in ogni caso
|
||||
{
|
||||
TPoint p1, p2;
|
||||
adjust_selection (p1, p2);
|
||||
@ -464,7 +503,12 @@ void TViswin::display_selection ()
|
||||
_sel_displayed = TRUE;
|
||||
}
|
||||
|
||||
void TViswin::adjust_selection (TPoint & p1, TPoint & p2)
|
||||
// @mfunc Riposizona inizio e fine della selezione
|
||||
void TViswin::adjust_selection (
|
||||
TPoint & p1, // @parm Primo punto per il riposizionamento della selezione
|
||||
TPoint & p2) // @parm Secondo punto per il riposizionamento della selezione
|
||||
|
||||
// @comm Viene asseganto a <p p1> e <p p2> le coordinate di inizio e fine selezione
|
||||
{
|
||||
if (_sel_start.y < _sel_end.y)
|
||||
{
|
||||
@ -511,7 +555,16 @@ void TViswin::shift_screen (scroll dir)
|
||||
_scrolling = FALSE;
|
||||
}
|
||||
|
||||
WINDOW TViswin::add_button (short id, const char *caption)
|
||||
// @mfunc Aggiunge un bottone alla finestra
|
||||
//
|
||||
// @rdesc Ritorna l'handle del bottone aggiunto
|
||||
WINDOW TViswin::add_button (
|
||||
short id, // @parm Identificatore del bottone da aggiungere
|
||||
const char *caption) // @parm Testo del bottone da aggiungere
|
||||
|
||||
// @comm Questa funzione aggiunge bottoni nella finestra oltre a quelli standard delle finestre
|
||||
// di visualizazioni anteprima di stampa. Il limite dei bottoni da aggiungere e' dato
|
||||
// dal <p MAXBUT>.
|
||||
{
|
||||
const int BUT_HEIGHT =
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
@ -623,7 +676,10 @@ void TViswin::paint_screen ()
|
||||
|
||||
|
||||
// j = riga totale, row = riga a video
|
||||
void TViswin::paint_background (long j, int row)
|
||||
// @mfunc Permette di stampare i colori di bakcground
|
||||
void TViswin::paint_background (
|
||||
long j, // @parm Numero della riga di cui stamparne il bakcground
|
||||
int row) // @parm Numero della riga a video sulla quale vine stampato il backgropund
|
||||
{
|
||||
if (_bg->items() == 0)
|
||||
return;
|
||||
@ -835,7 +891,13 @@ void TViswin::paint_row (long j)
|
||||
autoscroll (TRUE);
|
||||
}
|
||||
|
||||
void TViswin::paint_column (long j, bool end)
|
||||
// @mfunc Disegna una colonna
|
||||
void TViswin::paint_column (
|
||||
long j, // @parm Colonna da disegnare
|
||||
bool end) // @parm Indica se si tratta dell'ultima colonna:
|
||||
//
|
||||
// @flag TRUE | E' l'ultima colonna ed implica uno scroll orizzonatle avvenuto
|
||||
// @flag FALSE | Non e' l'ultima colonna
|
||||
{
|
||||
paint_header ();
|
||||
set_opaque_text (FALSE);
|
||||
@ -938,7 +1000,12 @@ void TViswin::erase_point ()
|
||||
_point_displayed = FALSE;
|
||||
}
|
||||
|
||||
void TViswin::paint_point (bool erase)
|
||||
// @mfunc Disegna il cursore in xor nello stile del momento
|
||||
void TViswin::paint_point (
|
||||
bool erase) // @parm Indica di cancellare il cursore precedente (default FALSE):
|
||||
//
|
||||
// @flag TRUE | Cancella il cursore precedente
|
||||
// @flag FALSE | Mantiene il cursore precedente
|
||||
{
|
||||
autoscroll (FALSE);
|
||||
static bool wasbar;
|
||||
@ -1015,7 +1082,9 @@ void TViswin::paint_selection ()
|
||||
}
|
||||
}
|
||||
|
||||
void TViswin::paint_waitbar (bool xor)
|
||||
// @mfunc Disegna la barra di attesa
|
||||
void TViswin::paint_waitbar (
|
||||
bool xor) // @parm Utilizzato in UNIX. (default TRUE)
|
||||
{
|
||||
#if XVT_OS == XVT_OS_WIN
|
||||
HIDDEN int pic = 0;
|
||||
@ -2132,7 +2201,13 @@ void TViswin::goto_top()
|
||||
goto_pos(0l,0l);;
|
||||
}
|
||||
|
||||
void TViswin::goto_pos(long r, long c, bool moveorigin)
|
||||
// @mfunc Sposta la visualizzazione di stampa alla posizione indicata
|
||||
void TViswin::goto_pos(
|
||||
long r, // @parm Riga a cui spostare la visualizzazione di stampa
|
||||
long c, // @parm Colonna a cui spostare la visualizzazione di stampa
|
||||
bool moveorigin) // @parm Indica se occorre spostare l'origine (default TRUE)
|
||||
|
||||
// @xref <mf TViswin::goto_top> e <mf TViswin::goto_end>
|
||||
{
|
||||
if (r >= _txt.lines() || c >= 256)
|
||||
return;
|
||||
@ -2156,12 +2231,32 @@ void TViswin::refresh()
|
||||
force_update();
|
||||
}
|
||||
|
||||
long TViswin::search(const char* txt, int& pos, long from, bool down, bool cs)
|
||||
// @mfunc Funzione di ricerca non interattiva
|
||||
//
|
||||
// @rdesc Ritorna la riga in cui e' stata trovato il testo (-1 se non e' stato trovato)
|
||||
long TViswin::search(
|
||||
const char* txt, // @parm Testo da cercare
|
||||
int& pos, // @parm Intero in cui posizionare la posizione del carattere
|
||||
long from, // @parm Posizione all'interno della riga da cui iniziare la ricerca (default 0)
|
||||
bool down, // @parm Indica se la ricerca va effettuata all'indietro:
|
||||
//
|
||||
// @flag TRUE | Ricerca dalla posizione indicata all'inizio della riga (default)
|
||||
// @flag FALSE | Ricerca dalla posizione indicata alla fine della riga
|
||||
bool cs) // @parm Indica se ricerca il testo con criterio case sensitive (default FALSE)
|
||||
{
|
||||
return _txt.search(txt,pos,from,down, cs);
|
||||
}
|
||||
|
||||
int TViswin::replace(long l, const char* txt, int pos, int len)
|
||||
// @mfunc Funzione di sostituzione di un testo all'interno di una riga non interattiva
|
||||
//
|
||||
// @rdesc Ritorna la posizione in cui e' stato sostituito il testo. Ritorna -1 se non e' stata
|
||||
// fatto nessuna operazione di sostituzione.
|
||||
int TViswin::replace(
|
||||
long l, // @parm Numero della riga nella quale sostituire il testo
|
||||
const char* txt, // @parm Testo da inserire nella riga
|
||||
int pos, // @parm Posizione nella quale inserire il testo (default 0)
|
||||
int len) // @parm Lunghezza del testo da sostituire (default -1)
|
||||
|
||||
{
|
||||
if (l == -1l) return -1;
|
||||
int ret = _txt.replace(l,txt,pos,len);
|
||||
@ -2231,7 +2326,12 @@ void TViswin::show_rulers (bool on)
|
||||
refresh();
|
||||
}
|
||||
|
||||
void TViswin::show_buttons(bool on)
|
||||
// @mfunc Indica se mostrare o no i bottoni della finestra di anteprima
|
||||
void TViswin::show_buttons(
|
||||
bool on) // @parm Indica l'operazione da svolgere:
|
||||
//
|
||||
// @flag TRUE | Mostra i bottoni della finestra (default)
|
||||
// @flag FALSE | Nasconde i bottoni della finestra
|
||||
{
|
||||
_showbuts = on;
|
||||
autoscroll (FALSE);
|
||||
|
449
include/viswin.h
449
include/viswin.h
@ -1,4 +1,3 @@
|
||||
/* This is really -*-c++-*- */
|
||||
#ifndef __VISWIN_H
|
||||
#define __VISWIN_H
|
||||
|
||||
@ -16,214 +15,328 @@
|
||||
|
||||
class TBrowsefile_field;
|
||||
|
||||
class TViswin : public TScroll_window
|
||||
{
|
||||
friend class TBrowsefile_field; // yes, perche' puo' anche essere un controllo di una mask
|
||||
// @doc EXTERNAL
|
||||
|
||||
// @class TViswin | Classe per la gestione della finestra video di anteprima di stampa
|
||||
//
|
||||
// @base public | TScroll_window
|
||||
class TViswin : public TScroll_window
|
||||
|
||||
// @author(:INTERNAL) Villa
|
||||
|
||||
// @access Private Member
|
||||
{
|
||||
// @cfriend TBrowsefile_field
|
||||
friend class TBrowsefile_field;
|
||||
|
||||
// @ccost MAXBUT | 4 | Numero massimo di bottoni disponibili nella pagina
|
||||
enum { MAXBUT = 4,
|
||||
// @ccost MAXLEN | 256 | Lunghezza massima del modulo di stampa
|
||||
MAXLEN = 256,
|
||||
// @ccost BUFFERSIZE | 256 | Dimensione del buffer di stampa
|
||||
BUFFERSIZE = 256,
|
||||
// @ccost MAXPIC | 4 | Numero massimo di immagini gestibili nell'anteprima
|
||||
MAXPIC=4};
|
||||
|
||||
|
||||
enum { MAXBUT = 4, MAXLEN = 256, BUFFERSIZE = 256, MAXPIC=4};
|
||||
enum scroll { none, up, down, left, right };
|
||||
|
||||
TFilename _filename; // name of visfile
|
||||
bool _islink; // "link" button present
|
||||
bool _isedit; // "edit" button present
|
||||
bool _isprint; // "print" button present
|
||||
bool _iscross; // crossbars being drawn
|
||||
bool _selecting; // selection in progress
|
||||
bool _isselection; // selection active
|
||||
bool _isbar; // X-bar drawn instead of cursor at point
|
||||
bool _scrolling; // scrolling in progress
|
||||
bool _need_update; // full update required
|
||||
bool _istimer; // timer successivo attivo?
|
||||
bool _isopen; // new lines may arrive
|
||||
bool _selflag;
|
||||
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?
|
||||
bool _wasneeded; // flag for smart painting
|
||||
WINDOW _button[MAXBUT]; // button array
|
||||
int _curbut; // button which currently has focus
|
||||
int _buttons; // button count
|
||||
// @cmember Nome del file di visualizzazione
|
||||
TFilename _filename;
|
||||
// @cmember Indica la presenza del bottone Collega
|
||||
bool _islink;
|
||||
// @cmember Indica la presenza del bottone Edit
|
||||
bool _isedit;
|
||||
// @cmember Indica la presenza del bottone Stampa
|
||||
bool _isprint;
|
||||
// @cmember Indice se effettuare il disgno della crossbar
|
||||
bool _iscross;
|
||||
// @cmember India se e' in corso la selezione
|
||||
bool _selecting;
|
||||
// @cmember Indica se la selezione e' attiva
|
||||
bool _isselection;
|
||||
// @cmember Indica se disegnare la X-bar al posto del cursore a punto
|
||||
bool _isbar;
|
||||
// @cmember Indica se in corso lo scrolling
|
||||
bool _scrolling;
|
||||
// @cmember Indica se e' necessario un update completo
|
||||
bool _need_update;
|
||||
// @cmember Indica se il timer successivo e' attivo
|
||||
bool _istimer;
|
||||
// @cmember Indica se possono arrivare nuove linee
|
||||
bool _isopen;
|
||||
// @cmember Indica se sono stati selezionati flag
|
||||
bool _selflag;
|
||||
// @cmember Indica se e' evidenziata la selezione
|
||||
bool _sel_displayed;
|
||||
// @cmember Indica se e' visualizzato il link
|
||||
bool _link_displayed;
|
||||
// @cmember Indica se' e' visualizzata l'incrocio della crossbar
|
||||
bool _cross_displayed;
|
||||
// @cmember Indica se e' visualizzato il cursore a carattere
|
||||
bool _point_displayed;
|
||||
// @cmember Timer per evitare autorepeat di tasti
|
||||
long _timer;
|
||||
// òcmember Timer di attesa prima della chiusura del file
|
||||
long _wtimer;
|
||||
// @cmember Indica il tipo di scroll richiesto (vedi <t scroll>)
|
||||
scroll _need_scroll;
|
||||
// @cmember Flag per il disegno intelligente
|
||||
bool _wasneeded;
|
||||
// @cmember Array di bottoni attivi nella finestra
|
||||
WINDOW _button[MAXBUT];
|
||||
// @cmember Bottone che ha il focus
|
||||
int _curbut;
|
||||
// @cmember Contatore di bottoni
|
||||
int _buttons;
|
||||
|
||||
WINDOW _link_button; // ID bottone "Collega"
|
||||
WINDOW _print_button; // ID bottone "Stampa"
|
||||
// @cmember Bottone Collega
|
||||
WINDOW _link_button;
|
||||
// @cmember Bottone Stampa
|
||||
WINDOW _print_button;
|
||||
|
||||
long _textrows; // righe di testo
|
||||
long _textcolumns; // indovina indovinello
|
||||
// @cmember Numero di righe di testo
|
||||
long _textrows;
|
||||
// @cmember Numero di colonne di testo
|
||||
long _textcolumns;
|
||||
|
||||
TTextfile _txt; // text being displayed
|
||||
long _firstline; // 1rst text line being displayed
|
||||
long _lastline; // last text line being displayed
|
||||
// @cmember Testo che deve essere visualizzato
|
||||
TTextfile _txt;
|
||||
// @cmember Prima linea di testo che deve essere visualizzata
|
||||
long _firstline;
|
||||
// @cmember Ultima linea di testo che deve essere visualizzata
|
||||
long _lastline;
|
||||
|
||||
// @cmember Strina di testo da cercare
|
||||
TString _txt_to_find;
|
||||
// @cmember Posizione dell'ultima ricerca
|
||||
TPoint _last_found;
|
||||
// @cmember Direzione della ricerca (TRUE verso il basso FALSE verso l'alto)
|
||||
bool _down_dir;
|
||||
// @cmember Indica se si deve fare una ricerca case sensitive
|
||||
bool _case_sensitive;
|
||||
|
||||
// @cmember Lunghezza della pagina
|
||||
int _formlen;
|
||||
|
||||
// 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
|
||||
// @cmember Posizione corrente del punto
|
||||
TPoint _point;
|
||||
// @cmember Posizione corrente dell'incrocio della crossbar
|
||||
PNT _cross;
|
||||
// @cmember Inizio della selezione (colonna, line del FILE)
|
||||
TPoint _sel_start;
|
||||
// @cmember Fine della selezione (colonna, line del FILE)
|
||||
TPoint _sel_end;
|
||||
|
||||
int _formlen; // length of a page
|
||||
|
||||
TPoint _point; // current point position
|
||||
PNT _cross; // current crossbar point
|
||||
TPoint _sel_start; // start of selection (column, line of FILE)
|
||||
TPoint _sel_end; // end of selection (ibidem)
|
||||
|
||||
TArray* _links; // admitted links
|
||||
TArray* _hotspots; // hotspots
|
||||
TArray* _bookmarks; // bookmarks
|
||||
// @cmember Array di link ammessi
|
||||
TArray* _links;
|
||||
// @cmember Array di hotspots
|
||||
TArray* _hotspots;
|
||||
// @cmember Array di segnalibri
|
||||
TArray* _bookmarks;
|
||||
|
||||
// @cmember Indica se occorre ridisegnare la selezione
|
||||
bool need_paint_sel(bool smart = TRUE);
|
||||
|
||||
TArray _modules; // Scrolling module icons
|
||||
TArray _images; // pictures properly resized
|
||||
// @cmember Array di icone del modulo scorrevole durante la stampa
|
||||
TArray _modules;
|
||||
// @cmember Array di immagini propriamente ridimensionate
|
||||
TArray _images;
|
||||
|
||||
// @cmember Indica se e' attivato il link multiplo se si' vengono passati all'handler tutti i
|
||||
// link presenti sulla stessa riga anziche' solo il selezionato
|
||||
bool _multiple;
|
||||
// @cmember Testo del link
|
||||
TString80 _linktxt;
|
||||
// @cmember Identificatore del link
|
||||
int _linkID;
|
||||
// @cmember Indica tutti i link della riga nel caso di link multiplo
|
||||
TToken_string _multiple_link;
|
||||
|
||||
// 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
|
||||
|
||||
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
|
||||
// @cmember Array di colori di background
|
||||
TArray* _bg;
|
||||
// @cmember Indica se la stampa e' stata interrotta
|
||||
bool _frozen;
|
||||
// @cmember Finestra in primo piano (se FALSE e un campo di una maschera)
|
||||
bool _toplevel;
|
||||
// @cmember Indica se mostrare il righello
|
||||
bool _rulers;
|
||||
// @cmember Indica se visualizzare i bottoni
|
||||
bool _showbuts;
|
||||
// @cmember Indica se si sta attivando un link
|
||||
bool _inside_linkexec;
|
||||
// òcmember Indica se e' presente il menu' specifico della calsse
|
||||
bool _menu_present;
|
||||
|
||||
// @cmember Viene istanziato soltanto se e' usata come controllo
|
||||
TBrowsefile_field* _brwfld;
|
||||
|
||||
|
||||
// @access Protected Member
|
||||
protected:
|
||||
|
||||
virtual bool on_key (KEY);
|
||||
// @cmember !!!???!!!
|
||||
virtual bool on_key (KEY);
|
||||
// @cmember !!!???!!!
|
||||
virtual void open();
|
||||
|
||||
int tabx(int x) const; // Convert charx to pixels
|
||||
int taby(int y) const; // Convert chary to pixels
|
||||
// @cmember Converte i caratteri in x in pixel
|
||||
int tabx(int x) const;
|
||||
// @cmember Converte i caratteri in y in pixel
|
||||
int taby(int y) const;
|
||||
|
||||
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
|
||||
// @cmember Sposta lo schermo nella direzione <p dir> di 1
|
||||
void shift_screen(scroll dir);
|
||||
// @cmember Disegna lo schermo sulla porzione corrente di testo
|
||||
void paint_screen();
|
||||
// @cmember Disegna il cursore a crossbar in XOR
|
||||
void draw_crossbars();
|
||||
|
||||
// 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;
|
||||
|
||||
// @cmember Disegna l'header del video (righello)
|
||||
void paint_header();
|
||||
// @cmember Disegna il cursore in xor nello stile del momento
|
||||
void paint_point(bool erase = FALSE);
|
||||
// @cmember Disegna la riga <p r>-esima (in coordinate testo)
|
||||
void paint_row(long r);
|
||||
// @cmember Disegna una colonna
|
||||
void paint_column(long r, bool end);
|
||||
// @cmember Disegna in xor la selezione corrente a meno che non sia gia' disegnata
|
||||
void paint_selection();
|
||||
// @cmember Controlla l'immagine di 'busy'; xor serve solo per UNIX, dove si
|
||||
// disegna una barra che viene cancellata alla prossima paint.
|
||||
void paint_waitbar(bool xor = TRUE);
|
||||
// @cmember Permette di stampare il bakcground di riga <p row> e colonna <p col>
|
||||
void paint_background(long, int);
|
||||
// @cmember Chiama l'editor selezionato nel file PRASSI.INI. Ritorna il risultato della
|
||||
// chiamata (TRUE se e' riuscito a chiamarlo)
|
||||
bool call_editor();
|
||||
// @cmember Ritorna se in punto <p p> e' nel testo mostrato
|
||||
bool in_text(const TPoint& p) const;
|
||||
|
||||
// @cmember Aggiunge un bottone alla finestra
|
||||
WINDOW add_button(short id, const char* caption);
|
||||
void repos_buttons();
|
||||
// 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();
|
||||
// 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);
|
||||
// mostra in xor sto cazzo di link ipertesticolare (usata da paint/erase link)
|
||||
void display_link(long, long, long, const char*);
|
||||
// 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();
|
||||
// @cmember Riposiziona i bottoni centrandoli a seconda di quanti sono presenti
|
||||
void repos_buttons();
|
||||
// @cmember Assicura che la selezione rimanga nei limiti fisici del testo
|
||||
void adjust_selection(TPoint& p1, TPoint& p2);
|
||||
// @cmember Interfaccia per paint_selection: mostra se non c'e'
|
||||
void display_selection();
|
||||
// @cmember Interfaccia per paint_selection: cancella se c'e'
|
||||
void erase_selection();
|
||||
// @cmember Interfaccia per paint_point (se cross): mostra se non c'e'
|
||||
void display_crossbar();
|
||||
// @cmember Interfaccia per paint_point (se cross): cancella se c'e'
|
||||
void erase_crossbar();
|
||||
// @cmember Interfaccia per paint_point (se point): mostra se non c'e'
|
||||
void display_point();
|
||||
// @cmember Interfaccia per paint_point (se point): cancella se c'e'
|
||||
void erase_point();
|
||||
|
||||
protected:
|
||||
// @cmember Controlla se la posizione cursore <p where> cade su un
|
||||
// link ipertestuale e si comporta di conseguenza
|
||||
bool check_link(TPoint* where = NULL);
|
||||
// @cmember Modifica le dimensione di un box
|
||||
bool adjust_box(long& x1, long& x2, long y);
|
||||
|
||||
// @cmember Mostra il link ipertestuale se non c'e'
|
||||
void paint_link(long y, long x1, long x2);
|
||||
// @cmember Cancella il link ipertestuale se c'e'
|
||||
void erase_link(long y, long x1, long x2);
|
||||
// @cmember Mostra in xor il link ipertestuale (utilizzata da <mf TViswin::paint_link> e da
|
||||
// <mf TViswin::erase_link>
|
||||
void display_link(long y, long x1, long x2, const char* d);
|
||||
|
||||
// @cmember Usata internamente per bloccare l'aggiunta di nuove righe
|
||||
void freeze()
|
||||
{ _frozen = TRUE; }
|
||||
|
||||
// @cmember Chiama l'handler del link se si preme collega o si batte spazio su un link
|
||||
void exec_link();
|
||||
// @cmember Controlla la generazione menu indice se ci sono segnalibri
|
||||
void build_index_menu();
|
||||
|
||||
// @cmember Viene chiamata quando si tenta di fare uno scroll impossibile da <p x> o <p y>:
|
||||
// emette un suono e non effettuata lo scroll
|
||||
void scroll_error(long x, long y);
|
||||
|
||||
// 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
|
||||
// @cmember !!!???!!!
|
||||
virtual void update();
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
// @cmember !!!???!!!
|
||||
virtual void handler(WINDOW win, EVENT* ep);
|
||||
|
||||
// @cmember !!!???!!!
|
||||
void check_menu_item(MENU_TAG item, bool on = TRUE);
|
||||
// @cmember !!!???!!!
|
||||
void enable_menu_item(MENU_TAG item, bool on = TRUE);
|
||||
|
||||
// @access Public Member
|
||||
public:
|
||||
|
||||
// gestione "collegamenti": vengono passati il testo completo,
|
||||
// il punto di inizio selezione e quello di fine selezione; se
|
||||
// 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; }
|
||||
// terminazione by user (ESC durante stampa)
|
||||
// @cmember Permette di gestire i collegamenti ipertestuali. Occorre passare il testo completo
|
||||
// <p txt>, il punto di inizio selezione <p start> e quello di fine selezione <p end>;
|
||||
// se non c'e' selezione non viene chiamata affatto (il bottone non fa nulla)
|
||||
// Se serve, si faccia <mf TWindow::stop_run> qui dentro.
|
||||
virtual void process_link(TTextfile& txt, TPoint start, TPoint end)
|
||||
{ }
|
||||
// @cmember Termina la stampa su video e crea il menu indice se c'e'
|
||||
void close_print();
|
||||
// @cmember Interrompe la stampa
|
||||
bool frozen()
|
||||
{ return _frozen; }
|
||||
// @cmember Interrompe la stampa su video (ESC durante la stampa)
|
||||
void abort_print();
|
||||
|
||||
long lines() { return _txt.lines(); }
|
||||
TTextfile& text() { return _txt; }
|
||||
// @cmember Ritorna il numero di righe del testo da stampare
|
||||
long lines()
|
||||
{ return _txt.lines(); }
|
||||
// @cmember Ritorna il testo da stampare
|
||||
TTextfile& text()
|
||||
{ return _txt; }
|
||||
|
||||
// bound to keys and menu actions
|
||||
// @cmember Sposta la visualizzazione di stampa alle chiavi (chiama <mf TViswin::goto_pos>)
|
||||
void goto_end();
|
||||
// @cmember Sposta la visualizzazione di stampa alle azioni del menu' (chiama
|
||||
// <mf TViswin::goto_pos>)
|
||||
void goto_top();
|
||||
// @cmember Sposta la visualizzazione di stampa alla posizione indicata
|
||||
void goto_pos(long r, long c, bool moveorigin = TRUE);
|
||||
|
||||
// @cmember Opera un ridisegno della pgina di anteprima a video
|
||||
void refresh();
|
||||
|
||||
// @cmember Indica se mostrare o no il righello
|
||||
void show_rulers (bool on = TRUE);
|
||||
// @cmember Indica se mostrare o no i bottoni della finestra di anteprima
|
||||
void show_buttons(bool on = TRUE);
|
||||
|
||||
// usata da chi la usa (es. printer) per stampare nella finestra
|
||||
// @cmember Stampa nella finestra la riga <p l>-esima
|
||||
void add_line(const char* l);
|
||||
|
||||
// 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);
|
||||
// @cmember Funzione di ricerca non interattiva
|
||||
long search (const char* txt, int& pos, long from = 0, bool down = TRUE, bool casesens = FALSE);
|
||||
// @cmember Funzione di sostituzione di un testo all'interno di una riga non interattiva
|
||||
int replace(long line, const char* txt, int pos = 0, int len = -1);
|
||||
|
||||
// interactive search (con maschera, bound to F7/F8)
|
||||
// @cmember Funzione di ricerca interattiva
|
||||
void find();
|
||||
void find_next();
|
||||
|
||||
TViswin (const char* fname = NULL,
|
||||
const char* title = NULL,
|
||||
bool editbutton = TRUE,
|
||||
bool printbutton = TRUE,
|
||||
bool linkbutton = TRUE,
|
||||
int x = -1,
|
||||
int y = -1,
|
||||
int height = 0,
|
||||
int width = 0,
|
||||
bool rulers = TRUE,
|
||||
WINDOW parent = NULL_WIN,
|
||||
TBrowsefile_field* = NULL);
|
||||
|
||||
// @cmember Funzione di ricerca prossimo elemento interattiva
|
||||
void find_next();
|
||||
|
||||
// @cmember void | TViswin | const char* fname=NULL, const char* title=NULL,
|
||||
// bool editbutton=TRUE, int width=0, bool rulers=TRUE,
|
||||
// WINDOW parent=NULL_WIN, TBrowsefile_field*=NULL | Costruttore
|
||||
TViswin(const char* fname=NULL, const char* title=NULL, bool editbutton=TRUE,
|
||||
bool printbutton=TRUE, bool linkbutton=TRUE, int x=-1, int y=-1, int height=0,
|
||||
int width=0, bool rulers=TRUE, WINDOW parent=NULL_WIN, TBrowsefile_field* =NULL);
|
||||
// @cmember Distruttore
|
||||
virtual ~TViswin ();
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
// @enum scroll | Direzioni da utilizzare nello scroll
|
||||
//
|
||||
// @emem none | Nessuno scroll
|
||||
// @emem up | Scroll verso l'alto
|
||||
// @emem down | Scroll verso il basso
|
||||
// @emem left | Scroll verso sinistra
|
||||
// @emem right | Scroll verso destra
|
||||
//
|
||||
// @comm Questa struttura viene usata esclusivamente all'interno della classe <c TViswin>
|
||||
|
@ -255,17 +255,29 @@ void TWindow_manager::unreg(const TWindow* m)
|
||||
}
|
||||
}
|
||||
|
||||
// @func Chiude tutte le finestre aperte
|
||||
void close_all_dialogs()
|
||||
{
|
||||
WinManager.destroy();
|
||||
}
|
||||
|
||||
// @func Indica se possono essere chiuse le finestre aperte
|
||||
//
|
||||
// @rdesc Ritorna il risultato della ricerca:
|
||||
//
|
||||
// @flag TRUE | Se le finestre aperte possono essere chiuse
|
||||
// @flag FALSE | Se le finestre aperte non possono essere chiuse
|
||||
bool can_close()
|
||||
{
|
||||
return WinManager.can_close();
|
||||
}
|
||||
|
||||
// @func Ritorna l'handle della finestra corrente
|
||||
//
|
||||
// @rdesc Restituisce l'handle della finestra corrente.
|
||||
WINDOW cur_win()
|
||||
|
||||
// @comm Se non esiste una finestra corrente allora ritorna NULL_WIN
|
||||
{
|
||||
const TWindow* w = WinManager.cur_win();
|
||||
return w ? w->win() : NULL_WIN;
|
||||
|
@ -11,12 +11,12 @@
|
||||
|
||||
class TString_array;
|
||||
|
||||
// @doc EXTERNAL
|
||||
|
||||
void close_all_dialogs();
|
||||
bool can_close();
|
||||
WINDOW cur_win();
|
||||
|
||||
// doc EXTERNAL
|
||||
|
||||
//@class TPoint | Struttura per la definizione di un punto sullo schermo
|
||||
struct TPoint
|
||||
{
|
||||
@ -176,7 +176,7 @@ protected:
|
||||
void set_modal(bool m)
|
||||
{ _modal = m; }
|
||||
|
||||
// @parm Ritorna l'handler della finestra padre
|
||||
// @cmember Ritorna l'handler della finestra padre
|
||||
WINDOW parent() const;
|
||||
|
||||
// @cmember Fa' l'update della finstra
|
||||
@ -195,7 +195,7 @@ protected:
|
||||
public:
|
||||
// @cmember Costruttore
|
||||
TWindow();
|
||||
// @cemmerb Distruttore
|
||||
// @cmember Distruttore
|
||||
virtual ~TWindow();
|
||||
|
||||
// @cmember Gestisce l'handeler della finestra
|
||||
@ -274,7 +274,7 @@ public:
|
||||
// @cmember Riempie la finestra con il colore <p color>
|
||||
void clear(COLOR color);
|
||||
|
||||
// @cmembr Setta il draw mode
|
||||
// @cmember Setta il draw mode
|
||||
void set_mode(DRAW_MODE mode);
|
||||
|
||||
// @cmember Setta il colore della finestra e dello sfondo
|
||||
@ -336,12 +336,12 @@ public:
|
||||
};
|
||||
|
||||
|
||||
// @class TTemp_window | Classe per la definizione di finestre con scrollbar
|
||||
// @class TScroll_window | Classe per la definizione di finestre con scrollbar
|
||||
//
|
||||
// @public base | TWindow
|
||||
// @base public | TWindow
|
||||
class TScroll_window : public TWindow
|
||||
{
|
||||
// @uthor:(INTERNAL) Guido
|
||||
// @author:(INTERNAL) Guido
|
||||
|
||||
// @access Private Member
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user