browserui/browser/FeedsSrc/FeedsEditFolderDialog.cpp
author Simon Howkins <simonh@symbian.org>
Mon, 22 Nov 2010 14:25:13 +0000
branchRCL_3
changeset 73 9437cb201cd0
parent 65 8e6fa1719340
permissions -rw-r--r--
__WEB_WIDGETS configuration is now done within the component's bld.inf files, not the top/mid level bld.infs

/*
* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of the License "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:  Encapsulates a edit folder dialog.
*
*/


#include <AknPopupFieldText.h>
#include <avkon.hrh>
#include <avkon.rsg>
#include <eikedwin.h>
#include <eikmenup.h>
#include <charconv.h>
#include <aknviewappui.h>

#ifdef __SERIES60_HELP
#include <hlplch.h>
#endif

#include "BrowserAppUi.h"
#include "BrowserAppViewBase.h"
#include "FeedsEditFolderDialog.h"

#include "Browser.hrh"
#include <BrowserNG.rsg>

// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::NewL
//
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CFeedsEditFolderDialog* CFeedsEditFolderDialog::NewL(MFeedsEditFolderDialogObserver& aObserver,
        CAknViewAppUi* aAppUi,
        const TDesC& aName)
    {
    CFeedsEditFolderDialog* self = new (ELeave) CFeedsEditFolderDialog(aObserver, aAppUi, aName);   
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);

    return self;
    }


// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::NewL
//
// Two-phased constructor.
// -----------------------------------------------------------------------------
//
CFeedsEditFolderDialog* CFeedsEditFolderDialog::NewL(MFeedsEditFolderDialogObserver& aObserver,
                                           CAknViewAppUi* aAppUi)
    {
    CFeedsEditFolderDialog* self = new (ELeave) CFeedsEditFolderDialog(aObserver, aAppUi, KNullDesC);   
    
    CleanupStack::PushL(self);
    self->iIsNewFolder = ETrue;
    self->ConstructL();
    CleanupStack::Pop(self);

    return self;
    }


// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::CFeedsEditFolderDialog
//
// C++ default constructor.
// -----------------------------------------------------------------------------
//
CFeedsEditFolderDialog::CFeedsEditFolderDialog(MFeedsEditFolderDialogObserver& aObserver,
        CAknViewAppUi* aAppUi,
        const TDesC& aName):
    iObserver(aObserver), iAppUi(aAppUi), iName(aName)
    {
    }

    
// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::~CFeedsEditFolderDialog
//
// Deconstructor.
// -----------------------------------------------------------------------------
//
CFeedsEditFolderDialog::~CFeedsEditFolderDialog()
    {
    }


// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::PreLayoutDynInitL
//
// Called to setup the options menu with the dialog is active.
// -----------------------------------------------------------------------------
//
void CFeedsEditFolderDialog::DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane)
    {
    CAknForm::DynInitMenuPaneL(aResourceId, aMenuPane);
    
    if (aResourceId == R_AVKON_FORM_MENUPANE)
        {
        aMenuPane->SetItemDimmed(EAknFormCmdLabel, ETrue);
        aMenuPane->SetItemDimmed(EAknFormCmdAdd, ETrue);
        aMenuPane->SetItemDimmed(EAknFormCmdDelete, ETrue);

        aMenuPane->AddMenuItemsL(R_FEEDS_HELP_EXIT_FEED_MENU);
        }
    }


// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::SaveFormDataL
//
// Called by the framework whenver the 'Save' menu item is selected.
// -----------------------------------------------------------------------------
//
TBool CFeedsEditFolderDialog::SaveFormDataL()
    {
    CEikEdwin*  textEditor;
    HBufC*      name = NULL;
    TBool       valid = EFalse;

    // Extract the new name.
    textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));
    name = textEditor->GetTextInHBufL();
    CleanupStack::PushL(name);

    // Notify the observer.
    valid = iObserver.IsFolderNameValidL(name, !iIsNewFolder);

    // If invalid force the user to reentry it.
    if (!valid)
        {
        // Focus and select the name field.
        textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));

        textEditor->SetFocus(ETrue);
        textEditor->SelectAllL();

        iExitDialog = EFalse;
        }

    // Otherwise pass the new values to the observer.
    else
        {
        if (iIsNewFolder)
            {
            iObserver.NewFolderL(*name);
            }
        else
            {
            iObserver.UpdateFolderL(*name);
            }

        iExitDialog = ETrue;
        }

    // Clean up.
    CleanupStack::PopAndDestroy(name);  

    return valid;
    }


// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::PreLayoutDynInitL
//
// Called by the framework before the form is initialised.
// -----------------------------------------------------------------------------
//
void CFeedsEditFolderDialog::PreLayoutDynInitL()
    {
    CEikEdwin*  textEditor = NULL;

    CAknForm::PreLayoutDynInitL();

    // Get the name field
    textEditor = static_cast<CEikEdwin*>(ControlOrNull(EFeedsEditDialogNameId));

    // If the name was set then set it.
    if (iName.Length() > 0)
        {
        textEditor->SetTextL(&iName);
        }

    // Otherwise use the default name.
    else
        {
    	HBufC*  text = NULL;
	
        // Load the label
        text = CCoeEnv::Static()->AllocReadResourceAsDes16L(R_FEEDS_NEW_FOLDER_ITEM);
        CleanupStack::PushL(text);

        textEditor->SetTextL(text);
  		SetFormFlag(EUnsavedEdit, ETrue);

        CleanupStack::PopAndDestroy(text);
        }
    }


// -----------------------------------------------------------------------------
// CFeedsEditFolderDialog::ProcessCommandL
//
// Called by the framework to process the options menu.
// -----------------------------------------------------------------------------
//
void CFeedsEditFolderDialog::ProcessCommandL(TInt aCommandId)
    {
    switch (aCommandId)
        {
        case EAknCmdExit:
            {
            // Custom added commands. Forward to view.
            // Note that we respond to EAknCmdExit, not CEikCmdExit; it's
            // because we don't get it through the AppUi framework (instead,
            // we forward it there now).
            CBrowserAppUi::Static()->ActiveView()->ProcessCommandL( aCommandId ); 
            break;
            }
                    
        case EEikCmdExit:
            break;

#ifdef __SERIES60_HELP
        case EAknCmdHelp:
            HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), 
                    iAppUi->AppHelpContextL());

            break;
#endif //__SERIES60_HELP 
        case EWmlCmdAboutProduct:
        {
         iAppUi->HandleCommandL( aCommandId );
         break;
        }
        default:
            // Standard form commands.
            CAknForm::ProcessCommandL(aCommandId);

            if (iExitDialog)
                {
                TryExitL(EAknSoftkeyBack);
                }
            break;
        }
    }