diff -r 08cc4cc059d4 -r 59ea2209bb67 ImagePrint/ImagePrintUI/imageprintapp/src/cpropertiesboxmodel.cpp --- a/ImagePrint/ImagePrintUI/imageprintapp/src/cpropertiesboxmodel.cpp Fri Jun 11 16:24:10 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,532 +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 -#include -#include -#include -#include -#include -#include -#include -#include -#include // rapalssession -#include -#include -#include - -#include "imageprint.h" -#include "cprintsettings.h" -#include "cbasecapability.h" -#include "cimageprintsettingscontainer.h" -#include "cimageprintengine.h" -#include "ciffactory.h" -#include "mdiscoveryobserver.h" -#include "mdiscovery.h" -#include "clog.h" -#include "clistcapability.h" -#include "imageprintvariant.h" -#include "cpropertiesboxmodel.h" - -const TInt KListItemsRequired( 2 ); -const TInt KDefaultPrinterIndex( 0 ); -const TInt KNumerOfCopiesIndex( 1 ); - -// CONSTRUCTION -CPropertiesBoxModel* CPropertiesBoxModel::NewL( - CImagePrintEngine& aEngine, - MPrintSettings* aSettings, - CImagePrintSettingsContainer* aContainer ) - { - CPropertiesBoxModel* self = - CPropertiesBoxModel::NewLC( aEngine, aSettings, aContainer ); - CleanupStack::Pop( self ); - return self; - } - -CPropertiesBoxModel* CPropertiesBoxModel::NewLC( - CImagePrintEngine& aEngine, - MPrintSettings* aSettings, - CImagePrintSettingsContainer* aContainer ) - { - CPropertiesBoxModel* self = - new ( ELeave ) CPropertiesBoxModel( aEngine, aSettings, aContainer ); - CleanupStack::PushL( self ); - self->ConstructL(); - return self; - } - -// Constructor -CPropertiesBoxModel::CPropertiesBoxModel( - CImagePrintEngine& aEngine, - MPrintSettings* aSettings, - CImagePrintSettingsContainer* aContainer ) : - iEngine( aEngine ), - iSettingsIF( aSettings ), - iContainer( aContainer ) - { - } - -// Destructor -CPropertiesBoxModel::~CPropertiesBoxModel() - { - delete iPrintSettings; - delete iDefaultPrinter; - delete iNumberOfCopiesText; - delete iMMC; - delete iPictBridge; - } - -// 2nd phase constructor -void CPropertiesBoxModel::ConstructL() - { - InitSettingsL(); - iDefaultPrinter = StringLoader::LoadL( R_PRINT_SELECTED_PRINTER ); - iNumberOfCopiesText = StringLoader::LoadL( R_QTN_PRINT_SETTINGS_NOC ); - iMMC = StringLoader::LoadL( R_PRINT_MEMORY_CARD ); - iPictBridge = StringLoader::LoadL( R_QTN_PRINT_SETTINGS_DEFAULT_USB ); - iNumberOfCopiesValue = 1; - } - -void CPropertiesBoxModel::InitSettingsL() - { - delete iPrintSettings; - iPrintSettings = NULL; - iPrintSettings = iSettingsIF->PrinterSettingsL(); - iCount = iPrintSettings->iCapabilities.Count(); - TInt i( 0 ); - TInt counter = iPrintSettings->iCapabilities.Count(); - // If current protocol is MMC remove one item, because there is no layouts for mmc. - if ( MDiscoveryObserver::EMMC == iSettingsIF->GetCurrentPrinterProtocol() ) - { - iCount--; - } - - for ( i = 0; i < counter; i++ ) - { - if ( iPrintSettings->iCapabilities[i]->iTitle.CompareF( KNullDesC ) == 0 ) - { - // Remove non-title capability items as those won't be displayed - iCount--; - } - } - - // Add always first two for default printer item and for Number of copies item - iCount = iCount + KListItemsRequired; - } - -// Returns the number of listbox items -TInt CPropertiesBoxModel::MdcaCount() const - { - LOG1("CPropertiesBoxModel::MdcaCount: %d", iCount ); - return iCount; - } - -// Creates the text string for the list box item and returns it -TPtrC CPropertiesBoxModel::MdcaPoint( TInt aIndex ) const - { - LOG1("CPropertiesBoxModel::MdcaPoint START index: %d", aIndex ); - - switch ( aIndex ) - { - case KDefaultPrinterIndex: - { - SetDefaultPrinterItem(); - break; - } - case KNumerOfCopiesIndex: - { - SetNumberOfCopiesItem(); - break; - } - default: - { - SetOtherCapability( aIndex ); - break; - } - } - - LOG1("CPropertiesBoxModel::MdcaPoint END, iBuf: %S", &iBuf ); - return iBuf; - } - -void CPropertiesBoxModel::SetDefaultPrinterItem() const - { - LOG("CPropertiesBoxModel::SetDefaultPrinterItem START"); - - iBuf.Copy( KTabChar ); - iBuf.Append( *iDefaultPrinter ); - iBuf.Append( KTabChar ); - iBuf.Append( KTabChar ); - if( iSettingsIF->GetDefaultPrinterProtocol() == - MDiscoveryObserver::EMMC ) // mmc - { - iBuf.Append( *iMMC ); - } - else if( iSettingsIF->GetDefaultPrinterProtocol() == - MDiscoveryObserver::EUSB ) // pictbridge - { - iBuf.Append( *iPictBridge ); - } - else - { - // No can do if this fails. Not leaving function. - TRAP_IGNORE( - HBufC* defaultPrinterName = - iSettingsIF->GetDefaultPrinterNameLC(); - iBuf.Append( *defaultPrinterName ); - CleanupStack::PopAndDestroy( defaultPrinterName ); - ); - } - - LOG("CPropertiesBoxModel::SetDefaultPrinterItem END"); - } - -void CPropertiesBoxModel::SetNumberOfCopiesItem() const - { - LOG("CPropertiesBoxModel::SetNumberOfCopiesItem START"); - - iBuf.Copy( KTabChar ); - iBuf.Append( *iNumberOfCopiesText ); - iBuf.Append( KTabChar ); - iBuf.Append( KTabChar ); - iBuf.AppendNum( iNumberOfCopiesValue ); - - LOG("CPropertiesBoxModel::SetNumberOfCopiesItem END"); - } - -void CPropertiesBoxModel::SetOtherCapability( const TInt &aIndex ) const - { - LOG("CPropertiesBoxModel::SetOtherCapability START"); - - iBuf.Zero(); - HBufC* buf = NULL; - - // Get the text for the list box - TInt position = CapabilityArrayIndex( aIndex - KListItemsRequired ); - TRAPD( err, - buf = iPrintSettings->iCapabilities[position]->ListBoxTextL() ); - if ( !err && buf ) - { - iBuf = buf->Des(); - delete buf; - } - - LOG("CPropertiesBoxModel::SetOtherCapability END"); - } - -// Handles the list box (enter) events by launching the pop-up list -void CPropertiesBoxModel::HandleListBoxEventL( - CEikListBox* aListBox, - TListBoxEvent aEventType ) - { - LOG("CPropertiesBoxModel::HandleListBoxEventL START"); - //Change to EEventItemSingleClicked for Single click event - if ( (aEventType == EEventEnterKeyPressed || aEventType == EEventItemSingleClicked ) && - aListBox->CurrentItemIndex() != KErrNotFound ) - { - if( aListBox->CurrentItemIndex() == 0 ) - { - // launch dialog query for selecting default printer this returns - // protocol id as defined in DiscoveryObserver.h or -1 if failed. - TInt protocol = LaunchDefaultPrinterListL(); - if( protocol >= 0 ) - { - iContainer->DoDiscoveryL( protocol ); - InitSettingsL(); - iContainer->UpdateListBox(); - iContainer->DrawNow(); - } - } - - if( aListBox->CurrentItemIndex() == 1 ) - { - LaunchNumberOfCopiesDialogL(); - iContainer->UpdateListBox(); - iContainer->DrawNow(); - } - - if ( aListBox->CurrentItemIndex() > 1 ) - { - TInt selIndex = CapabilityArrayIndex( aListBox->CurrentItemIndex() - KListItemsRequired ); - TBool valueChanged = iPrintSettings->iCapabilities[selIndex]->LaunchPopupListL(); - - if( valueChanged ) - { - SaveCurrentSelectionL( *(iPrintSettings->iCapabilities[ selIndex ]), aListBox ); - InitSettingsL(); - iContainer->UpdateListBox(); - iContainer->DrawNow(); - } - } - } - - LOG("CPropertiesBoxModel::HandleListBoxEventL END"); - } - -// Saves selection to engine -void CPropertiesBoxModel::SaveCurrentSelectionL( - CBaseCapability &aCapab, - CEikListBox* aListBox ) - { - LOG("CPropertiesBoxModel::SaveCurrentSelectionL START"); - - TInt initList = iSettingsIF->SetPrinterSettingL( aCapab ); - if( initList == 0 ) - { - CPrintSettings* tempSettings = iSettingsIF->PrinterSettingsL(); - delete iPrintSettings; - iPrintSettings = tempSettings; - - // Sets the active page to be the first one, if settings have truly - // changed - iSettingsIF->SetActivePageL( 1 ); - - aListBox->HandleItemRemovalL(); - aListBox->HandleItemAdditionL(); - } - - LOG("CPropertiesBoxModel::SaveCurrentSelectionL END"); - } - -// Returns capability array index based on the list box index -TUint CPropertiesBoxModel::CapabilityArrayIndex( - TInt aListBoxIndex ) const - { - LOG("CPropertiesBoxModel::CapabilityArrayIndex START"); - - // Skip capabilities with empty title as they won't be placed to list box - TInt found( EFalse ); - TInt i( 0 ); - - while ( !found ) - { - if ( iPrintSettings->iCapabilities[i]-> - iTitle.CompareF( KNullDesC ) != 0 ) - { - aListBoxIndex--; - } - - if ( aListBoxIndex >= 0 ) - { - i++; - } - else - { - found = ETrue; - } - } - - LOG("CPropertiesBoxModel::CapabilityArrayIndex END"); - return TUint( i ); - } - - -void CPropertiesBoxModel::LaunchNumberOfCopiesDialogL() - { - LOG("CPropertiesBoxModel::LaunchNumberOfCopiesDialogL START"); - CAknNumberQueryDialog* dlg = new( ELeave ) CAknNumberQueryDialog ( iNumberOfCopiesValue ); - dlg->PrepareLC( R_NOC_QUERY); - dlg->RunLD(); - - // After selecting copies, NaviText is updated. - iContainer->ChangeStatusPaneTextL( iNumberOfCopiesValue ); - - // Set value for settings - SetNumberOfCopiesValueL(); - - LOG("CPropertiesBoxModel::LaunchNumberOfCopiesDialogL END"); - } - - -void CPropertiesBoxModel::SetNumberOfCopiesValueL() - { - RArray numberOfCopiesArray; - CleanupClosePushL( numberOfCopiesArray ); - iSettingsIF->NumberOfCopies( numberOfCopiesArray ); - - // Images selected in print job - TInt imagesCount = iEngine.FileArray().Count(); - if(0 != imagesCount) - { - // Get number of copies for current image - if( numberOfCopiesArray.Count() != imagesCount ) - { - numberOfCopiesArray.Reset(); - for( TInt i=0; i < imagesCount; ++i ) - { - numberOfCopiesArray.Append( 1 ); - } - } - - TInt oldNOC( numberOfCopiesArray[ 0 ] ); - - // if new value was entered - if (iNumberOfCopiesValue != oldNOC) - { - // Set Number of copies value for each image. - // Value is same for all images in IP 6.2 - for ( TInt i=0; iSetNumberOfCopiesL( numberOfCopiesArray ); - } - } - CleanupStack::PopAndDestroy( &numberOfCopiesArray ); - } - -TInt CPropertiesBoxModel::LaunchDefaultPrinterListL() - { - const TInt expectedNumberOfProtocols( 4 ); - - // Array for list item descriptors. - CDesCArrayFlat* protocolNameArray = - new( ELeave ) CDesCArrayFlat( expectedNumberOfProtocols ); - CleanupStack::PushL( protocolNameArray ); - - // Map from list item index to protocol. - RArray indexToProtocolMap( expectedNumberOfProtocols ); - CleanupClosePushL( indexToProtocolMap ); - - // Get supported protocols from the engine - TInt supportedProtocols = - iEngine.InterfaceFactory().DiscoveryIF()->SupportedProtocols(); - - // Read list item descriptors, append them in array and update map. - - // Bluetooth printer - if( supportedProtocols & KImagePrint_PrinterProtocol_BPP ) - { - protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC( - R_QTN_PRINT_SETTINGS_DEFAULT_BT )->Des() ); - indexToProtocolMap.AppendL( MDiscoveryObserver::EBPP ); - CleanupStack::PopAndDestroy(); // protocolNameArray - } - - // Memory card printer - if( supportedProtocols & KImagePrint_PrinterProtocol_DPOF ) - { - RFs fs; - CleanupClosePushL( fs ); - if( fs.Connect() == KErrNone ) - { - TInt driveId (-1); - TFileName path; - User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo::EDefaultRemovableMassStorage, driveId ) ); - User::LeaveIfError( PathInfo::GetRootPath( path, driveId ) ); - - if ( BaflUtils::PathExists( fs, path )) - { - protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC( - R_QTN_PRINT_MEMORY_CARD )->Des() ); - indexToProtocolMap.AppendL( MDiscoveryObserver::EMMC ); - CleanupStack::PopAndDestroy(); // protocolNameArray - } - - CleanupStack::PopAndDestroy( &fs ); - } - } - - // USB printers - if( supportedProtocols & KImagePrint_PrinterProtocol_PictBridge ) - { - protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC( - R_QTN_PRINT_SETTINGS_DEFAULT_USB )->Des() ); - indexToProtocolMap.AppendL( MDiscoveryObserver::EUSB ); - CleanupStack::PopAndDestroy(); // protocolNameArray - } - - // WLAN printers - if ( supportedProtocols & KImagePrint_PrinterProtocol_UPnP ) - { - protocolNameArray->AppendL( CCoeEnv::Static()->AllocReadResourceLC( - R_QTN_PRINT_SETTINGS_DEFAULT_WLAN )->Des() ); - indexToProtocolMap.AppendL( MDiscoveryObserver::EWLAN ); - CleanupStack::PopAndDestroy(); // protocolNameArray - } - - // Prepare arrays for dialog - CAknQueryValueTextArray* queryTextArray = CAknQueryValueTextArray::NewL(); - CleanupStack::PushL( queryTextArray ); - queryTextArray->SetArray( *protocolNameArray ); - - CAknQueryValueText* queryValue = CAknQueryValueText::NewL(); - CleanupStack::PushL( queryValue ); - queryValue->SetArrayL( queryTextArray ); - - // Determine which is the default protocol using settings interface. - // Here defaultProtocol is protocol id as defined in MDiscoveryObserver.h. - TInt defaultProtocol = iSettingsIF->GetDefaultPrinterProtocol(); - - // Then do lookup in indexToProtocolMap to find correct index for this - // protocol id. Note that after this defaultProtocol is an index. - defaultProtocol = indexToProtocolMap.Find( defaultProtocol ); - if ( defaultProtocol != KErrNotFound ) - { - queryValue->SetCurrentValueIndex( defaultProtocol ); - } - else - { - // Default protocol not available, get current protocol - // This is for example for the case where MMC is default, - // but removed from phone. - TInt currentProtocol = iSettingsIF->GetCurrentPrinterProtocol(); - currentProtocol = indexToProtocolMap.Find( currentProtocol ); - if ( currentProtocol != KErrNotFound ) - { - queryValue->SetCurrentValueIndex( currentProtocol ); - } - } - - CAknPopupSettingPage* page = new ( ELeave ) CAknPopupSettingPage( - iDefaultPrinter, - EAknSettingPageNoOrdinalDisplayed, - EAknCtPopupSettingList, - R_EMPTY_PROTOCOL_SETTING_LIST, - R_SETTING_GENERIC_PROTOCOL_PAGE, - *queryValue ); - - CleanupStack::PushL( page ); - page->ConstructL(); - CleanupStack::Pop( page ); - - // Execute dialog and check that it returns properly. If so get the selected - // index and use it to protocol map to get name of the selected protocol. - TInt selectedProtocolId( -1 ); - if( page->ExecuteLD() ) - { - selectedProtocolId = - indexToProtocolMap[ queryValue->CurrentValueIndex() ]; - } - - // CleanupStack contains 4 items: - // protocolNameArray, indexToProtocolMap (close), queryTextArray and - // queryArray. - const TInt numberOfItemsInCleanupStack( 4 ); - CleanupStack::PopAndDestroy( numberOfItemsInCleanupStack, protocolNameArray ); - return selectedProtocolId; - } - -TInt CPropertiesBoxModel::NumberOfCopies() - { - return iNumberOfCopiesValue; - } - -// End of File