cmmanager/cmmgr/Framework/Src/cmdesticondialog.cpp
author Simon Howkins <simonh@symbian.org>
Thu, 18 Nov 2010 15:05:52 +0000
branchRCL_3
changeset 76 40780c2f3a6b
parent 58 83ca720e2b9a
permissions -rw-r--r--
Adjusted to avoid exports, etc, from a top-level bld.inf

/*
* Copyright (c) 2006 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:  Implementation of CCmDestinationIconDialog
*
*/

// INCLUDE FILES
#include <uikon.hrh>
#include <e32std.h>
#include <eikcapc.h>

#include <aknlayoutscalable_avkon.cdl.h>
#include <layoutmetadata.cdl.h>

#include <aknborders.h>
#include <aknconsts.h>
#include <AknUtils.h>
#include <aknPopupHeadingPane.h>
#include <AknSettingCache.h>

#include <AknLayout.lag>
#include <e32property.h>

#include <cmmanager.rsg>

#include "cmmanager.hrh"
#include "cmdesticondialog.h"
#include "cmdesticonmap.h"

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

// ----------------------------------------------------------------------------
// CCmDestinationIconDialog class
// CCmDestinationIconDialog() - constructor
// ----------------------------------------------------------------------------
//
CCmDestinationIconDialog::CCmDestinationIconDialog( TInt& aIconIndex )
    : iIconIndex(&aIconIndex)
    {
    CEikDialog::SetBorder( AknBorderId::EAknBorderNotePopup );
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::~CCmDestinationIconDialog()
// -----------------------------------------------------------------------------
//
CCmDestinationIconDialog::~CCmDestinationIconDialog()
    {
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::HandleResourceChange()
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::HandleResourceChange(TInt aType)
    {
    CAknDialog::HandleResourceChange(aType);

    if (aType==KEikDynamicLayoutVariantSwitch)
        {
        }
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::OkToExitL()
// -----------------------------------------------------------------------------
//
TBool CCmDestinationIconDialog::OkToExitL(TInt aButtonId)
    {
    CCmDestinationIconMap* iconmapControl = 
        STATIC_CAST(CCmDestinationIconMap*, Control(ECmDestIconMapContentId));
    // Selection key / select softkey adds a iconacter only if 5-key was not 
    // used to select multiple icons before.
    if ( aButtonId == EAknSoftkeyOk || aButtonId == EAknSoftkeySelect )
        {
        TKeyEvent key;
        key.iCode=EKeyOK;
        key.iModifiers=0;
        iconmapControl->OfferKeyEventL(key, EEventKey);
        }
    return(ETrue);
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::PreLayoutDynInitL()
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::PreLayoutDynInitL()
    {
    CCmDestinationIconMap* iconmapControl = 
       STATIC_CAST( CCmDestinationIconMap*, Control( ECmDestIconMapContentId ));
    CAknPopupHeadingPane* headingPane =
       STATIC_CAST( CAknPopupHeadingPane*, Control( EAknSCTQueryHeadingId ));

    iconmapControl->SetIndex(*iIconIndex);    

    SetLineNonFocusing(EAknSCTQueryHeadingId);

    // add title    
    CEikonEnv* env = CEikonEnv::Static();
    HBufC* title = env->AllocReadResourceL( R_CMMANAGERUI_PRMPT_SELECT_ICON );
    CleanupStack::PushL( title );
    headingPane->SetTextL( *title );
    CleanupStack::PopAndDestroy( title );
    title = NULL;

#ifdef RD_SCALABLE_UI_V2

	iconmapControl->SetObserver(this);
	
#endif // RD_SCALABLE_UI_V2
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::SetSizeAndPosition()
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::SetSizeAndPosition( const TSize& aSize )
    {
    SetBorder( TGulBorder::ENone ); // No Dialog borders in SCT.
    CAknDialog::SetSizeAndPosition( aSize );
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::OfferKeyEventL()
// -----------------------------------------------------------------------------
//
TKeyResponse CCmDestinationIconDialog::OfferKeyEventL(
                             const TKeyEvent& aKeyEvent, TEventCode aModifiers )
    {
    if ( aModifiers == EEventKey )
        {
        TUint code=aKeyEvent.iCode;
        CCmDestinationIconMap* iconmapControl =
                            STATIC_CAST( CCmDestinationIconMap*, 
                                         Control( ECmDestIconMapContentId ));

        switch ( code )
            {
            case EKeyLeftArrow:
            case EKeyRightArrow:
            case EKeyUpArrow:
            case EKeyDownArrow:
                {
                TKeyResponse res(
                    iconmapControl->OfferKeyEventL( aKeyEvent, aModifiers ));
                return res;
                }
                
            case EKeyEnter:
                // change fro EKeyEnter to EKeyOK
                {
                TKeyEvent keyEvent;
                keyEvent.iCode = EKeyOK;
                keyEvent.iScanCode = aKeyEvent.iScanCode;
                keyEvent.iModifiers = aKeyEvent.iModifiers;
                keyEvent.iRepeats = aKeyEvent.iRepeats;

                TKeyResponse res( CEikDialog::OfferKeyEventL( keyEvent, aModifiers ) );
                // It seems Avkon doesn't continue to call OkToExitL after this OfferKeyEventL.
                // So, we may have to positively exit by calling TryExitL so that user's selected
                // Icon will be return back to caller (i.e., CDestDlg).
                TryExitL( EAknSoftkeyOk );
                return res;
                }
                
            default:
                break;
            }
        }
        
    return CEikDialog::OfferKeyEventL( aKeyEvent, aModifiers );
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::ExecuteLD()
// -----------------------------------------------------------------------------
//
TInt CCmDestinationIconDialog::ExecuteLD()
    {
    // Prepare real icon map
    CEikDialog::PrepareLC( R_ICONSEL_DIALOG );
    return(RunLD());
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::CEikDialog_Reserved_1()
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::CEikDialog_Reserved_1()
    {
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::CEikDialog_Reserved_2()
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::CEikDialog_Reserved_2()
    {
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::CCmDestinationIconDialog_Reserved()
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::CAknIconMapDialog_Reserved()
    {
    }

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::CreateCustomControlL()
// Virtual function override from the base class to implement the custom control
// -----------------------------------------------------------------------------
//    
SEikControlInfo CCmDestinationIconDialog::CreateCustomControlL(
    TInt aControlType)
    {
    CCmDestinationIconMap *control= NULL;
    if ( aControlType == KCmDestIconMapType )
        {
        control = CCmDestinationIconMap::NewL();
        }
    SEikControlInfo info;
    info.iControl = control;
    info.iFlags = 0;
    info.iTrailerTextId = 0;
    return info;
    }

#ifdef RD_SCALABLE_UI_V2

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::HandleControlEventL
// Handles the event.
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::HandleControlEventL( 
                                                CCoeControl* /*aControl*/,
                                                TCoeEvent aEventType )
    {
    if( aEventType == EEventStateChanged)
		{
	    iConSelected = ETrue;
		}
    } 

// -----------------------------------------------------------------------------
// CCmDestinationIconDialog::HandleDialogPageEventL
// Handles the event.
// -----------------------------------------------------------------------------
//
void CCmDestinationIconDialog::HandleDialogPageEventL(TInt aEventID)
	{
    if ( AknLayoutUtils::PenEnabled() && ( aEventID == 
         MEikDialogPageObserver::EDialogPageTapped && iConSelected ) )
	    {
	    TryExitL( EAknSoftkeyOk );
	    }
	}
	
#endif //RD_SCALABLE_UI_V2

//  End of File