Click here to Skip to main content
15,886,519 members
Articles / Web Development / HTML

Printing Framework

Rate me:
Please Sign up or sign in to vote.
3.77/5 (10 votes)
22 Nov 20032 min read 65.1K   3.3K   28  
Simple framework for text and graphic Printing/Previewing
/*! 
 *********************************************************************
 * \file       : TextTable.h
 *
 *  \b Package : dll Printer
 *
 *  \b Author  : T. Montembault                            
 *
 *	\b Date		: 03/04/02
 *
 *  \b Objet   : Une table
 *
 *********************************************************************
 * \par Version History:
 *
 *		@li  V 0.10  03.04.02 Cr�ation 
 *
 *********************************************************************
 *
 */
#ifndef AFX_TEXTTABLE_H__4FD5F1D3_D230_4FA1_915F_8FB001E4E086__INCLUDED_
#define AFX_TEXTTABLE_H__4FD5F1D3_D230_4FA1_915F_8FB001E4E086__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "ExportPrinter.h"

#include <vector>
#include "FormatString.h"
#include "InterfaceElement.h"

namespace printer {


//! La repr�sentation d'un tableau de donn�e 
/*!	La classe permet d'int�grer facilement un tableau d'�l�ments
	dans le CDocText. La classe est con�ue pour �tre ind�pendante
	de CListCtrl (Une classe adaptateur CTextList est fournie). 
	
	Il faut fournir au constructeur le nombre de colonnes de la table. 
	Ensuite SetColumn et SetSize servent � positionner le titre. Pour
	ajouter une ligne, la m�thode AddLine utilise un CStringArray.
	Chaque �l�ment correspond � une colonne de la table.

	La table utilise un tableau de CFormatString. Ces derniers
	permettent � un �l�ment de s'afficher - si n�cessaire - sur 
	plusieurs lignes du contexte d'impression. Evidemment, les autres
	�l�ments de la ligne s'aligneront sur cette place prise afin
	d'�viter un d�calage.

	Le code utilise un seul tableau	de CFormatString pour tous les
	�l�ments de la liste. On �vite ainsi la cr�ation d'un grand 
	nombre (nbre de lignes * nbre de colonnes) de petits objets. En
	contrepartie, cela am�ne � des calculs subtils sur les indices
	et les d�calages de lignes...
		
	Avec CTextFreeLine c'est un �l�ment un peu particulier, puisque 
	l'utilisateur doit y acc�der directement pour d�finir le nombre 
	de colonnes, les titres et les lignes.

		Pour �viter les probl�mes de fuite m�moire, la classe d�clare
	priv� les constructeurs, le destructeur et l'op�rateur de copie.
	Par le design de la classe, on impose une utilisation stricte :
		- Cr�ation de l'objet dans l'ar�ne par un appel � la fabrication
		CPrintText::CreateTable
		- Initialisation gr�ce aux m�thodes SetColumn, AddLine et SetSize
		- Ajout au document et supression de l'objet de l'ar�ne par un 
		appel � 	CPrintText::AddTable
.
*/

class _PRINTER_DLLAPI CTextTable : public CInterfaceElement 
{
	friend class CPrinterText; /*!< Pour autoriser la cr�ation et la supression !! */
	friend class CTextList; /*!< Pour autoriser la cr�ation et la supression !! */

public:

	/*! \par Objet :
		D�finition d'une colonne
		\param nColum : Le num�ro de la colonne 
		\param nSize : La taille de la colonne exprim�e en nombre de caract�res.
		\param bStyle : L'alignement � droite, centr� ou � gauche. pour l'instant
		SANS SIGNIFICATION.
		\param cszTitle : Le titre de la colonne. Il doit tenir sur une ligne.
	*/
	void SetColumn(int nColum, int nSize, byte bStyle, LPCTSTR cszTitle);

	/*! \par Objet :
		D�finition de la taille d'une colonne
		\param nColum : Le num�ro de la colonne 
		\param nSize : La taille de la colonne exprim�e en nombre de caract�res.
	*/
	void SetSize(int nColum, int nSize);


	/*! \par Objet :
		Ajout d'une ligne.
		\param array : Un tableau de CString. Il doit avoir le m�me nombre d'�l�ments
		que le nombre de colonnes de la table.
	*/	
	void AddLine( const CStringArray& array );

//@{
/*! \name Interface
//
//		Les m�thodes suivantes constituent l'interface des �l�ments de texte.
//*/

	/*! \par Objet :
		Initialisation de l'�l�ment en fonction du contexte d'impression. 
		En particulier la m�thode peut d�couper l'�l�ment en plusieurs
		sous-�l�ments (un pour chaque ligne).
		\param pDC : Un pointeur sur le contexte
		\param pData : Un pointeur sur la structure de param�trage de l'impression
	*/
	virtual void Initialize(CDC* pDC, SDataPrint* pData);

	/*! \par Objet :
		Accesseur.
		\return Le nombre de lignes occup�es par l'�l�ment.
	*/
	virtual int GetNbLignes();

