--- /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 <documenthandler.h>
+#include <apmstd.h>
+#include <Uri16.h>
+#include <aknenv.h>
+#include <avkon.mbg>
+#include <akneditstateindicator.h>
+#include <AknsListBoxBackgroundControlContext.h>
+#include <AiwGenericParam.h>
+
+// Resources
+#include <BrowserDialogsProvider.rsg>
+
+//-----------------------------------------------------------------------------
+// CBrowserViewImagesPopup::CBrowserViewImagesPopup()
+//
+// Default Constructor
+//-----------------------------------------------------------------------------
+//
+CBrowserViewImagesPopup::CBrowserViewImagesPopup()
+ {
+ }
+
+//-----------------------------------------------------------------------------
+// CBrowserViewImagesPopup::~CBrowserViewImagesPopup()
+//
+// Destructor
+//-----------------------------------------------------------------------------
+//
+CBrowserViewImagesPopup::~CBrowserViewImagesPopup()
+ {
+ delete iListBox;
+ delete iPhotoOperationWait;
+ delete iSkinContext;
+ }
+
+
+//-----------------------------------------------------------------------------
+// CBrowserViewImagesPopup::ConstructL(
+// CArrayFixFlat<TBrCtlImageCarrier>& aPageImages )
+//-----------------------------------------------------------------------------
+//
+void CBrowserViewImagesPopup::ConstructL(
+ CArrayFixFlat<TBrCtlImageCarrier>& 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