menufw/menufwui/mmextensions/mmfolderuiextension/src/mmfoldercommanddelete.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:40:49 +0200
changeset 0 f72a12da539e
permissions -rw-r--r--
Revision: 200949 Kit: 200951

/*
* 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:   Delete folder command
 *
*/

 
#include <liwcommon.h>
#include <e32base.h>
#include <eikenv.h>
#include <StringLoader.h>
#include <aknnotedialog.h>
#include <AknQueryDialog.h>
#include <AknWaitDialog.h> 

#include "mmfoldercommanddelete.h"
#include "mmdialogmanager.h"
#include "mmactionrequest.h"
#include "hnglobals.h"
#include "hnliwutils.h"
#include "menudebug.h"
#include "hnutils.h"

#include "hnmdbasekey.h"
#include "hnmdkeyfactory.h"
#include "menudebug.h"
#include "hnconvutils.h"
#include "hnservicehandler.h"
#include "mmpluginsharedresources.h"

#include <avkon.rsg>
#include <matrixmenu.rsg>
#include <mmfolderuiextplugin.rsg>


_LIT8( KChildrenCount8, "children_count" );

// ============================ MEMBER FUNCTIONS =============================
// ---------------------------------------------------------------------------
// Symbian factory function.
// ---------------------------------------------------------------------------
//
CMmFolderCommandDelete* CMmFolderCommandDelete::NewL()
	{
	CMmFolderCommandDelete* self = new( ELeave ) CMmFolderCommandDelete();
	CleanupStack::PushL( self );
	self->ConstructL();
	CleanupStack::Pop( self );
	return self;
	}


// ---------------------------------------------------------------------------
// Symbian second phase constructor.
// ---------------------------------------------------------------------------
//
void CMmFolderCommandDelete::ConstructL()
	{
	BaseConstructL();
	}

// ---------------------------------------------------------------------------
// Destructor.
// ---------------------------------------------------------------------------
//
CMmFolderCommandDelete::~CMmFolderCommandDelete()
	{
	delete iServiceHandler;
    if( iWaitDialog )
        {
        delete iWaitDialog;
        }
	}

