#ifndef __PRINTWIN_H
#define __PRINTWIN_H

#ifndef __WINDOW_H
#include <window.h>
#endif

#ifndef __ARRAY_H
#include <array.h>
#endif

#ifndef __TEXT_H
#include <text.h>
#endif

// @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
{                 
  // @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 Lunghezza reale (vale per stampanti Generico/Solo testo) del modulo di stampa
  int _realformlen;
  
  // @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;
  
  // @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;
  
  // @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);
  // @cmember Permette di disegnare la parte di finestra per la pagina <p page>
  bool print_band(int page, RCT&);

  // @access Public Member
public:                  
  
  // @cmember Ritorna se la stampa e' stata interrotta (viene ritornata anche della 
  //          <mf TPrintwin::do_print>)
  bool aborted() const 
  { return _aborted; }
  
  // @cmember Inizia la stampa (Ritorna FALSE se viene interrotta)
  bool do_print();

  // @cmember Costruttore  
  TPrintwin(TTextfile& txt);
  // @cmember Distruttore
  virtual ~TPrintwin(); 
};      


#endif   
