#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 INTERNAL

// @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)Villa

// @access Private Member
{                 
  // @cmember:(INTERNAL) Indica se la stampa e' stata interrotta
  bool _aborted;
  // @cmember:(INTERNAL) Descrizione completa dello stato della stampante
  PRINT_RCD* _printrcd;   
  // @cmember:(INTERNAL) Lunghezza del modulo di stampa restituito dal driver
  int _formlen;
  // @cmember:(INTERNAL) Lunghezza del modulo di stampa settato sulla stampante
  int _pagelen;
  // @cmember:(INTERNAL) Larghezza del modulo di stampa
  int _formwidth;
  
  // @cmember:(INTERNAL) L'intero background della pagina (vedi <c TPrintapp>)
  TArray* _bg;
  // @cmember:(INTERNAL) TText da stampare
  TTextfile& _txt;

  // @cmember:(INTERNAL) Array di immagini di stampare nel modulo sotto al testo
  TArray _images;
  
  // @cmember:(INTERNAL) Distanza in pixel tra una riga e la successiva
  int _lead;
  // @cmember:(INTERNAL) Numero di pixel dalla linea base al limite superiore del font
  int _ascent;
  // @cmember:(INTERNAL) Numero di pixel dalla linea base al limite inferiore del font
  int _descent;
  // @cmember:(INTERNAL) Dimensione dell'offset orizzontale
  int _hofs;
  // @cmember:(INTERNAL) Dimensione dell'offset verticale
  int _vofs;
  // @cmember:(INTERNAL) Altre caratteristihce del font (vedi XVT)
  int _chary;
  // @cmember:(INTERNAL) Dimensione del font di stampa
  int _char_size;
  // @cmember:(INTERNAL) Altre caratteristihce del font (vedi XVT)
  bool _inited;
  // @cmember:(INTERNAL) linee voute da stampare (per offset)
  bool _blank_lines_to_print;
  
  // @cmember:(INTERNAL) Permette di disegnare lo sfondo della riga <p j>-esima
  void paint_background(long j);
  // @cmember:(INTERNAL) Permette di disegnare la riga <p j>-esima
  void paint_row(long j);
  // @cmember:(INTERNAL) Permette di disegnare un'immagine alla riga y
  void paint_image(int y, const char* cp);

  // @access Public Member
public:                  
  // @cmember:(INTERNAL) Permette di disegnare la parte di finestra per la pagina <p page>
  bool print_band(int page, const RCT& rct);
  
  // @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(word page_from, word page_to, word copies);

  // @cmember Costruttore  
  TPrintwin(TTextfile& txt, const char* title = NULL);
  // @cmember Distruttore
  virtual ~TPrintwin(); 
};      


#endif