AppSrc/ImagicViewBrowser.cpp
changeset 3 93fff7023be8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/AppSrc/ImagicViewBrowser.cpp	Fri Oct 15 10:18:29 2010 +0900
@@ -0,0 +1,920 @@
+/*
+* Copyright (c) 2009 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: Juha Kauppinen, Mika Hokkanen
+* 
+* Description: Photo Browser
+*
+*/
+
+
+// INCLUDE FILES
+#include  <viewcli.h>
+#include  <aknviewappui.h>
+#include  <avkon.hrh>
+#include  <aknquerydialog.h>
+#include  <PhotoBrowser.rsg>
+#include  "ImagicViewBrowser.h"
+#include  "ImagicContainerBrowser.h"
+#include  "Imagic.hrh"
+#include  "ImagicAppUi.h"
+#include  <S32FILE.H> 
+#include  "ImagicUtils.h"
+#include  "SendImageFile.h"
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CImagicViewBrowser::ConstructL(const TRect& aRect)
+// EPOC two-phased constructor
+// ---------------------------------------------------------
+//
+void CImagicViewBrowser::ConstructL(CImagicAppUi* aImagicAppUi)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::ConstructL++"));
+    
+    iImagicAppUi = aImagicAppUi;
+    iApplicationFeature = EAppFeatureNone;
+    iFaceCroppingComplete = ETrue;
+    
+    BaseConstructL( R_IMAGIC_VIEWBROWSER );
+    
+    //Create bitmap for high res image loading
+    iBitmap = new (ELeave) CFbsBitmap();
+#ifdef USE_RGBA
+    iBitmap->Create(TSize(10,10), EColor16MU);
+#else
+    iBitmap->Create(TSize(10,10), EColor16M);
+#endif
+    iTNCreationComplete = EFalse;
+    iFaceBrowsingComplete = EFalse;
+    
+    //For dynamic options menu
+    iEditModeEnabledCmd1 = ETrue;
+    
+    User::LeaveIfError(iFsSession.Connect());
+    
+#ifdef USE_SETTINGS_FILE
+    // Load user settings
+    TRAP_IGNORE(ReadSettingsFileL(KSettingFileName));  
+#endif
+    SetGridMode((TGridMode)iSettings.GetValue(CSettings::ESettingGridMode));
+    
+    DP0_IMAGIC(_L("CImagicViewBrowser::ConstructL--"));
+    }
+
+// ---------------------------------------------------------
+// CImagicViewBrowser::~CImagicViewBrowser()
+// Default destructor
+// ---------------------------------------------------------
+//
+CImagicViewBrowser::~CImagicViewBrowser()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::~ConstructL++"));
+    
+#ifdef USE_SETTINGS_FILE
+    // Save user settings
+    if (iSettings.IsChanged())
+        TRAP_IGNORE(WriteSettingsFileL(KSettingFileName));  
+#endif    
+    
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        }
+    iBitmap->Reset();
+    delete iBitmap;
+    delete iContainer;
+    iFsSession.Close();
+    
+    iTempCordArray.Close();
+    iCoordinates.Close();
+    
+    DP0_IMAGIC(_L("CImagicViewBrowser::~ConstructL--"));
+    }
+
+// ---------------------------------------------------------
+// TUid CImagicViewBrowser::Id()
+// This returns the view ID
+// ---------------------------------------------------------
+//
+TUid CImagicViewBrowser::Id() const
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::id"));
+    return BrowserView;
+    }
+
+// ---------------------------------------------------------
+// CImagicViewBrowser::HandleCommandL(TInt aCommand)
+// Here we handle commands for this view.
+// Each view has their own HandleCommandL()
+// ---------------------------------------------------------
+//
+void CImagicViewBrowser::HandleCommandL(TInt aCommand)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::HandleCommandL++"));
+    
+    CIEEngine* engine = iImagicAppUi->GetEngine();
+    
+    switch ( aCommand )
+        {
+        iContainer->DrawNow();
+        //case EAknSoftkeyOk:
+        case EAknSoftkeyBack:
+            {
+            if(iContainer->GetDrawMode() == CImagicContainerBrowser::EOneByOne){
+                iContainer->SetDrawMode(CImagicContainerBrowser::EGrid);
+                }
+            else if(iContainer->GetDrawMode() == CImagicContainerBrowser::EFaceBrowser){
+                iContainer->SetDrawMode(CImagicContainerBrowser::EOneByOne);
+                iFaceBrowsingMode = EFaceBrowserNone;
+                }
+            else if(iContainer->GetDrawMode() == CImagicContainerBrowser::EGrid){
+                AppUi()->HandleCommandL(EEikCmdExit);
+                }
+            //iContainer->DrawNow();
+            break;
+            }
+            
+        case EAknSoftkeyExit:
+            {
+            AppUi()->HandleCommandL(EEikCmdExit);
+            break;
+            }
+            
+        case EAknCmdExit:
+            {
+            AppUi()->HandleCommandL(EEikCmdExit);
+            break;
+            }    
+            
+        case EImagicCmdViewBrowserRotateRight:
+            {
+            CImageData* imageData = engine->GetImageData(iImagicAppUi->GetImageIndex());
+            TInt rotAngle = imageData->GetOrientation();
+            imageData->SetOrientation((rotAngle + 270)%360);
+            engine->SetImageRotation(iImagicAppUi->GetImageIndex());
+            engine->SetDBChanged(imageData);
+            break;
+            }
+     
+        case EImagicCmdViewBrowserRotateLeft:
+            {
+            CImageData* imageData = engine->GetImageData(iImagicAppUi->GetImageIndex());
+            TInt rotAngle = imageData->GetOrientation();
+            imageData->SetOrientation((rotAngle + 90)%360);
+            engine->SetImageRotation(iImagicAppUi->GetImageIndex());
+            engine->SetDBChanged(imageData);
+            break;
+            }
+     
+        //Deleting the Image...
+        case EImagicCmdViewBrowserDelete:
+            {
+            iContainer->DisplayDeleteQueryDialogL(R_DELETE_QUERY);
+            break;
+            }
+
+        //Switch grid mode 
+        case EImagicCmdViewBrowserGridModeFolder:
+            SetGridMode(EGridModeFolder);
+            break;
+            
+        case EImagicCmdViewBrowserGridModeTime:
+            SetGridMode(EGridModeTime);
+            break;
+
+        case EImagicCmdViewBrowserGridModePeople:
+            SetGridMode(EGridModePeople);
+            break;          
+            
+        //Show Image info
+        case EImagicCmdViewBrowserShowImageInfo:
+            {
+            //Get image Info ----------------->
+            
+            const TInt KMaxInfoFileNameLength = 50;
+            
+            TBuf<1024> buf;
+            //TPtr ptr(buf.Des());
+            TFileName fileName;
+            CImageData* imageData = engine->GetImageData(iImagicAppUi->GetImageIndex());
+            imageData->GetFileName(fileName, EFullSize);
+            
+            // Make file name shorter if doesn't fit to info box well
+            if (fileName.Length() > KMaxInfoFileNameLength)
+                {
+                for(TInt i = fileName.Length() - KMaxInfoFileNameLength;i < fileName.Length();i++)
+                    {
+                    if (i > 3 && fileName[i] == '\\')
+                        {
+                        fileName.Replace(3, i - 3, _L("..."));
+                        break;
+                        }
+                    }
+                }
+            
+            buf.Append(fileName);
+            buf.Append(_L("\n"));     
+            
+            TDateTime dateTime = imageData->GetCreatedTime().DateTime();
+            TInt year, month, day, hour, minute, second;
+            day = dateTime.Day() + 1;
+            month = dateTime.Month() + 1;
+            year = dateTime.Year();
+            hour = dateTime.Hour();
+            minute = dateTime.Minute();
+            second = dateTime.Second();
+            
+            TLocale locale;
+            TDateFormat dateFormat = locale.DateFormat();
+
+            TBuf<20> num1, num2, num3;
+            switch (dateFormat)
+                {
+                case EDateEuropean:
+                    num1.Num(day);
+                    buf.Append(num1); 
+                    buf.Append(locale.DateSeparator(1));
+                    num1.Num(month);
+                    buf.Append(num1); 
+                    buf.Append(locale.DateSeparator(2));
+                    num1.Num(year);
+                    buf.Append(num1);
+                    break;
+
+                case EDateAmerican:
+                    num1.Num(month);
+                    buf.Append(num1); 
+                    buf.Append(locale.DateSeparator(1));
+                    num1.Num(day);
+                    buf.Append(num1); 
+                    buf.Append(locale.DateSeparator(2));
+                    num1.Num(year);
+                    buf.Append(num1); 
+                    break;
+                
+                case EDateJapanese:
+                    num1.Num(year); 
+                    buf.Append(num1); 
+                    buf.Append(locale.DateSeparator(1));
+                    num1.Num(day); 
+                    buf.Append(num1); 
+                    buf.Append(locale.DateSeparator(2));
+                    num1.Num(month); 
+                    buf.Append(num1); 
+                    break;
+                }
+            buf.Append(KSpace);
+            
+            TTimeFormat timeFormat = locale.TimeFormat();
+            num2.Num(minute); if(minute < 10) num2.Insert(0, _L("0"));
+            num3.Num(second); if(second < 10) num3.Insert(0, _L("0"));
+            if (timeFormat == ETime12)
+                {
+                num1.Num(hour > 12 ? hour - 12 : hour);
+                if (locale.AmPmSymbolPosition() == ELocaleBefore)
+                    {
+                    buf.Append(hour < 12 ? _L("AM") : _L("PM"));
+                    if (locale.AmPmSpaceBetween()) 
+                        buf.Append(KSpace);
+                    buf.Append(num1);
+                    buf.Append(locale.TimeSeparator(1));
+                    buf.Append(num2);
+                    buf.Append(locale.TimeSeparator(2));
+                    buf.Append(num3);                    
+                    }
+                else
+                    {
+                    buf.Append(num1);
+                    buf.Append(locale.TimeSeparator(1));
+                    buf.Append(num2);
+                    buf.Append(locale.TimeSeparator(2));
+                    buf.Append(num3);
+                    if (locale.AmPmSpaceBetween()) 
+                        buf.Append(KSpace);
+                    buf.Append(hour < 12 ? _L("AM") : _L("PM"));                    
+                    }
+                }
+            else
+                {
+                num1.Num(hour);                
+                buf.Append(num1);
+                buf.Append(locale.TimeSeparator(1));            
+                buf.Append(num2);
+                buf.Append(locale.TimeSeparator(2));            
+                buf.Append(num3);                
+                }
+            buf.Append(KNewLine);            
+
+            num1.Num(imageData->GetSize().iWidth); 
+            num2.Num(imageData->GetSize().iHeight);
+            buf.Append(num1);
+            buf.Append(_L(" x "));
+            buf.Append(num2);            
+            
+            //buf.Append(_L("\n"));
+            //dateTime.TDateTime(aYear, aMonth, aDay, aHour, aMinute, aSecond, aMicroSecond);
+                    
+            iImagicAppUi->GetImagicUtils()->ExecutePopUpNote(buf, 10000, iContainer->GetScreenOrientation());
+            break;
+            }
+
+        //FaceBrowsing          
+        case EImagicCmdViewFaceBrowsing:
+            {
+            //Set Face Browsing Mode
+            //iFaceBrowsingMode = EFaceBrowsing;
+            iFaceBrowsingMode = EFaceBrowsingShowRect;
+            iContainer->InitFaceBrowsing();
+            
+            //Clear if face browser had old data
+            iContainer->ClearFaceArray();
+            ResetFaceCoords();
+            
+            //Get the file for FB processing
+            TFileName fileName;
+            engine->GetFileNameL(iImagicAppUi->GetImageIndex(), ESize512x512, fileName);
+
+            //Check if background face browsing is still going on 
+            //if(iFaceBrowsingComplete)
+                {
+                //If face browsing is complete just get face coordinates
+                engine->GetFaceCoordinates(fileName, iCoordinates);
+                
+                if(iCoordinates.Count() >= 1)
+                    {
+                    if(iContainer)
+                        iContainer->SetFaceCoords(iCoordinates);
+                    
+                    iContainer->SetDrawMode(CImagicContainerBrowser::EFaceBrowser);
+                    }
+                else
+                    {
+                    iImagicAppUi->GetImagicUtils()->ShowInfoNote(R_IMAGE_EDITOR_NO_FACES_FOUND_TEXT);
+                    }
+                }
+            break;
+            }
+
+// unno begin
+//#ifdef DOUBLETAP_FACEBROWSING
+        //FaceBrowsing with coordinates          
+        case EImagicCmdViewFaceBrowsingWithCoordinates:
+            {
+            CImageData* imageData = engine->GetImageData(iImagicAppUi->GetImageIndex());
+            if(imageData->IsImageReady(ESize512x512))
+                {
+                //Get the original file, and reset local coord storage
+                TFileName fileName;
+                engine->GetFileNameL(iImagicAppUi->GetImageIndex(), ESize512x512, fileName);
+                
+                ResetFaceCoords();
+                
+                //Check if background face browsing is still going on 
+                if(/*iFaceBrowsingComplete &&*/ iContainer) // also make sure container exists
+                    {
+                    //ResetFaceCoords();
+                    
+                    //If face browsing is complete just get face coordinates
+                    engine->GetFaceCoordinates(fileName, iCoordinates);
+                    
+                    if(iCoordinates.Count() >= 1)
+                        {
+                        iContainer->SetFaceCoords(iCoordinates);
+
+                        TInt faceid;
+                        if (iContainer->FindNearestFace(iContainer->GetLastTouchPoint(), faceid))
+                            {
+                            // start face browsing view if there are faces
+                            iContainer->SetDrawMode(CImagicContainerBrowser::EFaceBrowser);
+                            iContainer->SetCurrentFaceNro(faceid);
+                            //iFaceBrowsingMode = EFaceBrowsing;
+                            iFaceBrowsingMode = EFaceBrowsingShowRect;
+                            iContainer->InitFaceBrowsing();
+
+                            //unno
+                            DP0_IMAGIC(_L(" ------------------ Face browsing"));
+                            }
+                        else
+                            {
+                            DP1_IMAGIC(_L(" ------------------ No near faces (%d)"), faceid);
+                            }
+                        }
+                    else
+                        {
+                        DP0_IMAGIC(_L(" ------------------ No faces in picture"));
+                        }
+                    }
+                else
+                    {
+                    //Prioritise face browsing of selected picture if background process not completed 
+                    iContainer->ClearFaceArray();
+                    
+                    DP0_IMAGIC(_L(" ------------------ Background process ongoing"));
+                    }
+                }
+            break;
+            }
+//#endif
+
+        //Remove false face detection Coords from exif data
+        case EImagicCmdViewBrowserRemoveFace:
+            {
+            break;
+            }
+            
+        //Add new face detection to exif data
+        case EImagicCmdViewBrowserAddNewFace:
+            {
+            //Set Face Browsing Mode
+            iFaceBrowsingMode = EFaceBrowsingAddNewFace;
+            iImagicAppUi->GetImagicUtils()->ExecutePopUpNote(R_IMAGE_ADD_NEW_FACE_HELP_TEXT, 15000);
+                        
+            //Just set draw mode as oneByOne here
+            iContainer->SetDrawMode(CImagicContainerBrowser::EOneByOne);
+            break;
+            }
+
+        //Add as new face to exif data
+        case EImagicCmdViewBrowserAddAsThisNewFace:
+            {
+            break;
+            }
+        
+        //Face cropping
+        case EImagicCmdViewBrowserFaceCropping:
+            {
+            iContainer->SetBGPSStatus(EFalse);
+            
+            iFaceCroppingComplete = EFalse;
+            //iImagicAppUi->GetEngine()->StartFaceCropping(iImagicAppUi->GetImageIndex());
+            break;
+            }
+            
+        case EImagicCmdViewBrowserHelp:
+            {
+            CArrayFix<TCoeHelpContext>* buf = iImagicAppUi->AppHelpContextL();
+            //TBuf<10> buf;
+            HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), buf);
+            break;
+            }
+            
+        case EImagicCmdViewBrowserSend:
+            {
+            TFileName imageFileName;
+            
+            iImagicAppUi->GetEngine()->GetFileNameL(iContainer->GetCurrentIndex(), EFullSize, imageFileName);
+            
+            CSendImageFile *sender;
+            sender = CSendImageFile::NewL();
+            sender->SendFileViaSendUiL(imageFileName);
+            delete sender;
+            break;
+            }
+
+        default:
+            {
+            AppUi()->HandleCommandL( aCommand );
+            break;
+            }
+        }
+    DP0_IMAGIC(_L("CImagicViewBrowser::HandleCommandL--"));
+    }
+
+void CImagicViewBrowser::SetGridMode(TGridMode aGridMode)
+    {
+    CIEEngine* engine = iImagicAppUi->GetEngine();
+    CIEImageList& imageList = engine->GetImageList();
+    //if (imageList.IsGroupingFolders() != aEnable)
+        {
+        iSettings.SetValue(CSettings::ESettingGridMode, aGridMode);
+        
+        CImageData* imageData = NULL;
+        TInt index = 0;
+        
+        if (iContainer)
+            {
+            // Get index of currently selected image
+            index = iContainer->GetCurrentIndex();
+            if (iContainer->IsUserInputGiven())
+                imageData = engine->GetImageData(iContainer->GetCurrentIndex());
+            }
+        
+        imageList.SetGridMode(aGridMode); 
+        
+        if (iContainer)
+            {
+            // Update grid order
+            iContainer->ImageListChanged(0, EFalse);
+            
+            // Set index of same image in new grid
+            if (imageData)
+                {
+                index = imageList.GetImageIndex(imageData);
+                iContainer->SetCurrentIndex(index);
+                }
+            }
+        }
+    }
+
+/*
+void CImagicViewBrowser::SingleFaceBrowsingComplete()
+    {
+    //iImagicAppUi->GetEngineL()->GetFaceCoordinates(tmpFileName, iCoordinates);
+    
+    if(iCoordinates.Count() >= 1)
+        {
+        if(iContainer)
+            iContainer->SetFaceCoords(iCoordinates);
+        
+        iContainer->SetDrawMode(CImagicContainerBrowser::EFaceBrowser);
+        }
+    else
+        {
+        iImagicAppUi->GetImagicUtils()->ShowInfoNote(R_IMAGE_EDITOR_NO_FACES_FOUND_TEXT);
+        //DisplayAddFacesQueryDialogL(R_ADD_FACE_MANUALLY_QUERY);
+        }
+    }
+*/
+
+
+void CImagicViewBrowser::DisplayAddFacesQueryDialogL(TInt aResourceId)
+    {
+    CAknQueryDialog* dlg;
+    dlg = new ( ELeave ) CAknQueryDialog();
+    TInt result = dlg->ExecuteLD( aResourceId );
+    
+    if(result != KErrNone)
+        {
+        iFaceBrowsingMode = EFaceBrowsingAddNewFace;
+        //iImagicAppUi->GetImagicUtils()->ShowInfoNote(R_IMAGE_ADD_NEW_FACE_HELP_TEXT);
+        iImagicAppUi->GetImagicUtils()->ExecutePopUpNote(R_IMAGE_ADD_NEW_FACE_HELP_TEXT, 15000);
+        }
+    else
+        {
+        iFaceBrowsingMode = EFaceBrowserNone;                    
+        }
+    }
+
+void CImagicViewBrowser::SetFaceBrowsingMode(TFaceBrowsingModes aMode)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::SetFaceBrowsingMode"));
+    iFaceBrowsingMode = aMode;
+    }
+
+TFaceBrowsingModes CImagicViewBrowser::GetFaceBrowsingMode()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::GetFaceBrowsingMode"));
+    return iFaceBrowsingMode;
+    }
+
+
+// ---------------------------------------------------------
+// CImagicViewBrowser::HandleClientRectChange()
+// ---------------------------------------------------------
+//
+void CImagicViewBrowser::HandleClientRectChange()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::HandleClientRectChange++"));
+    if ( iContainer )
+        {
+        iContainer->SetRect( ClientRect() );
+        iContainer->SetFullScreen();
+        }
+    DP0_IMAGIC(_L("CImagicViewBrowser::HandleClientRectChange--"));
+    }
+
+// ---------------------------------------------------------
+// CImagicViewBrowser::DoActivateL(...)
+// This is called when a view needs to be activated.
+// This creates container with its controls.
+// ---------------------------------------------------------
+//
+void CImagicViewBrowser::DoActivateL(
+   const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
+   const TDesC8& /*aCustomMessage*/)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::DoActivateL++"));
+    
+    // Create Container
+    if (!iContainer)
+        {
+        DP0_IMAGIC(_L("CImagicViewBrowser::DoActivateL - create container"));
+        iContainer = new (ELeave) CImagicContainerBrowser;
+        iContainer->SetMopParent(this);
+        iContainer->ConstructL( iImagicAppUi, this, ClientRect() );
+        AppUi()->AddToStackL( *this, iContainer );
+        
+        if(iTNCreationComplete)
+            iContainer->SetBGPSStatus(ETrue);
+        else
+            iContainer->SetBGPSStatus(EFalse);
+        }
+    
+    iImagicAppUi->CImagicAppUiReady();
+    iImagicAppUi->BrowserContainerInitialized();
+    
+    DP0_IMAGIC(_L("CImagicViewBrowser::DoActivateL--"));
+   }
+
+// ---------------------------------------------------------
+// CImagicViewBrowser::HandleCommandL(TInt aCommand)
+// This is called when a view needs to be deactivated.
+// This destroys container with its controls.
+// ---------------------------------------------------------
+//
+void CImagicViewBrowser::DoDeactivate()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::DoDeactivate++"));
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    DP0_IMAGIC(_L("CImagicViewBrowser::DoDeactivate--"));
+    }
+
+
+// Set bitmap to draw
+void CImagicViewBrowser::SetActiveViewL(TUid /*aViewNro*/)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::SetActiveView"));
+    AppUi()->ActivateLocalViewL(BrowserView);
+    }
+
+//void CImagicViewBrowser::LoadBitmapsToBrowserL(TInt aIndex, TBool aHighRes)
+void CImagicViewBrowser::LoadBitmapsToBrowserL(CImageData* aImageData, TThumbSize aImageResolution)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::LoadBitmapsToBrowserL++"));
+    
+    ASSERT(iContainer);
+    
+    if (iContainer)
+        {
+        iImagicAppUi->GetEngine()->GetBitmapL(aImageData, iBitmap, aImageResolution);
+        iImageResolution = aImageResolution;
+        }
+    DP0_IMAGIC(_L("CImagicViewBrowser::LoadBitmapsToBrowserL--"));
+    }
+
+
+//Callback from engine that bitmap has been loaded
+void CImagicViewBrowser::BitmapLoadedByEngineL(TInt aError)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::BitmapLoadedByEngine++"));
+    
+    iContainer->ImageLoadedL(aError, iBitmap, iImageResolution);
+	
+    iContainer->SetLoadingOn(ETrue);
+    
+	// Request to load next thumbnail
+    if (aError == KErrNone)
+        iContainer->DynamicLoadingL(); 
+    
+    DP0_IMAGIC(_L("CImagicViewBrowser::BitmapLoadedByEngine--"));
+    }
+
+CImagicContainerBrowser* CImagicViewBrowser::GetContainer()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::GetContainer"));
+    //We return null on purpose if container does not exits
+    return iContainer;
+    }
+
+void CImagicViewBrowser::TNCreationComplete()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::TNCreationComplete++"));
+    iTNCreationComplete = ETrue;
+    
+    if(iContainer)
+        iContainer->SetBGPSStatus(ETrue);
+    
+    DP0_IMAGIC(_L("CImagicViewBrowser::TNCreationComplete--"));
+    }
+
+void CImagicViewBrowser::FaceDetectionComplete()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::FaceBrowsingComplete++"));
+    iFaceBrowsingComplete = ETrue;
+    
+    /*if(iContainer)
+        iContainer->SetTNCreationComplete(ETrue);*/
+    
+    DP0_IMAGIC(_L("CImagicViewBrowser::FaceBrowsingComplete--"));
+    }
+
+void CImagicViewBrowser::TNCreationBegin()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::TNCreationBegin++"));
+    iTNCreationComplete = EFalse;
+    
+    if(iContainer)
+        iContainer->SetBGPSStatus(EFalse);
+    DP0_IMAGIC(_L("CImagicViewBrowser::TNCreationBegin--"));
+    }
+
+TApplicationFeature CImagicViewBrowser::GetAppFeature()
+    {
+    return iApplicationFeature;
+    }
+
+// ----------------------------------------------------------------------------
+// CImagicViewBrowser::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+// This function is called by the EIKON framework just before it displays
+// a menu pane. Sets the state of menu items dynamically according
+// to the state of application data.
+// ----------------------------------------------------------------------------
+//
+void CImagicViewBrowser::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::DynInitMenuPaneL++"));
+    
+    CTextureLoader* textLoader = iContainer->GetTextureLoader();
+    CImagicContainerBrowser::TDrawFunction drawMode = iContainer->GetDrawMode();
+    
+    if(aResourceId == R_IMAGIC_VIEWBROWSER_MENU)
+        {
+        //Initialaly hide Edit, Crop and Delete
+        aMenuPane->SetItemDimmed(EImagicCmdViewEdit, ETrue); //Edit
+        aMenuPane->SetItemDimmed(EImagicCmdViewFaceBrowsing, ETrue); //FaceBrowsing
+        aMenuPane->SetItemDimmed(EImagicCmdViewBrowserCropping, ETrue); //Crop
+        //aMenuPane->SetItemDimmed(EImagicCmdViewBrowserDelete, EFalse); //Delete
+                
+        aMenuPane->SetItemDimmed(EImagicCmdViewBrowserRemoveFace, ETrue);//Remove false detection Coords from exif data
+        aMenuPane->SetItemDimmed(EImagicCmdViewBrowserAddNewFace, ETrue);//Add new face detection to exif data
+        aMenuPane->SetItemDimmed(EImagicCmdViewBrowserAddAsThisNewFace, ETrue);//Add as new face to exif data
+        aMenuPane->SetItemDimmed(EImagicCmdViewBrowserFaceCropping, ETrue);//Face cropping
+        
+        aMenuPane->SetItemDimmed(ECmdRotateImage, EFalse); //Layouts
+        aMenuPane->SetItemDimmed(EImagicCmdViewBrowserShowImageInfo, EFalse); //Image Info
+        aMenuPane->SetItemDimmed(EImagicCmdViewBrowserHelp, ETrue); //Image Info
+        
+        if((drawMode == CImagicContainerBrowser::EOneByOne || drawMode == CImagicContainerBrowser::EFaceBrowser))
+            {
+            aMenuPane->SetItemDimmed(EImagicCmdViewBrowserGridModeFolder, ETrue);            
+            aMenuPane->SetItemDimmed(EImagicCmdViewBrowserGridModeTime, ETrue); 
+            
+            //if(iTNCreationComplete && iFaceCroppingComplete)
+            CImageData* imageData = iImagicAppUi->GetEngine()->GetImageData(iImagicAppUi->GetImageIndex());
+            if(imageData->IsImageReady(ESize512x512))
+                {
+                aMenuPane->SetItemDimmed(EImagicCmdViewEdit, ETrue); //Edit
+                if(imageData->GetNumberOfFaces() > 0)
+                    aMenuPane->SetItemDimmed(EImagicCmdViewFaceBrowsing, EFalse); //FaceBrowsing
+                
+                aMenuPane->SetItemDimmed(EImagicCmdViewBrowserCropping, ETrue); //Crop
+                aMenuPane->SetItemDimmed(EImagicCmdViewBrowserFaceCropping, ETrue);//Face cropping
+                
+                if(iFaceBrowsingMode == EFaceBrowsing)
+                    {
+                    aMenuPane->SetItemDimmed(EImagicCmdViewFaceBrowsing, ETrue); //FaceBrowsing
+                    aMenuPane->SetItemDimmed(EImagicCmdViewBrowserAddAsThisNewFace, ETrue);//Add as new face to exif data
+                    aMenuPane->SetItemDimmed(EImagicCmdViewBrowserCropping, ETrue); //Crop
+                    aMenuPane->SetItemDimmed(EImagicCmdViewBrowserDelete, ETrue); //Delete
+                    aMenuPane->SetItemDimmed(EImagicCmdViewBrowserFaceCropping, ETrue);//Face cropping
+                    aMenuPane->SetItemDimmed(EImagicCmdViewBrowserShowImageInfo, EFalse); //Image Info
+                    }
+                }
+            }
+        else
+            {
+            TGridMode gridMode = (TGridMode)iSettings.GetValue(CSettings::ESettingGridMode);
+            aMenuPane->SetItemDimmed(EImagicCmdViewBrowserGridModeFolder, gridMode != EGridModeFolder);            
+            aMenuPane->SetItemDimmed(EImagicCmdViewBrowserGridModeTime, gridMode != EGridModeTime); 
+            aMenuPane->SetItemDimmed(EImagicCmdViewBrowserGridModePeople, 
+#ifdef PEOPLE_VIEW			
+				ETrue);
+#else
+				gridMode != EGridModePeople);
+#endif				
+            }
+        }
+    
+    DP0_IMAGIC(_L("CImagicViewBrowser::DynInitMenuPaneL--"));
+    }
+
+void CImagicViewBrowser::WriteSettingsFileL(const TDesC& aName)
+{
+    DP0_IMAGIC(_L("CImagicViewBrowser::WriteSettingsFileL++"));
+    
+    TParse filestorename;
+    iFsSession.Parse(aName,filestorename);
+    
+    RFileWriteStream writer;
+    writer.PushL();
+    User::LeaveIfError(writer.Replace(iFsSession, filestorename.FullName(), EFileWrite));
+    
+    writer << iSettings; 
+    writer.CommitL();
+    
+    CleanupStack::PopAndDestroy();
+
+    DP0_IMAGIC(_L("CImagicViewBrowser::WriteSettingsFileL--"));
+}
+
+
+void CImagicViewBrowser::ReadSettingsFileL(const TDesC& aName)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::ReadSettingsFileL++"));
+    TParse filestorename;
+    iFsSession.Parse(aName,filestorename);
+
+    RFileReadStream reader;
+    reader.PushL();
+    
+    User::LeaveIfError(reader.Open(iFsSession, filestorename.FullName(),EFileRead));
+    reader >> iSettings;
+
+    // Cleanup the stream object
+    CleanupStack::PopAndDestroy();
+    DP0_IMAGIC(_L("CImagicViewBrowser::ReadSettingsFileL--"));
+    }
+
+//Returns true if file exists
+/*TBool CImagicViewBrowser::FindFileName(const TDesC& aName)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::FindFileName++"));
+    TBool result = BaflUtils::FileExists(iFsSession, aName); 
+    DP0_IMAGIC(_L("CImagicViewBrowser::FindFileName--"));
+    return result;
+    }*/    
+
+CSettings::CSettings()
+    {
+    iChanged = EFalse;
+    Mem::FillZ(iValues, sizeof(iValues));
+    }
+
+//Functions from TModeSettings class
+void CSettings::ExternalizeL(RWriteStream& aStream) const
+    {
+    aStream.WriteL((TUint8*)iValues, sizeof(iValues));
+    }  
+ 
+void CSettings::InternalizeL(RReadStream& aStream)
+    {
+    aStream.ReadL((TUint8*)iValues, sizeof(iValues));
+    }
+
+void CSettings::SetValue(TSettingsValue aIndex, TInt aValue)
+    {
+    if (iValues[aIndex] != aValue)
+        {
+        iValues[aIndex] = aValue;
+        iChanged = ETrue;
+        }
+    }
+
+TInt CSettings::GetValue(TSettingsValue aIndex) const
+    {
+    return iValues[aIndex];
+    }
+
+TBool CSettings::IsChanged() const
+    {
+    return iChanged;
+    }
+
+/*
+void CImagicViewBrowser::SetFaceCoords(RArray<TRect>& aCoordinates)
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::SetFaceCoords++"));
+    
+    iCoordinates = aCoordinates;
+    
+    if(iContainer)
+        iContainer->SetFaceCoords(aCoordinates);
+    
+    TInt tmp = iCoordinates.Count();
+    for(TInt i = 0; i < tmp; i++)
+        {
+        iCoordinates.Remove(0);
+        }
+        
+    DP0_IMAGIC(_L("CImagicViewBrowser::SetFaceCoords--"));
+    }
+*/
+void CImagicViewBrowser::ResetFaceCoords()
+    {
+    DP0_IMAGIC(_L("CImagicViewBrowser::ResetFaceCoords++"));
+    
+    //iCoordinates.Reset();
+    TInt tmp = iCoordinates.Count();
+    for(TInt i = 0; i < tmp; i++)
+        {
+        iCoordinates.Remove(0);
+        }
+    }
+
+// End of File
+