phonebookui/Phonebook2/UIControls/src/CPbk2MergePhotoConflictDlg.cpp
changeset 0 e686773b3f54
child 3 04ab22b956c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/UIControls/src/CPbk2MergePhotoConflictDlg.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,300 @@
+/*
+* 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:
+*
+* Description: 
+*       Provides Image conflict resolution dialog for Contact Merge command.
+*
+*/
+
+#include <aknlists.h>
+#include <AknIconArray.h>
+#include <eikapp.h>
+#include <gulicon.h>
+#include <StringLoader.h>
+#include <aknnavide.h>
+#include <akntitle.h>
+#include <Pbk2UIControls.rsg>
+#include <MPbk2MergeConflict.h>
+#include "CPbk2MergePhotoConflictDlg.h"
+
+/// Unnamed namespace for local definitions
+namespace {
+
+_LIT( KPictureRowFormat, "%d\t   %S\t\t" );
+
+}
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::CPbk2MergePhotoConflictDlg
+// -----------------------------------------------------------------------------
+//
+CPbk2MergePhotoConflictDlg::CPbk2MergePhotoConflictDlg( CFbsBitmap* aFirstImage,
+                                                        CFbsBitmap* aSecondImage, 
+                                                        TInt* aResult ):
+        iFirstImage( aFirstImage ), iSecondImage( aSecondImage ), iSelectedItem( aResult )
+    {
+    // No implementation required
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::~CPbk2MergePhotoConflictDlg
+// -----------------------------------------------------------------------------
+//
+CPbk2MergePhotoConflictDlg::~CPbk2MergePhotoConflictDlg()
+    {
+    delete iNaviDecorator;
+    delete iSelectedString;
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::NewL
+// -----------------------------------------------------------------------------
+//
+EXPORT_C CPbk2MergePhotoConflictDlg* CPbk2MergePhotoConflictDlg::NewL( CFbsBitmap* aFirstImage,
+                                                                       CFbsBitmap* aSecondImage, 
+                                                                       TInt* aResult )
+    {
+    CPbk2MergePhotoConflictDlg* self = 
+        new (ELeave) CPbk2MergePhotoConflictDlg( aFirstImage, aSecondImage, aResult );
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(); // self;
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::ConstructL
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::ConstructL()
+    {
+    SetNaviPaneL();
+    SetTitlePaneL( ETrue );
+    *iSelectedItem = EPbk2ConflictedFirst;
+    iSelectedString = StringLoader::LoadL( R_QTN_PHOB_TITLE_SELECTED );
+    CAknDialog::ConstructL( R_AVKON_MENUPANE_EMPTY );
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::PreLayoutDynInitL
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::PreLayoutDynInitL()
+    {
+    CAknDialog::PreLayoutDynInitL();
+    
+    CEikButtonGroupContainer& cba = ButtonGroupContainer();
+    CEikCba* eikCba = static_cast<CEikCba*>( cba.ButtonGroup() );
+    if( eikCba )
+        {
+        eikCba->EnableItemSpecificSoftkey( EFalse );
+        }
+    
+    iListBox = static_cast<CEikFormattedCellListBox*>( Control( 1 ) );
+    
+    SetIconsL();
+    SetItemsL();
+    
+    iListBox->CreateScrollBarFrameL( ETrue );
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+            CEikScrollBarFrame::EOff,
+            CEikScrollBarFrame::EAuto );
+  
+    iListBox->HandleItemAdditionL();
+    iListBox->SetListBoxObserver( this ); // MEikListBoxObserver
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::OkToExitL
+// -----------------------------------------------------------------------------
+//
+TBool CPbk2MergePhotoConflictDlg::OkToExitL( TInt aButtonId )
+    {
+    if ( aButtonId == EAknSoftkeyDone || aButtonId == EAknSoftkeyCancel )
+        {
+        TRAP_IGNORE( SetTitlePaneL( EFalse ) );
+        return ETrue;
+        }
+    return EFalse;
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::OfferKeyEventL
+// -----------------------------------------------------------------------------
+//
+TKeyResponse CPbk2MergePhotoConflictDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse result = EKeyWasNotConsumed;
+    
+    if ( aKeyEvent.iCode == EKeyEscape )
+       {
+       result = CEikDialog::OfferKeyEventL( aKeyEvent, aType );
+       return result;
+       }
+    
+    result = iListBox->OfferKeyEventL( aKeyEvent, aType );
+    
+    if ( aType == EEventKeyDown && aKeyEvent.iScanCode == EStdKeyDevice3 )
+        {
+        SwitchRadioButtonL();
+        }
+    return result;
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::HandleListBoxEventL
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::HandleListBoxEventL( CEikListBox* /*aListBox*/, TListBoxEvent aEventType )
+    {     
+    if( AknLayoutUtils::PenEnabled() )  
+        {
+        if ( aEventType == EEventItemSingleClicked )
+            {
+            SwitchRadioButtonL();
+            }
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::SetIconsL
+// Sets icons for the listbox.
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::SetIconsL()
+    {
+    if ( iFirstImage == NULL || iSecondImage == NULL )
+        {
+        User::Leave( KErrArgument );
+        }
+    
+    CArrayPtr<CGulIcon>* iconList = new (ELeave) CAknIconArray( 2 );
+    CleanupStack::PushL( iconList );
+
+    CGulIcon* first = CGulIcon::NewL( iFirstImage );
+    first->SetBitmapsOwnedExternally( ETrue );
+    CleanupStack::PushL( first );
+    iconList->AppendL( first );
+    CleanupStack::Pop( first );
+    
+    CGulIcon* second = CGulIcon::NewL( iSecondImage );
+    second->SetBitmapsOwnedExternally( ETrue );
+    CleanupStack::PushL( second );
+    iconList->AppendL( second );
+    CleanupStack::Pop( second );
+    
+    iListBox->ItemDrawer()->ColumnData()->SetIconArray( iconList );
+    CleanupStack::Pop( iconList );
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::SetItemsL
+// Sets items to the listbox.
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::SetItemsL()
+    {    
+    CDesCArray* itemArray = new ( ELeave ) CDesCArrayFlat( 2 );
+    
+    RBuf listItem;
+    listItem.Create( KPictureRowFormat().Length() + iSelectedString->Length() );
+    listItem.Format( KPictureRowFormat, EPbk2ConflictedFirst, iSelectedString );
+    itemArray->AppendL( listItem );
+    listItem.Close();
+    
+    listItem.Create( KPictureRowFormat().Length() + iSelectedString->Length() );
+    listItem.Format( KPictureRowFormat, EPbk2ConflictedSecond, &KNullDesC );
+    itemArray->AppendL( listItem );
+    listItem.Close();
+
+    iListBox->Model()->SetItemTextArray( itemArray );
+    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+    
+    iListBox->HandleItemAdditionL();
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergePhotoConflictDlg::SwitchRadioButtonL
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::SwitchRadioButtonL()
+    {
+    TInt itemIndex = iListBox->CurrentItemIndex();
+    if ( *iSelectedItem != itemIndex)
+        {
+        CDesCArray* itemArray = static_cast<CDesC16ArrayFlat*>( iListBox->Model()->ItemTextArray() );
+        
+        // deselect item
+        RBuf listItem;
+        listItem.Create( KPictureRowFormat().Length() );
+        listItem.Format( KPictureRowFormat, *iSelectedItem , &KNullDesC );
+        itemArray->Delete( *iSelectedItem );
+        itemArray->InsertL( *iSelectedItem, listItem );
+        listItem.Close();
+        
+        // select item
+        listItem.Create( KPictureRowFormat().Length() + iSelectedString->Length() );
+        listItem.Format( KPictureRowFormat, itemIndex, iSelectedString );
+        itemArray->Delete( itemIndex );
+        itemArray->InsertL( itemIndex, listItem );
+        listItem.Close();
+        
+        *iSelectedItem = itemIndex;
+        iListBox->DrawDeferred();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergeConflictsDlg::SetNaviPaneL
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::SetNaviPaneL()
+    {
+    CEikStatusPane* statusPane = iAvkonAppUi->StatusPane();
+    if ( statusPane && statusPane->PaneCapabilities( TUid::Uid( EEikStatusPaneUidNavi ) ).IsPresent() )
+        {
+        CAknNavigationControlContainer* naviPane = static_cast<CAknNavigationControlContainer*>
+            ( statusPane->ControlL ( TUid::Uid( EEikStatusPaneUidNavi ) ) );
+            
+        HBufC* naviLabel = StringLoader::LoadLC( R_QTN_PHOB_TITLE_SELECT_IMAGE );
+
+        iNaviDecorator = naviPane->CreateNavigationLabelL( *naviLabel );
+        CleanupStack::PopAndDestroy( naviLabel );   
+        naviPane->PushL( *iNaviDecorator );
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CPbk2MergeConflictsDlg::SetTitlePaneL
+// -----------------------------------------------------------------------------
+//
+void CPbk2MergePhotoConflictDlg::SetTitlePaneL( TBool aCustom )
+    {
+    CEikStatusPane* statusPane = iAvkonAppUi->StatusPane();
+    if ( statusPane && statusPane->PaneCapabilities( TUid::Uid( EEikStatusPaneUidTitle ) ).IsPresent() )
+        {
+        CAknTitlePane* titlePane = static_cast<CAknTitlePane*>
+            ( statusPane->ControlL ( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+        
+        if ( aCustom )
+            {
+            HBufC* title = StringLoader::LoadLC( R_QTN_PHOB_TITLE_CONFLICT_RESOLUTION );
+            titlePane->SetTextL( *title );
+            CleanupStack::PopAndDestroy( title );  
+            }
+        else
+            {
+            titlePane->SetTextToDefaultL();
+            }
+        }
+    }