	/*! \par Objet :
		Affichage d'une ligne particuli�re de l'�l�ment.
		\param nSubElt : Le num�ro du sous-�l�ment � afficher 
		\param nLine : Le num�ro de la ligne  de sortie sur le contexte.
		\param pDC : Un pointeur sur le contexte
		\param pData : Un pointeur sur la structure de param�trage de l'impression
	*/
	virtual void Output(int nSubElt, int nLine, CDC* pDC, SDataPrint* pData);
//@}

private:


//@{
/*! \name Design de conception
//
//		Les m�thodes suivantes sont d�clar�s priv�es afin
//	d'interdire leur utilisation directe. En coordination avec
//	CArena et CPrinterText on s'assure que le l'utilisateur ne
//	peut pas construire ou d�truire directement un CTextTable.
//*/


	/*! \par Objet :
		Le constructeur
		\param nColumns : Le nombre de colonnes de la table. 
	*/
	CTextTable(int nColumns);

	/*! \par Objet :
		Le destructeur
	*/
	virtual ~CTextTable();

	/*! \par Objet :
		Le constructeur de copie. Non impl�menter. 
	*/
	CTextTable(const CTextTable&);

	/*! \par Objet :
		Le constructeur de copie. Non impl�menter. 
	*/
	CTextTable& operator=(const CTextTable&);
//@}

	/*! \par Objet :
		Calcul des abcisses de chaque colonne de la table
		\param pDC : Un pointeur sur le contexte
		\param pData : Un pointeur sur la structure d'impression
	*/
	void DefineAbcisses(CDC* pDC, SDataPrint* pData);

	/*! \par Objet :
		Calcul de la taille de chaque colonne et de la taille totale.
		\param pData : Un pointeur sur la structure d'impression
		\param listSize : Une r�f�rence sur un tableau qui 
		contient les tailles ajust�e en retour
		\param nSizeTable : Une r�f�rence sur un entier qui contient
		la taille totale en retour.
		\warning La m�thode est utilis�e par DefineAbcisses. Si le
		coefficient multiplicateur est trop grand, les tailles sont
		diminu�es jusq'� ce que la liste tienne dans la page...
	*/
	void JustifyTableSize(SDataPrint* pData, std::vector<int>& listSize, int& nSizeTable);

	/*! \par Objet :
		Affichage des titres de la tables
		\param nLine : Le num�ro de la ligne  de sortie sur le contexte d'impression.
		\param pDC : Un pointeur sur le contexte
		\param pData : Un pointeur sur la structure d'impression
	*/
	void OutputTitle(int nLine, CDC* pDC, SDataPrint* pData);

	/*! \par Objet :
		Affichage d'une ligne de la table
		\param nSubElt : Le num�ro de la ligne � afficher 
		\param nLine : Le num�ro de la ligne  de sortie sur le contexte.
		\param pDC : Un pointeur sur le contexte d'impression
		\param pData : Un pointeur sur la structure d'impression
	*/	
	void OutputRows(int nSubElt, int nLine, CDC* pDC, SDataPrint* pData);


	/*! \par Objet :
		Affichage d'une ligne de la table
		\param nSubElt : Le num�ro de la ligne � afficher 
		\param nSum : Le num�ro de la ligne  de sortie sur le contexte d'impression.
	*/		
	int GetBaseIndex(int nSubElt, int& nSum);

	/*! La d�finition d'une colonne */
	struct SHeaderAttributs {
		byte bStyle;			/*!<Le style*/
		int nSize;				/*!<La taille (en nombre de caract�res moyens) */
		CString strTitle;	/*!<Le titre*/
		int cxAbcisse;		/*!<La taille en nombre de point */
		int nAbcisse;			/*!<L'abcisse */
	};

	int m_nColumns; /*!< Le nombre de lignes */
	int m_nLines;		/*!< Le nombre de colonnes */

	/*! \typedef ListOfAttributs 
		Une liste d'ent�tes 
	*/
	typedef std::vector< SHeaderAttributs > ListOfAttributs;
	ListOfAttributs m_listAttributs; 	/*!<La liste des Attributs*/


	/*! \typedef ListOfItems 
	Une liste des items pour chaque ligne et chaque colonne
	*/
	typedef std::vector< CFormatString > ListOfItems;
	ListOfItems m_listItems; 	/*!< La liste des items */


	/*! \typedef ListOfInt
		Une liste du nombre de lignes �crans occup�es par chaque item de la liste
	*/
	typedef std::vector< int > ListOfInt;
	ListOfInt m_listNbSubItem; 	/*!< La liste des index*/

};

}
#endif // !defined(AFX_TEXTTABLE_H__4FD5F1D3_D230_4FA1_915F_8FB001E4E086__INCLUDED_)

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.


Written By
United States United States
This member has not yet provided a Biography. Assume it's interesting and varied, and probably something to do with programming.

Comments and Discussions