upnpframework/upnpcommonui/src/upnpadvfinddialog.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Thu, 17 Dec 2009 08:52:00 +0200
changeset 0 7f85d04be362
permissions -rw-r--r--
Revision: 200947 Kit: 200951

/*
* Copyright (c) 2005-2006 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:  Advanced find dialog component source code
*
*/



// INCLUDE FILES
// System
#include <StringLoader.h>
#include <upnpstring.h>

// upnpframework / avcontroller api
#include "upnpavbrowsingsession.h"
#include "upnpavdevice.h"

// upnpframework / internal api's
#include "upnpcommonutils.h"

// common ui internal
#include "upnpcommonui.h"
#include <upnpcommonui.rsg>
#include "upnpadvfinddialog.h"
#include "upnpadvfindlist.h"

// debug stuff
_LIT( KComponentLogfile, "commonui.txt");
#include "upnplog.h"

// CONSTANTS
const TInt KLength = 100;

// ============================ MEMBER FUNCTIONS ============================
// --------------------------------------------------------------------------
// CUPnPAdvancedFindDialog::ConstructL
// Symbian 2nd phase constructor can leave.
// --------------------------------------------------------------------------
//
void CUPnPAdvancedFindDialog::ConstructL(TInt aMenuResource)
    {
    __LOG( "CUPnPAdvancedFindDialog::ConstructL" );
    CAknDialog::ConstructL(aMenuResource);
    
    iOriginalTitleText = HBufC16::NewL( KMaxFileName );
    }


// --------------------------------------------------------------------------
// CUPnPAdvancedFindDialog::CUPnPAdvancedFindDialog
// default constructor
// --------------------------------------------------------------------------
CUPnPAdvancedFindDialog::CUPnPAdvancedFindDialog(
                                MUPnPAVController& aAVControl,
                                MUPnPAVBrowsingSession& aBrowsingSession,
                                CUPnPCommonUI& aCommonUI ):
                                iAVControl(aAVControl),
                                iBrowseSession(aBrowsingSession),
                                iCommonUI(aCommonUI)

    {
    }

// --------------------------------------------------------------------------
// CUPnPAdvancedFindDialog::NewL
// Two-phased constructor.
// --------------------------------------------------------------------------
//
CUPnPAdvancedFindDialog* CUPnPAdvancedFindDialog::NewL(
                                TInt aMenuResource,
                                MUPnPAVController& aAVControl,
                                MUPnPAVBrowsingSession& aBrowsingSession,
                                CUPnPCommonUI& aCommonUI )
    {    
    __LOG( "CUPnPAdvancedFindDialog::NewL" );

    CUPnPAdvancedFindDialog* self = new ( ELeave ) CUPnPAdvancedFindDialog(
        aAVControl, aBrowsingSession, aCommonUI );
    CleanupStack::PushL( self );
    self->ConstructL( aMenuResource );
    CleanupStack::Pop();
    return self;
    }
    
// Destructor
CUPnPAdvancedFindDialog::~CUPnPAdvancedFindDialog()
    {
    __LOG( "CUPnPAdvancedFindDialog destructor" );
    // Set original title pane text
    if( iOriginalTitleText && iTitlePane )
        {
        TRAP_IGNORE( iTitlePane->SetTextL( *iOriginalTitleText ) );
        delete iOriginalTitleText;    
        }
    }

// --------------------------------------------------------------------------
// CUPnPAdvancedFindDialog::OkToExitL( TInt aButtonId )
// called by framework when trying to close the dialog
// --------------------------------------------------------------------------
//
TBool CUPnPAdvancedFindDialog::OkToExitL( TInt aButtonId )
    {
    __LOG( "CUPnPAdvancedFindDialog::OkToExitL" );
    TInt error = KErrNone;
    TBool retval = EFalse;
    
    if ( aButtonId == EAknSoftkeyOk )
        {
        iSettingsList->SetMopParent( this );
        error = iSettingsList->MakeQueryL();
        
        iTitlePane = (CAknTitlePane*)iStatusPane->ControlL(
                                    TUid::Uid( EEikStatusPaneUidTitle ) );
        SetTitleL();
        TryExitL( error );
        }
    else if ( aButtonId == EAknSoftkeyOptions )
        {
        DisplayMenuL();
        }
    else if ( aButtonId == EAknSoftkeyBack || 
              aButtonId == KErrSessionClosed ||
              aButtonId == KErrDisconnected ||
              aButtonId == EAknCmdExit ||
              aButtonId == EEikCmdExit )
        {
        retval = ETrue; //back to previous dialog
        }
    else if( aButtonId == EAknSoftkeyOpen )
        {
        TKeyEvent tmpEvent;
        tmpEvent.iCode = EKeyOK;
        tmpEvent.iModifiers = 0;
        tmpEvent.iRepeats = 0;
        tmpEvent.iScanCode = 0;
        TEventCode eventType = EEventKey;
        OfferKeyEventL( tmpEvent, eventType );
        }
    return retval;
    }

