--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/DirectPrint/DirectPrintApp/src/directprintbearermgr.cpp Wed Mar 31 00:04:55 2010 +0900
@@ -0,0 +1,357 @@
+/*
+* 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:
+* {Description of the file}
+*
+*/
+
+// User includes
+#include "clog.h"
+#include "DirectPrintApp.pan"
+#include "DirectPrintBearerMgr.h"
+#include "DirectPrintModel.h"
+#include "directprintbearerdata.h"
+#include "directprintprinterdata.h"
+
+#include "directprintprintsettings.h"
+#include "directprinttintcapability.h"
+#include "directprintlistcapability.h"
+#include "directprintfloatcapability.h"
+#include "directprinttextcapability.h"
+#include "directprintsettingsconverter.h"
+#include "directprintcapability.h"
+
+const TInt PROTOCOL_ID_BIT_COUNT = 6;
+
+CDirectPrintBearerMgr::CDirectPrintBearerMgr(MDirectPrintBearerMngObserver* aObserver,
+ CDirectPrintModel& aModel)
+ : CActive( CActive::EPriorityHigh )
+ , iObserver(aObserver)
+ , iModel(aModel)
+ {
+ LOG("CDirectPrintBearerMgr::CDirectPrintBearerMgr()");
+ CActiveScheduler::Add(this);
+ }
+
+CDirectPrintBearerMgr::~CDirectPrintBearerMgr()
+ {
+ LOG("CDirectPrintBearerMgr::~CDirectPrintBearerMgr()");
+ if (IsActive())
+ {
+ Cancel();
+ }
+ iBearer.Close();
+ delete iPrintSettings;
+ }
+
+CDirectPrintBearerMgr* CDirectPrintBearerMgr::NewL(MDirectPrintBearerMngObserver* aObserver,
+ CDirectPrintModel& aModel)
+ {
+ CDirectPrintBearerMgr* self = CDirectPrintBearerMgr::NewLC(aObserver, aModel);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CDirectPrintBearerMgr* CDirectPrintBearerMgr::NewLC(MDirectPrintBearerMngObserver* aObserver,
+ CDirectPrintModel& aModel)
+ {
+ CDirectPrintBearerMgr* self = new(ELeave) CDirectPrintBearerMgr(aObserver, aModel);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+void CDirectPrintBearerMgr::ConstructL()
+ {
+ LOG("CDirectPrintBearerMgr::ConstructL BEGIN");
+ __ASSERT_ALWAYS(iObserver, Panic(EDirectPrintNoObserver));
+ iPrintSettings = new ( ELeave ) CDirectPrintPrintSettings;
+ iBearer.ConnectL();
+ SetBearerStatus(EBearerMngConnected);
+ LOG("CDirectPrintBearerMgr::ConstructL END");
+ }
+
+void CDirectPrintBearerMgr::CreateJobL()
+ {
+ LOG("CDirectPrintBearerMgr::CreateJobL BEGIN");
+ RPointerArray<TDesC> cmdline;
+ CleanupClosePushL(cmdline);
+
+ _LIT(KDPAppName, "DirectPrint");
+ cmdline.AppendL(&(KDPAppName()));
+
+ TDirectPrintBearerData bearerData;
+ TDirectPrintPrinterData printerData;
+ TInt indexBearer = iModel.CurrentBearer();
+ TInt indexPrinter = iModel.CurrentPrinter();
+ if (indexBearer >= 0 && indexPrinter >= 0)
+ {
+ iModel.GetBearerDataL(indexBearer, bearerData);
+ iModel.GetPrinterDataL(indexPrinter, printerData);
+ }
+ else
+ {
+ LOG("CDirectPrintBearerMgr::CreateJobL LEAVE1 KErrNotFound");
+ User::Leave(KErrNotFound);
+ }
+
+ HBufC* apname = HBufC::NewLC(50);
+ TPtr apnamePtr(apname->Des());
+ _LIT(KDPApName, "-S%S");
+ apnamePtr.AppendFormat(KDPApName(), &(bearerData.iHostName));
+ cmdline.AppendL(apname);
+
+ HBufC* printername = HBufC::NewLC(50);
+ TPtr printernamePtr(printername->Des());
+ _LIT(KDPPrinterName, "-P000000439163");
+ printernamePtr.Copy(KDPPrinterName());
+ cmdline.AppendL(printername);
+
+ HBufC* filename = HBufC::NewLC(50);
+ TPtr filenamePtr(filename->Des());
+#ifdef __WINSCW__
+ _LIT(KDPFileName, "c:\\fpr.pcl");
+#else
+// _LIT(KDPFileName, "e:\\fpr.pcl");
+ _LIT(KDPFileName, "c:\\fpr.pcl");
+#endif
+ filenamePtr.Copy(KDPFileName());
+ cmdline.AppendL(filename);
+
+ SetBearerStatus(EBearerMngCreatingJob);
+
+ // bearer ID
+ TInt printerID = 128;
+ TInt err = iBearer.CreateJob(printerID, iJobGuardData,
+ cmdline, iStatus);
+ if( !err )
+ {
+ LOG("Start create JOB");
+ SetActive();
+ }
+ else
+ {
+ LOG1("CDirectPrintBearerMgr::CreateJobL LEAVE2[%d]", err);
+ User::Leave(err);
+ }
+
+ CleanupStack::PopAndDestroy(filename);
+ CleanupStack::PopAndDestroy(printername);
+ CleanupStack::PopAndDestroy(apname);
+ CleanupStack::PopAndDestroy(&cmdline);
+ LOG("CDirectPrintBearerMgr::CreateJobL END");
+ }
+
+void CDirectPrintBearerMgr::RunL()
+ {
+ LOG1("CDirectPrintBearerMgr::RunL begin with iStatus.Int(): %d", iStatus.Int());
+ if( iStatus == KErrNone && iObserver )
+ {
+ switch( iJobGuardData.iCb )
+ {
+ case TDirectPrintJobGuardData::EProgressEventCb:
+ LOG("CJobGuard::RunL TDirectPrintJobGuardData::EProgressEventCb");
+ LOG1("CJobGuard::RunL iJobGuardData.iStatus: %d", iJobGuardData.iStatus);
+ LOG1("CJobGuard::RunL iJobGuardData.iPercentCompletion: %d", iJobGuardData.iPercentCompletion);
+ LOG1("CJobGuard::RunL iJobGuardData.iJobStateCode: %d", iJobGuardData.iJobStateCode);
+ iObserver->PrintJobProgressEvent( iJobGuardData.iStatus, iJobGuardData.iPercentCompletion, iJobGuardData.iJobStateCode );
+ break;
+ case TDirectPrintJobGuardData::EErrorEventCb:
+ LOG("CJobGuard::RunL TDirectPrintJobGuardData::EErrorEventCb");
+ LOG1("CJobGuard::RunL iJobGuardData.iError: %d", iJobGuardData.iError);
+ LOG1("CJobGuard::RunL iJobGuardData.iErrorStringCode: %d", iJobGuardData.iErrorStringCode);
+ iObserver->PrintJobErrorEvent( iJobGuardData.iError, iJobGuardData.iErrorStringCode );
+ break;
+ case TDirectPrintJobGuardData::EStatusEventCb:
+ LOG("CJobGuard::RunL TDirectPrintJobGuardData::EStatusEventCb");
+ LOG1("CJobGuard::RunL iJobGuardData.iError: %d", iJobGuardData.iError);
+ LOG1("CJobGuard::RunL iJobGuardData.iErrorStringCode: %d", iJobGuardData.iErrorStringCode);
+ iObserver->PrintJobErrorEvent( iJobGuardData.iError, iJobGuardData.iErrorStringCode );
+ break;
+ case TDirectPrintJobGuardData::EImageEventCb:
+ LOG("CJobGuard::RunL TDirectPrintJobGuardData::EImageEventCb");
+ LOG1("CJobGuard::RunL iJobGuardData.iFsBitmapHandle: %d", iJobGuardData.iFsBitmapHandle);
+ iObserver->PreviewImageEvent( iJobGuardData.iFsBitmapHandle );
+ break;
+ default:
+ break;
+ }
+
+ LOG1("CDirectPrintBearerMgr::RunL BearerStatus=[%d]", iBearerStatus);
+
+ switch (iBearerStatus)
+ {
+ case EBearerMngNotConnected:
+ case EBearerMngConnected:
+ case EBearerMngCreatingJob:
+ case EBearerMngPrinting:
+ {
+ LOG("CDirectPrintBearerMgr::RunL ContinueCreateJob");
+ iBearer.ContinueCreateJob( iJobGuardData, iStatus );
+ SetActive();
+ }
+ break;
+ case EBearerMngClosing:
+ case EBearerMngCanceling:
+ default:
+ break;
+ }
+
+ }
+ LOG("CDirectPrintBearerMgr::RunL end");
+ }
+
+void CDirectPrintBearerMgr::SubmitPrintJobL()
+ {
+ LOG("CDirectPrintBearerMgr::SubmitPrintJobL BEGIN");
+ SetBearerStatus(EBearerMngPrinting);
+ // Submit print job
+ TInt err = iBearer.SubmitPrintJob();
+ if( err != KErrNone )
+ {
+ User::Leave(err);
+ }
+ LOG("CDirectPrintBearerMgr::SubmitPrintJobL END");
+ }
+
+void CDirectPrintBearerMgr::CloseSession()
+ {
+ LOG("CDirectPrintBearerMgr::CloseSession BEGIN");
+ SetBearerStatus(EBearerMngClosing);
+ Cancel();
+// iBearer.Close();
+ SetBearerStatus(EBearerMngConnected);
+ LOG("CDirectPrintBearerMgr::CloseSession END");
+ }
+
+void CDirectPrintBearerMgr::DoCancel()
+ {
+ LOG("CDirectPrintBearerMgr::DoCancel BEGIN");
+ SetBearerStatus(EBearerMngCanceling);
+ iBearer.CancelCreateJob();
+ LOG("CDirectPrintBearerMgr::DoCancel END");
+ }
+
+void CDirectPrintBearerMgr::SetBearerStatus(TBearerMngStatus aStatus)
+ {
+ LOG1("CDirectPrintBearerMgr::SetBearerStatus [%d]", aStatus);
+ iBearerStatus = aStatus;
+ }
+
+CDirectPrintBearerMgr::TBearerMngStatus CDirectPrintBearerMgr::BearerStatus()
+ {
+ return iBearerStatus;
+ }
+
+TInt CDirectPrintBearerMgr::SupportedProtocols()
+ {
+ return iBearer.SupportedProtocols();
+ }
+
+TInt CDirectPrintBearerMgr::GetProtocolNames(RSelectItemArray& aNames)
+ {
+ return iBearer.GetProtocolNames(aNames);
+ }
+
+void CDirectPrintBearerMgr::InitCapabilitiesL(TInt aIndex)
+ {
+ TInt printerUid = CreatePrinterUid(aIndex);
+
+ RArray<TInt> capabIDs;
+ CleanupClosePushL( capabIDs );
+
+ iBearer.GetPrinterCapabilityIDs( printerUid, capabIDs );
+ CDirectPrintPrintSettings* printSettings = new ( ELeave ) CDirectPrintPrintSettings;
+ CleanupStack::PushL( printSettings );
+
+ TInt i( 0 );
+ TInt num( capabIDs.Count() );
+ for ( i = 0; i < num; i++ )
+ {
+ TDirectPrintCapability capab;
+ iBearer.GetPrinterCapability( printerUid, capabIDs[i], capab );
+ //capab.iType = TDirectPrintCapability::Enum;
+
+ CDirectPrintBaseCapability* capability = 0;
+
+ // Create capability
+ switch ( capab.iType )
+ {
+ case TDirectPrintCapability::Int:
+ capability = DirectPrintSettingsConverter::AddTIntCapabilityLC( capab, i, capabIDs[i] );
+ break;
+ case TDirectPrintCapability::Enum:
+ capability = DirectPrintSettingsConverter::AddListCapabilityLC( capab, i, capabIDs[i] );
+ break;
+ case TDirectPrintCapability::Float:
+ capability = DirectPrintSettingsConverter::AddFloatCapabilityLC( capab, i, capabIDs[i] );
+ break;
+ case TDirectPrintCapability::Text:
+ capability = DirectPrintSettingsConverter::AddTextCapabilityLC( capab, i, capabIDs[i] );
+ break;
+ default:
+ User::Leave( KErrUnknown );
+ break;
+ }
+ //iBearer.GetJobSetting( capabIDs[i], capability->iValue );
+
+ // Add the capability to the list
+ User::LeaveIfError( printSettings->iCapabilities.Append( capability ) );
+ CleanupStack::Pop(); // capability
+ }
+
+ delete iPrintSettings;
+ iPrintSettings = printSettings;
+
+ CleanupStack::Pop(); // printSettings
+ CleanupStack::PopAndDestroy(); // capabIDs
+ }
+
+TInt CDirectPrintBearerMgr::GetJobSetting(TInt aCapabilityID, TInt& aValue)
+ {
+ return iBearer.GetJobSetting(aCapabilityID, aValue);
+ }
+
+TInt CDirectPrintBearerMgr::SetJobSetting(TInt aCapabilityID, TInt aValue, TInt& aAffectedCapability)
+ {
+ return iBearer.SetJobSetting(aCapabilityID, aValue, aAffectedCapability);
+ }
+
+void CDirectPrintBearerMgr::SetJobSettings()
+ {
+ TInt i( 0 );
+ TInt num( iPrintSettings->iCapabilities.Count() );
+ for ( i = 0; i < num; i++ )
+ {
+ TInt getSettings;
+ iBearer.SetJobSetting(iPrintSettings->iCapabilities[i]->iUid, iPrintSettings->iCapabilities[i]->iValue, getSettings);
+ }
+ }
+
+CDirectPrintPrintSettings* CDirectPrintBearerMgr::PrinterSettingsL()
+ {
+ //return iPrintSettings->CloneL();
+ return iPrintSettings;
+ }
+
+TInt CDirectPrintBearerMgr::CreatePrinterUid(TInt aIndex)
+ {
+ TInt printerUid = 0;
+ TInt protocolIndex = aIndex;
+ protocolIndex <<= sizeof(TInt)*8 - PROTOCOL_ID_BIT_COUNT;
+ printerUid |= protocolIndex;
+ return printerUid;
+ }
+
+// End of file