diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/UIControls/src/CPbk2MergePhotoConflictDlg.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#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( cba.ButtonGroup() ); + if( eikCba ) + { + eikCba->EnableItemSpecificSoftkey( EFalse ); + } + + iListBox = static_cast( 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* 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( 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 + ( 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 + ( 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(); + } + } + }