photosgallery/viewframework/views/metadatadialog/src/glximgvwrmetadatadialog.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 19 Aug 2010 09:55:03 +0300
branchRCL_3
changeset 24 ea65f74e6de4
parent 13 bcb43dc84c44
permissions -rw-r--r--
Revision: 201031 Kit: 201033

/*
* Copyright (c) 2008-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:
*
* Description:    glximgvwrmetadatadialog.cpp
*
*/


#include "glximgvwrmetadatadialog.h"

//system includes
#include <AknUtils.h>                   //for AknUtils
#include <akntitle.h>
#include <data_caging_path_literals.hrh>// KDC_APP_RESOURCE_DIR 
#include <StringLoader.h>
#include <akntoolbar.h>

//User includes
#include <glxmetadatadialog.rsg>
#include <glxresourceutilities.h>
#include <glxlog.h>
#include <glxtracer.h>
#include <glxcommandhandlers.hrh>
#include <glxdetailsboundcommand.hrh>
#include "glxmetadatacommandhandler.h"

// ============================ MEMBER FUNCTIONS ===============================

// -----------------------------------------------------------------------------
// NewL
// -----------------------------------------------------------------------------
//
EXPORT_C CGlxImgVwrMetadataDialog* CGlxImgVwrMetadataDialog::NewL( const TDesC& aUri  )
    {
    TRACER("CGlxImgVwrMetadataDialog::NewL");

    CGlxImgVwrMetadataDialog* self = new(ELeave) CGlxImgVwrMetadataDialog(aUri );
    CleanupStack::PushL( self );
    self->ConstructL();
    CleanupStack::Pop( self );
    return self;
    }

// -----------------------------------------------------------------------------
// CGlxImgVwrMetadataDialog
// -----------------------------------------------------------------------------
//
CGlxImgVwrMetadataDialog::CGlxImgVwrMetadataDialog(const TDesC& aUri):iUri(aUri)
    {
    }

// -----------------------------------------------------------------------------
// ConstructL
// -----------------------------------------------------------------------------
//
void CGlxImgVwrMetadataDialog::ConstructL()
    {
    TRACER("CGlxImgVwrMetadataDialog::ConstructL");

    // Load dialog's resource file
    InitResourceL();

    // make the toolbar disabled
    SetDetailsDlgToolbarVisibility(EFalse);  

    iStatusPaneAvailable = EFalse;
    // set the title to the dialog, Note that avkon dialogs do not support
    // setting the title in the status pane so we need to do it the hard way
    // get status pane
    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();

    if(statusPane && statusPane->IsVisible())
        {
        iStatusPaneAvailable = ETrue;       
        }

    // do we have status pane
    if( statusPane )
        {
        GLX_LOG_INFO1("GLX_UMP::CGlxImgVwrMetadataDialog::ConstructL::STATUS PANE = %d",
                statusPane->IsVisible());    
        // load the title text
        HBufC* text = StringLoader::LoadL(R_GLX_METADATA_VIEW_TITLE_DETAILS, iEikonEnv );
        SetTitleL( *text );
        if( text)
            {
            delete text;
            }
        iAvkonAppUi->StatusPane()->MakeVisible(ETrue);             
        }
    } 

// -----------------------------------------------------------------------------
// ~CGlxImgVwrMetadataDialog
// -----------------------------------------------------------------------------
//
CGlxImgVwrMetadataDialog::~CGlxImgVwrMetadataDialog()
    {
    TRACER("CGlxImgVwrMetadataDialog::~CGlxImgVwrMetadataDialog");

    //To Disable the status pane if the dialog is launched from fullscreenview  
    if (!iStatusPaneAvailable && iAvkonAppUi)
        {
        iAvkonAppUi->StatusPane()->MakeVisible(EFalse);
        }       

    TRAP_IGNORE(SetPreviousTitleL());
    delete iPreviousTitle;

    // Restore the Toolbar as it was in the Calling application
    SetDetailsDlgToolbarVisibility(ETrue);

    // If details launched from FullScreen View, while moving back,
    // all the UI components should be hidden. Hence processing this command here.
    if (iAvkonAppUi)
        {
        TRAP_IGNORE(iAvkonAppUi->ProcessCommandL(EGlxCmdResetView));
        }

    if (iResourceOffset)
        {
        CCoeEnv::Static()->DeleteResourceFile(iResourceOffset);
        }   
    }

// ---------------------------------------------------------------------------
// SetDetailsDlgToolbarVisibility()
// ---------------------------------------------------------------------------
void CGlxImgVwrMetadataDialog::SetDetailsDlgToolbarVisibility(TBool aVisible)
    {
    TRACER("CGlxImgVwrMetadataDialog::SetDetailsDlgToolbarVisibility");

    HandleToolbarResetting(aVisible);
    CAknToolbar* currentPopupToolbar = iAvkonAppUi->CurrentPopupToolbar();
    if(currentPopupToolbar)
        {
        currentPopupToolbar->SetToolbarVisibility(aVisible);
        currentPopupToolbar->MakeVisible( aVisible ); 
        }
    }

// -----------------------------------------------------------------------------
// ExecuteLD
// -----------------------------------------------------------------------------
//
EXPORT_C TInt CGlxImgVwrMetadataDialog::ExecuteLD()
    {
    TRACER("CGlxImgVwrMetadataDialog::ExecuteLD");     
    return CAknDialog::ExecuteLD( R_IMG_VIEWER_METADATA_DIALOG );
    }

