homesync/contentmanager/mediaservant/src/msfillview.cpp
changeset 0 7f85d04be362
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/homesync/contentmanager/mediaservant/src/msfillview.cpp	Thu Dec 17 08:52:00 2009 +0200
@@ -0,0 +1,603 @@
+/*
+* 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:  CMSFillView class implementation
+*
+*/
+
+
+#include <mediaservant.rsg>
+#include <StringLoader.h>
+#include <aknlistquerydialog.h>
+#include <hlplch.h>
+#include <utf.h>
+
+#include "cmfillrule.h"
+#include "msfillview.h"
+#include "msengine.h"
+#include "msfillcontainer.h"
+#include "msappui.h"
+#include "msconstants.h"
+#include "mediaservant.hrh"
+#include "msparameteragent.h"
+#include "msdebug.h"
+
+
+// CONSTANTS
+_LIT( KWildCard, "*" );
+_LIT( KSpace, " ");
+
+const TInt KImageListTemplate = 1;
+const TInt KVideoListTemplate = 2;
+const TInt KMusicListTemplate = 3;
+
+
+// --------------------------------------------------------------------------
+// CMSFillView::CMSFillView()
+// --------------------------------------------------------------------------
+//
+CMSFillView::CMSFillView( CMSAppUi& aAppUi )
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::CMSFillView"));
+
+    iAppUi = &aAppUi;
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::ConstructL()
+// --------------------------------------------------------------------------
+//
+void CMSFillView::ConstructL()
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::ConstructL"));
+
+    BaseConstructL( R_MS_FILL_VIEW );
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::~CMSFillView()
+// --------------------------------------------------------------------------
+//
+CMSFillView::~CMSFillView()
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::~CMSFillView"));
+    DoDeactivate();
+    }
+
+// --------------------------------------------------------------------------
+// TUid CMSFillView::Id()
+// --------------------------------------------------------------------------
+//
+TUid CMSFillView::Id() const
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::Id"));
+
+    return KMSFillViewId;
+    }
+
+
+// --------------------------------------------------------------------------
+// CMSFillView::HandleCommandL(TInt aCommand)
+// --------------------------------------------------------------------------
+//
+void CMSFillView::HandleCommandL(TInt aCommand)
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::HandleCommandL"));
+
+    CEikButtonGroupContainer* cba = Cba();
+
+    switch (aCommand)
+        {
+        case EAknSoftkeyBack:
+            {
+            CancelAsyncOperation( iAppUi );
+            iNextView = KMSMainViewId;
+
+            CheckAndHandleChangesL();
+
+            break;
+            }
+
+        case EAknSoftkeyDone:
+            {
+            CancelAsyncOperation(  iAppUi );
+            iContainer->SetReorderStateL( EMSFillNormal );
+            cba->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+            cba->DrawNow();
+
+            // Set title pane text
+            SetTitlePaneTextL( R_MS_FILL_VIEW_TITLE );
+            break;
+            }
+
+        case EMSCmdActivate: // fall through
+        case EMSCmdDeActivate:
+            {
+            iContainer->ChangeListActivityL();
+            SetListUnselected();
+            break;
+            }
+        // Edit fill rule
+        case EMSCmdEditRule:
+            {
+            CancelAsyncOperation(  iAppUi );
+            TMSTemplate ruleTemplate;
+            ruleTemplate.templateType = aCommand;
+            ruleTemplate.selectedTemplate = EMSNoTemplate;
+            iAppUi->ParameterAgent()->SetRuleTemplate( ruleTemplate );
+
+            iNextView = KMSFillEditViewId;
+            CheckAndHandleChangesL();
+
+            break;
+            }
+
+        case EMSCmdBrowse:
+            {
+            CancelAsyncOperation(  iAppUi );
+            iNextView = KMSFillBrowseViewId;
+            CheckAndHandleChangesL();
+
+            break;
+            }
+
+        case EMSCmdNewImageList: // fall through
+        case EMSCmdNewVideoList: // fall through
+        case EMSCmdNewMusicList:
+            {
+            CancelAsyncOperation(  iAppUi );
+            ShowTemplateQueryL( aCommand );
+            iNextView = KMSFillEditViewId;
+            CheckAndHandleChangesL();
+            break;
+            }
+
+        // Reorder fill rule
+        case EMSCmdReorder:
+            {
+            iContainer->SetReorderStateL( EMSFillReorderActive );
+            cba->SetCommandSetL( R_SOFTKEYS_DROP_EMPTY );
+            cba->DrawNow();
+            // Set title pane text
+            SetTitlePaneTextL( R_MS_FILL_VIEW_TITLE_REORDER_MODE );
+            break;
+            }
+
+        // Drop rule to new location
+        case EMSCmdDrop:
+            {
+            iContainer->SetReorderStateL( EMSFillGrabActive );
+            cba->SetCommandSetL( R_SOFTKEYS_GRAB_DONE );
+            cba->DrawNow();
+            break;
+            }
+        // Reorder mode active - grab item
+        case EMSCmdGrab:
+            {
+            iContainer->SetReorderStateL( EMSFillReorderActive );
+            cba->SetCommandSetL( R_SOFTKEYS_DROP_EMPTY );
+            cba->DrawNow();
+            break;
+            }
+        // Delete fill rule
+        case EMSCmdDelete:
+            {
+            iContainer->DeleteRuleL();
+            break;
+            }
+        case EAknCmdHelp :
+            {
+            TRAP_IGNORE( HlpLauncher::LaunchHelpApplicationL(
+                        iEikonEnv->WsSession(),
+            iEikonEnv->EikAppUi()->AppHelpContextL() ));
+            break;
+            }
+        default:
+            {
+            CancelAsyncOperation(  iAppUi );
+            AppUi()->HandleCommandL(aCommand);
+            break;
+            }
+        }
+    }
+
+
+// --------------------------------------------------------------------------
+// CMSFillView::DoActivateL()
+// --------------------------------------------------------------------------
+//
+void CMSFillView::DoActivateL(
+   const TVwsViewId& /*aPrevViewId*/,TUid /*aCustomMessageId*/,
+   const TDesC8& /*aCustomMessage*/)
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::DoActivateL"));
+
+    // Set engine observer
+    iAppUi->MSEngine()->SetObserver( this );
+
+    // Set title pane text
+    SetTitlePaneTextL( R_MS_FILL_VIEW_TITLE );
+
+    if ( !iContainer )
+        {
+        iContainer = new (ELeave) CMSFillContainer( *iAppUi, *this );
+        iContainer->ConstructL( ClientRect() );
+        iContainer->SetMopParent( this );
+        AppUi()->AddToViewStackL( *this, iContainer );
+        }
+    SetListUnselected();
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::DoDeactivate()
+// --------------------------------------------------------------------------
+//
+void CMSFillView::DoDeactivate()
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::DoDeactivate"));
+
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromStack( iContainer );
+        }
+
+    delete iContainer; // Deletes the container class object.
+    iContainer = NULL;
+    SetListUnselected();
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::FocusIndex()
+// --------------------------------------------------------------------------
+//
+TInt CMSFillView::FocusIndex() const
+    {
+    return iContainer->SelectedItemIndex();
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+// --------------------------------------------------------------------------
+//
+void CMSFillView::DynInitMenuPaneL( TInt aResourceId,
+                                    CEikMenuPane* aMenuPane )
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::DynInitMenuPaneL"));
+    
+    if ( aResourceId == R_FILL_VIEW_MENU && iContainer )
+        {
+        // check if the list is empty
+        if ( iContainer->ListItemCount() <= 0 )
+            {
+            // Hide commands
+            aMenuPane->SetItemDimmed(EMSCmdEditRule, ETrue);
+            aMenuPane->SetItemDimmed(EMSCmdReorder, ETrue);
+            aMenuPane->SetItemDimmed(EMSCmdDelete, ETrue);
+            aMenuPane->SetItemDimmed(EMSCmdBrowse, ETrue);
+            aMenuPane->SetItemDimmed(EMSCmdActivate, ETrue);
+            aMenuPane->SetItemDimmed(EMSCmdDeActivate, ETrue);
+            }
+
+        if ( iContainer->IsCurrentListItemActive() )
+            {
+            aMenuPane->SetItemDimmed(EMSCmdActivate, ETrue);
+            }
+        else
+            {
+            aMenuPane->SetItemDimmed(EMSCmdDeActivate, ETrue);
+            }
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::ShowTemplateQueryL
+// shows template query
+// --------------------------------------------------------------------------
+//
+void CMSFillView::ShowTemplateQueryL( TInt aCommand )
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::ShowTemplateQueryL"));
+    
+    HBufC* defaultListName = NULL;;
+
+    TMSTemplate ruleTemplate;
+    // set template info
+    ruleTemplate.templateType = aCommand;
+
+    switch ( aCommand )
+        {
+        case EMSCmdNewImageList:
+            {
+            defaultListName = StringLoader::LoadLC(
+                                        R_MS_CUSTOM_LIST_IMAGE_NAME );
+            ruleTemplate.selectedTemplate = KImageListTemplate;
+            break;
+            }
+        case EMSCmdNewVideoList:
+            {
+            defaultListName = StringLoader::LoadLC(
+                                        R_MS_CUSTOM_LIST_VIDEO_NAME );
+            ruleTemplate.selectedTemplate = KVideoListTemplate;
+            break;
+            }
+        case EMSCmdNewMusicList:
+            {
+            defaultListName = StringLoader::LoadLC(
+                                        R_MS_CUSTOM_LIST_MUSIC_NAME );
+            ruleTemplate.selectedTemplate = KMusicListTemplate;
+            break;
+            }
+        default:
+            {
+            defaultListName = StringLoader::LoadLC(
+                                        R_MS_CUSTOM_LIST_IMAGE_NAME );
+            ruleTemplate.selectedTemplate = KImageListTemplate;
+            // command not found
+            break;
+            }
+        }
+
+    // Create search string with wildcards
+    HBufC* searchStr = HBufC::NewLC( KMaxFileName );
+    searchStr->Des().Copy( KWildCard );
+    searchStr->Des().Append( defaultListName->Des() );
+    searchStr->Des().Append( KWildCard );
+
+    // Check if fill list have dublicate names
+    TInt count = iContainer->CheckIfDublicateNames( *searchStr );
+
+    CleanupStack::PopAndDestroy( searchStr );
+    // keep template name safe
+    ruleTemplate.templateName.Copy( defaultListName->Des() );
+                        
+    // if existing items...
+    searchStr = HBufC::NewLC( KMaxFileName );
+    searchStr->Des().Append( defaultListName->Des() );
+
+    TBool same = EFalse;
+
+    RPointerArray<CMSFillList>* iFillListArray =
+                    iAppUi->FillRuleController()->FillListArray();
+
+    // if there are same name items
+    for ( TInt index = 0; index < iFillListArray->Count(); ++index )
+        {
+        CCmFillRule* rule = (*iFillListArray)[index]->List();
+        HBufC* listName =
+                CnvUtfConverter::ConvertToUnicodeFromUtf8L( rule->Name() );
+        CleanupStack::PushL( listName );
+        if ( *searchStr == *listName )
+            {
+            same = ETrue;
+            }
+        CleanupStack::PopAndDestroy( listName );
+        }
+
+    CleanupStack::PopAndDestroy( searchStr );
+    // exist same name items
+    if ( count > 0 && same )
+        {
+        TInt postfix;
+        // calculate a postfix number to add the end of the name
+        for ( postfix = 1; ; ++postfix )
+            {
+            HBufC* sameStr = HBufC::NewL( KMaxFileName );
+            CleanupStack::PushL( sameStr );
+            sameStr->Des().Copy( KWildCard );
+            sameStr->Des().Append( defaultListName->Des() );
+            sameStr->Des().Append( KSpace );
+            sameStr->Des().AppendNum( postfix );
+            sameStr->Des().Append( KWildCard );
+               
+            // do number conversion            
+            TPtr ptr = sameStr->Des();
+            AknTextUtils::
+            DisplayTextLanguageSpecificNumberConversion( ptr );
+                                
+            if ( 0 == iContainer->CheckIfDublicateNames( *sameStr ) )
+                {
+                // after append the current number, there are not
+                //same name items, so jump out the code block
+                CleanupStack::PopAndDestroy( sameStr );
+                break;
+                }
+            CleanupStack::PopAndDestroy( sameStr );
+            }
+
+        // append order number to name
+        ruleTemplate.templateName.Append( KSpace );
+        ruleTemplate.templateName.AppendNum( postfix );
+
+        // do number conversion            
+        AknTextUtils::
+            DisplayTextLanguageSpecificNumberConversion(
+                ruleTemplate.templateName );            
+        }
+
+    // store template info to parameter agent
+    iAppUi->ParameterAgent()->SetRuleTemplate( ruleTemplate );
+
+    CleanupStack::PopAndDestroy( defaultListName );
+    }
+
+// ---------------------------------------------------------------------------
+// CMSFillView::ShowNaviTextL
+// ---------------------------------------------------------------------------
+//
+void CMSFillView::ShowNaviTextL()
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::ShowNaviTextL"));
+    
+    HBufC* naviText = StringLoader::LoadLC( R_MS_PREPROCESSING_TEXT );
+    SetNavigationPaneTextL( *naviText );
+    CleanupStack::PopAndDestroy( naviText );
+    }
+
+// ---------------------------------------------------------------------------
+// CMSFillView::SetListUnselected
+// ---------------------------------------------------------------------------
+//
+void CMSFillView::SetListUnselected( )
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::SetListUnselected"));
+    
+    iListUnSelected =  iAppUi->FillRuleController()->
+                                       HasSelectionsChanged( ECmUnSelected );
+    }
+
+// ---------------------------------------------------------------------------
+// CMSFillView::CheckAndHandleChangesL
+// ---------------------------------------------------------------------------
+//
+void CMSFillView::CheckAndHandleChangesL()
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::CheckAndHandleChangesL"));
+    
+    TBool priorityChanged( EFalse );
+
+    // Check if priorities has been changed
+    priorityChanged = iAppUi->FillRuleController()->
+                                   HasPriorityChangedL();
+
+    iNewListSelected = iAppUi->FillRuleController()->
+                                   HasSelectionsChanged( ECmSelected );
+    // check if there is deleted lists
+    TBool listDeleted = iContainer->IsListDeleted();
+
+    // set activity for all rules
+    iContainer->SetFillRules();
+
+    if ( iListUnSelected )
+        {
+        // unselected list(s) - show query
+        DoDeleteQueryL();
+        }
+
+    // send rules to server
+    iAppUi->FillRuleController()->SaveRulesL();
+
+    // update lists if list(s) have been deleted, created or their selection
+    // statuses or priorities have been changed
+    if ( listDeleted ||
+         priorityChanged ||
+         iListUnSelected ||
+         iNewListSelected )
+        {
+        // disable right softkey
+        CEikButtonGroupContainer* cba = CEikButtonGroupContainer::Current();
+        cba->SetCommandSetL( R_MS_SOFTKEYS_OPTIONS_EMPTY );
+        cba->DrawDeferred();
+
+        ShowNaviTextL();
+        iAppUi->MSEngine()->UpdateFillListsL();
+        }
+    else // no list update needed
+        {
+        // retrieve new information
+        iAppUi->FillRuleController()->UpdateArrayL();
+        iAppUi->ChangeViewL( KMSFillViewId, iNextView );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CMSFillView::DoDeleteQueryL
+// ---------------------------------------------------------------------------
+//
+void CMSFillView::DoDeleteQueryL()
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::DoDeleteQueryL"));
+
+    // Show delete files query
+    CAknQueryDialog* query= CAknQueryDialog::NewL(
+                                   CAknQueryDialog::ENoTone );
+
+    if ( query->ExecuteLD( R_MSERV_DELETE_FILES_QUERY ) )
+        {
+        // do nothing
+        }
+    else // canceled
+        {
+        iAppUi->FillRuleController()->RestoreOriginalSelections();
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::ReadyL()
+// engine observer callback
+// --------------------------------------------------------------------------
+//
+void CMSFillView::ReadyL( TCmService aService, TInt /*aError*/ )
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::ReadyL"));
+
+    switch ( aService )
+        {
+        case ECmServiceUpdateFillLists:
+            {
+            // set original softkeys back
+            CEikButtonGroupContainer* cba =
+                            CEikButtonGroupContainer::Current();
+            cba->SetCommandSetL( R_AVKON_SOFTKEYS_OPTIONS_BACK );
+            cba->DrawDeferred();
+
+            // retrieve new information
+            iAppUi->FillRuleController()->UpdateArrayL();
+
+            ClearCurrentNaviPaneText();
+            iAppUi->ChangeViewL( KMSFillViewId, iNextView );
+            break;
+            }
+        case ECmServiceDeleteFilledFiles:
+            {
+            LOG(_L("[MediaServant]\t CMSFillView::ReadyL delete complete"));
+            ClearCurrentNaviPaneText();
+            // Set context pane icon
+            iContainer->SetDefaultContextPaneIconL();
+
+            iContainer->UpdateListBoxDataL();
+            break;
+            }
+
+        default:
+            {
+            LOG(_L("[MediaServant]\t CMSFillView::ReadyL \
+            service not found"));
+            }
+
+        }
+    }
+
+// --------------------------------------------------------------------------
+// CMSFillView::SetCbaL()
+// Changes softkeys
+// --------------------------------------------------------------------------
+//
+void CMSFillView::SetCbaL( TBool aSelected )
+    {
+    LOG(_L("[MediaServant]\t CMSFillView::SetCbaL"));
+    
+    CEikButtonGroupContainer* cba = Cba();
+
+    if ( aSelected )
+        {
+        cba->SetCommandSetL( R_MS_SOFTKEYS_OPTIONS_BACK__DEACTIVATE );
+        }
+    else
+        {
+        cba->SetCommandSetL( R_MS_SOFTKEYS_OPTIONS_BACK__ACTIVATE );
+        }
+    cba->DrawDeferred();
+    }
+
+// End of File
+