diff -r 6369bfd1b60d -r 08b5eae9f9ff homesync/contentmanager/mediaservant/src/msfillruleeditlist.cpp --- a/homesync/contentmanager/mediaservant/src/msfillruleeditlist.cpp Mon Nov 01 13:44:24 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2460 +0,0 @@ -/* -* Copyright (c) 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: CMSFillRuleEditList class implementation -* -*/ - - -#include -#include -#include -#include -#include -#include -#include - -#include "cmsqlpropertycontainer.h" -#include "mserv.hlp.hrh" -#include "cmfillrule.h" -#include "cmfillrulecontainer.h" -#include "cmmediaserverfull.h" -#include "msappui.h" -#include "mediaservantuid.h" -#include "msengine.h" -#include "msconstants.h" -#include "msfillruleeditlist.h" -#include "msfillruleeditview.h" -#include "msruleamountsetting.h" // Amount -#include "msruleserverssetting.h" // Servers -#include "msrulemultiselectionsetting.h"// Artist, genre, album, track -#include "msrulefilesizesetting.h" // File size (min/max) -#include "mediaservant.hrh" -#include "msmetadatacollector.h" -#include "msdebug.h" -#include "msfillcontainer.h" -#include "msfillview.h" - -// CONSTANTS -_LIT( KSpace, " "); -const TInt KDateBufferLength = 20; - - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::NewL() -// Two phase constructor. -// -------------------------------------------------------------------------- -// -CMSFillRuleEditList* CMSFillRuleEditList::NewL( - CMSAppUi& aAppUi, CMSFillRuleEditView& aView ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::NewL")); - - CMSFillRuleEditList* self = CMSFillRuleEditList::NewLC( aAppUi, aView ); - CleanupStack::Pop( self ); - - return self; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::NewLC() -// Two phase constructor. -// -------------------------------------------------------------------------- -// -CMSFillRuleEditList* CMSFillRuleEditList::NewLC( - CMSAppUi& aAppUi, CMSFillRuleEditView& aView ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::NewLC")); - - CMSFillRuleEditList* self = new ( ELeave ) CMSFillRuleEditList(); - CleanupStack::PushL( self ); - self->ConstructL( aAppUi, aView ); - - return self; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::CMSFillRuleEditList() -// -------------------------------------------------------------------------- -// -CMSFillRuleEditList::CMSFillRuleEditList() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::CMSFillRuleEditList")); - - iDummyText.Copy(_L("")); - iMinFileSize = 0; - iMaxFileSize = 0; - iMinFileSizeSet = EMSAny; - iMaxFileSizeSet = EMSAny; - iFileSize = 0; - iFileSizeEnum = 0; - iTrackLengthEnum = 0; - iNewList = EFalse; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::~CMSFillRuleEditList() -// -------------------------------------------------------------------------- -// -CMSFillRuleEditList::~CMSFillRuleEditList() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::~CMSFillRuleEditList")); - - delete iMetadataCollector; - - if ( iServers ) - { - iServers->ResetAndDestroy(); - iServers->Close(); - delete iServers; - } - - if ( iServerArray ) - { - iServerArray->ResetAndDestroy(); - delete iServerArray; - } - - iVisibleRules.Close(); - - iArtistArray.Close(); - iAlbumArray.Close(); - iGenreArray.Close(); - iTrackArray.Close(); - iVideoTitleArray.Close(); - - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::ConstructL() -// Second phase constructor. -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::ConstructL( CMSAppUi& aAppUi, - CMSFillRuleEditView& aView ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::ConstructL")); - - iAppUi = &aAppUi; - iView = &aView; - - // Set engine observer - iAppUi->MSEngine()->SetObserver( this ); - - // read template - iRuleTemplate = iAppUi->ParameterAgent()->GetRuleTemplate(); - - // Edit existing list - if ( iRuleTemplate.templateType == EMSCmdEditRule ) - { - // get selected item index from previous screen - iSelectedList = iAppUi->ParameterAgent()->FillViewFocusIndex(); - - // get selected list - iRule =(*iAppUi-> - FillRuleController()->FillListArray())[iSelectedList]->List(); - // List media type - iMediaType = iRule->MediaType(); - - // set used template - iRuleTemplate.selectedTemplate = iRule->TemplateId(); - - ReadTemplateRulesL( iRuleTemplate.selectedTemplate ); - // Get values for rules - GetRuleValuesL(); - } - - else - { - iNewList = ETrue; - - // New fill list will be last one - set focus index to it - iSelectedList = - iAppUi->FillRuleController()->FillListArray()->Count(); - iAppUi->ParameterAgent()->SetFillViewFocusIndex( iSelectedList ); - - // Create new list - iRule = CCmFillRule::NewL(); - - // Read template rules and set default values - ReadTemplateRulesL( iRuleTemplate.selectedTemplate ); - - // Use template name as list name - iListName.Copy( iRuleTemplate.templateName ); - HBufC8* temp = CnvUtfConverter::ConvertFromUnicodeToUtf8L( - iListName ); - CleanupStack::PushL( temp ); - iRule->SetNameL( *temp ); - CleanupStack::PopAndDestroy( temp ); - // List type is determined by given menu command - // MediaType is also set here - SetListType( iRuleTemplate.templateType ); - iRule->SetTemplateId( iRuleTemplate.selectedTemplate ); - - //Set rule selected by default - iRule->SetSelected( ECmSelected ); - - // Initialize fill rule status to ECmToBeFilled - // If rule is image rule, status is re-set - // according to used template - iRule->SetStatus( ECmToBeFilled ); - - InitializeValues(); - - // save new list - iAppUi->FillRuleController()->AddRuleL( iRule ); - - // Get list - iRule = (*iAppUi->FillRuleController()-> - FillListArray())[iSelectedList]->List(); - } - - // should filter the vedio array when construct first time, only selected item can be construct - if( iRule->MediaType() == ECmVideo ) - { - // reset track array - iTrackArray.Reset(); - // append the select video title in track array - TInt count = iVideoTitleArray.Count(); - if( count > 0 ) - { - for( TInt i=0; iFillRuleController()->SaveRulesL(); - PreprocessListL(); - } - else - { - CreateAndSetNaviPaneTextL(); - } - break; - } - case ECmAudio: - { - // construct item list - CAknSettingItemList::ConstructFromResourceL( - R_MS_AUDIO_FILL_RULES ); - break; - } - default: - { - break; - } - } - - if ( iMediaType == ECmVideo || iMediaType == ECmAudio ) - { - // Show 'reading data' text on navi pane - HBufC* naviText = StringLoader::LoadLC( - R_MS_WAIT_GETTING_DATA_TEXT ); - iView->SetNavigationPaneTextL( *naviText ); - CleanupStack::PopAndDestroy( naviText ); - } - - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SaveListValuesL -// Saves list values from visible setting items -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SaveListValuesL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SaveListValuesL")); - - CAknSettingItemArray* itemArray = SettingItemArray(); - for ( TInt index = 0; index < itemArray->Count(); index++ ) - { - CAknSettingItem* item = itemArray->At( index ); - if ( !item->IsHidden() ) - { - SaveValueL( item ); - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::PreprocessListL -// starts list preprocess and shows info on navi pane -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::PreprocessListL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::PreprocessListL")); - - iAppUi->MSEngine()->PreProcessFillListL( iRule->Name() ); - HBufC* naviText = StringLoader::LoadLC( R_MS_PREPROCESSING_TEXT ); - iView->SetNavigationPaneTextL( *naviText ); - CleanupStack::PopAndDestroy( naviText ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SaveValueL -// Save values to rule container -// Only values from visible rules are stored -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SaveValueL( CAknSettingItem* aItem ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SaveValueL")); - - if ( !aItem->IsHidden() ) - { - switch ( aItem->Identifier() ) - { - case EMSListName: - { - // Name is always visible - set rule name - HBufC8* listName = - CnvUtfConverter::ConvertFromUnicodeToUtf8L( - SettingItemArray()->At(EMSListName)->SettingTextL() ); - CleanupStack::PushL( listName ); - iRule->SetNameL( *listName ); - CleanupStack::PopAndDestroy( listName ); - break; - } - case EMSShrinkImages: - { - // Set shrinking status for images - SetShrinkingStatus(); - break; - } - case EMSAmount: - { - // set amount of files - iRule->SetAmount( iAmount ); - // set limit type - iRule->SetLimitType( iLimitType ); - break; - } - case EMSStartingWith: - { - iRule->SetMethod( - static_cast (iStartWith) ); - break; - } - case EMSDateFrom: - { - DeleteRule( ECmDate, ECmGreater ); - - TInt ruleIndex = iRule->AddRuleL( ECmDate, - ECmGreater ); - HBufC8* str = HBufC8::NewL( KDateBufferLength ); - CleanupStack::PushL( str ); - str->Des().AppendNum(iDateFrom.Int64()); - iRule->AddRuleParamL( ruleIndex, *str ); - CleanupStack::PopAndDestroy( str ); - break; - } - case EMSDateUntil: - { - DeleteRule( ECmDate, ECmSmaller ); - - TInt ruleIndex = iRule->AddRuleL( ECmDate, - ECmSmaller ); - HBufC8* str = HBufC8::NewL( KDateBufferLength ); - CleanupStack::PushL( str ); - str->Des().AppendNum(iDateUntil.Int64()); - iRule->AddRuleParamL( ruleIndex, *str ); - CleanupStack::PopAndDestroy( str ); - - break; - } - case EMSServers: - { - HandleServerSelectionL(); - break; - } - case EMSFreeText: - { - DeleteRule( ECmFreeText ); - if ( iFreeText.Size() ) - { - TInt ruleIndex = iRule->AddRuleL( ECmFreeText, - ECmConsistOf ); - HBufC8* str = CnvUtfConverter::ConvertFromUnicodeToUtf8L( - iFreeText ); - CleanupStack::PushL( str ); - iRule->AddRuleParamL( ruleIndex, *str ); - CleanupStack::PopAndDestroy( str ); - } - break; - } - case EMSTitleName: - { - DeleteRule( ECmTitle ); - - if ( iVideoTitleArray.Count() > 0 ) - { - AddAdditionalRuleL( iVideoTitleArray, - ECmTitle, - ECmEquals ); - } - break; - } - case EMSMinFileSize: - { - DeleteRule( ECmFileSize, ECmGreater ); - if ( iMinFileSizeSet == EMSSetSize ) - { - AddAdditionalRuleL( ECmFileSize, - ECmGreater, - iMinFileSize*KMega ); - } - break; - } - case EMSMaxFileSize: - { - DeleteRule( ECmFileSize, ECmSmaller ); - if ( iMaxFileSizeSet == EMSSetSize ) - { - AddAdditionalRuleL( ECmFileSize, - ECmSmaller, - iMaxFileSize*KMega ); - } - break; - } - case EMSGenre: - { - DeleteRule( ECmGenre ); - - if ( iGenreArray.Count() > 0 ) - { - AddAdditionalRuleL( iGenreArray, - ECmGenre, - ECmEquals ); - } - break; - } - case EMSArtist: - { - DeleteRule( ECmArtist ); - - if ( iArtistArray.Count() > 0 ) - { - AddAdditionalRuleL( iArtistArray, - ECmArtist, - ECmEquals ); - } - break; - } - case EMSAlbum: - { - DeleteRule( ECmAlbum ); - - if ( iAlbumArray.Count() > 0 ) - { - AddAdditionalRuleL( iAlbumArray, - ECmAlbum, - ECmEquals ); - } - break; - } - case EMSTrack: - { - DeleteRule( ECmTitle ); - - if ( iTrackArray.Count() > 0 ) - { - AddAdditionalRuleL( iTrackArray, - ECmTitle, - ECmEquals ); - } - break; - } - case EMSTrackLength: - { - DeleteRule( ECmDuration ); - if ( iTrackLengthEnum ) - { - SaveTrackDurationL(); - } - break; - } - case EMSFileSize: - { - DeleteRule( ECmFileSize ); - if ( iFileSizeEnum ) - { - SaveTrackFileSizeL(); - } - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SaveValueL \ - no such rule")); - break; - } - } - } - } - -// -------------------------------------------------------------------------- -// CAknSettingItem* CMSFillRuleEditList::CreateSettingItemL(TInt aIdentifier) -// Takes care of creating actual setting items. -// -------------------------------------------------------------------------- -// -CAknSettingItem* CMSFillRuleEditList::CreateSettingItemL( TInt aIdentifier ) - { - CAknSettingItem* settingItem = NULL; - - // setting item is created according to aIdentifier - switch ( aIdentifier ) - { - case EMSListName: - { - settingItem = new (ELeave ) CMSTextSettingItem( - aIdentifier, - iListName ); - break; - } - case EMSShrinkImages: - { - settingItem = new (ELeave ) CMSEnumeratedTextPopupSettingItem( - aIdentifier, - reinterpret_cast (iShrinkImages) ); - break; - } - - case EMSAmount: - { - settingItem = new (ELeave ) CMSRuleAmountSetting( - aIdentifier, - reinterpret_cast (iLimitType), - iAmount ); - break; - } - - case EMSStartingWith: - { - settingItem = new (ELeave ) CMSEnumeratedTextPopupSettingItem( - aIdentifier, - iStartWith ); - break; - } - - case EMSDateFrom: - { - settingItem = new (ELeave ) CMSTimeOrDateSettingItem( - R_MS_FILL_RULE_DATE_FROM_SETTING_PAGE, - aIdentifier, - CAknTimeOrDateSettingItem::EDate, - iDateFrom ); - break; - } - - case EMSDateUntil: - { - settingItem = new (ELeave ) CMSTimeOrDateSettingItem( - R_MS_FILL_RULE_DATE_UNTIL_SETTING_PAGE, - aIdentifier, - CAknTimeOrDateSettingItem::EDate, - iDateUntil ); - break; - } - - case EMSServers: - { - settingItem = CMSRuleServersSetting::NewL( - aIdentifier, - *iServerArray, - iSettingText, - R_MS_VALUE_LIST_ANY_SOURCE_DEVICE); - break; - } - - case EMSFreeText: - { - settingItem = new (ELeave ) CMSTextSettingItem( - aIdentifier, - iFreeText ); - break; - } - case EMSTitleName: - { - settingItem = CMSRuleMultiselectionSetting::NewL( - aIdentifier, - R_MS_RULE_NAME_SETTING, - R_MS_VALUE_ANY_NAME, - R_MS_VALUE_LIST_ANY_NAME, - iMetadataCollector->Tracks(), - &iVideoTitleArray, - R_MS_RULE_TITLE_ITEM_TEXT, - iSettingText ); - break; - } - - case EMSMinFileSize: - { - settingItem = new (ELeave ) CMSRuleFileSizeSetting( - aIdentifier, - EMSMinFileSize, - iMinFileSizeSet, - iMinFileSize ); - break; - } - - case EMSMaxFileSize: - { - settingItem = new (ELeave ) CMSRuleFileSizeSetting( - aIdentifier, - EMSMaxFileSize, - iMaxFileSizeSet, - iMaxFileSize ); - break; - } - - case EMSGenre: - { - - - settingItem = CMSRuleMultiselectionSetting::NewL( - aIdentifier, - R_MS_RULE_GENRE_SETTING, - R_MS_VALUE_ANY_GENRE, - R_MS_VALUE_LIST_ANY_GENRE, - iMetadataCollector->Genres(), - &iGenreArray, - R_MS_RULE_GENRE_ITEM_TEXT, - iSettingText ); - break; - } - - case EMSArtist: - { - settingItem = CMSRuleMultiselectionSetting::NewL( - aIdentifier, - R_MS_RULE_ARTIST_SETTING, - R_MS_VALUE_ANY_ARTIST, - R_MS_VALUE_LIST_ANY_ARTIST, - iMetadataCollector->Artists(), - &iArtistArray, - R_MS_RULE_ARTIST_ITEM_TEXT, - iSettingText ); - break; - } - - case EMSAlbum: - { - settingItem = CMSRuleMultiselectionSetting::NewL( - aIdentifier, - R_MS_RULE_ALBUM_SETTING, - R_MS_VALUE_ANY_ALBUM, - R_MS_VALUE_LIST_ANY_ALBUM, - iMetadataCollector->Albums(), - &iAlbumArray, - R_MS_RULE_ALBUM_ITEM_TEXT, - iSettingText ); - break; - } - - case EMSTrack: - { - settingItem = CMSRuleMultiselectionSetting::NewL( - aIdentifier, - R_MS_RULE_TRACK_SETTING, - R_MS_VALUE_ANY_TRACK, - R_MS_VALUE_LIST_ANY_TRACK, - iMetadataCollector->Tracks(), - &iTrackArray, - R_MS_RULE_TRACK_ITEM_TEXT, - iSettingText ); - break; - } - - case EMSTrackLength: - { - settingItem = new (ELeave ) CMSEnumeratedTextPopupSettingItem( - aIdentifier, - iTrackLengthEnum ); - break; - } - - case EMSFileSize: - { - settingItem = new (ELeave ) CMSEnumeratedTextPopupSettingItem( - aIdentifier, - iFileSizeEnum ); - break; - } - - case EMSAddMoreRules: - { - settingItem = new (ELeave ) CMSTextSettingItem( - aIdentifier, - iDummyText ); - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::CreateSettingItemL\ - item not found")); - break; - } - } - return settingItem; - } - - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::OpenSelectedListboxItemL -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::OpenSelectedListboxItemL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - OpenSelectedListboxItemL")); - - HandleListBoxEventL( ListBox(), EEventEnterKeyPressed ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::HandleListBoxEventL() -// Handles listbox events -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::HandleListBoxEventL ( CEikListBox *aListBox, - TListBoxEvent aEventType) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::HandleListBoxEventL")); - - CAknSettingItemArray* itemArray = SettingItemArray(); - TInt currentItem = ListBox()->CurrentItemIndex(); - TInt realIndex = itemArray->ItemIndexFromVisibleIndex(currentItem); - CAknSettingItem* item= (*itemArray)[realIndex]; - - // Event type for non-touch UI - if ( aEventType == EEventEnterKeyPressed ) - { - if ( item->Identifier() == EMSAddMoreRules ) - { - AddFillRuleL(); - } - else - { - CAknSettingItemList::HandleListBoxEventL ( aListBox, aEventType ); - } - } - // Event type for touch UI - else if ( aEventType == EEventItemClicked ) - { - // show add fill rule query if last item "Add more rules" selected - if ( item->Identifier() == EMSAddMoreRules && - iPreviousRuleIdentifier == EMSAddMoreRules ) - { - AddFillRuleL(); - } - else - { - CAknSettingItemList::HandleListBoxEventL ( aListBox, aEventType ); - } - iPreviousRuleIdentifier = item->Identifier(); - // values need to be stored - StoreSettingsL(); - } - else if ( item->Identifier() != EMSAddMoreRules ) - { - CAknSettingItemList::HandleListBoxEventL ( aListBox, aEventType ); - } - - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::EditItemL() -// Called by framework when item is opened -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::EditItemL (TInt aIndex, TBool aCalledFromMenu) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::EditItemL")); - - // cancel ongoing operation - iView->CancelAsyncOperation( iAppUi ); - iState = EMSIdle; - - CAknSettingItemList::EditItemL( aIndex, aCalledFromMenu ); - - // get the item information after update - CAknSettingItemArray* itemArray = SettingItemArray(); - TInt currentItem = ListBox()->CurrentItemIndex(); - TInt realIndex = itemArray->ItemIndexFromVisibleIndex(currentItem); - CAknSettingItem* item= (*itemArray)[realIndex]; - - // check if list name is modified - if ( item->Identifier() == EMSListName ) - { - HandleListNameL( item ); - } - - if ( CheckSettingPageAcceptance( item ) ) - { - // store new value - StoreSettingsL(); - // Save value to rule - SaveValueL( item ); - // save rule and process it - SaveAndPreprocesslistL( item ); - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::HandleListNameL -// Handles edit list name -case -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::HandleListNameL( CAknSettingItem* aItem ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::HandleListNameL")); - - CMSTextSettingItem* settingItem = - static_cast( aItem ); - - TPtr searchStr = settingItem->Text(); - - // Deletes leading and trailing whitespace characters - searchStr.Trim(); - - HBufC* originalSearchStr = - CnvUtfConverter::ConvertToUnicodeFromUtf8L( iRule->Name() ); - CleanupStack::PushL( originalSearchStr ); - - // whether they are same or not - if ( *originalSearchStr != searchStr ) - { - // if there are same names in other fill rules - TBool isSame = CheckSameNameL( searchStr ); - - if ( isSame ) - { - TInt postfix = 0; - TPtr itemText = searchStr; - - // decide which number is added to the end of the name - for ( ; ; ++postfix ) - { - HBufC* sameStr = HBufC::NewL( KMaxFileName ); - CleanupStack::PushL( sameStr ); - sameStr->Des().Append( itemText ); - - // if the name does not add number to the end is unique so keep the original name - if ( 0 != postfix) - { - sameStr->Des().Append( KSpace ); - sameStr->Des().AppendNum( postfix ); - // do number conversion - TPtr ptr = sameStr->Des(); - AknTextUtils:: - DisplayTextLanguageSpecificNumberConversion( ptr ); - } - // must modify name with append a number - if ( !CheckSameNameL( *sameStr ) || ( *sameStr == *originalSearchStr ) ) - { - CleanupStack::PopAndDestroy( sameStr ); - break; - } - CleanupStack::PopAndDestroy( sameStr ); - } - - // do not need append a number - if ( 0 != postfix) - { - itemText.Append( KSpace ); - itemText.AppendNum( postfix ); - - // do number conversion - AknTextUtils:: - DisplayTextLanguageSpecificNumberConversion( itemText ); - - iListName.Copy( itemText ); - settingItem->LoadL(); - - aItem->UpdateListBoxTextL(); - } - } - } - else - { - settingItem->LoadL(); - } - CleanupStack::PopAndDestroy( originalSearchStr ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::CheckSameNameL -// check the name is same or not -// -------------------------------------------------------------------------- -// -TBool CMSFillRuleEditList::CheckSameNameL( const TDesC& aName ) const - { - RPointerArray* iFillListArray = - iAppUi->FillRuleController()->FillListArray(); - - // fill rule name array is not empty - if ( iFillListArray->Count() > 0 ) - { - for ( TInt index = 0; index < iFillListArray->Count(); ++index ) - { - // Get fill rule name and put it to the listbox - CCmFillRule* rule = (*iFillListArray)[index]->List(); - HBufC* listName = - CnvUtfConverter::ConvertToUnicodeFromUtf8L( rule->Name() ); - CleanupStack::PushL( listName ); - // whether there is a same name fill rule - if ( aName == *listName ) - { - CleanupStack::PopAndDestroy( listName ); - return ETrue; - } - CleanupStack::PopAndDestroy( listName ); - } - } - return EFalse; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SaveAndPreprocesslistL -// Saves modified list and preprocesses it -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SaveAndPreprocesslistL( CAknSettingItem* aItem ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - SaveAndPreprocesslistL")); - - // save rules - iAppUi->FillRuleController()->SaveRulesL(); - // we'll lost iRule after update... - iAppUi->FillRuleController()->UpdateArrayL(); - // ...so get it again - iRule = (*iAppUi->FillRuleController()-> - FillListArray())[iSelectedList]->List(); - - // if multiselectionitem is edited start data reading after preprocess - if ( aItem->Identifier() == EMSGenre || - aItem->Identifier() == EMSArtist || - aItem->Identifier() == EMSAlbum || - aItem->Identifier() == EMSTrack|| - aItem->Identifier() == EMSTitleName) - { - iState = EMSFetchMetadata; - } - - // if other item than name is changed preprocessing is needed - if ( aItem->Identifier() != EMSListName ) - { - PreprocessListL(); - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::ActivateL -// Asks setting page selection status from setting item -// -------------------------------------------------------------------------- -// -TBool CMSFillRuleEditList::CheckSettingPageAcceptance( - CAknSettingItem* aItem ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - CheckSettingPageAcceptance")); - - TBool status( EFalse ); - - switch ( aItem->Identifier() ) - { - case EMSShrinkImages: - // fall through - case EMSAmount: - // fall through - case EMSStartingWith: - // fall through - case EMSMinFileSize: - // fall through - case EMSMaxFileSize: - // fall through - case EMSTrackLength: - // fall through - case EMSFileSize: - { - CMSEnumeratedTextPopupSettingItem* item = - static_cast(aItem); - status = item->SettingAccepted(); - break; - } - case EMSListName: - // fall through - case EMSServers: - // fall through - case EMSFreeText: - // fall through - case EMSTitleName: - // fall through - case EMSGenre: - // fall through - case EMSArtist: - // fall through - case EMSAlbum: - // fall through - case EMSTrack: - - { - CMSTextSettingItem* item = - static_cast(aItem); - status = item->SettingAccepted(); - break; - } - - case EMSDateFrom: - // fall through - case EMSDateUntil: - { - CMSTimeOrDateSettingItem* item = - static_cast(aItem); - status = item->SettingAccepted(); - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - CheckSettingPageAcceptance no such item")); - break; - } - } - - return status; - } -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::ActivateL -// Activates setting list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::ActivateL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::ActivateL")); - - // hide all items by default - // index starts from '1' because list name is always visible - // index stops to count-1 because "add more rules" is always visible - for (TInt index = 1 ;index < SettingItemArray()->Count()-1; index++) - { - SettingItemArray()->At( index )->SetHidden(ETrue); - } - - CAknSettingItemArray* itemArray = SettingItemArray(); - // set template rules visible - for (TInt idx = 0; idx < iVisibleRules.Count(); idx++) - { - CAknSettingItem* item = SearchItemById( iVisibleRules[idx] ); - if ( item ) - { - item->SetHidden( EFalse); - } - } - // Show also additional rules if user has changed the default value - DisplayModifiedAdditionalRules(); - // visibility of some items may have changed - HandleChangeInItemArrayOrVisibilityL(); - - CAknSettingItemList::ActivateL(); - } - -// -------------------------------------------------------------------------- -// void CMSFillRuleEditList::ReadTemplateRulesL -// reads fill rule name -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::ReadTemplateRulesL( TInt aTemplate ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::ReadTemplateRulesL")); - - TResourceReader rsReader; - - switch ( aTemplate ) - { - case EMSDefaultImageList: - { - iCoeEnv->CreateResourceReaderLC(rsReader, - R_MS_DEFAULT_IMAGE_LIST_RULES); - break; - } - case EMSDefaultVideoList: - { - iCoeEnv->CreateResourceReaderLC(rsReader, - R_MS_DEFAULT_VIDEO_LIST_RULES); - break; - } - case EMSDefaultMusicList: - { - iCoeEnv->CreateResourceReaderLC(rsReader, - R_MS_DEFAULT_MUSIC_LIST_RULES); - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::ReadTemplateRulesL\ - rule not found")); - break; - } - } - - // get rule count of the template - TInt ruleCount( rsReader.ReadInt16() ); - - // List name is always visible -> index starts from EMSListName+1 - for ( TInt index = EMSListName+1; index <= ruleCount; index++ ) - { - // get rule ID - TMSFillEditItems ruleId = - static_cast(rsReader.ReadInt16()); - // get value - TInt value = rsReader.ReadInt16(); - // get addional value - TInt addValue = rsReader.ReadInt16(); - if ( ruleId == EMSAmount ) - { - iLimitType = static_cast (addValue); - } - // Remember IDs of template rules - rules will be set - // visible later - iVisibleRules.AppendL( ruleId ); - - // set value of rule - SetDefaultValue( ruleId, value ); - } - - CleanupStack::PopAndDestroy();//reader - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SetDefaultValues -// Sets default value defined by template -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SetDefaultValue( TInt aId, TInt aValue ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SetDefaultValue")); - - switch ( aId ) - { - case EMSShrinkImages: - { - iShrinkImages = static_cast (aValue); - break; - } - case EMSAmount: - { - iAmount = aValue; - break; - } - case EMSStartingWith: - { - iStartWith = aValue; - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - SetDefaultValues item not found")); - } - } - } -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::AddFillRuleL -// Sets rule visibility -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::AddFillRuleL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::AddFillRuleL")); - - TResourceReader reader; - - switch ( iMediaType ) - { - case ECmImage: - { - // read image templates - iCoeEnv->CreateResourceReaderLC( reader, R_MS_IMAGE_RULE_LIST ); - break; - } - case ECmVideo: - { - // read video templates - iCoeEnv->CreateResourceReaderLC( reader, R_MS_VIDEO_RULE_LIST ); - break; - } - case ECmAudio: - { - // read music templates - iCoeEnv->CreateResourceReaderLC( reader, R_MS_MUSIC_RULE_LIST ); - break; - } - default: - { - // command not found - return; - } - } - - // read rule count - TInt ruleCount( reader.ReadInt16() ); - - CDesCArray* ruleNames = new ( ELeave ) CDesCArrayFlat( ruleCount ); - CleanupStack::PushL( ruleNames ); - - // array for template ID's - RArray indexArray; - - // fill name array - for ( TInt index = 0; index < ruleCount; index++ ) - { - // read rule ID - TMSFillEditItems value = - static_cast( reader.ReadInt16() ); - // read rule name - TPtrC text = reader.ReadTPtrC(); - - // add only hidden items to the list - if ( SearchItemById( value )->IsHidden() ) - { - indexArray.AppendL( value ); - ruleNames->AppendL( text ); - } - } - - TInt selectedRule( 0 ); - - if ( iView->ShowTemplateQueryL( R_MSERV_TEMPLATE_QUERY, - R_MS_ADD_RULE_QUERY_HEADING, - ruleNames, - selectedRule ) ) - { - // search item - for ( TInt idx = 0; idx < SettingItemArray()->Count(); idx++ ) - { - CAknSettingItem* item = SettingItemArray()->At( idx ); - if ( item->Identifier() == indexArray[selectedRule] ) - { - // Show confirmation query for "From" and for "Until" - if ( item->Identifier() == EMSDateFrom || - item->Identifier() == EMSDateUntil ) - { - if ( iView->ShowQueryL( R_MSERV_VIDEO_RULE_QUERY ) ) - { - // set item visible - item->SetHidden( EFalse ); - } - } - else - { - item->SetHidden( EFalse ); - } - } - } - HandleChangeInItemArrayOrVisibilityL(); - } - indexArray.Close(); - CleanupStack::PopAndDestroy( ruleNames ); - CleanupStack::PopAndDestroy(); // resource stuff - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SetListType -// Sets list type based on given command -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SetListType( TInt aType ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SetListType")); - - switch ( aType ) - { - case EMSCmdNewImageList: - { - iRule->SetMediaType( ECmImage ); - iMediaType = ECmImage; - break; - } - case EMSCmdNewVideoList: - { - iRule->SetMediaType( ECmVideo ); - iMediaType = ECmVideo; - break; - } - case EMSCmdNewMusicList: - { - iRule->SetMediaType( ECmAudio ); - iMediaType = ECmAudio; - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SetListType \ - type not set")); - break; - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::GetRuleValuesL -// Loads rule values for the list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::GetRuleValuesL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::GetRuleValuesL")); - - HBufC* listName = CnvUtfConverter::ConvertToUnicodeFromUtf8L( - iRule->Name() ); - CleanupStack::PushL( listName ); - iListName.Copy( *listName ); - CleanupStack::PopAndDestroy( listName ); - - // get limit type - iLimitType = iRule->LimitType(); - - // get amount - iAmount = iRule->Amount(); - - if ( iRule->Status() == ECmToBeShrinked ) - { - iShrinkImages = EMSShrinkScreenSize; - - } - else - { - iShrinkImages = EMSShrinkingOff; - } - - // get start with - iStartWith = iRule->Method(); - - InitializeValues(); - - // Read additional rules - TInt ruleCount = iRule->RuleCount(); - // Cycle trough all rules - for ( TInt ruleIndex = 0; ruleIndex < ruleCount; ruleIndex++ ) - { - TCmMetadataField metaData; - TCmOperatorType operatorType; - TInt paramCount(0); - - iRule->RuleL( ruleIndex, &metaData, &operatorType, ¶mCount ); - - - // Cycle trough all params - for ( TInt paramIndex = 0; paramIndex < paramCount; paramIndex++ ) - { - TPtrC8 strParam; - iRule->RuleParamL( ruleIndex, paramIndex, &strParam ); - - // read index value - TInt ruleParam( 0 ); - iRule->RuleParamL( ruleIndex, paramIndex, ruleParam ); - - switch ( metaData ) - { - case ECmArtist: - { - iArtistArray.AppendL( ruleParam ); - break; - } - case ECmAlbum: - { - iAlbumArray.AppendL( ruleParam ); - break; - } - case ECmGenre: - { - iGenreArray.AppendL( ruleParam ); - break; - } - case ECmTitle: - { - if ( iMediaType == ECmAudio ) - { - iTrackArray.AppendL( ruleParam ); - } - else // video - { - iVideoTitleArray.AppendL( ruleParam ); - } - - break; - } - case ECmDuration: - { - TLex8 lex( strParam ); - if ( operatorType == ECmGreater ) - { - lex.Val( iMinTrackLength ); - } - else if ( operatorType == ECmSmaller ) - { - lex.Val( iMaxTrackLength ); - } - break; - } - case ECmDate: - { - TInt64 value; - TLex8 lex(strParam); - lex.Val(value); - - if ( operatorType == ECmGreater ) - { - iDateFrom = TTime( value ); - } - if ( operatorType == ECmSmaller ) - { - iDateUntil = TTime( value ); - } - break; - } - case ECmFileSize: - { - TLex8 lex( strParam ); - if ( operatorType == ECmGreater ) - { - lex.Val( iMinFileSize ); - iMinFileSize /= KMega; - // not needed in audio case - iMinFileSizeSet = EMSSetSize; - } - else if ( operatorType == ECmSmaller ) - { - lex.Val( iMaxFileSize ); - iMaxFileSize /= KMega; - // not needed in audio case - iMaxFileSizeSet = EMSSetSize; - } - break; - } - case ECmBitrate: - { - break; - } - case ECmResolution: - { - break; - } - case ECmFreeText: - { - HBufC* listName = - CnvUtfConverter::ConvertToUnicodeFromUtf8L( - strParam ); - CleanupStack::PushL( listName ); - iFreeText.Copy( *listName ); - CleanupStack::PopAndDestroy( listName ); - } - default: - { - break; - } - } - } - } - - if ( iMediaType == ECmAudio ) - { - SetAudioFileSizeSelection(); - SetAudioFileDurationSelection(); - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::InitializeValues -// Initializes values of rules -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::InitializeValues() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::InitializeValues")); - - // set date - iDateFrom.Set(KDefaultFromDate); - // set date - iDateUntil.HomeTime(); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::DeleteRule -// Deletes rule from the list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::DeleteRule( TCmMetadataField aField ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::DeleteRule")); - - iRule->DeleteRule( aField ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::DeleteRule -// Deletes rule from the list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::DeleteRule( TCmMetadataField aField, - TCmOperatorType aType ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::DeleteRule")); - - iRule->DeleteRule( aField, aType ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::AddAdditionalRuleL -// Adds additional rules to the list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::AddAdditionalRuleL( RArray& aArray, - TCmMetadataField aField, - TCmOperatorType aOperator ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::AddAdditionalRuleL")); - - TInt ruleIndex = iRule->AddRuleL( aField, aOperator ); - for ( TInt idx = 0; idx < aArray.Count(); idx++) - { - iRule->AddRuleParamL( ruleIndex, aArray[ idx ] ); - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::AppendItemToListL -// Appends item to the list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::AppendItemToListL( RArray* aArray, - TInt aParam ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::AppendItemToListL")); - - aArray->AppendL( aParam ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::AddAdditionalRuleL -// sets numeric type rule -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::AddAdditionalRuleL( TCmMetadataField aMetadataField, - TCmOperatorType aOperator, - TInt aValue ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::AddAdditionalRuleL")); - - TInt ruleIndex = iRule->AddRuleL( aMetadataField, aOperator ); - HBufC8* str = HBufC8::NewLC( 10 ); - str->Des().Format(_L8("%d"), aValue ); - iRule->AddRuleParamL( ruleIndex, *str ); - CleanupStack::PopAndDestroy( str ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SaveTrackFileSizeL -// Saves track file size -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SaveTrackFileSizeL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SaveTrackFileSizeL")); - - switch ( iFileSizeEnum ) - { - case EMSFileSizeLess_1_mb: - { - AddAdditionalRuleL( ECmFileSize, ECmSmaller, KMSSize_1_MB ); - break; - } - case EMSFileSize_15_mb: - { - AddAdditionalRuleL( ECmFileSize, ECmGreater, KMSSize_1_MB ); - AddAdditionalRuleL( ECmFileSize, ECmSmaller, KMSSize_5_MB ); - break; - } - case EMSFileSize_510_mb: - { - AddAdditionalRuleL( ECmFileSize, ECmGreater, KMSSize_5_MB ); - AddAdditionalRuleL( ECmFileSize, ECmSmaller, KMSSize_10_MB ); - break; - } - case EMSFileSize_1050_mb: - { - AddAdditionalRuleL( ECmFileSize, ECmGreater, KMSSize_10_MB ); - AddAdditionalRuleL( ECmFileSize, ECmSmaller, KMSSize_50_MB ); - break; - } - case EMSFileSizeMore_10: - { - AddAdditionalRuleL( ECmFileSize, ECmGreater, KMSSize_50_MB ); - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - SetAudioFileSizeSelection enum not found")); - break; - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SetAudioFileSizeSelection -// set selection for audio file size -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SetAudioFileSizeSelection() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - SetAudioFileSizeSelection")); - - if ( ( KMega * iMinFileSize ) == KMSSize_0_MB && - ( KMega * iMaxFileSize ) == KMSSize_1_MB ) - { - iFileSizeEnum = EMSFileSizeLess_1_mb; - } - else if ( ( KMega * iMinFileSize ) == KMSSize_1_MB && - ( KMega * iMaxFileSize ) == KMSSize_5_MB ) - { - iFileSizeEnum = EMSFileSize_15_mb; - } - else if ( ( KMega * iMinFileSize ) == KMSSize_5_MB && - ( KMega * iMaxFileSize ) == KMSSize_10_MB ) - { - iFileSizeEnum = EMSFileSize_510_mb; - } - else if ( ( KMega * iMinFileSize ) == KMSSize_10_MB && - ( KMega * iMaxFileSize ) == KMSSize_50_MB ) - { - iFileSizeEnum = EMSFileSize_1050_mb; - } - else if ( ( KMega * iMinFileSize ) == KMSSize_50_MB && - ( KMega * iMaxFileSize ) == KMSSize_0_MB ) - { - iFileSizeEnum = EMSFileSizeMore_10; - } - else - { - iFileSizeEnum = EMSFileSizeAny; - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SaveTrackDurationL -// Saves track duration -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SaveTrackDurationL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SaveTrackDurationL")); - - switch ( iTrackLengthEnum) - { - case EMSTrackLenLess_1: - { - AddAdditionalRuleL( ECmDuration, ECmSmaller, - KMSTrackLength_1_min ); - break; - } - case EMSTrackLen_16: - { - AddAdditionalRuleL( ECmDuration, ECmGreater, - KMSTrackLength_1_min ); - AddAdditionalRuleL( ECmDuration, ECmSmaller, - KMSTrackLength_6_min ); - break; - } - case EMSTrackLen_68: - { - AddAdditionalRuleL( ECmDuration, ECmGreater, - KMSTrackLength_6_min ); - AddAdditionalRuleL( ECmDuration, ECmSmaller, - KMSTrackLength_8_min ); - break; - } - case EMSTrackLen_830: - { - AddAdditionalRuleL( ECmDuration, ECmGreater, - KMSTrackLength_8_min ); - AddAdditionalRuleL( ECmDuration, ECmSmaller, - KMSTrackLength_30_min ); - break; - } - case EMSTrackLenMore_4: - { - AddAdditionalRuleL( ECmDuration, ECmGreater, - KMSTrackLength_30_min ); - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SaveTrackDurationL\ - enum not found")); - break; - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SetAudioFileDurationSelection -// set selection for audio file duration -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SetAudioFileDurationSelection() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - SetAudioFileDurationSelection")); - - if ( iMinTrackLength == KMSTrackLength_0_min && - iMaxTrackLength == KMSTrackLength_1_min ) - { - iTrackLengthEnum = EMSTrackLenLess_1; - } - else if ( iMinTrackLength == KMSTrackLength_1_min && - iMaxTrackLength == KMSTrackLength_6_min ) - { - iTrackLengthEnum = EMSTrackLen_16; - } - else if ( iMinTrackLength == KMSTrackLength_6_min && - iMaxTrackLength == KMSTrackLength_8_min ) - { - iTrackLengthEnum = EMSTrackLen_68; - } - else if ( iMinTrackLength == KMSTrackLength_8_min && - iMaxTrackLength == KMSTrackLength_30_min ) - { - iTrackLengthEnum = EMSTrackLen_830; - } - else if ( iMinTrackLength == KMSTrackLength_30_min && - iMaxTrackLength == KMSTrackLength_0_min ) - { - iTrackLengthEnum = EMSTrackLenMore_4; - } - else - { - iTrackLengthEnum = EMSTrackLenAny; - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::DisplayModifiedAdditionalRules -// Displays additional rule if user has set value on it. -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::DisplayModifiedAdditionalRules() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - DisplayModifiedAdditionalRules")); - - CAknSettingItemArray* itemArray = SettingItemArray(); - - // loop trough rules - for ( TInt index = 0; index < itemArray->Count(); index++ ) - { - CAknSettingItem* item= itemArray->At( index ); - if ( item->IsHidden() ) - { - switch ( item->Identifier() ) - { - case EMSFreeText: - { - item->SetSettingPageFlags( - CAknTextSettingPage::EZeroLengthAllowed ); - if ( iFreeText.Size() ) - { - item->SetHidden( EFalse ); - } - break; - } - case EMSServers: - { - if ( iRule->MediaServerCount() ) - { - item->SetHidden( EFalse ); - } - break; - } - case EMSDateFrom: - { - if ( iDateFrom != TTime( KDefaultFromDate ) ) - { - item->SetHidden( EFalse ); - } - break; - } - case EMSDateUntil: - { - TTime currentDate; - currentDate.HomeTime(); - - if ( iDateUntil.DateTime().Day() != currentDate.DateTime().Day() || - iDateUntil.DateTime().Month() != currentDate.DateTime().Month() || - iDateUntil.DateTime().Year() != currentDate.DateTime().Year() ) - { - item->SetHidden( EFalse ); - } - break; - } - case EMSTrackLength: - { - if ( iTrackLengthEnum ) - { - item->SetHidden( EFalse ); - } - break; - } - case EMSFileSize: - { - if ( iFileSizeEnum ) - { - item->SetHidden( EFalse ); - } - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - SetAudioFileSizeSelection item not found")); - break; - } - } - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SearchItemById -// Searches item from the itemarray by given ID -// -------------------------------------------------------------------------- -// -CAknSettingItem* CMSFillRuleEditList::SearchItemById( TMSFillEditItems aId ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SearchItemById")); - - CAknSettingItem* item = NULL; - CAknSettingItemArray* itemArray = SettingItemArray(); - - for ( TInt index = 0; index < itemArray->Count(); index++ ) - { - if ( itemArray->At( index )->Identifier() == aId ) - { - item = itemArray->At( index ); - index = itemArray->Count(); // break out from the loop - } - } - return item; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SetShrinkingStatus -// Sets shrinking status to fill list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SetShrinkingStatus() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::SetShrinkingStatus")); - - switch ( iShrinkImages ) - { - case EMSShrinkScreenSize: - { - iRule->SetStatus( ECmToBeShrinked ); - break; - } - case EMSShrinkingOff: - { - iRule->SetStatus( ECmToBeFilled ); - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - SetShrinkingStatus shrink status not found")); - break; - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::ReadyL() -// engine observer callback -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::ReadyL( TCmService aService, TInt /*aError*/ ) - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::ReadyL")); - - switch ( aService ) - { - case ECmServicePreProcessingFilllist: - { - // we'll lost iRule after update... - iAppUi->FillRuleController()->UpdateArrayL(); - // ...so get it again - iRule = (*iAppUi->FillRuleController()-> - FillListArray())[iSelectedList]->List(); - // show file info - CreateAndSetNaviPaneTextL(); - - if ( iState == EMSFetchMetadata ) - { - if( iRule->MediaType() == ECmVideo ) - { - // reset track array - iTrackArray.Reset(); - // append the select video title in track array - TInt count = iVideoTitleArray.Count(); - if( count > 0 ) - { - for( TInt i=0; iGetFilteredMetadataL(); - - // Show 'reading data' text on navi pane - HBufC* naviText = StringLoader::LoadLC( - R_MS_WAIT_GETTING_DATA_TEXT ); - iView->SetNavigationPaneTextL( *naviText ); - CleanupStack::PopAndDestroy( naviText ); - - } - iState = EMSIdle; - break; - } - case ECmServiceFill: - { - UpdateSettingItemsL(); - if ( iNewList ) - { - SaveListValuesL(); - iAppUi->FillRuleController()->SaveRulesL(); - PreprocessListL(); - } - else - { - // show item counts - CreateAndSetNaviPaneTextL(); - } - - break; - } - default: - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::ReadyL \ - service not found")); - break; - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::UpdateSettingItemsL() -// updates items in multiselection settings -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::UpdateSettingItemsL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::UpdateSettingItemsL")); - - // update setting item text - CAknSettingItem* item = NULL; - if ( iMediaType == ECmVideo ) - { - item = SearchItemById( EMSTitleName ); - } - else - { - item = SearchItemById( EMSTrack ); - } - - CMSRuleMultiselectionSetting* settingItem = - static_cast (item); - if ( item ) - { - settingItem->CreateItemListL(); - //DrawDeferred(); - } - - if ( iMediaType == ECmAudio ) - { - // update setting item text - item = SearchItemById( EMSArtist ); - settingItem = - static_cast (item); - if ( item ) - { - settingItem->CreateItemListL(); - //DrawDeferred(); - } - - // update setting item text - item = SearchItemById( EMSGenre ); - settingItem = static_cast (item); - if ( item ) - { - settingItem->CreateItemListL(); - //DrawDeferred(); - } - // update setting item text - item = SearchItemById( EMSAlbum ); - settingItem = static_cast (item); - if ( item ) - { - settingItem->CreateItemListL(); - } - } - DrawDeferred(); - } - -// Sets navi pane text -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::CreateAndSetNaviPaneTextL() -// Sets navi pane text -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::CreateAndSetNaviPaneTextL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - CreateAndSetNaviPaneTextL")); - - RPointerArray* fillListArray = - iAppUi->FillRuleController()->FillListArray(); - - // Set navi pane text - // magic: only two numbers - CArrayFix* infoArray = new ( ELeave ) CArrayFixFlat(2); - CleanupStack::PushL( infoArray ); - - TReal size( 0 ); - Math::Round( size, - TReal((*fillListArray)[iSelectedList]->ListSize()) / KMega, - 0 ); - TUint32 count = (*fillListArray)[iSelectedList]->ItemCount(); - - HBufC* naviText = NULL; - - switch ( count ) - { - case 0: - { - naviText = StringLoader::LoadLC( - R_MS_RULE_NAVI_0_ITEMS, size ); - break; - } - case 1: - { - naviText = StringLoader::LoadLC( - R_MS_RULE_NAVI_1_ITEM, size ); - break; - } - default: - { - infoArray->AppendL( size ); - infoArray->AppendL( count ); - naviText = StringLoader::LoadLC( - R_MS_RULE_NAVI_MANY_ITEMS, *infoArray ); - break; - } - } - - // do number conversion - TPtr ptr = naviText->Des(); - AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr ); - - iView->SetNavigationPaneTextL( *naviText ); - CleanupStack::PopAndDestroy( naviText ); - CleanupStack::PopAndDestroy( infoArray ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::RemoveCurrentRule -// Hides current rule -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::RemoveCurrentRuleL() - { - LOG( _L( "[MediaServant]\t CMSFillRuleEditList::RemoveCurrentRuleL" ) ); - - CAknSettingItemArray* itemArray = SettingItemArray(); - - TInt currentItem = ListBox()->CurrentItemIndex(); - TInt realIndex = itemArray->ItemIndexFromVisibleIndex(currentItem); - - CAknSettingItem* item= (*itemArray)[realIndex]; - - // free text must be deleted here because user can't enter empty text - switch ( item->Identifier() ) - { - case EMSFreeText: - { - DeleteRule( ECmFreeText ); - iFreeText.Zero(); - item->LoadL(); - break; - } - case EMSServers: - { - DeleteAllServersFromRuleL(); - break; - } - case EMSDateFrom: - { - DeleteRule( ECmDate ); - iDateFrom.Set( KDefaultFromDate ); - break; - } - case EMSDateUntil: - { - DeleteRule( ECmDate ); - iDateUntil.HomeTime(); - break; - } - case EMSTrackLength: - { - DeleteRule( ECmDuration ); - break; - } - case EMSFileSize: - { - DeleteRule( ECmFileSize ); - break; - } - default: - { - LOG( _L( "[MediaServant]\t CMSFillRuleEditList::\ - RemoveCurrentRuleL no such item" ) ); - break; - } - } - - // Menu command is shown only hidden items - item->SetHidden( ETrue ); - // visibility changed - HandleChangeInItemArrayOrVisibilityL(); - // cancel ongoing operation - iView->CancelAsyncOperation( iAppUi ); - // set idle state - iState = EMSIdle; - // update list info - SaveAndPreprocesslistL( item ); - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::IsCurrentRuleAdditional -// Tests if current rule is additional -// -------------------------------------------------------------------------- -// -TBool CMSFillRuleEditList::IsCurrentRuleAdditional() - { - LOG( _L( "[MediaServant]\t CMSFillRuleEditList::\ - IsCurrentRuleAdditional" ) ); - - TBool isAdditional = EFalse; - - TInt currentItem = ListBox()->CurrentItemIndex(); - - CAknSettingItemArray* itemArray = SettingItemArray(); - TInt realIndex = itemArray->ItemIndexFromVisibleIndex(currentItem); - CAknSettingItem* item= (*itemArray)[realIndex]; - - TInt id = item->Identifier(); - - if ( id == EMSServers || - id == EMSFreeText || - id == EMSTrackLength || - id == EMSFileSize ) - { - isAdditional = ETrue; - } - // From and Until are additional rules in Video list - else if ( iMediaType == ECmVideo && - ( id == EMSDateFrom || id == EMSDateUntil ) ) - { - isAdditional = ETrue; - } - - return isAdditional; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::ListMediaType -// Returns media type of the list -// -------------------------------------------------------------------------- -// -TCmMediaType CMSFillRuleEditList::ListMediaType() - { - return iMediaType; - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::SizeChanged() -// Called by framework when the view size is changed. -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::SizeChanged() - { - ListBox()->SetRect( Rect() ); // Set rectangle of listbox. - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::HandleResourceChange -// Handles layout change -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::HandleResourceChange( TInt aType ) - { - if ( aType == KEikDynamicLayoutVariantSwitch ) - { - SetRect( iView->ClientRect() ); - } - - CCoeControl::HandleResourceChange( aType ); - } - -// -------------------------------------------------------------------------- -// CMSRuleServersSetting::CreateServerSettingListL -// Creates selection item list -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::CreateServerSettingListL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - CreateServerSettingListL")); - - if ( iServerArray ) - { - iServerArray->ResetAndDestroy(); - delete iServerArray; - iServerArray = NULL; - } - - iServerArray = - new ( ELeave ) CSelectionItemList( 8 ); - - TBuf8 itemText; - TInt selectedItemCount( 0 ); - - TInt serverCount(0); - if ( iServers ) - { - serverCount = iServers->Count(); - } - - // Cycle trough all servers - for ( TInt idx = 0; idx < serverCount; idx++ ) - { - // get server - CCmMediaServerFull* server = (*iServers)[idx]; - - // Add all servers to the list - HBufC* devName = - CnvUtfConverter::ConvertToUnicodeFromUtf8L( - server->MediaServerName() ); - CleanupStack::PushL( devName ); - CSelectableItem* item = new ( ELeave ) CSelectableItem( - *devName, EFalse); - - CleanupStack::PushL( item ); - // item must be constructed - item->ConstructL(); - - // count of servers set to rule - TInt ruleServerCount = iRule->MediaServerCount(); - - // Cycle trough all servers - for (TInt index = 0; index < ruleServerCount; index++ ) - { - TInt serverId( 0 ); - iRule->MediaServerL( index, serverId ); - - if ( serverId == server->DbId() ) // compare IDs - { - // found - break this loop - index = ruleServerCount; - // found - mark selected - item->SetSelectionStatus( ETrue ); - selectedItemCount++; - } - } - // append item to list - iServerArray->AppendL(item); - CleanupStack::Pop( item ); - CleanupStack::PopAndDestroy( devName ); - } - - // Create and append default item and put it first - HBufC* itemName = StringLoader::LoadLC( R_MS_VALUE_ANY_SOURCE_DEVICE ); - CSelectableItem* item = NULL; - if ( selectedItemCount ) - { - item = new ( ELeave ) CSelectableItem( *itemName, EFalse ); - } - else - { - item = new ( ELeave ) CSelectableItem( *itemName, ETrue ); - } - - CleanupStack::PushL( item ); - item->ConstructL(); - iServerArray->InsertL(0, item); - CleanupStack::Pop( item ); - CleanupStack::PopAndDestroy( itemName ); - - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::HandleServerSelectionL -// Adds selected servers from the list to the rule -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::HandleServerSelectionL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - HandleServerSelectionL")); - - DeleteAllServersFromRuleL(); - - // Check if first item ("Any") selected - if ( (*iServerArray)[0]->SelectionStatus() == EFalse ) - { - for ( TInt index = 1; index < iServerArray->Count(); index++ ) - { - CSelectableItem* item = (*iServerArray)[index]; - TBool selected = item->SelectionStatus(); - - CCmMediaServerFull* server = (*iServers)[index-1]; - - // add server - if ( item->SelectionStatus() ) - { - iRule->AddMediaServerL( server->DbId() ); - } - } - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::DeleteAllServersFromRuleL -// Deletes all servers from rule -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::DeleteAllServersFromRuleL() - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::\ - DeleteAllServersFromRuleL")); - - // count of servers set to rule - TInt ruleServerCount = iRule->MediaServerCount(); - - for ( TInt index = ruleServerCount-1; index >= 0; index-- ) - { - TInt serverId( 0 ); - iRule->MediaServerL( index , serverId ); - iRule->DeleteMediaServer( serverId ); - } - } - -// -------------------------------------------------------------------------- -// CMSFillRuleEditList::GetServersAndCheckActivityL -// Gets mediaservers and removes not active servers -// -------------------------------------------------------------------------- -// -void CMSFillRuleEditList::GetServersAndCheckActivityL() - { - iServers = iAppUi->MSEngine()->GetMediaServersL(); - - for ( TInt i = 0; i < iServers->Count() ; i++ ) - { - CCmMediaServerFull* server = (*iServers)[i]; - // remove server if it is not tagged as fill server - if ( !server->FillUsage() ) - { - delete server; - iServers->Remove(i); - i--; - } - } - iServers->Compress(); - } - -// --------------------------------------------------------------------------- -// CMSFillRuleEditList::GetHelpContext -// --------------------------------------------------------------------------- -// -void CMSFillRuleEditList::GetHelpContext( TCoeHelpContext& aContext ) const - { - LOG(_L("[MediaServant]\t CMSFillRuleEditList::GetHelpContext")); - - aContext.iMajor = TUid::Uid(KMediaServantUID3); - aContext.iContext = KMSERV_HLP_EDIT_RULES; - } - -// End of File -