diff -r 08cc4cc059d4 -r 59ea2209bb67 ImagePrint/ImagePrintUI/imageprintapp/src/cimageprintappui.cpp --- a/ImagePrint/ImagePrintUI/imageprintapp/src/cimageprintappui.cpp Fri Jun 11 16:24:10 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,550 +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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "cimageprintappui.h" -#include "imageprint.h" -#include "cimageprintsettingsview.h" -#include "cimgpviewemptyview.h" -#include "cdiscoverydlgmanager.h" -#include "cimageprintdoc.h" -#include "printapputil.h" -#include "imageprintapp.hrh" -#include "mprintsettings.h" -#include "cimgpprintdlgmanager.h" -#include "clog.h" -#include "cimageprintengine.h" -#include "ciffactory.h" -#include "mdiscovery.h" -#include "cimgpprintutils.h" -#include "uimodefactory.h" -#include "muimode.h" -#include "muimodeobserver.h" -#include "caiwprintpreviewprovider.h" - -using namespace ContentAccess; - -_LIT( KEngineRsc, "imageprintengine.rsc" ); -_LIT8( KJpegFileType, "image/jpeg" ); - -// For navipane changes -_LIT( KLine, " - " ); -const TInt KLineLength(3); -const TInt32 KUid (0x101FFA84); - -// Second class constructor -void CImagePrintAppUi::ConstructL() - { - LOG("CImagePrintAppUi::ConstructL BEGIN"); - // Add EAknSingleClickCompatible to BaseConstructL function parameter for single click event - BaseConstructL( EAknEnableSkin | EAppOrientationAutomatic | EAknEnableMSK | EAknSingleClickCompatible ); - - FeatureManager::InitializeLibL(); - - // get the best matching resource for the current locale - TFileName file(NULL); - - file.Append( KDC_RESOURCE_FILES_DIR ); - file.Append( KEngineRsc ); - BaflUtils::NearestLanguageFile( iEikonEnv->FsSession(), file ); - iResourceOffset = iEikonEnv->AddResourceFileL( file ); - - iDoc = static_cast( CAknAppUi::Document() ); - - TRAPD( err, iDoc->InitializeEngineL() ); - if ( err == KErrInUse ) - { - LOG("Too many connections. Exiting..."); - CAknErrorNote* errornote = new (ELeave) CAknErrorNote( ETrue ); - HBufC* buf = StringLoader::LoadLC( R_QTN_PRINT_CONCURRENT_NOTE ); - errornote->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - Exit(); - } - else - { - User::LeaveIfError( err ); - } - - if ( iDoc->Engine()->InterfaceFactory().IsApplicationAlreadyInUse() ) - { - LOG("Too many connections. Exiting..."); - CAknErrorNote* errornote = new (ELeave) CAknErrorNote( ETrue ); - HBufC* buf = StringLoader::LoadLC( R_QTN_PRINT_CONCURRENT_NOTE ); - errornote->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - Exit(); - } - - iAiwState = ENotAiwCall; - TInt r = iAiwCall.Attach(KPrintPropertyCat,EPrintProperty,EOwnerProcess); - if (r == KErrNone) - { - iAiwCall.Get(KPrintPropertyCat,EPrintProperty,iAiwState); - } - - TBool aiw = EFalse; - if ( iAiwState == EAiwPrintCall ) - { - // Set the aiw call RProperty key back to default value so that - // if application for some reason crashes the value is not left for AIW mode. - iAiwCall.Set( KPrintPropertyCat,EPrintProperty, ENotAiwCall ); - SetImageArrayL(GetImagesFromAiwProviderL()); - aiw = ETrue; - } - - - iUIMode = UIModeFactory::CreateL( aiw, this, iDoc->Engine()->InterfaceFactory() ); - - LOG("CImagePrintAppUi::ConstructL CImagePrintSettingsView"); - CImagePrintSettingsView* settingsView = CImagePrintSettingsView::NewL( - iDoc->PrintSettings(), iDoc->PrintJob(), this, iUIMode ); - CleanupStack::PushL( settingsView ); - AddViewL( settingsView ); - CleanupStack::Pop( settingsView ); - - LOG("CImagePrintAppUi::ConstructL CIMGPViewEmptyView"); - CIMGPViewEmptyView* emptyView = CIMGPViewEmptyView::NewL(); - CleanupStack::PushL( emptyView ); - AddViewL( emptyView ); - CleanupStack::Pop( emptyView); - - SetDefaultViewL( *emptyView ); - // default printer search in aiw mode must be done via - // CIdle callback for UI to construct itself properly - iIdleSearch = CIdle::NewL( CActive::EPriorityStandard ); - iIdleSearch->Start( TCallBack( SearchDefaultPrinterCbL, this )); - - // Default value for printer UID before printer is selected. - iPrinterUID = -1; - - iCoeEnv->RootWin().EnableScreenChangeEvents(); - - iApplicationStarting = ETrue; - iAlbumCall = KErrNotFound; - LOG("CImagePrintAppUi::ConstructL END"); - } - -// aiw search callback -TInt CImagePrintAppUi::SearchDefaultPrinterCbL( TAny* aObj ) - { - LOG("CImagePrintAppUi::SearchDefaultPrinterCbL begin"); - CImagePrintAppUi* obj = static_cast( aObj ); - TRAPD( err, obj->iUIMode->SearchDefaultPrinterL() ); - if ( err != KErrNone ) - { - LOG1( "CImagePrintAppUi::SearchDefaultPrinterCbL search failed, err: %d", err ); - - if ( err == KErrDisconnected ) - { - HBufC* buf = StringLoader::LoadLC( R_NOTE_DISCONNECT_PRINT_ERROR ); - CAknErrorNote* errornote = new CAknErrorNote( ETrue ); - errornote->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - } - - // Closes program - obj->Exit(); - } - LOG("CImagePrintAppUi::SearchDefaultPrinterCbL end"); - return EFalse; - } - -// Destructor -CImagePrintAppUi::~CImagePrintAppUi() - { - FeatureManager::UnInitializeLib(); - delete iNaviDecorator; - - iEikonEnv->DeleteResourceFile( iResourceOffset ); - delete iPrintDlgManager; - delete iUSBConnectionWaitNote; - - if( iIdleSearch ) - { - iIdleSearch->Cancel(); - } - - delete iUIMode; - delete iIdleSearch; - - iAiwCall.Close(); - } - -// Handles global user events -void CImagePrintAppUi::HandleCommandL( - TInt aCommand ) - { - LOG1( "CImagePrintAppUi::HandleCommandL BEGIN: %d", aCommand ); - switch ( aCommand ) - { - case EAknCmdExit: - case EAknSoftkeyExit: - { - Exit(); - break; - } - case EEikCmdExit: - { - // Cancel current printjob because this command may have come from MMC removal - // cancelling may fail in engine if mmc writing was in critical point, so TRAP - TRAP_IGNORE( iDoc->PrintJob()->CancelL() ); - if ( iAiwState == EAiwPrintCall ) - { - User::Exit( EAiwPrintCall ); - } - else - { - Exit(); - } - break; - } - - case EAknSoftkeyBack: - { - break; - } - - case ESelectMarked: - { - if( iValidImages ) - { - iUIMode->SearchDefaultPrinterL(); - } - else - { - CAknErrorNote* errornote = new (ELeave) CAknErrorNote( ETrue ); - HBufC* buf = StringLoader::LoadLC( R_QTN_PRINT_SELECTNEW_NOTE ); - errornote->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - } - break; - } - default: - break; - } - LOG( "CImagePrintAppUi::HandleCommandL END" ); - } - -void CImagePrintAppUi::LaunchHelpApplicationL( const TDesC& aHelpText ) - { - CArrayFix< TCoeHelpContext >* cntx = new( ELeave ) CArrayFixFlat< TCoeHelpContext >( 1 ); - CleanupStack::PushL( cntx ); - - //make uid - TUid uid; - uid.iUid = ( KUid ); - - cntx->AppendL( TCoeHelpContext( uid, aHelpText ) ); - CleanupStack::Pop( cntx ); - - //and launch help - takes ownership of context array - HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(), cntx ); - } - -// Set the image array -void CImagePrintAppUi::SetImageArrayL( CDesCArrayFlat* aFileArray ) - { - iFiles = aFileArray; - - // Sets default navipane text with no copies. - SetNavipaneTextL( 1 ); - - iDoc->SetImageArrayL( aFileArray ); - } - -// Get the image array -CDesCArrayFlat* CImagePrintAppUi::GetImageArray() - { - return iFiles; - } - -// Get the document class -CImagePrintDoc* CImagePrintAppUi::GetDocument() - { - return iDoc; - } - -TInt CImagePrintAppUi::GetAlbumCall() - { - return iAlbumCall; - } - -void CImagePrintAppUi::SetAlbumCall(TInt aAlbumCall) - { - iAlbumCall = aAlbumCall; - } - -void CImagePrintAppUi::SetValidImagesStatus( TBool aStatus ) - { - iValidImages = aStatus; - } - -void CImagePrintAppUi::ChangeViewL( TInt aView ) - { - switch( aView ) - { - case MUIModeObserver::SettingsView: - { - ActivateLocalViewL( KImageSettingsViewId ); - break; - } - } - } - -void CImagePrintAppUi::ExitApplication() - { - Exit(); - } - - -TInt CImagePrintAppUi::GetAiwState() - { - return iAiwState; - } - -TBool CImagePrintAppUi::AiwState() - { - TBool retValue = EFalse; - if( iAiwState == EAiwPrintCall ) - { - retValue = ETrue; - } - return retValue; - } - - -// Files from AIW customer -CDesCArrayFlat* CImagePrintAppUi::GetImagesFromAiwProviderL() - { - LOG("TBool CImagePrintAppUi::GetImagesFromAiwProvider() BEGIN"); - - RFs fileServer; - User::LeaveIfError(fileServer.Connect()); - CleanupClosePushL( fileServer ); - RFileReadStream readStream; - - TFileName paramFile; - CIMGPPrintUtils::GetDataFilePathL( paramFile ); - - User::LeaveIfError( readStream.Open(fileServer, paramFile, EFileRead) ); - readStream.PushL(); - CAiwGenericParamList* paramList = CAiwGenericParamList::NewLC(readStream); - - CDesCArrayFlat* imageFiles = new (ELeave) CDesCArrayFlat(5); - - TBool noOtherFileTypes( EFalse ); - TBool showFilesremovedNote ( EFalse ); - - TInt index( 0 ); - const TAiwGenericParam* param = paramList->FindFirst(index, - EGenericParamFile, - EVariantTypeDesC); - while ( index != KErrNotFound ) - { - TFileName filename( param->Value().AsDes() ); - // CheckMIMEType needs to be changed so that we can distinguish between - // a) file not found b) file was incorrect MIME-type - noOtherFileTypes = CIMGPPrintUtils::CheckMIMEType( KJpegFileType, filename ); - if ( noOtherFileTypes ) - { - // check drm protection - CContent* content = NULL; - content = CContent::NewLC( filename ); - - TInt isDrmProtected( 0 ); - TInt err = content->GetAttribute( EIsProtected, isDrmProtected ); - CleanupStack::PopAndDestroy(); // content - if ( err || isDrmProtected ) - { - LOG("CImagePrintAppUi::GetImagesFromAiwProvider(): found drm file!"); - noOtherFileTypes = EFalse; - } - } - - if ( noOtherFileTypes ) - { - imageFiles->AppendL( filename ); - } - else - { - showFilesremovedNote = ETrue; - } - - param = paramList->FindNext(index, - EGenericParamFile, - EVariantTypeDesC); - } - - if ( showFilesremovedNote ) - { - CAknErrorNote* errornote = new (ELeave) CAknErrorNote( ETrue ); - HBufC* buf = StringLoader::LoadLC( R_QTN_PRINT_WRONGTYPE_NOTE ); - errornote->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - } - - // If only one image is selected to print and it's corrupted, exit from application. - if ( showFilesremovedNote && ( imageFiles->Count() == KErrNone )) - { - CAknErrorNote* errornote = new (ELeave) CAknErrorNote( ETrue ); - HBufC* buf = StringLoader::LoadLC( R_QTN_PRINT_SELECTNEW_NOTE ); - errornote->ExecuteLD( *buf ); - CleanupStack::PopAndDestroy( buf ); - Exit(); - } - - CleanupStack::PopAndDestroy(paramList); //paramList - - LOG("TBool CImagePrintAppUi::GetImagesFromAiwProvider() END"); - - readStream.Close(); - readStream.Pop(); - CleanupStack::PopAndDestroy( &fileServer ); - return imageFiles; - } - -TBool CImagePrintAppUi::OrientationPortrait() - { - TBool retValue = ETrue; - TSize screenSize = CCoeEnv::Static()->ScreenDevice()->SizeInPixels(); - if( screenSize.iWidth == 416 || - screenSize.iWidth == 320 ) - { - retValue = EFalse; - } - return retValue; - } - -TBool CImagePrintAppUi::QVGAMode() - { - TBool retValue = EFalse; - TSize screenSize = CCoeEnv::Static()->ScreenDevice()->SizeInPixels(); - if( screenSize.iWidth == 240 || - screenSize.iWidth == 320 ) - { - retValue = ETrue; - } - return retValue; - } - -// Sets NaviPane text -void CImagePrintAppUi::SetNavipaneTextL( const TInt aCopiesOfImage, HBufC* aPaperSize ) - { - // Navipane image count will be sum of all images on current print job. - // E.g. If 2 images selected and copies value is 2, navi value will be: 2 x 2 = 4. - TInt printCount = aCopiesOfImage * ( iFiles->MdcaCount() ); - - // Buffer to store image or images -string. - HBufC* naviText; - - // If only one image to print navipane text will be: Image - if ( printCount == 1 ) - { - naviText = StringLoader::LoadLC( R_PRINTJOB_IMAGE ); - } - // If more than one image to print navipane text will be: Images - else - { - naviText = StringLoader::LoadLC( R_PRINTJOB_IMAGES, printCount ); - } - - TInt strLength = naviText->Length(); - - CEikStatusPane* sp = - iEikonEnv->AppUiFactory()->StatusPane(); - CAknNavigationControlContainer* np = - static_cast( - sp->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) ) ); - delete iNaviDecorator; - iNaviDecorator = NULL; - - // If paper size needs to be added to the NaviPane, more space is needed - if( aPaperSize ) - { - strLength += aPaperSize->Length() + KLineLength; - } - // Clear the printer name string from all formatting tabs & numbers - HBufC* stringholder = HBufC::NewLC( strLength ); - *stringholder = *naviText; - 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 ); - } - // 2nd possible iconformatting tab is 2nd last char (len - 2), don't delete it here - 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 ); - } - - // Add paper size and '-', in the beginning of the text - if( aPaperSize ) - { - TPtr ptr2 = aPaperSize->Des(); - ptr.Insert(0, KLine); - ptr.Insert(0, ptr2); - } - - iNaviDecorator = np->CreateNavigationLabelL( *stringholder ); - CleanupStack::PopAndDestroy( stringholder ); - np->PushL( *iNaviDecorator ); - sp->DrawNow(); - - CleanupStack::PopAndDestroy( naviText ); - } - -TUid CImagePrintAppUi::GetSettingsViewUid() - { - return KImageSettingsViewId; - } - -// End of File