--- a/ImagePrint/ImagePrintUI/imageprinteng/src/csettingsmanager.cpp Tue May 25 12:42:41 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,691 +0,0 @@
-/*
-* Copyright (c) 2004-2007 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:
-*
-*/
-
-
-#include <fbs.h>
-#include <eikenv.h>
-#include <e32std.h>
-
-#include "tprintcapability.h"
-#include "csettingsmanager.h"
-#include "ctemplatesettings.h"
-#include "cprintsettings.h"
-#include "ctintcapability.h"
-#include "clistcapability.h"
-#include "cfloatcapability.h"
-#include "ctemplatedata.h"
-#include "printcapabilitycodes.h"
-#include "settingsconverter.h"
-#include "crealfactory.h"
-#include "imageprint.h"
-#include "cimageprint.h"
-#include "imageprintvariant.h"
-#include <centralrepository.h>
-#include "imageprintprivatecrkeys.h"
-#include "mdiscovery.h"
-#include "clog.h"
-
-namespace
- {
- const TInt KDefaultPrinterNameMaxLength = 100;
- const TInt KTemplateSize = 16;
- const TInt KTemplates[] = {1554,1552,1565,1555,1501,1553,1551,1558,1502,1504,1564,1506,1509,1512,1513,1516};
- }
-
-#include "clog.h"
-
-// CONSTRUCTION
-CSettingsManager* CSettingsManager::NewL(
- CRealFactory* aFactory )
- {
- CSettingsManager* self = CSettingsManager::NewLC(
- aFactory );
- CleanupStack::Pop(); // self
-
- return self;
- }
-
-CSettingsManager* CSettingsManager::NewLC(
- CRealFactory* aFactory )
- {
- CSettingsManager* self =
- new ( ELeave ) CSettingsManager( aFactory );
- CleanupStack::PushL( self );
- self->ConstructL();
-
- return self;
- }
-
-// Constrcutor
-CSettingsManager::CSettingsManager(
- CRealFactory* aFactory ) :
- iFactory( aFactory ),
- iActivePage( 1 )
- {
- }
-
-// Destructor
-CSettingsManager::~CSettingsManager()
- {
- delete iPrintSettings;
- delete iTemplateSettings;
- delete iCurrentPrinterName;
- delete iCRSession;
- iNumberOfCopiesArray.Close();
- iNumberOfCopiesCumulativeArray.Close();
- }
-
-// 2nd phase constructor
-void CSettingsManager::ConstructL()
- {
- iPrintSettings = new ( ELeave ) CPrintSettings;
- iTemplateSettings = CTemplateSettings::NewL( iFactory );
-
- iCRSession = CRepository::NewL( KCRUidImagePrint );
- }
-
-// Clones the current template settings
-CTemplateSettings* CSettingsManager::TemplateSettingsL()
- {
- return iTemplateSettings->CloneL();
- }
-
-// Changes active template to a new one
-void CSettingsManager::SetActiveTemplateL(
- TUint aUid )
- {
- LOG1( "CSettingsManager::SetActiveTemplateL START || aUid = %d", aUid );
- // Set active template to preview manager, if one available
- iTemplateSettings->iActiveTemplateUid = aUid;
-
- CListCapability* capab = static_cast<CListCapability*>(
- FetchCapabilityL( EPrintCapabLayout ) );
- capab->iValue = aUid;
- LOG1( "CSettingsManager::SetActiveTemplateL || iImagesOnPage = %d", iImagesOnPage );
- }
-
-// Returns the number of pages
-TUint CSettingsManager::NumOfPagesL()
- {
- // Always 1, fix this for the release 2
- // return iFactory->Engine()->GetNumPrintPages();
-
- TInt num( 1 );
- return num;
- }
-
-// Returns the number of copies
-TInt CSettingsManager::NumberOfCopies( RArray<TInt>& aArray )
- {
- TInt err( KErrNone );
- aArray.Reset();
- for( TInt i=0; i<iNumberOfCopiesArray.Count(); ++i )
- {
- err = aArray.Append( iNumberOfCopiesArray[ i ] );
- if( err != KErrNone )
- {
- return err;
- }
- }
- return KErrNone;
- }
-
-TInt CSettingsManager::NumberOfCopies( TInt& aNumberOfCopies, TInt aIndex )
- {
- if( -1 < aIndex && aIndex < iNumberOfCopiesArray.Count() )
- {
- aNumberOfCopies = iNumberOfCopiesArray[ aIndex ];
- return KErrNone;
- }
- else
- {
- return KErrArgument;
- }
- }
-
-// Sets the number of copies
-TInt CSettingsManager::SetNumberOfCopiesL( const RArray<TInt>& aArray )
- {
- TInt err( KErrNone );
- TInt numberOfCopiesCumulative( 1 );
- iNumberOfCopiesArray.Close();
- iNumberOfCopiesCumulativeArray.Close();
- for( TInt i=0; i<aArray.Count(); ++i )
- {
- err = iNumberOfCopiesArray.Append( aArray[ i ] );
- if( err != KErrNone )
- {
- return err;
- }
- err = iNumberOfCopiesCumulativeArray.Append( numberOfCopiesCumulative );
- numberOfCopiesCumulative += aArray[ i ];
- if( err != KErrNone )
- {
- return err;
- }
- }
- return err;
- }
-
-TInt CSettingsManager::UpdateNumberOfCopiesToServer()
- {
- return iFactory->Engine()->SetNumberOfCopies( iNumberOfCopiesArray );
- }
-
-// Returns
-TBool CSettingsManager::IsMMC()
- {
- TBool retVal = EFalse;
- TInt supportedProtocols = iFactory->DiscoveryIF()->SupportedProtocols();
-
- if( (supportedProtocols & KImagePrint_PrinterProtocol_DPOF) &&
- ( iPrinterUid == iMMCUid ))
- {
- retVal = ETrue;
- }
- LOG1( "CSettingsManager::IsMMC: %d ", retVal );
- return retVal;
- }
-
-// Changes active page for drawing a new preview
-void CSettingsManager::SetActivePageL(
- TUint aActivePage )
- {
- }
-
-// Returns current active page
-TUint CSettingsManager::CurActivePageL()
- {
- TUint num( 1 );
- return num;
- }
-
-// Clones current print settings
-CPrintSettings* CSettingsManager::PrinterSettingsL()
- {
- return iPrintSettings->CloneL();
- }
-
-// Sets all settings, not supported at the moment
-void CSettingsManager::SetPrinterSettingsL(
- CPrintSettings& /*aSettings*/ )
- {
- User::Leave( KErrNotSupported );
- }
-
-// Sets a single setting
-TInt CSettingsManager::SetPrinterSettingL(
- CBaseCapability& aCapab )
- {
- LOG( "CSettingsManager::SetPrinterSettingL START" );
- TInt getSettings( 0 );
- TInt err = iFactory->Engine()->SetJobSettingL(
- aCapab.iUid, aCapab.iValue, getSettings );
- getSettings = 0;
- User::LeaveIfError( err );
-
- CBaseCapability* capab = FetchCapabilityL( aCapab.iUid );
- capab->iValue = aCapab.iValue;
-
-#ifdef IMG_PRINT_DYNAMIC_PRINT_SETTINGS
- // Do not initialize if only template was changed
- if( aCapab.iUid != 500 )
- {
- LOG( "CSettingsManager::SetPrinterSettingL || aCapab.iUid != 500" );
- InitCapabilitiesL( iPrinterUid );
- InitTemplateSettingsL();
- }
- else
- {
- LOG( "CSettingsManager::SetPrinterSettingL || aCapab.iUid == 500" );
- SetActiveTemplateL( aCapab.iValue );
- }
-#else
- InitCapabilitiesL( iPrinterUid );
- InitTemplateSettingsL();
-#endif
-
- LOG1( "CSettingsManager::SetPrinterSettingL getSettings = %d", getSettings );
- return getSettings;
- }
-
-// Initializes the printer settings
-void CSettingsManager::InitSettingsL(
- TInt aPrinterUid,
- TInt aMMCUid )
- {
- LOG1( "CSettingsManager::InitSettingsL aPrinterUid = %d", aPrinterUid );
- LOG1( "CSettingsManager::InitSettingsL aMMCUid = %d", aMMCUid );
-
- iMMCUid = aMMCUid;
- InitCapabilitiesL( aPrinterUid );
- InitTemplateSettingsL();
- iPrinterUid = aPrinterUid;
- }
-
-// Inititalizes the capabilities
-void CSettingsManager::InitCapabilitiesL(
- TInt aPrinterUid )
- {
- LOG1("CSettingsManager::InitCapabilitiesL Begin: %d", aPrinterUid);
- RArray<TInt> capabIDs;
- CleanupClosePushL( capabIDs );
-
- // Get list of IDs
- iFactory->Engine()->GetPrinterCapabilityIDsL( aPrinterUid, capabIDs );
- CPrintSettings* printSettings = new ( ELeave ) CPrintSettings;
- CleanupStack::PushL( printSettings );
-
- TInt i( 0 );
- TInt num( capabIDs.Count() );
- LOG1("CSettingsManager::InitCapabilitiesL number of capabs: %d", num);
- for ( i = 0; i < num; i++ )
- {
- TPrintCapability capab;
- iFactory->Engine()->GetPrinterCapabilityL( aPrinterUid, capabIDs[i], capab );
- capab.iType = TPrintCapability::Enum;
-
- CBaseCapability* capability = 0;
-
- // Create capability
- switch ( capab.iType )
- {
- case TPrintCapability::Int:
- capability = SettingsConverter::AddTIntCapabilityLC(
- capab, i, capabIDs[i] );
- break;
-
- case TPrintCapability::Enum:
- capability = SettingsConverter::AddListCapabilityLC(
- capab, i, capabIDs[i], iFactory );
- break;
-
- case TPrintCapability::Float:
- capability = SettingsConverter::AddFloatCapabilityLC(
- capab, i, capabIDs[i] );
- break;
-
- default:
- User::Leave( KErrUnknown );
- break;
- }
- iFactory->Engine()->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
- LOG("CSettingsManager::InitCapabilitiesL End");
- }
-
-// Initializes the templates
-void CSettingsManager::InitTemplateSettingsL()
- {
- LOG("CSettingsManager::InitTemplateSettingsL Begin");
- CTemplateSettings* settings = CTemplateSettings::NewL( iFactory );
- CleanupStack::PushL( settings );
- TInt templateBuffer = iFactory->SettingsIF()->TemplateUid();
-
- TInt i( 0 );
- TInt num( iPrintSettings->iCapabilities.Count() );
- for ( i = 0; i < num; i++ )
- {
- if ( iPrintSettings->iCapabilities[i]->iUid == EPrintCapabLayout )
- {
- TInt j( 0 );
- CListCapability* layouts =
- static_cast<CListCapability*>
- ( iPrintSettings->iCapabilities[i] );
- for ( j = 0; j < layouts->iEnumIDs.Count(); j++ )
- {
- // Create new template data with the icon and Uid value
- CTemplateData* data = CTemplateData::NewL();
- data->iUid = layouts->iEnumIDs[j];
- CleanupStack::PushL( data );
- LOG1( "CSettingsManager::InitTemplateSettingsL, UID: %d", data->iUid );
- User::LeaveIfError( settings->iTemplates.Append( data ) );
- CleanupStack::Pop( data );
- }
- }
- }
-
- // Sort the templates to "standard" order
- CTemplateSettings* sortsettings = CTemplateSettings::NewL( iFactory );
- CleanupStack::PushL( sortsettings );
- for ( TInt i = 0; i < KTemplateSize; i++ )
- {
- for ( TInt j = 0; j < settings->iTemplates.Count(); j++ )
- {
- if ( KTemplates[i] == settings->iTemplates[j]->iUid )
- {
- CTemplateData* data = CTemplateData::NewL();
- data->iUid = settings->iTemplates[j]->iUid;
- CleanupStack::PushL( data );
- LOG1( "CSettingsManager::InitTemplateSettingsL, UID: %d", data->iUid );
- User::LeaveIfError( sortsettings->iTemplates.Append( data ) );
- CleanupStack::Pop( data );
- break;
- }
- }
- }
-
- CleanupStack::Pop( sortsettings );
- CleanupStack::PopAndDestroy( settings );
- delete iTemplateSettings;
- iTemplateSettings = sortsettings;
-
- TBool templateFound = EFalse;
- if ( iTemplateSettings->iTemplates.Count() > 0 )
- {
- for (TInt g = 0; g < iTemplateSettings->iTemplates.Count(); g++)
- {
- if (iTemplateSettings->iTemplates[g]->iUid == templateBuffer)
- {
- iTemplateSettings->iActiveTemplateUid = templateBuffer;
- templateFound = ETrue;
- }
- }
- if (!templateFound){
- iTemplateSettings->iActiveTemplateUid =
- iTemplateSettings->iTemplates[0]->iUid;
- }
-
- SetActiveTemplateL( iTemplateSettings->iActiveTemplateUid );
- }
- // If there are no templates available, draw the preview using
- // 1/page template
- else
- {
- LOG("CSettingsManager::InitTemplateSettingsL || No templates available!");
- SetActiveTemplateL( EPrintCapabLayout1UpMedium );
- }
- LOG("CSettingsManager::InitTemplateSettingsL End");
- }
-
-// Fetches capability from the list and returns it
-CBaseCapability* CSettingsManager::FetchCapabilityL(
- TInt aUid )
- {
- LOG1("CSettingsManager::FetchCapabilityL Begin: %d", aUid);
- CBaseCapability* capab = NULL;
- TInt found( KErrNotFound );
-
- TInt i( 0 );
- TInt num( iPrintSettings->iCapabilities.Count() );
- for ( i = 0; i < num && found != KErrNone; i++ )
- {
- if ( iPrintSettings->iCapabilities[i]->iUid == aUid )
- {
- capab = iPrintSettings->iCapabilities[i];
- found = KErrNone;
- }
- }
-
- User::LeaveIfError( found );
- LOG("CSettingsManager::FetchCapabilityL End");
- return capab;
- }
-
-TInt CSettingsManager::TemplateUid()
- {
- LOG1( "CSettingsManager::TemplateUid || iActiveTemplateUid = %d", iTemplateSettings->iActiveTemplateUid );
- return iTemplateSettings->iActiveTemplateUid;
- }
-
-TBool CSettingsManager::UpdatePageNumberL( TInt aCurrentImage )
- {
- TBool retValue = EFalse;
- TUint pageNumber;
-
- if( iNumberOfCopiesCumulativeArray.Count() > aCurrentImage-1 )
- {
- aCurrentImage = iNumberOfCopiesCumulativeArray[aCurrentImage-1];
- }
-
- pageNumber = aCurrentImage / iImagesOnPage;
- if ( ( aCurrentImage % iImagesOnPage ) != 0 )
- {
- pageNumber++;
- }
-
- if ( iActivePage != pageNumber )
- {
- iActivePage = pageNumber;
- retValue = ETrue;
- }
- return retValue;
- }
-
-TInt CSettingsManager::PrinterUid()
- {
- return iPrinterUid;
- }
-
-
-TBool CSettingsManager::GetUsbState()
- {
- return iUsbConnected;
- }
-
-void CSettingsManager::SetUsbState( TBool aConnected )
- {
- iUsbConnected = aConnected;
- }
-
-TInt CSettingsManager::GetDefaultPrinterProtocol()
- {
- TInt retValue;
- TInt err = iCRSession->Get( KDefaultPrinterProtocol, retValue );
-
- LOG2("CSettingsManager::GetDefaultPrinterProtocol: %d, err: %d", retValue, err);
- return ( err ) ? err : retValue;
- }
-
-
-TInt CSettingsManager::SetDefaultPrinterProtocol( TInt aProtocol )
- {
- TInt err = iCRSession->Set( KDefaultPrinterProtocol, aProtocol );
- LOG2("CSettingsManager::SetDefaultPrinterProtocol: %d, err: %d", aProtocol, err);
- return err;
- }
-
-TInt CSettingsManager::GetCurrentPrinterProtocol()
- {
- LOG1("CSettingsManager::GetCurrentPrinterProtocol: %d", iCurrentPrinterProtocol );
- return iCurrentPrinterProtocol;
- }
-
-void CSettingsManager::SetCurrentPrinterProtocol( TInt aProtocol )
- {
- LOG1("CSettingsManager::SetCurrentPrinterProtocol: %d", aProtocol );
- iCurrentPrinterProtocol = aProtocol;
- }
-
-TUint CSettingsManager::GetCurrentPrinterVendor()
- {
- LOG1("CSettingsManager::GetCurrentPrinterVendor() vendor: %d",iVendor);
- return iVendor;
- }
-
-void CSettingsManager::SetCurrentPrinterVendor( TUint aVendor )
- {
- LOG1("CSettingsManager::SetCurrentPrinterVendor() vendor: %d",aVendor);
- iVendor = aVendor;
- }
-
-TInt CSettingsManager::GetDefaultPrintID()
- {
- TInt retValue;
- TInt err = iCRSession->Get( KDefaultPrinterID, retValue );
- LOG2("CSettingsManager::GetDefaultPrintID: get: %d, err: %d", retValue, err);
- return ( err ) ? err : retValue;
- }
-
-TInt CSettingsManager::SetDefaultPrinterID( TInt aId )
- {
- TInt err = iCRSession->Set( KDefaultPrinterID, aId );
- LOG2("CSettingsManager::SetDefaultPrinterID: set: %d, err: %d", aId, err);
- return err;
- }
-
-HBufC* CSettingsManager::GetDefaultPrinterNameLC()
- {
- HBufC* name = HBufC::NewLC( KDefaultPrinterNameMaxLength );
- TPtr ptr( name->Des() );
- TInt err = iCRSession->Get( KDefaultPrinterName, ptr );
- LOG2("CSettingsManager::GetDefaultPrinterNameLC: name: %S, err: %d", &ptr, err);
- return name;
- }
-
-TInt CSettingsManager::SetDefaultPrinterNameL( const TDesC& aPrinterName )
- {
- TInt err = KErrNone;
- HBufC* stringholder = HBufC::NewLC( aPrinterName.Length() );
- *stringholder = aPrinterName;
-
- // Clear the printer name string from all formatting tabs & numbers
- TPtr ptr = stringholder->Des();
- TInt pos = stringholder->Find( KTabChar );
- if ( pos == 1 ) // 1st possible icon formatting tab is at pos 1
- {
- ptr.Delete( 0, 2 ); // delete the first icon tab and the number previous to it
- pos = stringholder->Find( KTabChar );
- }
- while ( pos != KErrNotFound &&
- pos != stringholder->Length() - 2 )
- {
- ptr.Delete( pos, 1); // delete all middle tabs
- pos = stringholder->Find( KTabChar );
- }
- // 2nd possible iconformatting tab is 2nd last char
- if ( pos != KErrNotFound &&
- pos == stringholder->Length() - 2 )
- {
- // delete the 2nd icon formatting tab and the number next to it
- ptr.Delete( stringholder->Length() - 2, 2 );
- }
-
- err = iCRSession->Set( KDefaultPrinterName, *stringholder );
- LOG2("CSettingsManager::SetDefaultPrinterNameL: name: %S err: %d", &ptr, err);
- CleanupStack::PopAndDestroy( stringholder );
- return err;
- }
-
-HBufC* CSettingsManager::GetCurrentPrinterName()
- {
- TPtr ptr = iCurrentPrinterName->Des();
- LOG1("CSettingsManager::GetCurrentPrinterName: name: %S", &ptr );
- return iCurrentPrinterName;
- }
-
-TInt CSettingsManager::SetCurrentPrinterName( const TDesC& aPrinterName )
- {
- if( iCurrentPrinterName )
- {
- delete iCurrentPrinterName;
- iCurrentPrinterName = NULL;
- }
-
- TInt err;
- HBufC* tmpBuf = aPrinterName.Alloc();
- if( !tmpBuf )
- {
- return KErrGeneral;
- }
- else
- {
- err = KErrNone;
- iCurrentPrinterName = tmpBuf;
- }
-
- // Clear the printer name string from all formatting tabs & numbers
- TPtr ptr = iCurrentPrinterName->Des();
- TInt pos = iCurrentPrinterName->Find( KTabChar );
- if ( pos == 1 ) // 1st possible icon formatting tab is at pos 1
- {
- ptr.Delete( 0, 2 ); // delete the first icon tab and the number previous to it
- pos = iCurrentPrinterName->Find( KTabChar );
- }
- while ( pos != KErrNotFound &&
- pos != iCurrentPrinterName->Length() - 2 )
- {
- ptr.Delete( pos, 1); // delete all middle tabs
- pos = iCurrentPrinterName->Find( KTabChar );
- }
- // 2nd possible iconformatting tab is 2nd last char
- if ( pos != KErrNotFound &&
- pos == iCurrentPrinterName->Length() - 2 )
- {
- // delete the 2nd icon formatting tab and the number next to it
- ptr.Delete( iCurrentPrinterName->Length() - 2, 2 );
- }
-
- LOG1("CSettingsManager::SetCurrentPrinterName: name: %S", &ptr );
- return err;
- }
-
-HBufC* CSettingsManager::GetCurrentPaperSizeTextL()
- {
- HBufC* retValue = NULL;
- CListCapability* paperSizeCapab = NULL;
- // Searches the paper size capability from the capability list
- // Search the UID for paper size (= 4)
- TInt counter = iPrintSettings->iCapabilities.Count();
- for( TInt i = 0 ; i < counter ; i++ )
- {
-
- //Use the searched ListCapability
- if( iPrintSettings->iCapabilities[ i ]->iUid == EPrintCapabPaperSize )
- {
- paperSizeCapab = static_cast< CListCapability* >
- ( iPrintSettings->iCapabilities[ i ] );
- }
- }
-
-
- TBool found( EFalse );
-
- if ( paperSizeCapab )
- {
- const TInt expectedNumberOfStrings( 2 );
- CDesCArrayFlat* strings =
- new ( ELeave ) CDesCArrayFlat( expectedNumberOfStrings );
- CleanupStack::PushL( strings );
-
- TInt i( 0 );
- TInt counter = paperSizeCapab->iEnumIDs.Count();
- for ( i = 0; i < counter && !found; i++ )
- {
- if ( paperSizeCapab->iEnumIDs[i] ==
- paperSizeCapab->iValue )
- {
- retValue = paperSizeCapab->iTexts[i];
- }
- }
- CleanupStack::PopAndDestroy(); // strings
- }
- return retValue;
- }
-
-// End of File