diff -r 1a2a00e78665 -r 7feec50967db idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp --- a/idlefw/plugins/mcsplugin/settings/src/mcspluginsettingsmodel.cpp Tue Feb 02 00:23:10 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,596 +0,0 @@ -/* -* 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: MCS settings plug-in model. -* -*/ - -#include -#include -#include - -#include -#include -#include -#include - - -#include "mcspluginsettings.h" -#include "mcspluginsettingsmodel.h" -#include "mcspluginsettingscontainer.h" - - -#include "debug.h" - -#include - -/** - * Line format for the settings list box - */ -_LIT(KSettingListboxLineFormat, " \t%S\t\t%S"); -_LIT( KMenuAttrParam, "param"); -_LIT( KMenuAttrLocked, "locked"); -_LIT8( KTrue, "true" ); -_LIT8( KAppUid, "271012080" ); -_LIT8( KProperNameType, "type" ); -_LIT8( KProperNameParam, "param" ); -_LIT8( KProperNameUid, "uid" ); -_LIT8( KProperNameView, "view" ); -_LIT8( KProperNameLocked, "locked" ); -_LIT8( KProperValueFolder, "folder" ); -_LIT8( KProperValueSuite, "suite" ); -_LIT8( KProperValueBookmark, "bookmark" ); -_LIT8( KProperValueAppl, "application" ); - - - -using namespace HSPluginSettingsIf; - -// ----------------------------------------------------------------------------- -// Creates a formatted listbox line. -// ----------------------------------------------------------------------------- -// -TPtrC CMCSPluginSettingsModel::ListBoxLineL( const TDesC& aCaption, TInt aIndex ) const -{ - HBufC* title = StringLoader::LoadLC( - R_AI_MCS_SETTINGS_TXT_LINKN, aIndex + 1, iEnv ); - - TPtrC caption; - caption.Set(aCaption); - - TUriParser parser; - TInt err = parser.Parse(aCaption); - if (err == KErrNone) - { - // Remove scheme from the url. - const TDesC& host = parser.Extract(EUriHost); - if (host.Length()) - { - caption.Set(host); - } - } - - // Format (" \t%S\t\t%S") without %S characters. - TInt formatLength = KSettingListboxLineFormat().Length(); - - HBufC* listBoxLine = - HBufC::NewLC(title->Length() + caption.Length() + formatLength); - - TPtr ptr = listBoxLine->Des(); - ptr.Format(KSettingListboxLineFormat, title, &caption); - - delete iListBoxLine; - iListBoxLine = NULL; - iListBoxLine = listBoxLine; - CleanupStack::Pop(listBoxLine); - CleanupStack::PopAndDestroy(title); - return *iListBoxLine; -} - -// ======== MEMBER FUNCTIONS ======== - -// --------------------------------------------------------------------------- -// Two phased constructor -// --------------------------------------------------------------------------- -// -CMCSPluginSettingsModel* CMCSPluginSettingsModel::NewL( CMCSPluginSettings& aPlugin, - CCoeEnv* aEnv) -{ - CMCSPluginSettingsModel* self = new (ELeave) CMCSPluginSettingsModel(aPlugin, aEnv); - - CleanupStack::PushL(self); - self->ConstructL(); - CleanupStack::Pop(self); - - return self; -} - -// --------------------------------------------------------------------------- -// First phase construction -// --------------------------------------------------------------------------- -// -CMCSPluginSettingsModel::CMCSPluginSettingsModel( CMCSPluginSettings& aPlugin, - CCoeEnv* aEnv ) - : iPlugin( aPlugin ), - iEnv( aEnv ) -{ -} - -// --------------------------------------------------------------------------- -// Destructor -// --------------------------------------------------------------------------- -// -CMCSPluginSettingsModel::~CMCSPluginSettingsModel() -{ - delete iAppList; - delete iBkmList; - iSettings.Reset(); - delete iPluginSettings; - delete iPluginId; - delete iListBoxLine; -} - -// --------------------------------------------------------------------------- -// Second phase construction -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::ConstructL() -{ - iAppList = CMCSPluginSettingsAppList::NewL(); - iAppList->StartL(); - iBkmList = CMCSPluginSettingsBkmList::NewL(); -} - - -// --------------------------------------------------------------------------- -// Gets the latest settings from HSPS and updates -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::UpdateSettingsL( const TDesC8& aPluginId ) - { - if( !iPlugin.Activated() ) - { - return; - } - if( !iPluginSettings ) - { - // AILaunch uid in decimal format - iPluginSettings = CHomescreenSettings::NewL( KAppUid, aPluginId, this ); - iPluginId = aPluginId.AllocL(); - } - - iSettings.Reset(); - RPointerArray settingItems; - CleanupClosePushL( settingItems ); - - iPluginSettings->GetSettingsL( *iPluginId, settingItems ); - - TInt count = settingItems.Count(); - for ( TInt i = 0; i < count; i++ ) - { - CItemMap* itemMap = settingItems[i]; - RPointerArray properties; - properties = itemMap->Properties(); - TSettingItem item = ItemL( properties ); - iSettings.AppendL( item ); - } - CleanupStack::Pop( &settingItems ); - settingItems.ResetAndDestroy(); - } - -// --------------------------------------------------------------------------- -// Tries to find menuitem which matches given HSPS entry -// --------------------------------------------------------------------------- -// -TSettingItem CMCSPluginSettingsModel::ItemL( - RPointerArray& aProperties ) - { - TSettingItem setting = { KErrNotFound, EApplication , EFalse }; - - TSettingType type = SettingTypeL( aProperties ); - if( type == EApplication ) - { - setting = iAppList->FindItemL( aProperties ); - } - else if( type == EBookmark ) - { - setting = iBkmList->FindItemL( aProperties ); - } - - setting.locked = SettingLockedL( aProperties ); - - return setting; - } - -// --------------------------------------------------------------------------- -// Gets Type (application or bookmark) of given HSPS entry -// --------------------------------------------------------------------------- -// -TSettingType CMCSPluginSettingsModel::SettingTypeL( - RPointerArray& aProperties ) - { - TSettingType type( EApplication ); - - for( TInt i = 0; i < aProperties.Count(); i++ ) - { - TPtrC8 name = aProperties[i]->Name(); - if( name == KProperNameType ) - { - TPtrC8 value = aProperties[i]->Value(); - if( value == KProperValueBookmark ) - { - type = EBookmark; - } - else - { - type = EApplication; - } - } - } - - return type; - } - -// --------------------------------------------------------------------------- -// Gets locking status of given HSPS entry -// --------------------------------------------------------------------------- -// -TBool CMCSPluginSettingsModel::SettingLockedL( - RPointerArray& aProperties ) - { - - for( TInt i = 0; i Name(); - if( name == KProperNameLocked ) - { - TPtrC8 value = aProperties[i]->Value(); - if( value == KTrue ) - { - return ETrue; - } - } - } - - return EFalse; - } - - -// --------------------------------------------------------------------------- -// Saves menuitem to HSPS to the given shortcut index -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::SaveSettingsL( const TInt& aIndex, - CMenuItem& aMenuItem ) - { - - if ( !iPluginSettings ) - { - return; - } - RPointerArray settingItems; - CleanupClosePushL( settingItems ); - iPluginSettings->GetSettingsL( *iPluginId, settingItems ); - if ( aIndex >= 0 && aIndex < settingItems.Count() ) - { - TBool exists( EFalse ); - CItemMap* itemMap = settingItems[ aIndex ]; - RPointerArray properties; - properties = itemMap->Properties(); - for ( TInt i = 0; i < properties.Count(); i++ ) - { - if ( properties[ i ]->Name() == KProperNameType ) - { - TPtrC type = aMenuItem.Type(); - if ( type == KMenuTypeUrl ) - { - properties[ i ]->SetValueL( KProperValueBookmark ); - } - else if ( type == KMenuTypeFolder ) - { - properties[ i ]->SetValueL( KProperValueFolder ); - } - else if ( type == KMenuTypeSuite ) - { - properties[ i ]->SetValueL( KProperValueSuite ); - } - else - { - properties[ i ]->SetValueL( KProperValueAppl ); - } - } - else if ( properties[ i ]->Name() == KProperNameUid ) - { - TPtrC uid = aMenuItem.GetAttributeL( KMenuAttrUid, exists ); - if ( exists ) - { - HBufC8* uid8( NULL ); - uid8 = AiUtility::CopyToBufferL( uid8, uid ); - CleanupStack::PushL( uid8 ); - properties[ i ]->SetValueL( *uid8 ); - CleanupStack::PopAndDestroy( uid8 ); - } - else - { - properties[ i ]->SetValueL( KNullDesC8 ); - } - } - else if ( properties[ i ]->Name() == KProperNameView ) - { - TPtrC view = aMenuItem.GetAttributeL( KMenuAttrView, exists ); - if( exists ) - { - HBufC8* view8( NULL ); - view8 = AiUtility::CopyToBufferL( view8, view ); - CleanupStack::PushL( view8 ); - properties[i]->SetValueL( *view8 ); - CleanupStack::PopAndDestroy( view8 ); - } - else - { - properties[ i ]->SetValueL( KNullDesC8 ); - } - } - else if ( properties[ i ]->Name() == KProperNameParam ) - { - TPtrC param = aMenuItem.GetAttributeL( KMenuAttrParam, exists ); - TBool isFolder = EFalse; - TPtrC type = aMenuItem.Type(); - - // is the item folder or suite? - - if ( type == KMenuTypeFolder ) - { - isFolder = ETrue; - } - - if ( exists || isFolder ) - { - // the folder id is stored - // in param attribute in HSPS - if ( isFolder ) - { - TBuf<8> number; - number.Num( aMenuItem.Id() ); - param.Set( number ); - } - - HBufC8* param8( NULL ); - param8 = AiUtility::CopyToBufferL( param8, param ); - CleanupStack::PushL( param8 ); - properties[ i ]->SetValueL( *param8 ); - CleanupStack::PopAndDestroy( param8 ); - } - else - { - properties[ i ]->SetValueL( KNullDesC8 ); - } - } - else if ( properties[ i ]->Name() == KProperNameLocked ) - { - TPtrC locked = aMenuItem.GetAttributeL( KMenuAttrLocked, exists ); - if ( exists ) - { - HBufC8* locked8( NULL ); - locked8 = AiUtility::CopyToBufferL( locked8, locked ); - CleanupStack::PushL( locked8 ); - properties[ i ]->SetValueL( *locked8 ); - CleanupStack::PopAndDestroy( locked8 ); - } - else - { - properties[i]->SetValueL( KNullDesC8 ); - } - } - } - } - // ETrue tells that modified settings are stored also to plugin reference - iPluginSettings->SetSettingsL( *iPluginId, settingItems, ETrue ); - CleanupStack::Pop( &settingItems ); - settingItems.ResetAndDestroy(); - - } - -// --------------------------------------------------------------------------- -// Updates settings container. -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::UpdateSettingsContainerL( const TDesC8& aPluginId ) -{ - if (iContainer) - { - if (iContainer->IsChangeDialogShowing()) - { - iContainer->CloseChangeDialog(); - } - } - - UpdateSettingsL( aPluginId ); - - if (iContainer) - { - iContainer->ResetCurrentListL(0); - } -} - -// --------------------------------------------------------------------------- -// From MHomeScreenSettingsObserver - handler for HSPS setting change -// --------------------------------------------------------------------------- -// -TInt CMCSPluginSettingsModel::SettingsChangedL( const TDesC8& /*aEvent*/, - const TDesC8& /*aPluginName*/, - const TDesC8& /*aPluginUid*/, - const TDesC8& /*aPluginId*/ ) - { - return KErrNone; - } - -// --------------------------------------------------------------------------- -// From MDesCArray -// Returns the number of descriptor elements in a descriptor array. -// --------------------------------------------------------------------------- -// -TInt CMCSPluginSettingsModel::MdcaCount() const -{ - return iSettings.Count(); -} - -// --------------------------------------------------------------------------- -// From MDesCArray -// Indexes into a descriptor array. -// --------------------------------------------------------------------------- -// -TPtrC CMCSPluginSettingsModel::MdcaPoint( TInt aIndex ) const -{ - if (aIndex < 0 || aIndex >= iSettings.Count()) - { - TPtrC ret(KNullDesC); - return ret; - } - if ( iSettings[aIndex].type == EApplication ) - { - const TDesC& caption = iAppList->MdcaPoint( iSettings[aIndex].id ); - TPtrC line; - TRAP_IGNORE( line.Set( ListBoxLineL( caption, aIndex ) ) ) - return line; - } - else - { - const TDesC& caption = iBkmList->MdcaPoint( iSettings[aIndex].id ); - TPtrC line; - TRAP_IGNORE( line.Set( ListBoxLineL( caption, aIndex ) ) ) - return line; - } -} - -// --------------------------------------------------------------------------- -// Returns a setting ID for the given index. -// --------------------------------------------------------------------------- -// -TInt CMCSPluginSettingsModel::ItemId( TInt aIndex ) const -{ - if ( aIndex >= 0 && aIndex < iSettings.Count() ) - { - return iSettings[ aIndex ].id; - } - - return KErrNotFound; -} - -// --------------------------------------------------------------------------- -// Returns a pointer to setting item for the given index -// --------------------------------------------------------------------------- -// -const TSettingItem CMCSPluginSettingsModel::Item( TInt aIndex ) const - { - TSettingItem setting = { KErrNotFound, EApplication, EFalse }; - - if ( aIndex >= 0 && aIndex < iSettings.Count() ) - { - setting = iSettings[ aIndex ]; - } - - return setting; - } - -// --------------------------------------------------------------------------- -// Replaces shortcut item at given index by a new one. -// --------------------------------------------------------------------------- -// -TBool CMCSPluginSettingsModel::ReplaceItemL( const TInt& aSettingIndex, - TInt aId, - TSettingType aType ) - { - if (aSettingIndex >= 0 && aSettingIndex < iSettings.Count()) - { - // Old setting type is bookmark. Remove bookmark item from MCS - // if it was created in runtime. - if( iSettings[aSettingIndex].type == EBookmark ) - { - iBkmList->RemoveMenuItemL( iSettings[aSettingIndex].id ); - } - - // Old setting type is application. - // Remove app item from MCS if it was created in runtime (mailbox). - if ( iSettings[ aSettingIndex ].type == EApplication ) - { - iAppList->RemoveMenuItemL( iSettings[ aSettingIndex ].id ); - } - - iSettings[aSettingIndex].id = aId; - iSettings[aSettingIndex].type = aType; - - if ( aType == EApplication ) - { - CMenuItem& item = iAppList->ItemL( aId ); - SaveSettingsL( aSettingIndex, item ); - } - else - { - CMenuItem& item = iBkmList->ItemL( aId ); - SaveSettingsL( aSettingIndex, item ); - } - - return ETrue; - } - return EFalse; - } - -// --------------------------------------------------------------------------- -// Sets a container -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::SetContainer(CMCSPluginSettingsContainer* aContainer) -{ - iContainer = aContainer; -} - -// --------------------------------------------------------------------------- -// Returns application list -// --------------------------------------------------------------------------- -// -CMCSPluginSettingsAppList* CMCSPluginSettingsModel::AppList() -{ - return iAppList; -} - -// --------------------------------------------------------------------------- -// Returns bookmarklist -// --------------------------------------------------------------------------- -// -CMCSPluginSettingsBkmList* CMCSPluginSettingsModel::BkmList() -{ - return iBkmList; -} - -// --------------------------------------------------------------------------- -// Updates application list -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::UpdateAppListL() -{ - iAppList->StartL(); -} - -// --------------------------------------------------------------------------- -// Updates bookmark list -// --------------------------------------------------------------------------- -// -void CMCSPluginSettingsModel::UpdateBkmListL() -{ - delete iBkmList; - iBkmList = NULL; - iBkmList = CMCSPluginSettingsBkmList::NewL(); -} - -// End of File.