williamr@2: // Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies). williamr@2: // All rights reserved. williamr@2: // This component and the accompanying materials are made available williamr@2: // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members williamr@2: // which accompanies this distribution, and is available williamr@2: // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". williamr@2: // williamr@2: // Initial Contributors: williamr@2: // Nokia Corporation - initial contribution. williamr@2: // williamr@2: // Contributors: williamr@2: // williamr@2: // Description: williamr@2: // Header PDRRECRD.H williamr@2: // williamr@2: // williamr@2: williamr@2: #ifndef __PDRRECRD_H__ williamr@2: #define __PDRRECRD_H__ williamr@2: williamr@2: #include "LEXICAL.H" williamr@2: #include "RECORD.H" williamr@2: #include "UID.H" williamr@2: williamr@2: /** williamr@2: Index of text styles used by printer description records. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: enum StyleIndex williamr@2: { williamr@2: /** Normal text. */ williamr@2: Normal, williamr@2: /** Bold text. */ williamr@2: Bold, williamr@2: /** Italic text. */ williamr@2: Italic, williamr@2: /** Bold italic text. */ williamr@2: BoldItalic williamr@2: }; williamr@2: williamr@2: class PdrResource williamr@2: /** williamr@2: This class encapsulates a printer resource. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PdrResource* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: public: williamr@2: /** Resource identifier. */ williamr@2: int32 iId; williamr@2: /** String containing the resource. */ williamr@2: String iString; williamr@2: }; williamr@2: williamr@2: class PdrResources : public Record williamr@2: /** williamr@2: This class holds printer resources. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PdrResources* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: IMPORT_C void AddResource(PdrResource* aResource); williamr@2: private: williamr@2: ~PdrResources(); williamr@2: private: williamr@2: ObjectList iPdrResourceList; williamr@2: }; williamr@2: williamr@2: class PdrTranslation williamr@2: /** williamr@2: This class holds a translation between printer descriptions. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PdrTranslation* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: public: williamr@2: /** Printer identifier to translate from. */ williamr@2: uint16 iFrom; williamr@2: /** Printer identifier to translate to. */ williamr@2: String iTo; // !! Think about Unicode version williamr@2: }; williamr@2: williamr@2: class PdrTranslates : public Record williamr@2: /** williamr@2: This class encapsulates a list of printer description translations. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PdrTranslates* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: IMPORT_C void AddTranslation(PdrTranslation* aTranslation); williamr@2: private: williamr@2: ~PdrTranslates(); williamr@2: private: williamr@2: ObjectList iPdrTranslationList; williamr@2: }; williamr@2: williamr@2: class Width williamr@2: /** williamr@2: This class is used to hold font widths. It is used by printer descriptions. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static Width* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: public: williamr@2: /** Font width in pixels. */ williamr@2: uint16 iWidthInPixels; williamr@2: }; williamr@2: williamr@2: class WidthsCodeSection williamr@2: /** williamr@2: This class encapsulates a list of font widths used by printer descriptions. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: private: williamr@2: WidthsCodeSection(); williamr@2: public: williamr@2: IMPORT_C static WidthsCodeSection* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: IMPORT_C void AddWidth(Width* aWidth); williamr@2: IMPORT_C Width* WidthList(int i); williamr@2: IMPORT_C int NumWidths(); williamr@2: ~WidthsCodeSection(); williamr@2: public: williamr@2: /** Start of list. */ williamr@2: uint16 iStart; williamr@2: /** End of list. */ williamr@2: uint16 iEnd; williamr@2: private: williamr@2: ObjectList iWidthList; williamr@2: }; williamr@2: williamr@2: class FontInfo : public Record williamr@2: /** williamr@2: This class contains information about fonts. It is used by a printer description. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static FontInfo* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: IMPORT_C void AddCodeSection(WidthsCodeSection* aCodeSection); williamr@2: IMPORT_C WidthsCodeSection* CodeSectionList(int i); williamr@2: IMPORT_C int NumCodeSections(); williamr@2: private: williamr@2: ~FontInfo(); williamr@2: public: williamr@2: /** Font ascent in pixels. */ williamr@2: uint16 iAscentInPixels; williamr@2: /** Maximum font character width in pixels. */ williamr@2: uint16 iMaxCharWidthInPixels; williamr@2: /** Normal font character width in pixels. */ williamr@2: uint16 iMaxNormalCharWidthInPixels; williamr@2: private: williamr@2: ObjectList iCodeSectionList; williamr@2: }; williamr@2: williamr@2: class PdrStyle williamr@2: /** williamr@2: This class contains information about a font style used in a printer descriptions. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PdrStyle* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: PdrStyle(); williamr@2: public: williamr@2: /** Determines whether the font is available for use. */ williamr@2: boolean iIsAvailable; williamr@2: /** Reference to a record containing information about the font. */ williamr@2: Record *iFontInfo; williamr@2: }; williamr@2: williamr@2: class PdrFontHeight williamr@2: /** williamr@2: This class stores information for use in printer descriptions about font heights williamr@2: and relative scaling. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PdrFontHeight* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: PdrFontHeight(); williamr@2: public: williamr@2: /** Command string associated with font height. */ williamr@2: String iCommandString; williamr@2: /** Font height in twips. */ williamr@2: int32 iHeightInTwips; williamr@2: /** Width scaling. */ williamr@2: int32 iWidthScale; williamr@2: /** Array containing space for four styles. */ williamr@2: PdrStyle iStyle[BoldItalic + 1]; // Array for four styles williamr@2: }; williamr@2: williamr@2: class PdrScalableFontHeight williamr@2: /** williamr@2: This class contains information on scalable fonts used by printer descriptions. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: PdrScalableFontHeight(); williamr@2: void Externalize(ostream& out); williamr@2: public: williamr@2: /** Contains a printer command string associated with this font. */ williamr@2: String iCommandString; williamr@2: /** Minimum height in twips. */ williamr@2: int32 iHeightMinInTwips; williamr@2: /** Maximum height in twips. */ williamr@2: int32 iHeightMaxInTwips; williamr@2: /** Scale delta in twips. */ williamr@2: int32 iHeightDeltaInTwips; williamr@2: /** Array for four styles. */ williamr@2: PdrStyle iStyle[BoldItalic + 1]; // Array for four styles williamr@2: }; williamr@2: williamr@2: class TypefaceFonts : public Record williamr@2: /** williamr@2: This class encapsulates a list of font heights for printer descriptions. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TypefaceFonts* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: IMPORT_C void AddFontHeight(PdrFontHeight* aFontHeight); williamr@2: IMPORT_C int NumFontHeights(); williamr@2: PdrFontHeight* FontHeightList(int i); williamr@2: private: williamr@2: TypefaceFonts(); williamr@2: ~TypefaceFonts(); williamr@2: public: williamr@2: Typeface iTypeface; williamr@2: /** Determines whether the font height is scalable. */ williamr@2: boolean iIsScalable; williamr@2: private: williamr@2: ObjectList iFontHeightList; williamr@2: public: williamr@2: /** Describes a scalable font height. */ williamr@2: PdrScalableFontHeight iScalableFontHeight; williamr@2: Record *iTranslates; williamr@2: }; williamr@2: williamr@2: class TypefaceFontsEntry williamr@2: /** williamr@2: This class encapsulates information about a printer font. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static TypefaceFontsEntry* New(Record* aTypefaceFonts); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: private: williamr@2: TypefaceFontsEntry(Record* aTypefaceFonts); williamr@2: public: williamr@2: ~TypefaceFontsEntry(); williamr@2: public: williamr@2: /** Contains the font record. */ williamr@2: Record* iTypefaceFonts; williamr@2: /** Determines whether the font can be used in portrait view. */ williamr@2: boolean iNotInPortrait; williamr@2: /** Determines whether the font can be used in landscape view. */ williamr@2: boolean iNotInLandscape; williamr@2: }; williamr@2: williamr@2: class Margins williamr@2: /** williamr@2: This class contains the margins used by a printer description. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: void Externalize(ostream& out); williamr@2: public: williamr@2: /** Left margin. */ williamr@2: int32 iLeft; williamr@2: /** Right margin. */ williamr@2: int32 iRight; williamr@2: /** Top margin. */ williamr@2: int32 iTop; williamr@2: /** Bottom margin. */ williamr@2: int32 iBottom; williamr@2: }; williamr@2: /* williamr@2: class PdrExtraInfo : public Record williamr@2: { williamr@2: public: williamr@2: ~PdrExtraInfo(); williamr@2: void Externalize(ostream& out); williamr@2: public: williamr@2: ObjectList iInfo; williamr@2: }; williamr@2: */ williamr@2: class PdrModelInfo williamr@2: /** williamr@2: This class contains information about a printer model used by a printer description. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: void Externalize(ostream& out); williamr@2: IMPORT_C void AddTypefaceFontsEntry(TypefaceFontsEntry* aTypefaceFontsEntry); williamr@2: int NumTypefaceFontsEntries(); williamr@2: TypefaceFontsEntry* TypefaceFontsEntryList(int i); williamr@2: PdrModelInfo(); williamr@2: ~PdrModelInfo(); williamr@2: public: williamr@2: streampos iStreamId; williamr@2: /** Flags associated with model. */ williamr@2: int32 iFlags; williamr@2: /** Pixel width in twips. */ williamr@2: int32 iKPixelWidthInTwips; williamr@2: /** Pixel height in twips. */ williamr@2: int32 iKPixelHeightInTwips; williamr@2: /** Portrait printng offset in twips. */ williamr@2: Point iPortraitOffsetInPixels; williamr@2: /** Landscape printing offset in twips. */ williamr@2: Point iLandscapeOffsetInPixels; williamr@2: /** Minimum margin in pixels. */ williamr@2: Margins iMinMarginsInPixels; williamr@2: /** Display mode. */ williamr@2: int32 iDisplayMode; williamr@2: private: williamr@2: ObjectList iTypefaceFontsEntryList; williamr@2: public: williamr@2: Record *iResources; williamr@2: Record *iSpareRecord; williamr@2: }; williamr@2: williamr@2: class PrinterModelEntry williamr@2: /** williamr@2: This class contains information on a printer model. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: PrinterModelEntry(); williamr@2: void Externalize(ostream& out); williamr@2: public: williamr@2: /** Printer name. */ williamr@2: String iName; williamr@2: /** Whether a printer port is required. */ williamr@2: boolean iRequiresPrinterPort; williamr@2: uid iUid; williamr@2: }; williamr@2: williamr@2: class PrinterModelHeader : public Record williamr@2: /** williamr@2: This class encapsulates information about a printer model. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PrinterModelHeader* New(); williamr@2: IMPORT_C void Delete(); williamr@2: void Externalize(ostream& out); williamr@2: void ExternalizeData(ostream& out); williamr@2: boolean IsPdrModel(); williamr@2: public: williamr@2: /** Printer model entry. */ williamr@2: PrinterModelEntry iEntry; williamr@2: /** Printer model information. */ williamr@2: PdrModelInfo iInfo; williamr@2: }; williamr@2: williamr@2: class PdrStoreFile : public Record williamr@2: /** williamr@2: This class stores printer description files. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C static PdrStoreFile* New(); williamr@2: IMPORT_C void Delete(); williamr@2: IMPORT_C void AddModel(PrinterModelHeader *aModel); williamr@2: void Externalize(ostream& out); williamr@2: private: williamr@2: PdrStoreFile(); williamr@2: private: williamr@2: void AddTypefaceFonts(TypefaceFonts* aTypefaceFonts); williamr@2: void ExternalizeHeader(ostream& out); williamr@2: void ExternalizeComponents(ostream& out); williamr@2: public: williamr@2: /** Printer descriptor. */ williamr@2: String iPDLName; williamr@2: uid iPDLUid; williamr@2: private: williamr@2: RecordList iModelList; williamr@2: RecordList iTypefaceFontsList; williamr@2: RecordList iFontInfoList; williamr@2: RecordList iResourcesList; williamr@2: RecordList iTranslatesList; williamr@2: // RecordList iExtraInfoList; williamr@2: }; williamr@2: williamr@2: class PdrModelStore williamr@2: /** williamr@2: This class is used to store information about printer models, and externalize williamr@2: it to external files. williamr@2: @publishedAll williamr@2: @released williamr@2: */ williamr@2: { williamr@2: public: williamr@2: IMPORT_C boolean Store(const String& aFilename); williamr@2: IMPORT_C void AddPdrStoreFile(PdrStoreFile* aPdrStoreFile); williamr@2: IMPORT_C void AddModel(PrinterModelHeader *aModel); williamr@2: IMPORT_C Record* FindModel(String& aLabel); williamr@2: IMPORT_C void AddTypefaceFonts(TypefaceFonts *aTypefaceFonts); williamr@2: IMPORT_C Record* FindTypefaceFonts(String& aLabel); williamr@2: IMPORT_C void AddFontInfo(FontInfo *aFontInfo); williamr@2: IMPORT_C Record* FindFontInfo(String& aLabel); williamr@2: IMPORT_C void AddResources(PdrResources *aResources); williamr@2: IMPORT_C Record* FindResources(String& aLabel); williamr@2: IMPORT_C void AddTranslates(PdrTranslates *aTranslates); williamr@2: IMPORT_C Record* FindTranslates(String& aLabel); williamr@2: // void AddExtraInfo(PdrExtraInfo *aInfo); williamr@2: // Record* FindExtraInfo(String& aLabel); williamr@2: PdrModelStore(); williamr@2: ~PdrModelStore(); williamr@2: private: williamr@2: /** This attribute is internal, and is not intended for use. */ williamr@2: PdrStoreFile* iPdrStoreFile; williamr@2: RecordList iModelList; williamr@2: RecordList iTypefaceFontsList; williamr@2: RecordList iFontInfoList; williamr@2: RecordList iResourcesList; williamr@2: RecordList iTranslatesList; williamr@2: // RecordList iExtraInfoList; williamr@2: }; williamr@2: williamr@2: #endif