messagingappbase/mce/src/MceDeliveryReportControlContainer.cpp
branchRCL_3
changeset 27 7fdbb852d323
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/mce/src/MceDeliveryReportControlContainer.cpp	Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,430 @@
+/*
+* Copyright (c) 2002 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:  
+*     Mce delivery report view container control class implementation.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <aknnotedialog.h>      // Popup note
+#include <mce.rsg>
+#include <AknsUtils.h>
+
+#include "MceDeliveryReportControlContainer.h"
+#include "MceDeliveryReportAdapter.h"
+#include "MceLogEngine.h"
+#include "mceui.h"
+#include "MceCommands.hrh"       // UID enumeration.
+
+#include <bldvariant.hrh>
+
+#include <csxhelp/mce.hlp.hrh>
+#include "MceIds.h"
+
+#include <muiu.mbg>
+#include <akncontext.h>
+
+// security data caging
+#include <data_caging_path_literals.hrh>
+
+#include <centralrepository.h>
+#include <LogsDomainCRKeys.h>
+
+#include "MceSessionHolder.h"
+
+// CONSTANTS
+
+_LIT( KMceDirAndFileMuiu,"muiu.mbm" );
+
+// LOCAL CONSTANTS AND MACROS
+
+#ifdef _DEBUG
+_LIT( KPanicText, "Mce" );
+const TInt KCRepositorySettingFailure = 1;
+#endif
+
+#ifdef RD_MULTIPLE_DRIVE
+#include <driveinfo.h>
+#endif
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+CMceDeliveryReportControlContainer* CMceDeliveryReportControlContainer::NewL(
+    CMceDeliveryReportView* aMceDeliveryReportView,
+    CMceSessionHolder& aSessionHolder, const TRect& aRect )
+    {
+    CMceDeliveryReportControlContainer* self = new( ELeave )
+                    CMceDeliveryReportControlContainer( aMceDeliveryReportView,
+                    									aSessionHolder );
+    self->SetMopParent( aMceDeliveryReportView );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+CMceDeliveryReportControlContainer::CMceDeliveryReportControlContainer(
+    CMceDeliveryReportView* aMceDeliveryReportView,
+    CMceSessionHolder& aSessionHolder ) : iSessionHolder(aSessionHolder)
+    {
+    iMceDeliveryReportView = aMceDeliveryReportView;
+    iSessionHolder.AddClient();
+    }
+
+
+void CMceDeliveryReportControlContainer::ConstructL( const TRect& aRect )
+    {
+    // security data caging
+    TParse fp;
+   
+    fp.Set( KMceDirAndFileMuiu, &KDC_APP_BITMAP_DIR , NULL );
+    iFilenameMuiu = fp.FullName();
+
+    /// Register for model observervation.
+    iMceDeliveryReportView->MceAppUi()->LogEngine()->SetContainerObserver( this );
+
+    CreateWindowL();
+
+    iListBox = new( ELeave ) CAknDoubleGraphicStyleListBox;
+    iListBox->SetContainerWindowL( *this );
+    iListBox->ConstructL( this, EAknListBoxSelectionList|EAknListBoxItemSpecificMenuDisabled );
+
+    CMceDeliveryReportAdapter* adapter = CMceDeliveryReportAdapter::NewL(
+                    iMceDeliveryReportView->MceAppUi()->LogEngine(), iListBox );
+    iListBox->Model()->SetItemTextArray( adapter );
+    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+
+    // Load icons.
+    CAknIconArray* icons = new( ELeave ) CAknIconArray( 2 );
+    CleanupStack::PushL( icons );
+
+     // First icon & mask.   
+    AddIconL( KAknsIIDQgnPropMceSmsInfo, icons, iFilenameMuiu, EMbmMuiuQgn_prop_mce_sms_info,
+              EMbmMuiuQgn_prop_mce_sms_info_mask );
+    // Second icon & mask.
+    AddIconL( KAknsIIDQgnPropMceMmsInfo, icons, iFilenameMuiu, EMbmMuiuQgn_prop_mce_mms_info,
+              EMbmMuiuQgn_prop_mce_mms_info_mask );
+
+    iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+    CleanupStack::Pop( icons );
+
+    /// Check if Logs application has stopped logging?
+
+
+    MakeEmptyTextListBoxL( iListBox, R_MCE_DELIVERY_REPORT_NO_LOG_LBX_TEXT );
+
+    CEikScrollBarFrame* sBFrame = iListBox->CreateScrollBarFrameL(ETrue);
+    sBFrame->SetScrollBarVisibilityL( CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto );
+
+    SetRect( aRect );
+    // Activate the control and all subcontrols
+    ActivateL();
+    }
+
+
+CMceDeliveryReportControlContainer::~CMceDeliveryReportControlContainer()
+    {
+    /// Stop observing LogEngine.
+    if( iMceDeliveryReportView )
+        {
+        iMceDeliveryReportView->MceAppUi()->LogEngine()
+            ->RemoveContainerObserver();
+        }
+
+    /// Destroy the list box control
+    delete iListBox;
+    iSessionHolder.RemoveClient();
+    }
+
+TKeyResponse CMceDeliveryReportControlContainer::OfferKeyEventL(
+                            const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    if( aType == EEventKey )
+        {
+        if ( aKeyEvent.iCode == EKeyLeftArrow || aKeyEvent.iCode == EKeyRightArrow )
+            {
+            // needed for tab changing, should be left to MCE UI to handle these
+            return EKeyWasNotConsumed;
+            }
+
+        if( aKeyEvent.iCode == EKeyPhoneSend )
+            {
+            if( iMceDeliveryReportView->MceAppUi()->
+                        LogEngine()->IsNumberAvailable( iListBox->CurrentItemIndex() ) )
+                {
+                iMceDeliveryReportView->HandleCommandL( EMceCmdCall );
+                }
+            return EKeyWasConsumed;
+            }
+        if( aKeyEvent.iCode == EKeyOK ||  aKeyEvent.iCode == EKeyEnter )
+            {
+            if( iMceDeliveryReportView->MceAppUi()->
+                        LogEngine()->IsNumberAvailable( iListBox->CurrentItemIndex() ) )
+                {
+                iMceDeliveryReportView->LaunchPopupMenuL( R_MCE_DELIVERY_REPORT_OK_MENUBAR );
+                }
+            return EKeyWasConsumed;
+            }
+        }
+    if( aType == EEventKeyUp )
+		{
+		iMceDeliveryReportView->SetMSKButtonL();
+		}
+        
+    return iListBox->OfferKeyEventL( aKeyEvent, aType );
+    }
+
+TInt CMceDeliveryReportControlContainer::CountComponentControls() const
+    {
+    return 1;
+    }
+
+CCoeControl* CMceDeliveryReportControlContainer::ComponentControl(
+    TInt /*aIndex*/ ) const
+    {
+    return iListBox;
+    }
+
+void CMceDeliveryReportControlContainer::SizeChanged()
+    {
+    if( iListBox )
+        {
+        iListBox->SetRect( Rect() );
+        }
+    }
+
+
+CAknDoubleGraphicStyleListBox* CMceDeliveryReportControlContainer::ListBox() const
+    {
+    return iListBox;
+    }
+
+
+void CMceDeliveryReportControlContainer::PopUpNoteL()
+    {
+    CAknNoteDialog* noteDlg = new(ELeave) CAknNoteDialog(
+                            CAknNoteDialog::ENoTone,
+                            CAknNoteDialog::ELongTimeout );
+    noteDlg->ExecuteLD( R_MCE_DR_NO_LOG_NOTE );
+    }
+
+
+void CMceDeliveryReportControlContainer::MceLogEngineListBoxStateHasChangedL()
+    {
+    iListBox->HandleItemAdditionL();
+    iMceDeliveryReportView->SetMSKButtonL();
+    }
+
+
+void CMceDeliveryReportControlContainer::HandleControlEventL
+        ( CCoeControl* /*aControl*/,
+          TCoeEvent /*aEventType*/ )
+    {
+    }
+
+void CMceDeliveryReportControlContainer::Draw( const TRect& /*aRect*/ ) const
+    {
+    }
+
+void CMceDeliveryReportControlContainer::AddIconL(
+    TAknsItemID aId,
+    CAknIconArray* aIcons,
+    const TDesC& aIconFileWithPath,
+    TInt aIconGraphicsIndex,
+    TInt aIconGraphicsMaskIndex )
+    {    
+    // icon & mask.   
+
+    MAknsSkinInstance* skins = AknsUtils::SkinInstance();  
+    CFbsBitmap* bitmap;
+    CFbsBitmap* mask;
+    AknsUtils::CreateIconL( skins, aId, bitmap,
+        mask, aIconFileWithPath, aIconGraphicsIndex, 
+        aIconGraphicsMaskIndex );
+    // Append it to icons array
+    CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+    CleanupStack::PushL( icon );
+    aIcons->AppendL( icon );    
+    CleanupStack::Pop( icon );
+    }
+
+
+TInt CMceDeliveryReportControlContainer::LogDisabledL()
+    {
+    TInt getValue( 1 );
+
+    CRepository* repository = NULL;
+    TRAPD( ret, repository = CRepository::NewL(KCRUidLogs) );
+    CleanupStack::PushL( repository );
+
+    if ( ret == KErrNone )
+        {
+        TInt ret = repository->Get( KLogsLoggingEnabled, getValue );
+        __ASSERT_DEBUG( !ret, User::Panic(KPanicText,KCRepositorySettingFailure) );
+        }
+
+    CleanupStack::Pop( repository );
+    delete repository;
+
+    return getValue;
+    }
+
+void CMceDeliveryReportControlContainer::MakeEmptyTextListBoxL(
+          CEikFormattedCellListBoxTypedef* aListBox,
+          TInt aResourceText )
+    {
+    HBufC* textFromResourceFile = iCoeEnv->AllocReadResourceLC( aResourceText );
+    // Set the view's listbox empty text.
+    aListBox->View()->SetListEmptyTextL( *textFromResourceFile );
+    CleanupStack::PopAndDestroy();  // textFromResourceFile.
+    }
+
+// ----------------------------------------------------
+// CMceDeliveryReportControlContainer::GetHelpContext
+// returns helpcontext as aContext
+//
+// ----------------------------------------------------
+void CMceDeliveryReportControlContainer::GetHelpContext
+        (TCoeHelpContext& aContext) const
+    {
+    aContext.iMajor = KMceApplicationUid;
+    aContext.iContext = KMCE_HLP_DELIVERY_REPORTS;
+
+    }
+
+// ----------------------------------------------------
+// CMceListContainer::HandleResourceChange
+// ----------------------------------------------------
+void CMceDeliveryReportControlContainer::HandleResourceChange( TInt aType )
+    {   
+    CCoeControl::HandleResourceChange( aType );
+    if( aType == KAknsMessageSkinChange )
+        {
+        // change skin bitmap
+        TRAP_IGNORE( SkinBitmapChangesL( ) );        
+        }    
+    }
+
+// ----------------------------------------------------
+// CMceListContainer::SkinBitmapChangesL
+// ----------------------------------------------------
+void CMceDeliveryReportControlContainer::SkinBitmapChangesL( )
+    {    
+    //first change application icon
+    
+    CEikStatusPane *sp = ( (CAknAppUi*)CEikonEnv::Static()->EikAppUi() )->StatusPane();
+    CAknContextPane* contextPane = (CAknContextPane *)sp->ControlL( TUid::Uid(EEikStatusPaneUidContext) );
+    
+    MAknsSkinInstance* skins = AknsUtils::SkinInstance();
+    CFbsBitmap* appBitmap;
+    CFbsBitmap* appBitmapMask;
+    
+#ifdef RD_MULTIPLE_DRIVE
+    TInt phoneDrive;
+    // At this point, try avoid using any predefined numbers E.G. EDriveC
+    // in order to increase the safety and code flexibility
+    User::LeaveIfError( DriveInfo::GetDefaultDrive( DriveInfo:: EDefaultPhoneMemory, phoneDrive ) );
+    TInt currentDrive = TInt( iSessionHolder.Session()->CurrentDriveL() );
+    if ( currentDrive != phoneDrive )
+#else
+    if ( TInt(iSessionHolder.Session()->CurrentDriveL()) == EDriveE )
+#endif //RD_MULTIPLE_DRIVE
+        {
+#ifndef __SCALABLE_ICONS
+        AknsUtils::CreateIconL( skins, KAknsIIDQgnMenuMceMmcCxt, appBitmap,
+           appBitmapMask, iFilenameMuiu, EMbmMuiuQgn_menu_mce_mmc_cxt,
+           EMbmMuiuQgn_menu_mce_mmc_cxt + 1 );        
+#else
+        AknsUtils::CreateIconL( skins, KAknsIIDQgnMenuMceMmcCxt, appBitmap,
+           appBitmapMask, iFilenameMuiu, EMbmMuiuQgn_menu_mce_mmc,
+           EMbmMuiuQgn_menu_mce_mmc + 1 );
+#endif
+        }
+    else
+        {
+#ifndef __SCALABLE_ICONS
+        AknsUtils::CreateIconL( skins, KAknsIIDQgnMenuMceCxt, appBitmap,
+           appBitmapMask, iFilenameMuiu, EMbmMuiuQgn_menu_mce_cxt,
+           EMbmMuiuQgn_menu_mce_cxt + 1 );
+#else
+        AknsUtils::CreateIconL( skins, KAknsIIDQgnMenuMceCxt, appBitmap,
+           appBitmapMask, iFilenameMuiu, EMbmMuiuQgn_menu_mce,
+           EMbmMuiuQgn_menu_mce + 1 );
+#endif
+        } 
+    contextPane->SetPicture( appBitmap, appBitmapMask );
+    //change other bitmaps according to the skins
+
+    CArrayPtr<CGulIcon> *icons = 0;
+    icons = iListBox->ItemDrawer()->
+        ColumnData()->IconArray();
+    TAknsItemID id; 
+    id.iMajor = 0;
+    id.iMinor = 0;    
+
+    TInt count = icons->Count();
+    TInt bitmapIndex = 0;
+    TInt bitmapMaskIndex = 0;    
+    
+    for ( TInt cc=count; --cc>=0; )
+        {
+        switch( cc )
+            {
+            case EMceDeliverySmsInfo:                
+                bitmapIndex = EMbmMuiuQgn_prop_mce_sms_info;                
+                bitmapMaskIndex = EMbmMuiuQgn_prop_mce_sms_info_mask;
+                id = KAknsIIDQgnPropMceSmsInfo;
+                break;
+            case EMceDeliveryMmsInfo:
+            default:
+                bitmapIndex = EMbmMuiuQgn_prop_mce_mms_info;
+                bitmapMaskIndex = EMbmMuiuQgn_prop_mce_mms_info_mask;
+                id = KAknsIIDQgnPropMceMmsInfo;
+                break;           
+            } 
+        
+        CFbsBitmap* bitmap;
+        CFbsBitmap* mask;
+        AknsUtils::CreateIconL( skins, id, bitmap,
+            mask, iFilenameMuiu /*iFilenameLog*/, bitmapIndex, bitmapMaskIndex );      
+
+        CGulIcon* icon = CGulIcon::NewL( bitmap, mask );
+     
+        CleanupStack::PushL( icon );
+        CGulIcon* iconToBeDelete = icons->At( cc );
+        icons->At( cc ) = icon;
+        delete iconToBeDelete;
+        iconToBeDelete = NULL;
+
+        CleanupStack::Pop(); // icon
+    
+        }  
+    }
+    
+// ----------------------------------------------------
+// CMceListContainer::FocusChanged
+// ----------------------------------------------------
+void CMceDeliveryReportControlContainer::FocusChanged(TDrawNow /*aDrawNow*/)
+    {
+    if (iListBox)
+        {
+        iListBox->SetFocus(IsFocused());
+        }
+    }
+
+
+//  End of File