calendarui/settings/GsPlugin/src/calengsplugin.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:32:31 +0100
branchRCL_3
changeset 66 bd7edf625bdd
parent 0 f979ecb2b13e
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 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:  Main settings view class
*
*/


//debug
#include "calendarui_debug.h"

// INCLUDE FILES
#include "calengsplugin.h"

#include "calengsplugincontainer.h"
#include "CalenUid.h"
#include "calendar.hrh"
#include <Calendar.rsg>
#include <calendarsettings.mbg>

#include <featmgr.h>
#include <StringLoader.h>   // for StringLoader
#include <hlplch.h>         // for HlpLauncher
#include <bautils.h>        // for BaflUtils
#include <pathinfo.h>

_LIT( KCalenIconDirAndFile,"calendarsettings.mif" );
_LIT( KCalenAppResourceFile, "calendar.rsc" );
_LIT( KResourceFile, "calencommonui.rsc" );

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

// ----------------------------------------------------------------------------
// CCalenGSPlugin::CCalenGSPlugin
// C++ constructor.
// ----------------------------------------------------------------------------
//
CCalenGSPlugin::CCalenGSPlugin()
    : iResourceLoader( *iCoeEnv )
    {
    TRACE_ENTRY_POINT;
    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::NewL
// Two-phased constructor.
// ----------------------------------------------------------------------------
//
CCalenGSPlugin* CCalenGSPlugin::NewL( TAny* /*aInitParams*/ )
    {
    TRACE_ENTRY_POINT;

    CCalenGSPlugin* self = new(ELeave) CCalenGSPlugin();
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);

    TRACE_EXIT_POINT;
    return self;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::ConstructL
// Second phase of construction.
// ----------------------------------------------------------------------------
//
void CCalenGSPlugin::ConstructL()
    {
    TRACE_ENTRY_POINT;
    // Find the resource file
        TFileName fileName;
	// Get the complate path of the DLL from where it is currently loaded
	Dll::FileName( fileName );
	
	TFileName resourcePath;
	resourcePath.Append(fileName.Mid(0,2));
	resourcePath.Append(KDC_APP_RESOURCE_DIR);
    // Find the resource file
    TParse parse;
    parse.Set( KCalenAppResourceFile,
               &resourcePath,
               NULL );
    TFileName resourceFileName( parse.FullName() );

    // Get language of resource file
    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), resourceFileName );

   // Add the the commonUI resource file to the environment
    TFileName resFile;
    resFile.Append(fileName.Mid(0,2));
    resFile.Append( KDC_RESOURCE_FILES_DIR );
    resFile.Append( KResourceFile );

    CEikonEnv* eikonEnv = CEikonEnv::Static();
    BaflUtils::NearestLanguageFile( eikonEnv->FsSession(), resFile );
    iResourceFileOffset = eikonEnv->AddResourceFileL( resFile );

    // Open the resource file
    iResourceLoader.OpenL( resourceFileName );
    FeatureManager::InitializeLibL();

    BaseConstructL( R_CALENDAR_GS_SETTING_LIST_VIEW );

    iCaption = StringLoader::LoadL( R_CALENDAR_GS_VIEW_TITLE );
    TRACE_EXIT_POINT;
    }