// ---------------------------------------------------------------------------
// Default C++ constructor.
// ---------------------------------------------------------------------------
//
CMmFolderCommandDelete::CMmFolderCommandDelete()
	{
	}

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
TInt CMmFolderCommandDelete::HandleNotifyL(  TInt /*aCmdId*/, 
                                TInt aEventId,
                                CLiwGenericParamList& /* aEventParamList */,
                                const CLiwGenericParamList& /*aInParamList*/ )
    {  
    if( aEventId != KLiwEventCanceled  )
        {
        StopWaitDialogL();
        MMPERF(("CFolderUiExtPlugin::DeleteFolderCommandL - END"));
        }
    return KErrNone;
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CMmFolderCommandDelete::ExecuteActionL(
        CLiwGenericParamList* aEventParamList )
    {
    MMPERF(("CFolderUiExtPlugin::DeleteFolderCommandL - START"));
    TInt id = GetIntL( *aEventParamList, KIdAttrName8 );
    TPtrC currentName = GetStringL( *aEventParamList, KName8 );
    TInt32 childrenCount = GetIntL( *aEventParamList, KChildrenCount8 );
	
	if( childrenCount == 0 )
	    {
        if( DeleteQueryL( currentName ) )
            {
            DeleteItemFromMcsL( id, currentName );

            CLiwGenericParamList* list = CLiwGenericParamList::NewLC();
            TLiwGenericParam command( KHnRequest, TLiwVariant( KDisableActionsForItem ) );
            TLiwGenericParam itemCustomId(
                    KItemCustomId8, TLiwVariant( static_cast<TInt32>( id ) ) );
            list->AppendL( itemCustomId );
            list->AppendL( command );
            iActionRequest->HandleRequestL( *list );
            CleanupStack::PopAndDestroy( list );
        	}
	    }
	else
	    {
	    DisplayErrorInfoL( currentName );
	    }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//  
void CMmFolderCommandDelete::MoveFocusBeforeDeleteL()
    {
    CLiwGenericParamList* list = CLiwGenericParamList::NewLC();
    TLiwGenericParam command( KHnRequest, TLiwVariant( KMoveFocusBeforeDelete ) );

    list->AppendL( command );
    
    iActionRequest->HandleRequestL( *list );
    CleanupStack::PopAndDestroy( list );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//	
void CMmFolderCommandDelete::StartWaitDialogL( const TDesC& aLabel )
    {
    if( iWaitDialog )
        {
        delete iWaitDialog;
        iWaitDialog = NULL;
        }
 
    // For the wait dialog
    iWaitDialog = new (ELeave) CAknWaitDialog(
        REINTERPRET_CAST( CEikDialog**, &iWaitDialog ) );
    iWaitDialog->SetCallback( this );
    iWaitDialog->SetTextL( aLabel );
    iWaitDialog->ExecuteLD( R_MENU_WAIT_DIALOG );
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//	
void CMmFolderCommandDelete::DialogDismissedL(TInt /*aButtonId*/)
    {
    // No implementation required.
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//	
void CMmFolderCommandDelete::StopWaitDialogL()
    {
    if( iWaitDialog )
        {
        iWaitDialog->ProcessFinishedL(); 
        }
    }

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//	
TBool CMmFolderCommandDelete::DeleteQueryL( const TDesC& aFolderName )
	{
	HBufC* msg = StringLoader::LoadLC(
			R_MENU_EDIT_DELETE_QUERY_TEXT, aFolderName );
	CAknQueryDialog* dialog = CAknQueryDialog::NewL();
	SetDialogL( dialog );
	TBool result( dialog->ExecuteLD( R_MENU_EDIT_DELETE_QUERY, *msg ) );
	SetDialogL( NULL );
    CleanupStack::PopAndDestroy( msg );
    return result;
	}

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
// 
void CMmFolderCommandDelete::DeleteItemFromMcsL(
        TInt aId, const TDesC& aFolderName )
    {
	MMPERF(("\t\t Delete folder - START"));
	
	GetListL( aId );
    TInt pos( 0 );
    TInt count( 0 );
    const TLiwGenericParam* res =
            iGetListOutParam->FindFirst( pos, KReturnValue8() );
    if( pos != KErrNotFound && res )
        {
        count = res->Value().AsList()->Count();
        }
    
    if( count == 0 )
        {
        StartWaitDialogL( iSharedResources->GetMsgFolderDeleting() );
        CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
            KInData8, KKeyTypeMap, KDefaultParentId8 );
        CleanupStack::PushL( inDataKey );

        HBufC8* id = HnConvUtils::NumToStr8LC( aId );
        AddSubKeyL( inDataKey, KIdParam, KKeyTypeInteger, *id );
        MCSQueryExecutionL( KCmdDelete8, inDataKey, NULL, this );

        CleanupStack::PopAndDestroy( id );
        CleanupStack::PopAndDestroy( inDataKey );
        }
    else
        {
        HBufC* message = StringLoader::LoadLC(
                R_FLDR_CANNOT_DELETE_ITEM, aFolderName );
        CAknNoteDialog* dialog = new (ELeave) CAknNoteDialog(
                CAknNoteDialog::EConfirmationTone,
                CAknNoteDialog::ELongTimeout );
        dialog->SetTextL( message->Des() );
        dialog->ExecuteDlgLD( R_MENU_EDIT_MOVING_ABORT_NOTIFICATION );
        
        CleanupStack::PopAndDestroy( message );
        }
	
	MMPERF(("\t\t Delete folder - END"));
    }


// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
// 
void CMmFolderCommandDelete::UninstallL( TInt aId )
    {
    MMPERF(("\t\t Delete folder - START"));
    
    CHnMdBaseKey* inDataKey = HnMdKeyFactory::CreateL(
        KInData8, KKeyTypeMap, KDefaultParentId8 );
    CleanupStack::PushL( inDataKey );

    HBufC8* id = HnConvUtils::NumToStr8LC( aId );
    AddSubKeyL( inDataKey, KIdParam, KKeyTypeInteger, *id );
    AddSubKeyL( inDataKey, KAction, KKeyTypeString8, KActionRemove );
    MCSQueryExecutionL( KCmdExecuteAction8, inDataKey, NULL, this );

    CleanupStack::PopAndDestroy( id );
    CleanupStack::PopAndDestroy( inDataKey );
    
    MMPERF(("\t\t Delete folder - END"));
    }


// ---------------------------------------------------------------------------
// Symbian factory function.
// ---------------------------------------------------------------------------
//
CMmFolderDeleteSuite* CMmFolderDeleteSuite::NewL()
	{
	CMmFolderDeleteSuite* self = new( ELeave ) CMmFolderDeleteSuite();
	CleanupStack::PushL( self );
	self->ConstructL();
	CleanupStack::Pop( self );
	return self;
	}


// ---------------------------------------------------------------------------
// Symbian second phase constructor.
// ---------------------------------------------------------------------------
//
void CMmFolderDeleteSuite::ConstructL()
	{
	}


// ---------------------------------------------------------------------------
// Destructor.
// ---------------------------------------------------------------------------
//
CMmFolderDeleteSuite::~CMmFolderDeleteSuite()
	{
	}

// ---------------------------------------------------------------------------
// Default C++ constructor.
// ---------------------------------------------------------------------------
//
CMmFolderDeleteSuite::CMmFolderDeleteSuite()
	{
	}

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CMmFolderDeleteSuite::ExecuteActionL(
        CLiwGenericParamList* /* aEventParamList */ )
    {
//    TPtrC currentName = GetStringL( *aEventParamList, KName8 );
    }

// ---------------------------------------------------------------------------
// Symbian factory function.
// ---------------------------------------------------------------------------
//
CMmFolderDeleteApp* CMmFolderDeleteApp::NewL()
	{
	CMmFolderDeleteApp* self = new( ELeave ) CMmFolderDeleteApp();
	CleanupStack::PushL( self );
	self->ConstructL();
	CleanupStack::Pop( self );
	return self;
	}


// ---------------------------------------------------------------------------
// Symbian second phase constructor.
// ---------------------------------------------------------------------------
//
void CMmFolderDeleteApp::ConstructL()
	{
	
	}


// ---------------------------------------------------------------------------
// Destructor.
// ---------------------------------------------------------------------------
//
CMmFolderDeleteApp::~CMmFolderDeleteApp()
	{
	
	}

// ---------------------------------------------------------------------------
// Default C++ constructor.
// ---------------------------------------------------------------------------
//
CMmFolderDeleteApp::CMmFolderDeleteApp()
	{
	
	}

// ---------------------------------------------------------------------------
// 
// ---------------------------------------------------------------------------
//
void CMmFolderDeleteApp::ExecuteActionL(
        CLiwGenericParamList* aEventParamList )
    {
    MMPERF(("CMmFolderDeleteApp::DeleteAppCommandL - START"));
    TInt id = GetIntL( *aEventParamList, KIdAttrName8 );
    UninstallL( id );
    }

// end of file