// ---------------------------------------------------------
// CUPnPAdvancedFindDialog::PreLayoutDynInitL()
// called by framework before dialog is shown 
// ---------------------------------------------------------
//
void CUPnPAdvancedFindDialog::PreLayoutDynInitL()
    {
    __LOG( "CUPnPAdvancedFindDialog::PreLayoutDynInitL" );
    iStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
    iTitlePane = ( CAknTitlePane* )iStatusPane->ControlL( 
                                    TUid::Uid( EEikStatusPaneUidTitle ) );
    
    // Take backup of title text
    iOriginalTitleText->Des().Copy( *iTitlePane->Text() );
    // set dialog title
    SetTitleL();
    }
    

// ---------------------------------------------------------
// CUPnPAdvancedFindDialog::ProcessCommandL()
// ---------------------------------------------------------
//    
void CUPnPAdvancedFindDialog::ProcessCommandL ( TInt aCommand )
    {
    __LOG( "CUPnPAdvancedFindDialog::ProcessCommandL" );
    HideMenu();    
    CAknDialog::ProcessCommandL( aCommand );
    }
  
// ---------------------------------------------------------
// CUPnPAdvancedFindDialog::OfferKeyEventL()
// called by framework when key is pressed 
// ---------------------------------------------------------
//
TKeyResponse CUPnPAdvancedFindDialog::OfferKeyEventL(
                                                const TKeyEvent &aKeyEvent,
                                                TEventCode aType )
    {
    __LOG( "CUPnPAdvancedFindDialog::OfferKeyEventL" );
    if ( aType != EEventKey )
        {
        return EKeyWasNotConsumed;
        }
    switch ( aKeyEvent.iCode )
        {
        case EKeyDownArrow: // flow through
        case EKeyUpArrow:
            {
            iSettingsList->OfferKeyEventL( aKeyEvent, aType );
            break;
            }
        case EKeyOK:
            {
            TInt selected_item = iSettingsList->ListBox()->CurrentItemIndex();
            iSettingsList->EditItemL( selected_item, ETrue );
            if( !iClose )
                {
                iSettingsList->HandleChangeInItemArrayOrVisibilityL();    
                }
            
            break;
            }       
        default:
            {
            CAknDialog::OfferKeyEventL( aKeyEvent, aType );
            break;    
            }
        }

    return EKeyWasConsumed;
    }

// --------------------------------------------------------------------------
// CUPnPAdvancedFindDialog::CreateCustomControlL
// --------------------------------------------------------------------------
//
SEikControlInfo CUPnPAdvancedFindDialog::CreateCustomControlL(
                                                        TInt aControlType )
    {
    __LOG( "CUPnPAdvancedFindDialog::CreateCustomControlL" );
    SEikControlInfo controlInfo;
    controlInfo.iControl = NULL;
    controlInfo.iTrailerTextId = 0;
    controlInfo.iFlags = 0;
    switch ( aControlType )
        {
        case KAknCtLastControlId:
            {            
            iSettingsList = CUPnPAdvancedFindList::NewL( iAVControl, 
                                                         iBrowseSession,
                                                         *this,
                                                         iCommonUI );
            controlInfo.iControl = iSettingsList;          
            break;
            }
        default:
            {
            break;
            }
        }    
    return controlInfo;
    }        

// --------------------------------------------------------------------------
// CUPnPAdvancedFindDialog::DismissItselfL
// --------------------------------------------------------------------------
//
void CUPnPAdvancedFindDialog::DismissItselfL( TInt aError )
    {
    iClose = ETrue;
    if( iSettingsList )
        {
        //if setting page is not open, close it, otherwise, do nothing
        if( !iSettingsList->IsSettingPageOpen() )
            {
            TryExitL( aError );
            }
        }
    else
        {
        TryExitL( aError );
        }
    }

// --------------------------------------------------------------------------
// CUPnPAdvancedFindDialog::SetTitleL
// --------------------------------------------------------------------------
//
void CUPnPAdvancedFindDialog::SetTitleL()
    {
    const CUpnpAVDevice* device = &( iBrowseSession.Device() );
    
    // Get device friendly name and replace illegal characters.
    HBufC8* tmpfriendlyname = 
        UPnPCommonUtils::ReplaceIllegalFilenameCharactersL( 
        ( ( CUpnpAVDevice* )device )->FriendlyName() );    
    
    CleanupStack::PushL( tmpfriendlyname );
    TPtrC8 friendlyname = *tmpfriendlyname;
        
    HBufC* titleString = UpnpString::ToUnicodeL( 
        friendlyname.Left( KLength ) );
    CleanupStack::PushL( titleString );
    
    iTitlePane->SetTextL( *titleString );
    CleanupStack::PopAndDestroy( titleString );
    CleanupStack::PopAndDestroy( tmpfriendlyname );
    }
// End of file