--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/graphicstools/bitmapfonttools/src/PDRRECRD.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,785 @@
+/*
+* Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* Header PDRRECRD.CPP
+*
+*/
+
+
+#include "PDRRECRD.H"
+
+EXPORT_C PdrResource* PdrResource::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new PdrResource();
+ }
+
+EXPORT_C void PdrResource::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void PdrResource::Externalize(ostream& out)
+ {
+ uint8 id = (uint8) iId;
+ out.write((char*) &id, sizeof(id));
+ iString.Externalize(out);
+ }
+
+EXPORT_C PdrResources* PdrResources::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new PdrResources();
+ }
+
+EXPORT_C void PdrResources::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void PdrResources::Externalize(ostream& out)
+ {
+ iStreamId = out.tellp();
+ iPdrResourceList.Externalize(out);
+ }
+
+EXPORT_C void PdrResources::AddResource(PdrResource* aResource)
+/** Adds a printer resource to the object.
+
+@param aResource Printer resource. */
+ {
+ iPdrResourceList.Add(aResource);
+ }
+
+PdrResources::~PdrResources()
+/** Default destructor. */
+ {
+ iPdrResourceList.Destroy();
+ }
+
+EXPORT_C PdrTranslation* PdrTranslation::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new PdrTranslation();
+ }
+
+EXPORT_C void PdrTranslation::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void PdrTranslation::Externalize(ostream& out)
+ {
+ out.write((char*) &iFrom, sizeof(iFrom));
+ iTo.Externalize(out);
+ }
+
+EXPORT_C PdrTranslates* PdrTranslates::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new PdrTranslates();
+ }
+
+EXPORT_C void PdrTranslates::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void PdrTranslates::Externalize(ostream& out)
+ {
+ iStreamId = out.tellp();
+ iPdrTranslationList.Externalize(out);
+ }
+
+EXPORT_C void PdrTranslates::AddTranslation(PdrTranslation* aTranslation)
+/** Adds a printer translation to the list.
+
+@param aTranslation Reference to a translation. */
+ {
+ iPdrTranslationList.Add(aTranslation);
+ }
+
+PdrTranslates::~PdrTranslates()
+/** This function is internal, and is not intended for use. */
+ {
+ iPdrTranslationList.Destroy();
+ }
+
+EXPORT_C Width* Width::New()
+/** Creates a new instance of this object.
+
+@return Reference to a new object. */
+ {
+ return new Width();
+ }
+
+EXPORT_C void Width::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void Width::Externalize(ostream& out)
+ {
+ out.write ((char*) &iWidthInPixels, sizeof(iWidthInPixels));
+ }
+
+WidthsCodeSection::WidthsCodeSection()
+ : iWidthList()
+/** This function is internal only, and is not intended for use. */
+ {
+ }
+
+EXPORT_C WidthsCodeSection* WidthsCodeSection::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new WidthsCodeSection();
+ }
+
+EXPORT_C void WidthsCodeSection::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void WidthsCodeSection::Externalize(ostream& out)
+ {
+ out.write((char*) &iStart, sizeof(iStart));
+ out.write((char*) &iEnd, sizeof(iEnd));
+ iWidthList.Externalize(out);
+ }
+
+EXPORT_C void WidthsCodeSection::AddWidth(Width* aWidth)
+/** Adds a new font width to the list.
+
+@param aWidth Font width. */
+ {
+ iWidthList.Add(aWidth);
+ }
+
+EXPORT_C Width* WidthsCodeSection::WidthList(int i)
+/** Returns a font width from the list at the position specified.
+
+@param i Position of font width in list.
+@return Reference to a font width. */
+ {
+ return iWidthList[i];
+ }
+
+EXPORT_C int WidthsCodeSection::NumWidths()
+/** Returns the number of font widths in the list.
+
+@return Number of widths. */
+ {
+ return iWidthList.Size();
+ }
+
+WidthsCodeSection::~WidthsCodeSection()
+/** Default destructor. */
+ {
+ iWidthList.Destroy();
+ }
+
+EXPORT_C FontInfo* FontInfo::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new instance of this class. */
+ {
+ return new FontInfo();
+ }
+
+EXPORT_C void FontInfo::Delete()
+/** Deletes the current FontInfo object. */
+ {
+ delete this;
+ }
+
+void FontInfo::Externalize(ostream& out)
+ {
+ iStreamId = out.tellp();
+ out.write((char*) &iAscentInPixels, sizeof(iAscentInPixels));
+ out.write((char*) &iMaxCharWidthInPixels, sizeof(iMaxCharWidthInPixels));
+ out.write((char*) &iMaxNormalCharWidthInPixels, sizeof(iMaxNormalCharWidthInPixels));
+ iCodeSectionList.Externalize(out);
+ }
+
+EXPORT_C void FontInfo::AddCodeSection(WidthsCodeSection* aCodeSection)
+/** Adds a section of information about the font to an internally-stored array.
+
+@param aCodeSection Font information. */
+ {
+ iCodeSectionList.Add(aCodeSection);
+ }
+
+EXPORT_C WidthsCodeSection* FontInfo::CodeSectionList(int i)
+/** Returns a section of font information from a specified position in the internally-stored
+array.
+
+@param i Postion of information in the array.
+@return Reference to section of font information. */
+ {
+ return iCodeSectionList[i];
+ }
+
+EXPORT_C int FontInfo::NumCodeSections()
+/** Returns the number of sections of font information in the internally-stored
+array.
+
+@return Current number of font information sections. */
+ {
+ return iCodeSectionList.Size();
+ }
+
+FontInfo::~FontInfo()
+/** This function is internal, and not intended for use. */
+ {
+ iCodeSectionList.Destroy();
+ }
+
+EXPORT_C PdrStyle* PdrStyle::New()
+/** Creates a new instance of this class
+
+@return Reference to a new object. */
+ {
+ return new PdrStyle();
+ }
+
+EXPORT_C void PdrStyle::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void PdrStyle::Externalize(ostream& out)
+ {
+ out.write((char*) &iIsAvailable, sizeof(iIsAvailable));
+ streamoff streamid = 0;
+ if (iIsAvailable)
+ streamid = iFontInfo->iStreamId;
+ ::ExternalizeStreamOff(out, streamid);
+ }
+
+PdrStyle::PdrStyle()
+ : iIsAvailable(efalse)
+/** Default constructor. */
+ {
+ }
+
+EXPORT_C PdrFontHeight* PdrFontHeight::New()
+/** Returns a new instance of this class.
+
+@return Reference to new object. */
+ {
+ return new PdrFontHeight();
+ }
+
+EXPORT_C void PdrFontHeight::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void PdrFontHeight::Externalize(ostream& out)
+ {
+ iCommandString.Externalize(out);
+ out.write((char*) &iHeightInTwips, sizeof(iHeightInTwips));
+ out.write((char*) &iWidthScale, sizeof(iWidthScale));
+ for (int style = Normal;style <= BoldItalic; style++)
+ iStyle[style].Externalize(out);
+ }
+
+PdrFontHeight::PdrFontHeight():
+ iWidthScale(1)
+/** Default constructor. */
+ {
+ }
+
+PdrScalableFontHeight::PdrScalableFontHeight()
+/** Default constructor. */
+ {
+ }
+
+void PdrScalableFontHeight::Externalize(ostream& out)
+ {
+ iCommandString.Externalize(out);
+ out.write((char*) &iHeightMinInTwips, sizeof(iHeightMinInTwips));
+ out.write((char*) &iHeightMaxInTwips, sizeof(iHeightMaxInTwips));
+ out.write((char*) &iHeightDeltaInTwips, sizeof(iHeightDeltaInTwips));
+ for (int style = Normal; style <= BoldItalic; style++)
+ iStyle[style].Externalize(out);
+ }
+
+EXPORT_C TypefaceFonts* TypefaceFonts::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new TypefaceFonts();
+ }
+
+EXPORT_C void TypefaceFonts::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void TypefaceFonts::Externalize(ostream& out)
+ {
+ iStreamId = out.tellp();
+ iTypeface.Externalize(out);
+ out.write((char*) &iIsScalable, sizeof(iIsScalable));
+ if (iIsScalable)
+ iScalableFontHeight.Externalize(out);
+ else
+ iFontHeightList.Externalize(out);
+ ::ExternalizeStreamOff(out, iTranslates->iStreamId);
+ }
+
+EXPORT_C void TypefaceFonts::AddFontHeight(PdrFontHeight* aFontHeight)
+ {
+ iFontHeightList.Add(aFontHeight);
+ }
+
+EXPORT_C int TypefaceFonts::NumFontHeights()
+/** Returns the number of font height descriptions currently held in the list.
+
+@return Number of descriptions. */
+ {
+ return iFontHeightList.Size();
+ }
+
+PdrFontHeight* TypefaceFonts::FontHeightList(int i)
+/** Returns the font height description from the position specified in the list.
+
+@param i Position of description.
+@return Font height description. */
+ {
+ return iFontHeightList[i];
+ }
+
+TypefaceFonts::TypefaceFonts():
+ iIsScalable(efalse)
+/** This function is internal only, and is not intended for use. */
+ {
+ }
+
+TypefaceFonts::~TypefaceFonts()
+/** This function is internal only, and is not intended for use. */
+ {
+ iFontHeightList.Destroy();
+ }
+
+EXPORT_C TypefaceFontsEntry* TypefaceFontsEntry::New(Record* aTypefaceFonts)
+ {
+ return new TypefaceFontsEntry(aTypefaceFonts);
+ }
+
+EXPORT_C void TypefaceFontsEntry::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void TypefaceFontsEntry::Externalize(ostream& out)
+ {
+ ::ExternalizeStreamOff(out, iTypefaceFonts->iStreamId);
+ out.write((char*) &iNotInPortrait, sizeof(iNotInPortrait));
+ out.write((char*) &iNotInLandscape, sizeof(iNotInLandscape));
+ }
+
+TypefaceFontsEntry::TypefaceFontsEntry(Record* aTypefaceFonts)
+ : iTypefaceFonts(aTypefaceFonts), iNotInPortrait(efalse), iNotInLandscape(efalse)
+ {
+ }
+
+TypefaceFontsEntry::~TypefaceFontsEntry()
+/** Default destructor. */
+ {
+ }
+
+void Margins::Externalize(ostream& out)
+ {
+ out.write((char*) &iLeft, sizeof(iLeft));
+ out.write((char*) &iRight, sizeof(iRight));
+ out.write((char*) &iTop, sizeof(iTop));
+ out.write((char*) &iBottom, sizeof(iBottom));
+ }
+
+/*
+PdrExtraInfo::~PdrExtraInfo()
+ {
+ iInfo.Destroy();
+ }
+
+void PdrExtraInfo::Externalize(ostream& out)
+ {
+ iInfo.Externalize(out);
+ }
+*/
+
+void PdrModelInfo::Externalize(ostream& out)
+ {
+ iStreamId=out.tellp();
+ out.write((char*) &KPdrtranVersion, sizeof(KPdrtranVersion));
+ out.write((char*) &iFlags, sizeof(iFlags));
+ out.write((char*) &iKPixelWidthInTwips, sizeof(iKPixelWidthInTwips));
+ out.write((char*) &iKPixelHeightInTwips, sizeof(iKPixelHeightInTwips));
+ iPortraitOffsetInPixels.Externalize(out);
+ iLandscapeOffsetInPixels.Externalize(out);
+ iMinMarginsInPixels.Externalize(out);
+ out.write((char*) &iDisplayMode, sizeof(iDisplayMode));
+ iTypefaceFontsEntryList.Externalize(out);
+ ::ExternalizeStreamOff(out, iResources->iStreamId);
+ streamoff streamid = 0;
+ if (iSpareRecord)
+ streamid = iSpareRecord->iStreamId;
+ ::ExternalizeStreamOff(out, streamid);
+ }
+
+EXPORT_C void PdrModelInfo::AddTypefaceFontsEntry(TypefaceFontsEntry* aTypefaceFontsEntry)
+/** Adds an entry containing information about typeface fonts to an internally-stored
+array.
+
+@param aTypefaceFontsEntry Typeface font information. */
+ {
+ iTypefaceFontsEntryList.Add(aTypefaceFontsEntry);
+ }
+
+int PdrModelInfo::NumTypefaceFontsEntries()
+/** Returns the number of entries containing information about typeface fonts in
+the internally-stored array.
+
+@return Number of entries. */
+ {
+ return iTypefaceFontsEntryList.Size();
+ }
+
+TypefaceFontsEntry* PdrModelInfo::TypefaceFontsEntryList(int i)
+/** Returns the typeface font entry stored the internal array from the position
+specified.
+
+@param i Position in array.
+@return Typeface font entry. */
+ {
+ return iTypefaceFontsEntryList[i];
+ }
+
+PdrModelInfo::PdrModelInfo()
+ : iStreamId(0),
+ iFlags(0),
+ iKPixelWidthInTwips(0),
+ iKPixelHeightInTwips(0),
+ iPortraitOffsetInPixels(),
+ iLandscapeOffsetInPixels(),
+ iMinMarginsInPixels(),
+ iDisplayMode(0),
+ iTypefaceFontsEntryList(),
+ iResources(NULL),
+ iSpareRecord(NULL) // !! Not used yet
+/** Default constructor. */
+ {
+ }
+
+PdrModelInfo::~PdrModelInfo()
+/** Default destructor. */
+ {
+ iTypefaceFontsEntryList.Destroy();
+ }
+
+PrinterModelEntry::PrinterModelEntry()
+ : iName(), iRequiresPrinterPort(efalse), iUid(KNullUid)
+/** Default constructor. */
+ {
+ }
+
+void PrinterModelEntry::Externalize(ostream& out)
+ {
+ iName.Externalize(out);
+ out.write((char*) &iRequiresPrinterPort, sizeof(iRequiresPrinterPort));
+ out.write((char*) &iUid, sizeof(iUid));
+ }
+
+EXPORT_C PrinterModelHeader* PrinterModelHeader::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new PrinterModelHeader();
+ }
+
+EXPORT_C void PrinterModelHeader::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+void PrinterModelHeader::Externalize(ostream& out)
+ {
+ iEntry.Externalize(out);
+ ::ExternalizeStreamOff(out, iInfo.iStreamId);
+ }
+
+void PrinterModelHeader::ExternalizeData(ostream& out)
+ {
+ iInfo.Externalize(out);
+ }
+
+boolean PrinterModelHeader::IsPdrModel()
+/** Determines whether printer information is available for this printer model.
+
+@return ETrue: printer description is available. */
+ {
+ return iInfo.NumTypefaceFontsEntries() || iInfo.iResources;
+ }
+
+EXPORT_C PdrStoreFile* PdrStoreFile::New()
+/** Creates a new instance of this class.
+
+@return Reference to a new object. */
+ {
+ return new PdrStoreFile();
+ }
+
+EXPORT_C void PdrStoreFile::Delete()
+/** Deletes the current object. */
+ {
+ delete this;
+ }
+
+EXPORT_C void PdrStoreFile::AddModel(PrinterModelHeader* aModel)
+/** Adds a printer model.
+
+@param aModel Printer model. */
+ {
+ iModelList.Add(aModel);
+ if (aModel->IsPdrModel())
+ {
+ for (int i = 0; i < aModel->iInfo.NumTypefaceFontsEntries(); i++)
+ AddTypefaceFonts((TypefaceFonts*) aModel->iInfo.TypefaceFontsEntryList(i)->iTypefaceFonts);
+ iResourcesList.Add(aModel->iInfo.iResources);
+// if (aModel->iInfo.iSpareRecord)
+// iExtraInfoList.Add(aModel->iInfo.iSpareRecord);
+ }
+ }
+
+void PdrStoreFile::Externalize(ostream& out)
+ {
+ ExternalizeHeader(out);
+ ExternalizeComponents(out);
+ }
+
+void PdrStoreFile::ExternalizeHeader(ostream& out)
+ {
+ out.write((char*) &KStoreWriteOnceLayoutUid, sizeof(KStoreWriteOnceLayoutUid));
+ out.write((char*) &KPdrStoreFileUid, sizeof(KPdrStoreFileUid));
+ out.write((char*) &KNullUid, sizeof(KNullUid));
+ out.write((char*) &KPdrStoreFileChecksum, sizeof(KPdrStoreFileChecksum));
+ ::ExternalizeStreamOff(out, iStreamId);
+ iStreamId = out.tellp();
+ iPDLName.Externalize(out);
+ out.write((char*) &iPDLUid, sizeof(iPDLUid));
+ iModelList.Externalize(out);
+ }
+
+void PdrStoreFile::AddTypefaceFonts(TypefaceFonts* aTypefaceFonts)
+ {
+ iTypefaceFontsList.Add(aTypefaceFonts);
+ iTranslatesList.Add(aTypefaceFonts->iTranslates);
+ if (aTypefaceFonts->iIsScalable)
+ {
+ for (int style = Normal; style <= BoldItalic; style++)
+ {
+ if (aTypefaceFonts->iScalableFontHeight.iStyle[style].iIsAvailable)
+ iFontInfoList.Add(aTypefaceFonts->iScalableFontHeight.iStyle[style].iFontInfo);
+ }
+ }
+ else
+ {
+ for (int j = 0; j < aTypefaceFonts->NumFontHeights(); j++)
+ {
+ PdrFontHeight* fontheight = aTypefaceFonts->FontHeightList(j);
+ for (int style = Normal; style <= BoldItalic; style++)
+ {
+ if (fontheight->iStyle[style].iIsAvailable)
+ iFontInfoList.Add(fontheight->iStyle[style].iFontInfo);
+ }
+ }
+ }
+ }
+
+void PdrStoreFile::ExternalizeComponents(ostream& out)
+ {
+ for (int i = 0; i < iModelList.Size(); i++)
+ {
+ PrinterModelHeader* model = (PrinterModelHeader*) iModelList[i];
+ if (model->IsPdrModel())
+ model->ExternalizeData(out);
+ }
+ iTypefaceFontsList.Externalize(out);
+ iFontInfoList.Externalize(out);
+ iResourcesList.Externalize(out);
+ iTranslatesList.Externalize(out);
+// iExtraInfoList.Externalize(out);
+ }
+
+PdrStoreFile::PdrStoreFile()
+ : Record(),
+ iPDLName(),
+ iPDLUid(KNullUid),
+ iModelList(),
+ iTypefaceFontsList(),
+ iFontInfoList(),
+ iResourcesList(),
+ iTranslatesList()
+/** This function is internal only, and is not intended for use. */
+ {
+ }
+
+EXPORT_C boolean PdrModelStore::Store(const String& aFilename)
+/** Externalizes printer information from the store to the specfied external file.
+
+@param aFilename Filename.
+@return ETrue: store successful. */
+ {
+ boolean state = efalse;
+ ofstream fout;
+ String string = aFilename;
+ fout.open(string.Text(), ios::binary);
+ if (!fout.fail())
+ {
+ iPdrStoreFile->Externalize(fout);
+ fout.close();
+ fout.open(string.Text(), ios::binary | ios::trunc);
+ iPdrStoreFile->Externalize(fout);
+ fout.close();
+ state = etrue;
+ }
+ return state;
+ }
+
+EXPORT_C void PdrModelStore::AddPdrStoreFile(PdrStoreFile* aPdrStoreFile)
+ {
+ iPdrStoreFile = aPdrStoreFile;
+ }
+
+EXPORT_C void PdrModelStore::AddModel(PrinterModelHeader *aModel)
+/** Adds a printer model to the store.
+
+@param aModel Printer model. */
+ {
+ iModelList.Add(aModel);
+ }
+
+EXPORT_C Record *PdrModelStore::FindModel(String& aLabel)
+ {
+ return iModelList.LabelToRecord(aLabel);
+ }
+
+EXPORT_C void PdrModelStore::AddTypefaceFonts(TypefaceFonts *aTypefaceFonts)
+/** Adds typeface information to the store.
+
+@param aTypefaceFonts Typeface fonts. */
+ {
+ iTypefaceFontsList.Add(aTypefaceFonts);
+ }
+
+EXPORT_C Record *PdrModelStore::FindTypefaceFonts(String& aLabel)
+ {
+ return iTypefaceFontsList.LabelToRecord(aLabel);
+ }
+
+EXPORT_C void PdrModelStore::AddFontInfo(FontInfo *aFontInfo)
+/** Adds font information to the store.
+
+@param aFontInfo Font information. */
+ {
+ iFontInfoList.Add(aFontInfo);
+ }
+
+EXPORT_C Record *PdrModelStore::FindFontInfo(String& aLabel)
+ {
+ return iFontInfoList.LabelToRecord(aLabel);
+ }
+
+EXPORT_C void PdrModelStore::AddResources(PdrResources *aResources)
+ {
+ iResourcesList.Add(aResources);
+ }
+
+EXPORT_C Record *PdrModelStore::FindResources(String& aLabel)
+ {
+ return iResourcesList.LabelToRecord(aLabel);
+ }
+
+EXPORT_C void PdrModelStore::AddTranslates(PdrTranslates *aTranslates)
+/** Adds printer translations to the store.
+
+@param aTranslates Translation list. */
+ {
+ iTranslatesList.Add(aTranslates);
+ }
+
+EXPORT_C Record *PdrModelStore::FindTranslates(String& aLabel)
+ {
+ return iTranslatesList.LabelToRecord(aLabel);
+ }
+
+ /*
+void PdrModelStore::AddExtraInfo(PdrExtraInfo *aInfo)
+ {
+ iExtraInfoList.Add(aInfo);
+ }
+
+Record* PdrModelStore::FindExtraInfo(String& aLabel)
+ {
+ return iExtraInfoList.LabelToRecord(aLabel);
+ }
+*/
+
+PdrModelStore::PdrModelStore()
+ : iPdrStoreFile(NULL),
+ iModelList(),
+ iTypefaceFontsList(),
+ iFontInfoList(),
+ iResourcesList()//,
+// iExtraInfoList()
+/** Default constructor. */
+ {
+ }
+
+PdrModelStore::~PdrModelStore()
+/** Default destructor. */
+ {
+ delete iPdrStoreFile;
+ iModelList.Destroy();
+ iTypefaceFontsList.Destroy();
+ iFontInfoList.Destroy();
+ iResourcesList.Destroy();
+ iTranslatesList.Destroy();
+// iExtraInfoList.Destroy();
+ }