// -----------------------------------------------------------------------------
// ProcessCommandL
// -----------------------------------------------------------------------------
//
void CGlxImgVwrMetadataDialog::ProcessCommandL(TInt /*aCommandId*/)
    {
    TRACER("CGlxImgVwrMetadataDialog::ProcessCommandL");
    // hide menu bar
    iMenuBar->StopDisplayingMenuBar();
    }

//-----------------------------------------------------------------------------
// CGlxImgVwrMetadataDialog::CreateCustomControlL
//-----------------------------------------------------------------------------
SEikControlInfo CGlxImgVwrMetadataDialog::CreateCustomControlL(TInt 
        aControlType)
    {
    GLX_LOG_INFO("CGlxImgVwrMetadataDialog::CreateCustomControlL");

    // create control info, no flags or trailer text set
    SEikControlInfo controlInfo;
    controlInfo.iControl = NULL;
    controlInfo.iTrailerTextId = 0;
    controlInfo.iFlags = 0;
    if (aControlType == EMetaDataDialogListBox)
        {
        iContainer = CGlxImgVwrMetadataContainer::NewL(
                iAvkonAppUi->ClientRect(), iUri);
        controlInfo.iControl = iContainer; // giving ownership   
        }
    return controlInfo; // returns ownership of ItemList
    }

// -----------------------------------------------------------------------------
// CGlxImgVwrMetadataDialog::InitResourceL
// -----------------------------------------------------------------------------
//
void CGlxImgVwrMetadataDialog::InitResourceL()    
    {
    TRACER("CGlxImgVwrMetadataDialog::InitResourceL");

    _LIT(KGlxMetadataDialogResource,"glxmetadatadialog.rsc");
    //add resource file
    TParse parse;
    parse.Set(KGlxMetadataDialogResource, &KDC_APP_RESOURCE_DIR, NULL);
    TFileName resourceFile;
    resourceFile.Append(parse.FullName()); 
    CGlxResourceUtilities::GetResourceFilenameL(resourceFile);  
    iResourceOffset = CCoeEnv::Static()->AddResourceFileL(resourceFile);
    }  

// ---------------------------------------------------------------------------
// CGlxImgVwrMetadataDialog::SetTitleL()
// ---------------------------------------------------------------------------
void CGlxImgVwrMetadataDialog::SetTitleL(const TDesC& aTitleText)
    {
    TRACER("CGlxImgVwrMetadataDialog::SetTitleL");
    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
    CleanupStack::PushL(statusPane);
    // get pointer to the default title pane control
    CAknTitlePane* titlePane = ( CAknTitlePane* )statusPane->ControlL(
            TUid::Uid( EEikStatusPaneUidTitle ));       
    CleanupStack::PushL(titlePane);
    // set the title if we got the title pane control
    if( titlePane )
        {
        GLX_LOG_INFO("GLX_UMP::CGlxImgVwrMetadataDialog::ConstructL::INSIDE titlePane");
        iPreviousTitle = titlePane->Text()->AllocL();
        // Set the required Title
        titlePane->SetTextL( aTitleText );
        }
    CleanupStack::Pop(titlePane);
    CleanupStack::Pop(statusPane);
    }

// ---------------------------------------------------------------------------
// CGlxImgVwrMetadataDialog::SetPreviousTitleL
// ---------------------------------------------------------------------------
void CGlxImgVwrMetadataDialog::SetPreviousTitleL()
    {
    TRACER("CGlxImgVwrMetadataDialog::SetPreviousTitleL");
    CEikStatusPane* prevStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
    CleanupStack::PushL(prevStatusPane);
    CAknTitlePane* prevTitlePane = ( CAknTitlePane* )prevStatusPane->ControlL(
            TUid::Uid( EEikStatusPaneUidTitle ));       
    CleanupStack::PushL(prevTitlePane);
    if( prevTitlePane )
        {
        // Restore the Title back of the Calling Application
        prevTitlePane->SetTextL( *iPreviousTitle );
        }
    CleanupStack::Pop(prevTitlePane);
    CleanupStack::Pop(prevStatusPane);
    }

// -----------------------------------------------------------------------------
// CGlxImgVwrMetadataDialog::HandleToolbarResetting
// -----------------------------------------------------------------------------
//
void CGlxImgVwrMetadataDialog::HandleToolbarResetting(TBool aVisible)
    {
    TRACER("CGlxImgVwrMetadataDialog::HandleToolbarResetting");

    CAknToolbar* popupToolbar = iAvkonAppUi->PopupToolbar();
    if(popupToolbar)
        {
        popupToolbar->SetToolbarVisibility( !aVisible ); 
        popupToolbar->MakeVisible( !aVisible );
        if(!aVisible)
            {
            popupToolbar->DrawNow();    
            }
        }   
    CAknToolbar* toolbar = iAvkonAppUi->CurrentFixedToolbar();
    if(toolbar)
        {
        toolbar->HideItemsAndDrawOnlyBackground(!aVisible);
        toolbar->SetToolbarVisibility(aVisible);
        toolbar->MakeVisible( aVisible );
        }
    }

// End of File