cbs/cbsui/UiSrc/CCbsUiEditTopicDlg.cpp
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:15:03 +0100
branchRCL_3
changeset 20 987c9837762f
parent 0 ff3b6d0fd310
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* Copyright (c) 2002 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:  
*     Implementation of CCbsUiEditTopicDlg.
*
*
*/


// INCLUDES
#include    <avkon.hrh>             // EMultilineFirstLine, EMultilineSecondLine
#include    <layoutmetadata.cdl.h>  // Layout_Meta_Data::IsLandscapeOrientation()  
#include    <AknUtils.h>            // AknTextUtils
#include    <aknQueryControl.h>
#include    <cbsuiApp.rsg>
#include    <StringLoader.h>
#include    <AknDef.h>              // KEikDynamicLayoutVariantSwitch
#include    "Cbsuiapp.hrh"
#include    "CCbsUiEditTopicDlg.h"
#include    "CCbsUiTopicListView.h"
#include    "CbsUiPanic.h"
#include    "CbsUiUtility.h"


//CONSTANTS
_LIT(KDummyString,"");

// ================= MEMBER FUNCTIONS =======================

// C++ default constructor can NOT contain any code, that
// might leave.
//
CCbsUiEditTopicDlg::CCbsUiEditTopicDlg( CCbsUiTopicListView& aTopicListView,
                                       TBool aType ) 
                                       : 
CAknMultiLineDataQueryDialog(ENoTone),    
iTopicListView(aTopicListView),
iType(aType)   
    {
    }

// ---------------------------------------------------------
// CCbsUiEditTopicDlg::ConstructL
// 
// ---------------------------------------------------------
//
void CCbsUiEditTopicDlg::ConstructL( TDes& aDataText, TDes& aDataText2 )
    {
    SetDataL(aDataText, aDataText2);
    iUpdateLeftSoftKeyFirstTime = ETrue;   
    }

// ---------------------------------------------------------
// CCbsUiEditTopicDlg::NewL
// 
// ---------------------------------------------------------
//
CCbsUiEditTopicDlg* CCbsUiEditTopicDlg::NewL( TDes& aDataText, TDes& aDataText2,
                                             CCbsUiTopicListView& aTopicListView, TBool aType )
    {
    CCbsUiEditTopicDlg* self = 
        new (ELeave) CCbsUiEditTopicDlg(aTopicListView, aType);
    CleanupStack::PushL(self);
    self->ConstructL(aDataText, aDataText2);
    CleanupStack::Pop(); // self
    
    return self;
    }

// Destructor
CCbsUiEditTopicDlg::~CCbsUiEditTopicDlg()
    {
    }

// ---------------------------------------------------------
// CCbsUiEditTopicDlg::OkToExitL
// 
// ---------------------------------------------------------
//
TBool CCbsUiEditTopicDlg::OkToExitL( TInt aButtonId )
    {
    // just to update the values
    TBool okToExit( CAknMultiLineDataQueryDialog::OkToExitL( aButtonId ) );
    if ( okToExit )
        {
        TBuf<KCbsDbTopicNameLength> dummy( KDummyString );
        TBuf<KCbsDbTopicNameLength> topicNumberStr;
        topicNumberStr = SecondData( dummy );
        AknTextUtils::ConvertDigitsTo( topicNumberStr, EDigitTypeWestern );
        TLex lex( topicNumberStr );
        TCbsTopicNumber tn;
        
        // No need to panic!
        User::LeaveIfError( lex.Val( tn, EDecimal ) );
        
        TCbsTopicName topicName;
        
        topicName.Append( FirstData( dummy ) );
        
        TInt ret( KErrGeneral ); // just to differ from KErrNone
        
        ret = iTopicListView.EditTopic( iType, tn, topicName );
        
        switch ( ret )
            {
            case KErrDiskFull:
                User::Leave( KErrDiskFull );
                break;
            case KErrNone:
                // do nothing
                break;
            default:
                // shows the error note and the dialog is not closed
                CbsUiUtility::ShowErrorNoteL( R_TEXT_NOTE_NUMBER_ERROR );
                okToExit = EFalse;
                SetCursorAndFocusL();
                break;
            }
        }
    
    return okToExit;    
    }


// ---------------------------------------------------------
// CCbsUiEditTopicDlg::LineChangedL
// 
// ---------------------------------------------------------
//
void CCbsUiEditTopicDlg::LineChangedL( TInt /*aControlId*/ )
    {
    UpdateLeftSoftKeyL();
    }


// ----------------------------------------------------
// CCbsUiEditTopicDlg::HandleResourceChange
//
// ----------------------------------------------------
void CCbsUiEditTopicDlg::HandleResourceChange( TInt aType )
    {
    CAknMultiLineDataQueryDialog::HandleResourceChange( aType );
    
    if( aType == KEikDynamicLayoutVariantSwitch )
        {
        TRAPD( ignore, UpdateLeftSoftKeyL( ) );
        if( ignore )
            {
            ignore = KErrNone; //Prevent ARMV5 compilation varning
            }
        }    
    }


// ---------------------------------------------------------
// CCbsUiEditTopicDlg::UpdateLeftSoftKeyL
// Note: iUpdateLeftSoftKeyFirstTime must use because when we
// go to UpdateLeftSoftKeyL() method first time then IdOfFocusControl()
// method doesn't work ok yet.
// ---------------------------------------------------------
//
void CCbsUiEditTopicDlg::UpdateLeftSoftKeyL()
    {
    if( ( Layout_Meta_Data::IsLandscapeOrientation() ) && 
        ( ( IdOfFocusControl() == EMultilineFirstLine) || iUpdateLeftSoftKeyFirstTime ) )
        {
        MakeLeftSoftkeyVisible( ETrue );
        }
    else
        {
        TBuf<EMaxTopicNumberLength> buf;
        SecondControl()->GetText( buf );
        AknTextUtils::ConvertDigitsTo( buf, EDigitTypeWestern );
        TLex lex( buf );
        TInt topicNumber( -1 );
        if ( lex.Val( topicNumber ) == KErrNone )
            {
            MakeLeftSoftkeyVisible( ETrue );
            }
        else
            {
            MakeLeftSoftkeyVisible( EFalse );
            }
        }
    iUpdateLeftSoftKeyFirstTime = EFalse;  
    }

// ---------------------------------------------------------
// CCbsUiEditTopicDlg::SetCursorAndFocusL
// 
// ---------------------------------------------------------
//
void CCbsUiEditTopicDlg::SetCursorAndFocusL()
    {
    TryChangeFocusToL(EMultilineSecondLine);
    CAknQueryControl* control = 
        STATIC_CAST( CAknQueryControl*, 
        Control(EMultilineSecondLine) );
    CEikEdwin* edwin = STATIC_CAST(
        CEikEdwin*, control->ControlByLayoutOrNull(EDataLayout) );
    edwin->SetSelectionL( control->GetTextLength(),0 );  
    }


//  End of File