homesync/contentmanager/mediaservant/src/msfillbrowsecontainer.cpp
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/mediaservant/src/msfillbrowsecontainer.cpp	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,314 @@
+/*
+* 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:  CMSFillBrowseContainer class implementation
+*
+*/
+
+
+#include <mediaservant.rsg>
+#include <StringLoader.h>
+#include <utf.h>
+#include <e32math.h>
+
+#include "mserv.hlp.hrh"
+#include "cmfillrule.h"
+#include "msfillbrowsecontainer.h"
+#include "msfillbrowseview.h"
+#include "msappui.h"
+#include "msengine.h"
+#include "mediaservantuid.h"
+
+#include "msdebug.h"
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::CMSFillBrowseContainer()
+// --------------------------------------------------------------------------
+//
+CMSFillBrowseContainer::CMSFillBrowseContainer(
+                                    CMSAppUi& aAppUi,
+                                    CMSFillBrowseView& aView )
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
+    CMSFillBrowseContainer"));
+
+    iAppUi = &aAppUi;
+    iView = &aView;
+    iIconCount = 0; //default icon   
+
+    iAppUi->MSEngine()->SetObserver( this );
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::~CMSFillBrowseContainer()
+// --------------------------------------------------------------------------
+//
+CMSFillBrowseContainer::~CMSFillBrowseContainer()
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
+    ~CMSFillBrowseContainer"));
+
+    iStatusArray.Close();
+
+    delete iListBox; // Deletes listbox object.
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::RandomizeListL()
+// --------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::RandomizeListL()
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::RandomizeListL"));
+
+    iAppUi->MSEngine()->PreProcessFillListL( iRule->Name() );
+    HBufC* naviText = StringLoader::LoadLC( R_MS_WAIT_RANDOMIZE );
+    iView->SetNavigationPaneTextL( *naviText );
+    CleanupStack::PopAndDestroy( naviText );
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::HasListRandomRule
+// --------------------------------------------------------------------------
+//
+TBool CMSFillBrowseContainer::HasListRandomRule()
+    {
+    TBool retval = EFalse;
+    if ( iRule->Method() == ECMRandom )
+        {
+        retval = ETrue;
+        }
+    return retval;
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::ReadyL()
+// engine observer callback
+// --------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::ReadyL( TCmService aService, TInt /*aError*/ )
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::ReadyL"));
+
+    if ( aService == ECmServicePreProcessingFilllist )
+        {
+        iView->ClearCurrentNaviPaneText();
+        // read rules again
+        iAppUi->FillRuleController()->UpdateArrayL();
+
+        GetBrowseDataL();
+        // Add data to listbox
+        UpdateListBoxDataL();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::CheckIfStatusChanged()
+// Checks if status values are changed
+// --------------------------------------------------------------------------
+//
+TBool CMSFillBrowseContainer::CheckIfStatusChanged()
+    {
+    TBool status( EFalse );
+
+    TInt itemCount = iItemArray->Count();
+
+    for ( TInt i = 0; i < itemCount; i++ )
+        {
+        TCmListItemStatus status1 = (*iItemArray)[i]->Status();
+        TCmListItemStatus status2 = iStatusArray[i];
+        if ( (*iItemArray)[i]->Status() != iStatusArray[i] )
+            {
+            status = ETrue;
+            i = itemCount; // break loop
+            }
+        }
+
+    return status;
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::SetFileStatusesL()
+// Sets file statuses
+// --------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::SetFileStatusesL()
+    {
+    if ( CheckIfStatusChanged() )
+        {
+        iAppUi->MSEngine()->SetFillFileStatusesL( iItemArray );
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::GetBrowseDataL()
+// Gets file information from engine
+// --------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::GetBrowseDataL()
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::GetBrowseDataL"));
+
+    CMSParameterAgent* parameterAgent = iAppUi->ParameterAgent();
+
+    TInt selected = iAppUi->ParameterAgent()->FillViewFocusIndex();
+
+    RPointerArray<CMSFillList>* fillListArray =
+                        iAppUi->FillRuleController()->FillListArray();
+
+    CMSFillList* fillList = (*fillListArray)[selected];
+    iRule = fillList->List();
+    // get media type
+    iMediaType = iRule->MediaType();
+    // get items covered by rule
+    if( iItemArray )
+        {
+        iItemArray->ResetAndDestroy();
+        iItemArray->Close();
+        delete iItemArray;
+        iItemArray = NULL;
+        }
+    iItemArray = iAppUi->MSEngine()->GetFillListItemsL( iRule->Name() );
+    // keep original statuses safe
+    for ( TInt i = 0; i < iItemArray->Count(); i++ )
+        {
+        iStatusArray.AppendL( (*iItemArray)[i]->Status() );
+        }
+
+    // Set title pane text
+    HBufC* ruleName = CnvUtfConverter::ConvertToUnicodeFromUtf8L(
+                                                    iRule->Name() );
+    CleanupStack::PushL( ruleName );
+    iView->SetTitlePaneTextL( *ruleName );
+    CleanupStack::PopAndDestroy( ruleName );
+
+    // set navi pane text
+    CreateAndSetNaviPaneTextL( fillList->ItemCount(), fillList->ListSize() );
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::CreateAndSetNaviPaneTextL()
+// --------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::CreateAndSetNaviPaneTextL( TUint32 aCount,
+                                                        TUint32 aSize )
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
+    CreateAndSetNaviPaneTextL"));
+
+    // Set navi pane text
+    CArrayFix<TInt>* infoArray =
+        new ( ELeave ) CArrayFixFlat<TInt>(2); // only 2 numbers needed
+    CleanupStack::PushL( infoArray );
+
+    HBufC* naviText = NULL;
+
+    TReal size( 0 );
+    Math::Round( size, TReal( aSize ) / KMega, 0 );
+
+
+    switch ( aCount )
+        {
+        case 0: // 0 items
+            {
+            naviText = StringLoader::LoadLC(
+                        R_MS_FILL_LIST_BROWSE_NAVI_0_ITEMS );
+            break;
+            }
+        case 1: // 1 item
+            {
+            naviText = StringLoader::LoadLC(
+                        R_MS_FILL_LIST_BROWSE_NAVI_1_ITEM, size );
+            break;
+            }
+        default: // many items
+            {
+            infoArray->AppendL( size );
+            infoArray->AppendL( aCount );
+            naviText = StringLoader::LoadLC(
+                        R_MS_FILL_LIST_BROWSE_NAVI_ITEMS, *infoArray );
+            // do number conversion
+            TPtr ptr = naviText->Des();
+            AknTextUtils::DisplayTextLanguageSpecificNumberConversion( ptr );
+            break;
+            }
+        }
+
+    iView->SetNavigationPaneTextL( *naviText );
+    CleanupStack::PopAndDestroy( naviText );
+    CleanupStack::PopAndDestroy( infoArray );
+    }
+
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::SetStatusOfFiles()
+// --------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::SetStatusOfFiles( TCmListItemStatus aStatus )
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::SetStatusOfFiles"));
+
+    const CListBoxView::CSelectionIndexArray* selections =
+                                    ListBox()->SelectionIndexes();
+    TInt count = selections->Count();
+
+    // mark used
+    if ( count )
+        {
+        for ( TInt index = 0; index < count; index++)
+            {
+            SetFileStatus( (*selections)[ index ], aStatus );
+
+            }
+        }
+    // set only highlighted item status
+    else
+        {
+        SetFileStatus( ListBox()->CurrentItemIndex(), aStatus );
+        }
+
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillBrowseContainer::HandleResourceChange
+// Handles layout change
+// --------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::HandleResourceChange( TInt aType )
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::\
+    HandleResourceChange"));
+
+
+    if ( aType == KEikDynamicLayoutVariantSwitch )
+        {
+        SetRect( iView->ClientRect() );
+        }
+
+    CCoeControl::HandleResourceChange( aType );
+    }
+
+// ---------------------------------------------------------------------------
+// CMSFillBrowseContainer::GetHelpContext
+// ---------------------------------------------------------------------------
+//
+void CMSFillBrowseContainer::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    LOG(_L("[MediaServant]\t CMSFillBrowseContainer::GetHelpContext"));
+
+    aContext.iMajor = TUid::Uid(KMediaServantUID3);
+    aContext.iContext = KMSERV_HLP_FILL_BROWSE;
+    }
+
+// End of File
+