// ----------------------------------------------------------------------------
// CCalenGSPlugin::~CCalenGSPlugin
// Destructor.
// ----------------------------------------------------------------------------
//
CCalenGSPlugin::~CCalenGSPlugin()
    {
    TRACE_ENTRY_POINT;
    FeatureManager::UnInitializeLib();

    if( iContainer )
        {
        if( iAppUi )
            {
            iAppUi->RemoveFromViewStack( *this, iContainer );
            }
        delete iContainer;
        }

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

    iResourceLoader.Close();
	
	delete iCaption;
	    
    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::Id
// Returns the UID of this view.
// ----------------------------------------------------------------------------
//
TUid CCalenGSPlugin::Id() const
    {
    TRACE_ENTRY_POINT;
    TRACE_EXIT_POINT;
    return KUidCalenGSPlugin;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::HandleCommandL
// Handles commands.
// ----------------------------------------------------------------------------
//
void CCalenGSPlugin::HandleCommandL( TInt aCommand )
    {
    TRACE_ENTRY_POINT;
    switch ( aCommand )
        {
        case ECalenCmdChange:      /* fall through... */
        case EAknSoftkeyChange:    /* fall through... */
        case EAknCmdOpen:
            // Delegate to container
            Container()->HandleListBoxSelectionL( EAknCmdOpen );
            break;

        case EAknSoftkeyBack:
            // Activate previous view
#ifdef _DEBUG
    RDebug::Print(_L("CalenGS: activating view 0x%x"), iPrevViewId.iViewUid.iUid);
#endif
            iAppUi->ActivateLocalViewL( iPrevViewId.iViewUid );
            break;

        case EAknCmdHelp:
            if( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
                {
                HlpLauncher::LaunchHelpApplicationL(
                    iEikonEnv->WsSession(), iAppUi->AppHelpContextL() );
                }
            break;

        default:
            iAppUi->HandleCommandL( aCommand );
            break;
        }
    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::HandleClientRectChange
// Handles screen size change.
// ----------------------------------------------------------------------------
//
void CCalenGSPlugin::HandleClientRectChange()
    {
    TRACE_ENTRY_POINT;

    if ( iContainer )
        {
        Container()->SetRect( ClientRect() );
        }

    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::Container
// Returns a handle to the container class.
// ----------------------------------------------------------------------------
//
CCalenGSPluginContainer* CCalenGSPlugin::Container()
    {
    TRACE_ENTRY_POINT;
    TRACE_EXIT_POINT;
    return static_cast<CCalenGSPluginContainer*>( iContainer );
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::HandleListBoxSelectionL
// Handles any user actions while in the list view.
// ----------------------------------------------------------------------------
//
void CCalenGSPlugin::HandleListBoxSelectionL()
    {
    TRACE_ENTRY_POINT;

    // Delegate to container
    Container()->HandleListBoxSelectionL( ECalenCmdChange );

    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::GetCaptionL
// Populates aCaption with the caption text to be displayed in the navi pane.
// ----------------------------------------------------------------------------
//
void CCalenGSPlugin::GetCaptionL( TDes& aCaption ) const
    {
    TRACE_ENTRY_POINT;

    aCaption.Copy( *iCaption );

    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::NewContainerL
// Creates new iContainer.
// ----------------------------------------------------------------------------
//
void CCalenGSPlugin::NewContainerL()
    {
    TRACE_ENTRY_POINT;

    iContainer = new( ELeave ) CCalenGSPluginContainer;

    TRACE_EXIT_POINT;
    }

// ----------------------------------------------------------------------------
// CCalenGSPlugin::CreateIconL
// Returns a new icon.
// ----------------------------------------------------------------------------
//
CGulIcon* CCalenGSPlugin::CreateIconL( const TUid /*aIconType*/ )
    {
    TRACE_ENTRY_POINT;
    TParse* fp = new( ELeave ) TParse();
    CleanupStack::PushL( fp );
    
  	TFileName dllName;
	// Get the complate path of the DLL from where it is currently loaded
	Dll::FileName( dllName );
	
	TFileName resourcePath;
	resourcePath.Append(dllName.Mid(0,2));
	resourcePath.Append(KDC_APP_BITMAP_DIR);
    User::LeaveIfError( fp->Set( KCalenIconDirAndFile, &resourcePath, NULL ) );

    TBuf< KMaxFileName > fileName = fp->FullName();
    CleanupStack::PopAndDestroy( fp );

    CGulIcon* icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(),
                                                KAknsIIDQgnPropSetAppsCale,
                                                fileName,
                                                EMbmCalendarsettingsQgn_prop_set_apps_cale,
                                                EMbmCalendarsettingsQgn_prop_set_apps_cale );
    TRACE_EXIT_POINT;
    return icon;
    }

// End of file