--- a/menufw/menufwui/mmextensions/mmfolderuiextension/src/mmmovetofoldercommand.cpp Thu Mar 18 14:45:17 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,637 +0,0 @@
-/*
-* Copyright (c) 2007-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: Add folder command
- *
-*/
-
-
-#include <liwcommon.h>
-
-#include "mmmovetofoldercommand.h"
-#include "hnglobals.h"
-#include "menudebug.h"
-#include "hnconvutils.h"
-#include "hnliwutils.h"
-#include "hnutils.h"
-
-#include "hnmdbasekey.h"
-#include "hnmdkeyfactory.h"
-#include "menudebug.h"
-#include "mmactionrequest.h"
-#include "hnservicehandler.h"
-#include "mmpluginsharedresources.h"
-
-#include <StringLoader.h>
-#include <liwcommon.h>
-#include <avkon.rsg>
-#include <avkon.mbg>
-#include <AknIconArray.h>
-#include <AknIconUtils.h>
-#include <aknnotedialog.h>
-#include <mmf/common/mmfcontrollerpluginresolver.h>
-#include <mmfolderuiextplugin.rsg>
-#include <matrixmenu.rsg>
-
-_LIT( KFolderClosed, "0\t" );
-_LIT( KFolderOpened, "1\t" );
-const TInt KSoftkeyBack( 0 );
-
-// ============================ MEMBER FUNCTIONS =============================
-
-// ---------------------------------------------------------------------------
-// Symbian factory function.
-// ---------------------------------------------------------------------------
-//
-CMmMoveToFolderCommand* CMmMoveToFolderCommand::NewL()
- {
- CMmMoveToFolderCommand* self = new( ELeave ) CMmMoveToFolderCommand();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-
-// ---------------------------------------------------------------------------
-// Symbian second phase constructor.
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::ConstructL()
- {
- BaseConstructL();
- iLockDialog = EFalse;
- iFlagLeave = EFalse;
- }
-
-// ---------------------------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CMmMoveToFolderCommand::~CMmMoveToFolderCommand()
- {
- iItemName.Close();
- iFolderName.Close();
- iWidgetType.Close();
- iOpenedHierarchy.ResetAndDestroy();
- iOpenedHierarchy.Close();
- delete iServiceHandler;
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CMmMoveToFolderCommand::CMmMoveToFolderCommand()
- {
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-TInt CMmMoveToFolderCommand::HandleNotifyL(
- TInt /*aCmdId*/,
- TInt aEventId,
- CLiwGenericParamList& /*aEventParamList*/,
- const CLiwGenericParamList& /*aInParamList*/ )
- {
- if (aEventId != KLiwEventCanceled)
- {
- NotificationMovingCompleteL();
- iItemName.Close();
- iFolderName.Close();
- }
- return KErrNone;
- }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::ExecuteActionL(
- CLiwGenericParamList* aEventParamList )
- {
-
- //
- // Prepare move to folder operation
- MMPERF(("CMmMoveToFolderCommand::ExecuteActionL - START"));
- iItemId = GetIntL( *aEventParamList, KIdAttrName8 );
- iParentId = GetIntL( *aEventParamList, KFolderAttrName8 );
- TPtrC widget = GetStringL( *aEventParamList, KWidgetAttrName8 );
- TPtrC currentTempName = GetStringL( *aEventParamList, KName8 );
-
- iItemName.Close();
- iItemName.CreateL( currentTempName );
-
- iWidgetType.Close();
- iWidgetType.CreateL( widget );
-
- CMmFolder* rootFolder = CMmFolder::NewL();
- CleanupStack::PushL( rootFolder );
-
- rootFolder->SetNameL( iSharedResources->GetRootFolder());
- rootFolder->SetId( KRootId );
- iOpenedHierarchy.AppendL( rootFolder );
- CleanupStack::Pop( rootFolder );
- iLockDialog = EFalse;
-
- // Excute move to folder operation
- TInt err( KErrNone );
-
- // Get folder list form MCS
- GetFolderListL( CurrentFolder()->Id() );
-
- RPointerArray< CMmFolder > folders;
- CleanupResetAndDestroyPushL( folders );
-
- // Get folders from GetList output
- GetFoldersL(folders);
-
- // if foler already exists, reopen options menu
- do
- {
- TRAP( err, ExecuteMoveToFolderL());
- }
- while ( err == KErrAlreadyExists && folders.Count() > 0 );
-
- // if any different leave was trapped, pass it on
- if ( err != KErrNone )
- {
- User::Leave( err );
- }
-
- CleanupStack::PopAndDestroy( &folders );
- //MMPERF(("CFolderUiExtPlugin::AddFolderCommandL - END"));
- }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CMmFolder* CMmMoveToFolderCommand::CurrentFolder()
- {
- ASSERT( iOpenedHierarchy.Count() > 0 );
- return iOpenedHierarchy[ iOpenedHierarchy.Count() - 1 ];
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::MoveToFolderL( TInt aId, TInt aFolderId,
- TInt aBeforeItemId )
- {
- if( aFolderId != iParentId )
- {
- CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
- KInData8, KKeyTypeMap, KDefaultParentId8 );
- CleanupStack::PushL( inDataKey );
- CHnMdBaseKey* listIds = HnMdKeyFactory::CreateL(
- KIdsList, KKeyTypeList, KNullDesC8 );
-
- HBufC8* id = HnConvUtils::NumToStr8LC( aId );
- AddSubKeyL( listIds, KIdParam, KKeyTypeBoolean, *id );
- CleanupStack::PopAndDestroy();
-
- inDataKey->AddSubKeyL( listIds );
- HBufC8* folderId = HnConvUtils::NumToStr8LC( aFolderId );
- AddSubKeyL( inDataKey, KFolderId8, KKeyTypeBoolean, *folderId );
- CleanupStack::PopAndDestroy( folderId );
-
- if( aBeforeItemId != KErrNotFound )
- {
- HBufC8* itemId = HnConvUtils::NumToStr8LC( aBeforeItemId );
- AddSubKeyL( inDataKey, KBeforeItemId8, KKeyTypeBoolean, *itemId );
- CleanupStack::PopAndDestroy( itemId );
- }
- MCSQueryExecutionL( KCmdOrganize8, inDataKey, NULL, this );
- iOpenedHierarchy.ResetAndDestroy();
-
- CleanupStack::PopAndDestroy( inDataKey );
- CLiwGenericParamList* list = CLiwGenericParamList::NewLC();
- TLiwGenericParam command( KHnRequest, TLiwVariant( KDisableActionsForItem ) );
- TLiwGenericParam itemCustomId(
- KItemCustomId8, TLiwVariant( static_cast<TInt32>( aId ) ) );
- list->AppendL( itemCustomId );
- list->AppendL( command );
- iActionRequest->HandleRequestL( *list );
- CleanupStack::PopAndDestroy( list );
- }
- else
- {
- NotificationItemAlreadyStoredL();
- if( iOpenedHierarchy.Count() > 0 && !iLockDialog )
- {
- if( CurrentFolder()->Id() == iParentId && iParentId != KRootId )
- {
- StepBackInHierarchy();
- }
- else if ( iParentId == KRootId )
- {
- User::Leave( KErrAlreadyExists );
- }
- }
- }
- }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::SelectFolderL(
- const RPointerArray< CMmFolder >& aFolderContent )
- {
- CDesCArrayFlat* folders =
- new( ELeave )CDesCArrayFlat( aFolderContent.Count() + 1 );
- CleanupStack::PushL( folders );
- RBuf currentFolder;
- CleanupClosePushL( currentFolder );
- currentFolder.CreateL(
- KFolderOpened().Length() + CurrentFolder()->Name().Length() );
- currentFolder.Append( KFolderOpened );
- currentFolder.Append( CurrentFolder()->Name() );
- folders->AppendL( currentFolder );
-
- for( int i( 0 ); i<aFolderContent.Count(); i++ )
- {
- CMmFolder* folder = aFolderContent[ i ];
- RBuf name;
- CleanupClosePushL( name );
- name.CreateL( KFolderClosed().Length() + folder->Name().Length() );
- name.Append( KFolderClosed );
- name.Append( folder->Name() );
- folders->AppendL( name );
- CleanupStack::PopAndDestroy( &name );
- }
-
- TInt selected( SelectFolderFromListL(
- folders, CurrentFolder()->Id() == KRootId ) );
-
- switch( selected )
- {
- case EAknSoftkeyBack:
- {
- if( iOpenedHierarchy.Count() > 1 && !iLockDialog )
- {
- StepBackInHierarchy();
- break;
- }
- }
- case EAknSoftkeyExit:
- {
- iItemName.Close();
- iFolderName.Close();
- iOpenedHierarchy.ResetAndDestroy();
- break;
- }
- default:
- {
- if( selected > 0 )
- {
- CMmFolder* folder = CMmFolder::NewL();
- CleanupStack::PushL( folder );
- folder->SetNameL( aFolderContent[ selected - 1 ]->Name() );
- folder->SetId( aFolderContent[ selected - 1 ]->Id() );
- iOpenedHierarchy.AppendL( folder );
- CleanupStack::Pop( folder );
- }
- else
- {
- iFolderName.Close();
- iFolderName.CreateL( CurrentFolder()->Name() );
- MoveToFolderL( iItemId, CurrentFolder()->Id() );
- }
- break;
- }
- }
-
- CleanupStack::PopAndDestroy( ¤tFolder );
- CleanupStack::PopAndDestroy( folders );
- }
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-TInt CMmMoveToFolderCommand::SelectFolderFromListL(
- CDesCArrayFlat* aItems, TBool aIsRoot )
- {
- TInt selected( KErrNotFound );
-
- CAknListQueryDialog* dialog =
- new ( ELeave ) CAknListQueryDialog( &selected );
- if( aIsRoot )
- {
- dialog->PrepareLC( R_MENU_EDIT_MOVE_TO_FOLDER_SELECT_CANCEL_QUERY );
- }
- else
- {
- dialog->PrepareLC( R_MENU_EDIT_MOVE_TO_FOLDER_SELECT_BACK_QUERY );
- }
- dialog->SetItemTextArray( aItems );
- dialog->SetOwnershipType( ELbmDoesNotOwnItemArray );
- CArrayPtr<CGulIcon>* icons = GetFolderIconsL();
- dialog->SetIconArrayL( icons );
- dialog->ListBox()->SetCurrentItemIndexAndDraw( 0 );
-
- if( !iLockDialog )
- {
- SetDialogL( dialog );
- TInt softkey ( KErrNotFound );
- softkey = dialog->RunLD();
- SetDialogL( NULL );
-
- if( softkey == KSoftkeyBack )
- {
- selected = EAknSoftkeyBack;
- }
- else if( selected < 0 ||
- ( softkey != EAknSoftkeyOk && softkey != EAknSoftkeySelect ) )
- {
- selected = EAknSoftkeyExit;
- }
- }
- else
- {
- CleanupStack::PopAndDestroy( dialog );
- selected = EAknSoftkeyExit;
- }
-
- return selected;
- }
-
-
-// ---------------------------------------------------------------------------
-// Action resolving function.
-// ---------------------------------------------------------------------------
-//
-CArrayPtr<CGulIcon>* CMmMoveToFolderCommand::GetFolderIconsL()
- {
- CArrayPtr<CGulIcon>* icons = new( ELeave )CAknIconArray( 10 );
- CleanupStack::PushL( icons );
- CFbsBitmap* folderClosed = NULL;
- CFbsBitmap* folderClosedMask = NULL;
-
- AknIconUtils::CreateIconL( folderClosed, folderClosedMask,
- AknIconUtils::AvkonIconFileName(),
- EMbmAvkonQgn_prop_folder_small,
- EMbmAvkonQgn_prop_folder_small_mask );
- CleanupStack::PushL( folderClosed );
- CleanupStack::PushL( folderClosedMask );
- icons->AppendL( CGulIcon::NewL( folderClosed, folderClosedMask ) );
- CleanupStack::Pop( 2 );
-
- CFbsBitmap* folderOpened = NULL;
- CFbsBitmap* folderOpenedMask = NULL;
- AknIconUtils::CreateIconL( folderOpened, folderOpenedMask,
- AknIconUtils::AvkonIconFileName(),
- EMbmAvkonQgn_prop_folder_current,
- EMbmAvkonQgn_prop_folder_current_mask );
- CleanupStack::PushL( folderOpened );
- CleanupStack::PushL( folderOpenedMask );
- icons->AppendL( CGulIcon::NewL( folderOpened, folderOpenedMask ) );
- CleanupStack::Pop( 3 );
- return icons;
- }
-
-
-// ---------------------------------------------------------------------------
-// Action resolving function.
-// ---------------------------------------------------------------------------
-//
-HBufC* CMmMoveToFolderCommand::GetFromResourceLC( TInt aIdentifier )
- {
- HBufC* string = StringLoader::LoadLC( aIdentifier );
- return string;
- }
-
-
-// ---------------------------------------------------------------------------
-// Action resolving function.
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::NotificationMovingCompleteL()
- {
- CDesCArrayFlat* items = new(ELeave) CDesCArrayFlat( 1 );
- CleanupStack::PushL( items );
- items->AppendL( iItemName );
- items->AppendL( iFolderName );
-
- HBufC* msg = StringLoader::LoadLC( R_APPS_NOTE_MOVE_TO_FOLDER, *items );
- CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
- CAknNoteDialog::EConfirmationTone,
- CAknNoteDialog::ELongTimeout );
- dialog->SetTextL( msg->Des() );
- dialog->ExecuteDlgLD( R_MENU_EDIT_MOVING_COMPLETE_NOTIFICATION );
-
- CleanupStack::PopAndDestroy( msg );
- CleanupStack::PopAndDestroy( items );
- }
-
-
-// ---------------------------------------------------------------------------
-// Action resolving function.
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::NotificationItemAlreadyStoredL()
- {
- HBufC* message = StringLoader::LoadLC( R_APPS_NOTE_ITEM_ALREADY_STORED );
- CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
- CAknNoteDialog::EConfirmationTone,
- CAknNoteDialog::ELongTimeout );
- dialog->SetTextL( message->Des() );
- dialog->ExecuteDlgLD( R_MENU_EDIT_MOVING_ABORT_NOTIFICATION );
-
- CleanupStack::PopAndDestroy( message );
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::StepBackInHierarchy()
- {
- // Remove last folder from iOpenedHierarchy
- CMmFolder* folder = CurrentFolder();
- iOpenedHierarchy.Remove( iOpenedHierarchy.Count() - 1 );
- delete folder;
- }
-
-
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::ExecuteMoveToFolderL()
- {
- while (iOpenedHierarchy.Count() > 0)
- {
- // Get folder list form MCS
- GetFolderListL( CurrentFolder()->Id() );
-
- RPointerArray< CMmFolder > folders;
- CleanupResetAndDestroyPushL( folders );
-
- // Get folders from GetList output
- GetFoldersL(folders);
-
- // Perform further folder selection or move operation
- if( folders.Count() > 0 )
- {
- SelectFolderL( folders );
- }
- else
- {
- iFolderName.Close();
- iFolderName.CreateL( CurrentFolder()->Name() );
- MoveToFolderL( iItemId, CurrentFolder()->Id() );
- }
- CleanupStack::PopAndDestroy( &folders );
- }
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmMoveToFolderCommand::GetFoldersL(RPointerArray<CMmFolder >& aFolderArray)
- {
- TInt pos( 0 );
- TInt count = iGetListOutParam->FindFirst(
- pos, KReturnValue8() )->Value().AsList()->Count();
- TLiwVariant var; var.PushL();
-
- // Get propper widget names depending from view type
- // and append to aFolderArray
- for( TInt i = 0; i < count; i++ )
- {
- HnLiwUtils::GetVariantL( *iGetListOutParam, KIdPath8, i, var );
- TInt32 id;
- var.Get( id );
-
- if (id != iItemId)
- {
- CMmFolder* folder = CMmFolder::NewL();
- CleanupStack::PushL( folder );
-
- folder->SetId( id );
-
- TPtrC title;
- if( !iWidgetType.Compare( KWidgetTypeList ) )
- {
- HnLiwUtils::GetVariantL(
- *iGetListOutParam, KLongNamePath8, i, var );
- }
- else if( !iWidgetType.Compare( KWidgetTypeGrid ) )
- {
- HnLiwUtils::GetVariantL(
- *iGetListOutParam, KShortNamePath8, i, var );
- }
- else
- {
- HnLiwUtils::GetVariantL(
- *iGetListOutParam, KAppGroupNamePath8, i, var );
- }
- var.Get( title );
- folder->SetNameL( title );
- aFolderArray.AppendL( folder );
-
- CleanupStack::Pop( folder );
- }
- }
- CleanupStack::PopAndDestroy(&var);
- }
-
-// ---------------------------------------------------------------------------
-// Symbian factory function.
-// ---------------------------------------------------------------------------
-//
-CMmFolder* CMmFolder::NewL()
- {
- CMmFolder* self = new( ELeave ) CMmFolder();
- CleanupStack::PushL( self );
- self->ConstructL();
- CleanupStack::Pop( self );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// Symbian second phase constructor.
-// ---------------------------------------------------------------------------
-//
-void CMmFolder::ConstructL()
- {
- }
-
-// ---------------------------------------------------------------------------
-// Destructor.
-// ---------------------------------------------------------------------------
-//
-CMmFolder::~CMmFolder()
- {
- iName.Close();
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-CMmFolder::CMmFolder()
- {
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmFolder::SetNameL( const TDesC& aName )
- {
- iName.Close();
- iName.CreateL( aName );
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-const TDesC& CMmFolder::Name() const
- {
- return iName;
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-void CMmFolder::SetId( TInt aId )
- {
- iId = aId;
- }
-
-// ---------------------------------------------------------------------------
-//
-// ---------------------------------------------------------------------------
-//
-TInt CMmFolder::Id()
- {
- return iId;
- }
-
-// end of file
-