diff -r acc370d7f2f6 -r 2275db202402 DirectPrint/DirectPrintApp/src/directprintprinterinforeader.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DirectPrint/DirectPrintApp/src/directprintprinterinforeader.cpp Tue May 11 14:10:02 2010 +0800 @@ -0,0 +1,246 @@ +/* +* Copyright (c) 2010 Kanrikogaku Kenkyusho, Ltd. +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* Kanrikogaku Kenkyusho, Ltd. - Initial contribution +* +* Contributors: +* +* Description: +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include + +#include "DirectPrintModel.h" +#include "directprintprinterinforeader.h" + +CDirectPrintPrinterInfoReader::CDirectPrintPrinterInfoReader(CDirectPrintModel& aModel) + : iModel(aModel) + { + } + +CDirectPrintPrinterInfoReader::~CDirectPrintPrinterInfoReader() + { + if (iXmlEngDoc.NotNull()) + { + iXmlEngDoc.Close(); + iXmlParser.Close(); + iXmlDomImpl.Close(); + } + } + +CDirectPrintPrinterInfoReader* CDirectPrintPrinterInfoReader::NewL(CDirectPrintModel& aModel) + { + CDirectPrintPrinterInfoReader* self = CDirectPrintPrinterInfoReader::NewLC(aModel); + CleanupStack::Pop(self); + return self; + } + +CDirectPrintPrinterInfoReader* CDirectPrintPrinterInfoReader::NewLC(CDirectPrintModel& aModel) + { + CDirectPrintPrinterInfoReader* self = new(ELeave) CDirectPrintPrinterInfoReader(aModel); + CleanupStack::PushL(self); + self->ConstructL(); + return self; + } + +void CDirectPrintPrinterInfoReader::ConstructL() + { + iXmlDomImpl.OpenL(); + TInt err = iXmlParser.Open(iXmlDomImpl); + User::LeaveIfError(err); + } + +void CDirectPrintPrinterInfoReader::ReadPrinterInfoL() + { + TDirectPrintPrinterData printer; + iModel.GetPrinterDataL(0, printer); + + _LIT( KFilePath, "c:\\printers\\*.xml"); + _LIT( KFilePathFormat, "c:\\printers\\%S"); + + CDir* fileList; + const TUint KMask = KEntryAttNormal|KEntryAttReadOnly|KEntryAttHidden|KEntryAttSystem; + User::LeaveIfError(CEikonEnv::Static()->FsSession().GetDir(KFilePath, KMask, ESortByName, fileList)); + CleanupStack::PushL(fileList); + + TInt count = fileList->Count(); + for (TInt i=0; i elementName; + elementName.Copy(element.Name()); + if (element.Name().CompareF(KElementManufacture()) == 0) + { + aManufacture.Copy(element.Value()); + break; + } + + element = element.NextSibling().AsElement(); + } + } + } + +TUid CDirectPrintPrinterInfoReader::GetDriverL(TDesC& aId) + { + TUint uidValue = 0; + + if (iXmlEngDoc.NotNull()) + { + _LIT8(KElementPrinters, "Printers"); + _LIT8(KElementPrinter, "Printer"); + _LIT8(KElementDriver, "Driver"); + _LIT8(KAttributeId, "id"); + + TXmlEngElement element = iXmlEngDoc.DocumentElement().FirstChild().AsElement(); + + while (element.NotNull()) + { + TBuf<50> elementName; + elementName.Copy(element.Name()); + if (element.Name().CompareF(KElementPrinters()) == 0) + { + element = element.FirstChild().AsElement(); + } + else if (element.Name().CompareF(KElementPrinter()) == 0) + { + TBool next = EFalse; + TBuf<50> attrValue; + TXmlEngAttr attr = element.AttributeNodeL(KAttributeId); + attrValue.Copy(attr.Value()); + if (aId.CompareF(attrValue) == 0) + { + element = element.FirstChild().AsElement(); + next = ETrue; + } + + if (!next) + { + element = element.NextSibling().AsElement(); + } + } + else if (element.Name().CompareF(KElementDriver()) == 0) + { + TLex8 lex(element.Value()); + lex.Val(uidValue, EHex); + break; + } + else + { + element = element.NextSibling().AsElement(); + } + } + } + + return TUid::Uid(uidValue); + } + +TUid CDirectPrintPrinterInfoReader::GetSettingUIPluginL(TDesC& aId) + { + TUint uidValue = 0; + + if (iXmlEngDoc.NotNull()) + { + _LIT8(KElementPrinters, "Printers"); + _LIT8(KElementPrinter, "Printer"); + _LIT8(KElementSettingUIPlugin, "SettingUIPlugin"); + _LIT8(KAttributeId, "id"); + + TXmlEngElement element = iXmlEngDoc.DocumentElement().FirstChild().AsElement(); + + while (element.NotNull()) + { + if (element.Name().CompareF(KElementPrinters()) == 0) + { + element = element.FirstChild().AsElement(); + } + else if (element.Name().CompareF(KElementPrinter()) == 0) + { + TBool next = EFalse; + TBuf<50> attrValue; + TXmlEngAttr attr = element.AttributeNodeL(KAttributeId); + attrValue.Copy(attr.Value()); + if (aId.CompareF(attrValue) == 0) + { + element = element.FirstChild().AsElement(); + next = ETrue; + } + + if (!next) + { + element = element.NextSibling().AsElement(); + } + } + else if (element.Name().CompareF(KElementSettingUIPlugin()) == 0) + { + TLex8 lex(element.Value()); + lex.Val(uidValue, EHex); + break; + } + + element = element.NextSibling().AsElement(); + } + } + + return TUid::Uid(uidValue); + } + +void CDirectPrintPrinterInfoReader::ReadXmlDataL(const TDesC& aFilename) + { + if (iXmlEngDoc.NotNull()) + { + iXmlEngDoc.Close(); + } + iXmlEngDoc = iXmlParser.ParseFileL(aFilename); + } + +TBool CDirectPrintPrinterInfoReader::CheckManufactureL(const TDesC& aParam) + { + TBool res = EFalse; + TBuf<50> buf; + GetManufactureL(buf); + if (aParam.Compare(buf) == 0) + { + res = ETrue; + } + return res; + } +