diff -r 3fec62e6e7fc -r 90fe62538f66 defaultapplicationsettings/server/src/das_srvmime_dlg.cpp --- a/defaultapplicationsettings/server/src/das_srvmime_dlg.cpp Thu Aug 19 09:55:50 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,530 +0,0 @@ -/* -* Copyright (c) 2005-2008 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 the Services & MIME view class -* -*/ - - - -// System includes -#include -#include -#include -#include -#include - -#include -#include - -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#include - -#include "das_srvmime_dlg.h" -#include "das_servmimeapps.h" -#include "das_appui.h" -#include "das_app.h" -#include "das.hrh" -#include "das.hlp.hrh" - - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Symbian 2-phased constructor -// --------------------------------------------------------------------------- -// -CDefaultAppSrvMimeDlg* CDefaultAppSrvMimeDlg::NewL(CDefaultAppAppUi* aAppUi) - { - //we first need to create a CDefaultAppServMimeApps instance - TInt *selected; - if(aAppUi->iReloadDlgAdvanced) - { - //some settings for the advanced view - selected=&(aAppUi->iSelectedItemAdvanced); - } - else - { - //some settings for the simple view - selected=&(aAppUi->iSelectedItemSimple); - }; - - //create the dialog instance (ownership of servMimeApps is passed to the dialog - CDefaultAppSrvMimeDlg *dialog=new(ELeave)CDefaultAppSrvMimeDlg(aAppUi, selected); - CleanupStack::PushL(dialog); - dialog->ConstructL(R_DAS_MENUBAR); - CleanupStack::Pop(dialog); - return dialog; - } - -// --------------------------------------------------------------------------- -// C++ Constructor -// --------------------------------------------------------------------------- -// -CDefaultAppSrvMimeDlg::CDefaultAppSrvMimeDlg(CDefaultAppAppUi* aAppUi, TInt *aSelected) : - CAknSelectionListDialog(*aSelected, &aAppUi->iServMimeApps->iList, NULL), - iDefaultAppUi(aAppUi), iSelected(aSelected), iOkToExit(EFalse) - { - //no implementation necessary - } - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CDefaultAppSrvMimeDlg::~CDefaultAppSrvMimeDlg() - { - if ( iDefaultAppUi ) - { - iDefaultAppUi->SetDialogExist( EFalse ); - } - - if ( iPopupList ) - { - iPopupList->CancelPopup(); - iPopupList = NULL; - } - } - - -// --------------------------------------------------------------------------- -// From class From CAknSelectionListDialog -// This function is called when buttons/softkeys are pressed, to check if the dlg should exit. -// We make the checkings and return the result. -// --------------------------------------------------------------------------- -// -TBool CDefaultAppSrvMimeDlg::OkToExitL(TInt aButtonId) - { - CAknSelectionListDialog::OkToExitL(aButtonId); - if ( aButtonId == EAknSoftkeyOptions && iPopupList ) - { - iPopupList->CancelPopup(); - iPopupList = NULL; - } - if(aButtonId == EAknSoftkeyBack || aButtonId == EAknCmdOpen || aButtonId == EAknSoftkeyOk) - { - ProcessCommandL(aButtonId); - }; - if(aButtonId==EAknCmdEnd || aButtonId==EAknSoftkeyCancel) - { - iOkToExit=ETrue; - iDefaultAppUi->iReloadDlg=EFalse; - } - return iOkToExit; - } - -// --------------------------------------------------------------------------- -// From class From CAknSelectionListDialog -// This function is called when a command is issued by the user. -// --------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::ProcessCommandL(TInt aCommand) - { - CAknSelectionListDialog::ProcessCommandL(aCommand); //this hides the menu and takes care of find - iEnterKeyPressed=EFalse; - - - *iSelected = ListBox()->CurrentItemIndex(); - if (FindBox() && *iSelected != -1) - *iSelected = STATIC_CAST(CAknFilteredTextListBoxModel*,ListBox()->Model())->Filter()->FilteredItemIndex(*iSelected); - // ATTENTION: If *iSelected is -1 it means that the list is empty! - - - switch(aCommand) - { - case EDasCmdAdvanced: - //SwitchViewL(); - - //make the dialog reload - iDefaultAppUi->iReloadDlgAdvanced=ETrue; - iOkToExit=ETrue; - //force our exit - TryExitL(0); - - break; - case EAknCmdHelp: - HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), iDefaultAppUi->AppHelpContextL()); - break; - case EDasCmdResetAll: - case EDasCmdResetSelected: - if(aCommand==EDasCmdResetSelected) - { - if(*iSelected!=-1) - iDefaultAppUi->iServMimeApps->RestoreFactorySettingsL(*iSelected); - } - else - iDefaultAppUi->iServMimeApps->RestoreFactorySettingsL(-1); - - //common code: - //reload the dialog - if(!iDefaultAppUi->iServMimeApps->iSimplifiedView) - iDefaultAppUi->iReloadDlgAdvanced=ETrue; - iOkToExit=ETrue; - //delete the iServMimeApps so that it will be reloaded next time - delete iDefaultAppUi->iServMimeApps; - iDefaultAppUi->iServMimeApps=NULL; - //force our exit - TryExitL(0); - break; - case EAknCmdExit: - //exit the server - iOkToExit=ETrue; - iDefaultAppUi->iReloadDlg=EFalse; - //force our exit - TryExitL(0); - break; - case EAknSoftkeyBack: - //we have 2 cases here: - //if we are in the advanced view, we switch back to the simple view. - //if we are in the simple view, then we exit the server - if(iDefaultAppUi->iServMimeApps->iAppUid == KUidGS && !iDefaultAppUi->iServMimeApps->iSimplifiedView) - { - //switch back to simple view - //make the dialog reload - iDefaultAppUi->iReloadDlgAdvanced=EFalse; - iOkToExit=ETrue; - // no need to force our exit, we are comming from a TryExitL() - } - else - { - //exit the server - iOkToExit=ETrue; - iDefaultAppUi->iReloadDlg=EFalse; - //tell AppUi that the exit is due a "Back" command - iDefaultAppUi->iExitBack=ETrue; - } - break; - case EAknCmdOpen: - case EAknSoftkeyOk: - //we have the index of the selected item in *iSelected - OpenMenuForSelectedServiceAndMimeL(*iSelected); - break; - } - } - -// --------------------------------------------------------------------------- -// From class From CAknSelectionListDialog -// Called during the construction of the dialog. We build the list of elements here. -// --------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::PreLayoutDynInitL() - { - CAknSelectionListDialog::PreLayoutDynInitL(); - - CEikSettingsListBox* listbox=(CEikSettingsListBox*)ListBox(); - // Ownership retained by us - listbox->CreateScrollBarFrameL( ETrue ); - listbox->ScrollBarFrame()->SetScrollBarVisibilityL(CEikScrollBarFrame::EOn, CEikScrollBarFrame::EAuto ); - listbox->UpdateScrollBarsL(); - - //enable marquee - EnableMarqueeL(); - - //restore the selected item - if(*iSelected >= 0) - { - listbox->SetCurrentItemIndex(*iSelected); - }; - - //change the title - CEikStatusPane *statusPane=iDefaultAppUi->StatusPane(); - if(statusPane && statusPane->PaneCapabilities(TUid::Uid(EEikStatusPaneUidTitle)).IsPresent()) - { - CAknTitlePane *titlePane=(CAknTitlePane*)(statusPane->ControlL(TUid::Uid(EEikStatusPaneUidTitle))); - HBufC* titleString; - //load the correct title string - if(iDefaultAppUi->iReloadDlgAdvanced) - { - if(iDefaultAppUi->iClientUid == KUidGS) - //User activated advanced view in Control Panel - titleString=StringLoader::LoadLC(R_DA_TITLE_ADVANCED); - else //Client is some application other than Control Panel; load app specific view. - titleString=StringLoader::LoadLC(R_DA_TITLE_APP); - } - else //Simple view in Control Panel - titleString=StringLoader::LoadLC(R_DA_TITLE_MAIN); - titlePane->SetTextL(*titleString); - CleanupStack::PopAndDestroy(titleString); - }; - - ListBox()->AddItemChangeObserverL( this ); - } - -// --------------------------------------------------------------------------- -// From class CAknDialog. -// Called when the menu is initialized. -// --------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane) - { - if (aResourceId != R_DAS_MENU) return; - __ASSERT_ALWAYS(iDefaultAppUi->iServMimeApps,User::Leave(KErrGeneral)); - - // for !iSimplifiedView dim the EDasCmdAdvanced - if(!iDefaultAppUi->iServMimeApps->iSimplifiedView) - aMenuPane->SetItemDimmed(EDasCmdAdvanced, ETrue); - - // if the Client is not observing when we are exiting, then dim the Exit - if(iDefaultAppUi->iServMimeApps->iFlagNoObserver) - aMenuPane->SetItemDimmed(EAknCmdExit, ETrue); - - // Help should be displayed only if the feature is supported - // according to Feature Manager - if (!FeatureManager::FeatureSupported(KFeatureIdHelp)) - { - aMenuPane->SetItemDimmed(EAknCmdHelp, ETrue); - } - //if the findbox already exists, dim the find menu item. - if ( FindBox()->IsVisible() ) - { - aMenuPane->SetItemDimmed(EAknCmdFindPopupActivated, ETrue); - } - - CTextListBoxModel* modelSm = ( ( CEikSettingsListBox* )ListBox() )->Model(); // not taking ownership - TInt itemCount = modelSm->NumberOfItems(); - //if the listbox is empty, dim the change menu item. - if (itemCount == 0) - { - aMenuPane->SetItemDimmed(EAknCmdOpen, ETrue); - } - - } - -// --------------------------------------------------------------------------- -// From class CCoeControl. -// Called to get the help context. -// --------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::GetHelpContext(TCoeHelpContext& aContext) const - { - aContext.iMajor = KUidDefaultAppServer; - - //check if we have proper values - if(!iDefaultAppUi->iServMimeApps) - aContext.iContext = KDA_HLP_MAIN; - else - { - //check for GS client - if (iDefaultAppUi->iServMimeApps->iAppUid == KUidGS) - { - //the client is GS. Check for simplified or advanced view - if (iDefaultAppUi->iServMimeApps->iSimplifiedView) - aContext.iContext = KDA_HLP_MAIN; - else - aContext.iContext = KDA_HLP_ADVANCED; - } - else - { - //this is not GS client - aContext.iContext = KDA_HLP_APPLICATION; - }; - }; - } - -// --------------------------------------------------------------------------- -// From class CCoeControl. -// Called to get the help context. -// --------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::SizeChanged() - { - CAknSelectionListDialog::SizeChanged(); - } - - -// --------------------------------------------------------------------------- -// Enables marquee for the list elements. -// --------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::EnableMarqueeL() - { - CFormattedCellListBoxData *tmp=((CEikSettingsListBox*)(ListBox()))->ItemDrawer()->FormattedCellData(); - - tmp->SetMarqueeParams(KMaxTInt, 6, 2000000, 10000); // Magic: loop forever - tmp->EnableMarqueeL(ETrue); - } - - -// --------------------------------------------------------------------------- -// Loads icons from a file and sets them in the drawer for iSavedGamesList -// --------------------------------------------------------------------------- -// -CArrayPtr* CDefaultAppSrvMimeDlg::GetPopupListIconsL() const - { - // CGulIcon class packages two bitmaps: icon image and its mask - // CAknIconArray inherits from CArrayPtrFlat - CArrayPtr* iconList = new (ELeave) - CAknIconArray(2); - CleanupStack::PushL(iconList); - - TFileName iconFile( AknIconUtils::AvkonIconFileName() ); - MAknsSkinInstance* skinInstance; - CFbsBitmap* newIconBmp = NULL; - CFbsBitmap* newIconBmpMask = NULL; - CGulIcon* newIcon = NULL; - - skinInstance = AknsUtils::SkinInstance(); - - //creating blank icon - AknsUtils::CreateIconLC(skinInstance,KAknsIIDQgnPropEmpty, - newIconBmp,newIconBmpMask,iconFile, - EMbmAvkonQgn_prop_empty, - EMbmAvkonQgn_prop_empty_mask); - - newIcon = CGulIcon::NewL(newIconBmp,newIconBmpMask); - - CleanupStack::Pop(2);//newIconBmp & newIconBmpMask - CleanupStack::PushL(newIcon); - iconList->AppendL(newIcon); - - CleanupStack::Pop(newIcon); - - //creating TICK mark icon - AknsUtils::CreateIconLC(skinInstance,KAknsIIDQgnPropSubCurrent, - newIconBmp,newIconBmpMask,iconFile, - EMbmAvkonQgn_prop_sub_current, - EMbmAvkonQgn_prop_sub_current_mask); - - newIcon = CGulIcon::NewL(newIconBmp,newIconBmpMask); - - CleanupStack::Pop(2);//newIconBmp & newIconBmpMask - CleanupStack::PushL(newIcon); - iconList->AppendL(newIcon); - - CleanupStack::Pop(newIcon); - - CleanupStack::Pop(iconList); - - newIconBmp = NULL; - newIconBmpMask = NULL; - newIcon = NULL; - - return iconList; - } - - -// --------------------------------------------------------------------------- -// Pops-up a menu list with the Applications for the selected Service & MIME item -// --------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::OpenMenuForSelectedServiceAndMimeL(TInt aSelectedIndex) - { - if(!iDefaultAppUi->iServMimeApps)User::Leave(KErrNotFound); - if(aSelectedIndex<0)return; //there is no selected item (list is empty) - - CAknSingleGraphicPopupMenuStyleListBox *selectedServiceAndMime = new (ELeave) CAknSingleGraphicPopupMenuStyleListBox; - CleanupStack::PushL(selectedServiceAndMime); - - if ( iPopupList != NULL ) - { - iPopupList->CancelPopup(); - iPopupList = NULL; - } - - iPopupList = CAknPopupList::NewL(selectedServiceAndMime, R_AVKON_SOFTKEYS_OK_CANCEL); - selectedServiceAndMime->ConstructL(iPopupList,EAknListBoxMenuList); - selectedServiceAndMime->CreateScrollBarFrameL (ETrue); - selectedServiceAndMime->ScrollBarFrame()->SetScrollBarVisibilityL( - CEikScrollBarFrame::EOff, - CEikScrollBarFrame::EAuto ); - - //construct icons - CArrayPtr* icons=GetPopupListIconsL(); - selectedServiceAndMime->ItemDrawer()->ColumnData()->SetIconArray(icons); // passing ownership of icons - - - //populate the applications list - CTextListBoxModel* modelApps = selectedServiceAndMime->Model(); // not taking ownership - modelApps->SetOwnershipType (ELbmOwnsItemArray); - CDesCArray* applications = STATIC_CAST(CDesCArray*, modelApps->ItemTextArray()); - HBufC* listTitle=NULL; - iDefaultAppUi->iServMimeApps->GetApplicationsListL(aSelectedIndex, *applications, listTitle); - - - //set the title of the list - CleanupStack::PushL(listTitle); - iPopupList->SetTitleL(*listTitle); - CleanupStack::PopAndDestroy(listTitle); - // - TInt popupOk = iPopupList->ExecuteLD(); - iPopupList = NULL; - - if(popupOk) - { - TInt selected = selectedServiceAndMime->CurrentItemIndex(); - - //update the default in the array & list - //get the list array first - CTextListBoxModel* modelSm = ((CEikSettingsListBox*)ListBox())->Model(); // not taking ownership - //modelSm->SetOwnershipType (ELbmOwnsItemArray); - CDesCArray* servicesAndMimesArray = STATIC_CAST(CDesCArray*, modelSm->ItemTextArray()); - //do the update - iDefaultAppUi->iServMimeApps->UpdateDefaultL(aSelectedIndex,selected,servicesAndMimesArray); - //redraw the list - DrawNow(); - } - CleanupStack::PopAndDestroy(selectedServiceAndMime); - } - -// --------------------------------------------------------------------------- -// OfferKeyEventL from ccoecontrol -// --------------------------------------------------------------------------- -// -TKeyResponse CDefaultAppSrvMimeDlg::OfferKeyEventL(const TKeyEvent &aKeyEvent, TEventCode aType) - { - if ( aKeyEvent.iCode == EKeyBackspace ) - { - if ( FindBox()->TextLength() >0 ) - { - return FindBox()->OfferKeyEventL( aKeyEvent, aType ); - } - } - return CAknSelectionListDialog::OfferKeyEventL( aKeyEvent ,aType ); - } - -// ----------------------------------------------------------------------------- -// CDefaultAppSrvMimeDlg::ListBoxItemsChanged (from MListBoxItemChangeObserver) -// -// ----------------------------------------------------------------------------- -// -void CDefaultAppSrvMimeDlg::ListBoxItemsChanged( CEikListBox* aListBox ) - { - if ( aListBox ) - { - CEikButtonGroupContainer& cba = ButtonGroupContainer(); - CTextListBoxModel* modelSm = ((CEikSettingsListBox*)aListBox)->Model(); // not taking ownership - TInt itemCount = modelSm->NumberOfItems(); - if (itemCount == 0) - { - cba.MakeCommandVisible(EAknCmdOpen, EFalse); - } - else - { - cba.MakeCommandVisible(EAknCmdOpen, ETrue); - } - } - } -