diff -r 000000000000 -r 8466d47a6819 emailuis/widget/emailwidgetsettings/src/emailwidgetsettingslistviewcontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/widget/emailwidgetsettings/src/emailwidgetsettingslistviewcontainer.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,293 @@ +/* +* 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: CEmailWidgetSettingsListViewContainer implementation +* +*/ + +// INCLUDE FILES +#include +#include +#include +#include +#include + +#include "emailtrace.h" +#include "emailwidgetsettingslistview.h" +#include "cmailwidgetcenrepkeys.h" + +using namespace AknLayout; + +const TInt KMaxMailboxCount = 18; +_LIT( KDissociated,"0"); +const TInt KMaxDescLen = 256; +const TUid KUidWizardApp = { 0x10281c96 }; +const TUid KUidEmailWizardView = { 0x10281C9A }; + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +CEmailWidgetSettingsListViewContainer::CEmailWidgetSettingsListViewContainer() + { + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CEmailWidgetSettingsListViewContainer::ConstructL(CEmailWidgetSettingsListView* aView, + const TRect& aRect) + { + FUNC_LOG; + iEnv = CEikonEnv::Static( ); + iMailboxes = CEmailWidgetSettingsMailboxes::NewL(); + CreateWindowL(); + SetBlank(); + + CreateCbaL(aView); + CreateListBoxL(aView); + SetRect(aRect); + ActivateL(); + } + +// --------------------------------------------------------------------------- +// +// --------------------------------------------------------------------------- +// +void CEmailWidgetSettingsListViewContainer::CreateListBoxL(MEikListBoxObserver* aObserver) + { + TInt count = iMailboxes->MailboxCount(); + + iListBox = new(ELeave) CAknSingleStyleListBox; + iListBox->SetContainerWindowL( *this); + iListBox->ConstructL( this, EAknListBoxSelectionList ); + iAccountNames = new (ELeave) CDesCArrayFlat(count + 1); + if (count) + { + iAccountIds = new ( ELeave ) CArrayFixFlat(count); + } + for (TInt i = 0; i < count; i++) + { + TBuf name; + TFSMailMsgId id; + iMailboxes->GetMailboxNameL(i, name); + iMailboxes->GetMailboxIdL(i, id); + iAccountNames->AppendL(name); + iAccountIds->AppendL(id); + } + HBufC* createNewMailbox = StringLoader::LoadLC(R_EMAILWIDGETSETTINGS_CREATE_NEW_MAILBOX); + iAccountNames->AppendL(createNewMailbox->Des()); + CleanupStack::PopAndDestroy(createNewMailbox); + iListBox->Model()->SetItemTextArray(iAccountNames); + + iListBox->Model()->SetOwnershipType(ELbmDoesNotOwnItemArray); + iListBox->ItemDrawer()->ColumnData()->EnableMarqueeL(ETrue); + iListBox->SetBorder(TGulBorder::ESingleBlack); + iListBox->CreateScrollBarFrameL(ETrue); + iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto); + iListBox->SetListBoxObserver(aObserver); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::CreateCbaL +// --------------------------------------------------------------------------- +// +void CEmailWidgetSettingsListViewContainer::CreateCbaL( MEikCommandObserver* aObserver ) + { + const TSize screenSize= iCoeEnv->ScreenDevice()->SizeInPixels(); + iPopoutCba = CEikButtonGroupContainer::NewL(CEikButtonGroupContainer::ECba, + CEikButtonGroupContainer::EHorizontal, aObserver, R_AVKON_SOFTKEYS_SELECT_CANCEL); + iPopoutCba->SetBoundingRect(TRect(screenSize)); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::~CEmailWidgetSettingsListViewContainer +// --------------------------------------------------------------------------- +// +CEmailWidgetSettingsListViewContainer::~CEmailWidgetSettingsListViewContainer() + { + delete iMailboxes; + delete iPopoutCba; + delete iListBox; + delete iAccountNames; + delete iAccountIds; + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::SizeChanged +// --------------------------------------------------------------------------- +// +void CEmailWidgetSettingsListViewContainer::SizeChanged() + { + TRect mainPaneRect; + AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane, mainPaneRect); + TRect listBoxRect(mainPaneRect.Size()); + iListBox->SetRect(listBoxRect); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::CountComponentControls +// --------------------------------------------------------------------------- +// +TInt CEmailWidgetSettingsListViewContainer::CountComponentControls() const + { + return iListBox ? 1 : 0; + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::ComponentControl +// --------------------------------------------------------------------------- +// +CCoeControl* CEmailWidgetSettingsListViewContainer::ComponentControl(TInt /*aIndex*/) const + { + return iListBox; + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::OfferKeyEventL +// --------------------------------------------------------------------------- +// +TKeyResponse CEmailWidgetSettingsListViewContainer::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType) + { + return iListBox->OfferKeyEventL(aKeyEvent, aType); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::MinimumSize +// --------------------------------------------------------------------------- +// +TSize CEmailWidgetSettingsListViewContainer::MinimumSize() + { + return iEikonEnv->EikAppUi()->ClientRect().Size(); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::CurrentIndex +// --------------------------------------------------------------------------- +// +TInt CEmailWidgetSettingsListViewContainer::CurrentIndex() const + { + return iListBox->CurrentItemIndex(); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::MopSupplyObject +// --------------------------------------------------------------------------- +// +TTypeUid::Ptr CEmailWidgetSettingsListViewContainer::MopSupplyObject(TTypeUid aId) + { + return SupplyMopObject(aId, iPopoutCba); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::SaveSelectedL +// --------------------------------------------------------------------------- +// +void CEmailWidgetSettingsListViewContainer::SaveSelectedL() + { + if (CurrentIndex() == iAccountNames->Count() - 1) + { + LaunchEmailWizardL(); + return; + } + + CCommandLineArguments* args = CCommandLineArguments::NewLC(); + const TInt argumentCount = args->Count(); + if (argumentCount!=2) + { + User::LeaveIfError(KErrNotFound); + } + CRepository* cenRep = CRepository::NewL( KCRUidCmailWidget ); + + if ( cenRep ) + { + TInt setId (GetSettingToAssociateL(args->Arg(1))); + if (setId >= 0) + { + TUint32 errorKey; + TFSMailMsgId msgId = (*iAccountIds)[CurrentIndex()]; + TInt id = msgId.Id(); + TUid pluginId = msgId.PluginId(); + TInt pId(pluginId.iUid); + cenRep->StartTransaction(CRepository::EConcurrentReadWriteTransaction); + cenRep->Set( KCMailMailboxIdBase+setId, id ); + cenRep->Set( KCMailPluginIdBase+setId, pId ); + cenRep->Set( KCMailWidgetContentIdBase+setId, args->Arg(1) ); + cenRep->CommitTransaction(errorKey); + } + } + delete cenRep; + CleanupStack::PopAndDestroy(args); + } + +// --------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::GetSettingToAssociateL +// --------------------------------------------------------------------------- +// +TInt CEmailWidgetSettingsListViewContainer::GetSettingToAssociateL(const TDesC& aCid) + { + FUNC_LOG; + TInt ret(KErrNotFound); + CRepository* cenRep = CRepository::NewL( KCRUidCmailWidget ); + for (TInt i = 0; i < KMaxMailboxCount; i++) + { + TBuf value; + TUint32 key(KCMailWidgetContentIdBase+i); + cenRep->Get( key, value ); + TInt result = value.Compare(aCid); + if (!result) + { + ret = i; + break; + } + } + if (ret < 0 ) + { + for (TInt i = 0; i < KMaxMailboxCount; i++) + { + TBuf value; + TUint32 key(KCMailWidgetContentIdBase+i); + cenRep->Get( key, value ); + TInt result = value.Compare(KDissociated); + if (!result) + { + ret = i; + break; + } + } + } + delete cenRep; + return ret; + } + +// ----------------------------------------------------------------------------- +// CEmailWidgetSettingsListViewContainer::LaunchEmailWizardL +// Launches Email Settings Wizard +// ----------------------------------------------------------------------------- +// +void CEmailWidgetSettingsListViewContainer::LaunchEmailWizardL() + { + if ( iEnv ) + { + CCoeAppUi* appui = iEnv-> EikAppUi( ); + if ( appui ) + { + appui->ActivateViewL(TVwsViewId(KUidWizardApp, KUidEmailWizardView)); + } + } + } + +// End of File