diff -r 000000000000 -r dd21522fd290 browserutilities/browserdialogsprovider/Src/BrowserViewImagesPopup.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browserutilities/browserdialogsprovider/Src/BrowserViewImagesPopup.cpp Mon Mar 30 12:54:55 2009 +0300 @@ -0,0 +1,379 @@ +/* +* Copyright (c) 2004 Nokia Corporation and/or its subsidiary(-ies). +* 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: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* View images popup box +* +* +*/ + + +// USER INCLUDES +#include "BrowserDialogsProvider.h" +#include "BrowserDialogsProvider.hrh" +#include "BrowserViewImagesPopup.h" +#include "PhotoOperationWait.h" +#include "BrowserViewImagesListBox.h" + +// SYSTEM INCLUDES +#include +#include +#include +#include +#include +#include +#include +#include + +// Resources +#include + +//----------------------------------------------------------------------------- +// CBrowserViewImagesPopup::CBrowserViewImagesPopup() +// +// Default Constructor +//----------------------------------------------------------------------------- +// +CBrowserViewImagesPopup::CBrowserViewImagesPopup() + { + } + +//----------------------------------------------------------------------------- +// CBrowserViewImagesPopup::~CBrowserViewImagesPopup() +// +// Destructor +//----------------------------------------------------------------------------- +// +CBrowserViewImagesPopup::~CBrowserViewImagesPopup() + { + delete iListBox; + delete iPhotoOperationWait; + delete iSkinContext; + } + + +//----------------------------------------------------------------------------- +// CBrowserViewImagesPopup::ConstructL( +// CArrayFixFlat& aPageImages ) +//----------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::ConstructL( + CArrayFixFlat& aPageImages ) + { + delete iListBox; + iListBox = NULL; + iListBox = new (ELeave) CBrowserViewImagesListBox(); + + ConstructL( iListBox, + R_DIALOGSPROVIDER_VIEWIMAGES_BUTTONS, + AknPopupLayouts::EMenuDoubleLargeGraphicWindow ); + + iListBox->ConstructL( *this, aPageImages ); + iListBox->CreateScrollBarFrameL( ETrue ); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL( + CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto ); + iListBox->SetObserver(this); + + iListBox->StartConversionL(); // start thumbnailing + + HBufC* title = CEikonEnv::Static()->AllocReadResourceL( + R_BROWSER_QUERY_SELECT_IMAGE); + CleanupStack::PushL(title); + SetTitleL(*title); + CleanupStack::PopAndDestroy(); // title + } + + +//----------------------------------------------------------------------------- +// CBrowserViewImagesPopup::ConstructL( CEikListBox *aListBox, +// TInt aCbaResource, +// AknPopupLayouts::TAknPopupLayouts aType ) +// Private constructor +//----------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::ConstructL( CEikListBox *aListBox, + TInt aCbaResource, + AknPopupLayouts::TAknPopupLayouts aType ) + { + CAknPopupList::ConstructL(aListBox, aCbaResource, aType); + iPhotoOperationWait = CPhotoOperationWait::NewL(); + + TAknsItemID tileIID = KAknsIIDSkinBmpListPaneNarrowA; + + AknLayoutUtils::SAknLayoutRect tile = { 0, 0,0, ELayoutEmpty, ELayoutEmpty, 20, 144 }; + AknLayoutUtils::SAknLayoutRect bg = { 0, 0, 0, ELayoutEmpty, ELayoutEmpty, 176, 144 }; + if (AknLayoutUtils::LayoutMirrored()) + { + tile.iL = ELayoutEmpty; + tile.iR = 0; + } + + TRect clientRect( 0, 0, 176, 144 ); + TAknLayoutRect tileRect; + tileRect.LayoutRect(clientRect, tile); + TAknLayoutRect bgRect; + bgRect.LayoutRect(clientRect, bg); + + iSkinContext = CAknsListBoxBackgroundControlContext::NewL( + KAknsIIDSkinBmpMainPaneUsual, + bgRect.Rect(), //TODOVRa: Should come from LAF! + EFalse, tileIID, + tileRect.Rect() ); //TODOVRa: Should come from LAF! + } + + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::HandleListBoxEventL( CEikListBox* aListBox, +// TListBoxEvent aEventType ) +// --------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::HandleListBoxEventL( CEikListBox* aListBox, + TListBoxEvent aEventType ) + { + if((aEventType==EEventEnterKeyPressed || aEventType==EEventItemDoubleClicked) && aListBox==ListBox()) + { + ProcessCommandL( EDialogsProviderCmdViewImagesView ); + } + } + + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::HandleControlEventL( CCoeControl* /*aControl*/, +// TCoeEvent /*aEventType*/ ) +// --------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::HandleControlEventL( CCoeControl* /*aControl*/, + TCoeEvent /*aEventType*/ ) + { + // CAknPopupList::HandleControlEventL(aControl, aEventType); + } + + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::PhotoOperationL() +// --------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::PhotoOperationL() + { + const TBrCtlImageCarrier& img = STATIC_CAST( CBrowserViewImagesListBox*, ListBox() )->CurrentlySelectedImage(); + iPopupFader.FadeBehindPopup( this, this, EFalse ); + PhotoOperationL(img, iPhotoOperationWait); + iPopupFader.FadeBehindPopup( this, this, ETrue ); + } + + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::LaunchPhotoAlbumL() +// --------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::LaunchPhotoAlbumL() + { + if(!iPhotoOperationWait->IsStarted()) + { + iPhotoOperationWait->SetViewActivate(ETrue); + + TRAPD( err, PhotoOperationL() ) + + if ( err == KErrNone ) + { + iPhotoOperationWait->SetViewActivate(EFalse); + } + else + { + iPhotoOperationWait->SetViewActivate(EFalse); + User::Leave( err ); + } + } + } + + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::ProcessCommandL( TInt aCommandId ) +// --------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::ProcessCommandL( TInt aCommandId ) + { + switch(aCommandId) + { + case EDialogsProviderCmdViewImagesView: + LaunchPhotoAlbumL(); + break; + case EAknSoftkeyCancel: + default: + CancelPopup(); + break; + } + } + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::ProcessCommandL( TInt aCommandId ) +// --------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::PhotoOperationL(const TBrCtlImageCarrier& aImg, CPhotoOperationWait* aPhotoOperationWait) + { + TBool ownPhotoOperationWait = EFalse; + if (!aPhotoOperationWait) + { + aPhotoOperationWait = CPhotoOperationWait::NewL(); + ownPhotoOperationWait = ETrue; + } + HBufC* apu; + TInt locate; + + CEikProcess* process = CEikonEnv::Static()->Process(); + CDocumentHandler* docHandler = CDocumentHandler::NewLC(process); + + // Getting name for image from url. + TUriParser16 urlParser; + if ( aImg.AltText().Length() ) + { + urlParser.Parse( aImg.AltText() ); + } + else + { + urlParser.Parse( aImg.Url() ); + } + apu = urlParser.Extract(EUriPath).AllocLC(); + locate = apu->LocateReverseF('/'); + locate++; + apu->Des().Delete(0, locate); + + // Inform DocumentHandler of image type, if not recognized but handled + TBuf8<128> mimeType; + _LIT(KWbmpDataType, "image/vnd.wap.wbmp"); + _LIT(KOtaDataType, "image/vnd.nokia.ota-bitmap"); + _LIT( KEmptyDataType, "" ); + + if ( aImg.ImageType() == EImageTypeWbmp ) + { + // WBMP image + mimeType.Copy(KWbmpDataType); + } + else if ( aImg.ImageType() == EImageTypeOta ) + { + // OTA image + mimeType.Copy( KOtaDataType ); + } + else + { + mimeType.Copy( KEmptyDataType ); + } + + TDataType dataType( mimeType ); + + // remove fading behind popup during displaying the image +// iPopupFader.FadeBehindPopup( this, this, EFalse ); + + // launch photo album + CAiwGenericParamList& paramList = docHandler->InParamListL(); + + // Allow save + TBool allowSave( ETrue ); + TAiwVariant allowSaveVariant(allowSave); + TAiwGenericParam genericParamAllowSave( EGenericParamAllowSave, + allowSaveVariant ); + paramList.AppendL( genericParamAllowSave ); + + RFile tempFile; + TRAPD(err, docHandler->SaveTempFileL( aImg.RawData(), dataType, apu->Des(), tempFile )); + if (err != KErrNone) + { + if (aImg.AltText().Length()) + { + urlParser.Parse( aImg.Url() ); + CleanupStack::PopAndDestroy(); // apu + apu = NULL; + apu = urlParser.Extract(EUriPath).AllocLC(); + locate = apu->LocateReverseF('/'); + locate++; + apu->Des().Delete(0, locate); + docHandler->SaveTempFileL( aImg.RawData(), dataType, apu->Des(), tempFile ); + } + else + { + User::Leave(err); + } + } + CleanupClosePushL( tempFile ); + docHandler->OpenFileEmbeddedL( tempFile, dataType, paramList ); + CleanupStack::PopAndDestroy( &tempFile ); // tempFile + + // wait until user returns from the photo album + docHandler->SetExitObserver(aPhotoOperationWait); + aPhotoOperationWait->Wait(); + + // restore fading behind popup +// iPopupFader.FadeBehindPopup( this, this, ETrue ); + + CleanupStack::PopAndDestroy(2); // docHandler,apu + + if (ownPhotoOperationWait) + { + delete aPhotoOperationWait; + aPhotoOperationWait = NULL; + } + } + + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::MopSupplyObject( TTypeUid aId ) +// --------------------------------------------------------------------------- +// +TTypeUid::Ptr CBrowserViewImagesPopup::MopSupplyObject( TTypeUid aId ) + { + return CAknPopupList::MopSupplyObject(aId); + } + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::AttemptExitL(TBool aAccept) +// +// Overrides CAknPopupList's AttemptExitL +// Popup should not be deleted if still in use +// --------------------------------------------------------------------------- +// +void CBrowserViewImagesPopup::AttemptExitL(TBool aAccept) + { + + if ( IsAppShutterActive() && iPhotoOperationWait->IsStarted() ) + { + iPhotoOperationWait->DoCancel(); + } + + if (!iPhotoOperationWait->IsStarted()) + { + if (iReturn) //Always not null unless ExecuteLD leaves + *iReturn = aAccept; + //delete this; + } + //Need to call the base class api also + CAknPopupList::AttemptExitL(aAccept); + } + +// --------------------------------------------------------------------------- +// CBrowserViewImagesPopup::IsAppShutterActive +// --------------------------------------------------------------------------- +// +TBool CBrowserViewImagesPopup::IsAppShutterActive() + { + CAknAppUi* shuttingApp = CAknEnv::AppWithShutterRunning(); + + if ( shuttingApp ) + { + return ETrue; + } + else + { + return EFalse; + } + } +// End of File