--- a/fep/aknfep/src/aknfepuserdbdlg.cpp Tue Jul 06 14:38:41 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1089 +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: Implement method in dialog for user DB management
-*
-*/
-
-
-
-
-
-
-
-
-
-
-
-
-#include <aknlists.h> // CAknSingleStyleListBox
-#include <barsread.h> // TResource Reader
-#include <eikclbd.h> // CColumnListBoxData
-#include <aknsfld.h> //CAknSearchField
-#include <AknQueryDialog.h> //CAknTextQueryDialog
-#include <AknUtils.h> //AknSelectionService , CAknFilteredTextListBoxModel
-#include <StringLoader.h> //StringLoader
-#include <aknnotewrappers.h> //CAknWarningNote
-#include <AknProgressDialog.h> //CAknProgressDialog
-#include <AknDialog.h> //CAknDialog
-#include <akncontext.h> //CAknContextPane
-#include <AknWaitDialog.h> //CAknWaitDialog
-#include <AknProgressDialog.h> //CAknProgressDialog
-#include <eikprogi.h> //CEikProgressInfo
-#include <eikbtgpc.h> //CEikButtonGroupContainer
-#include <eikmenub.h>
-#include <charconv.h> //CCnvCharacterSetConverter
-#include <f32file.h> //RFs
-#include <eikedwin.h> //CEikEdwin
-#include <akntitle.h> //CAknTitlePane
-#include <aknfep.rsg>
-#include "AknFep.hrh"
-#include "aknfepuserdbdlg.h"
-#include "dbmanagement.h"
-#include "AknFepManagerUIInterface.h"
-#include "AknFepManager.h"
-#include "aknfepuserdbquerydlg.h"
-
-const TInt KListBoxItemMaxLength = 8;
-const TInt KErrMsgMaxLength = 60;
-const TInt KFindBoxInputMaxLength = 7;
-const TInt KCDesCArraySize = 1;
-_LIT( KItemStart, "\t" );
-_LIT( KSearchTextEmpty, "" );
-
-CAknFepUserdbDlg::CAknFepUserdbDlg(
- TInt &aValue, CArrayFix< TInt> *aSelectedItems, MDesCArray *aArray,
- CPtiEngine* aPtiEngine, CAknFepManager* aOwner, MEikCommandObserver *aObserver) :
- CAknMarkableListDialog( aValue, aSelectedItems, aArray, aObserver ),
- iPtiEngine( aPtiEngine ),
- iOwner( aOwner ),
- iOldIndex( 0 ),
- iOldLanguage( 0 ),
- iOldCbaRes( 0 )
- {
- // No implementation required
- }
-
-CAknFepUserdbDlg::~CAknFepUserdbDlg()
- {
- delete iDBEngine;
- iDBEngine = NULL;
- iPtiEngine = NULL;
- iOwner = NULL;
- iQueryDlg = NULL;
- if ( iEikonEnv && iContextMenuBar )
- {
- iEikonEnv->EikAppUi()->RemoveFromStack( iContextMenuBar );
- delete iContextMenuBar;
- }
- }
-
-CAknFepUserdbDlg* CAknFepUserdbDlg::NewL(
- TInt &aOpenedItem, CArrayFix< TInt> *aSelectedItems, MDesCArray *aArray,
- TInt aMenuBarResourceId, CPtiEngine* aPtiEngine, CAknFepManager* aOwner,
- MEikCommandObserver *aObserver )
- {
- CAknFepUserdbDlg* self = new( ELeave ) CAknFepUserdbDlg( aOpenedItem,
- aSelectedItems, aArray, aPtiEngine, aOwner, aObserver );
- CleanupStack::PushL( self );
- self->ConstructL( aMenuBarResourceId );
- CleanupStack::Pop( self ); // self;
- return self;
- }
-
-void CAknFepUserdbDlg::ConstructL( TInt aMenuBarResourceId )
- {
- CAknSelectionListDialog::ConstructL( aMenuBarResourceId );
- this->PrepareLC( R_AKNFEP_LISTDLG_DIALOG );
- HBufC* message = StringLoader::LoadLC( R_AKNFEP_USER_DB_LIST_NO_ITEM_TEXT );
- ListBox()->View()->SetListEmptyTextL( *message );
- ConstructContextMenuL();
-
- //the DB engine init
- iDBEngine = CDBManagement::NewL( iOwner );
- CleanupStack::PopAndDestroy( message ); //message
- }
-
-TBool CAknFepUserdbDlg::InitListBoxItemL()
- {
- iItems = new( ELeave ) CDesCArrayFlat( KCDesCArraySize );
-
- TBuf<KErrMsgMaxLength> errMsg;
-
- //get the phrases from the DB
- if ( !iDBEngine->GetPhraseFromDBL( *iItems ) )
- {
- iDBEngine->GetErrMsg( errMsg );
- //note fot err message
- CAknWarningNote* note = new( ELeave ) CAknWarningNote();
- note->SetTone( CAknNoteDialog::EWarningTone );
- note->ExecuteLD( errMsg );
- }
- else
- {
- InsertIconL( iItems );
- }
- CAknSingleStyleListBox* listBox=
- static_cast<CAknSingleStyleListBox*>( Control( ESelectionListControl ) );
- CTextListBoxModel* model = listBox->Model();
- if ( iItems && iItems->Count() != 0 )
- {
- model->SetItemTextArray( iItems );
- model->SetOwnershipType( ELbmOwnsItemArray );
- ListBox()->HandleItemAdditionL();
- return ETrue;
- }
- else
- {
- model->SetItemTextArray( iItems );
- model->SetOwnershipType( ELbmOwnsItemArray );
- return EFalse;
- }
- }
-
-void CAknFepUserdbDlg::AddItemL()
- {
- CAknSingleStyleListBox* listbox =
- static_cast<CAknSingleStyleListBox*>( Control( ESelectionListControl ) );
- // New item text
- TBuf<KListBoxItemMaxLength> itemText;
- TBuf<KErrMsgMaxLength> errMsg;
- if ( FindBox()->TextLength() != 0 )
- {
- FindBox()->GetSearchText( itemText );
- }
- FindBox()->SetFocus( EFalse );
- HBufC* prompt = StringLoader::LoadLC( R_AKNFEP_USER_DB_LIST_ADD_ITEM_TEXT );
- CAknFepUserDBQueryDlg* dialog =
- CAknFepUserDBQueryDlg::NewL( iDBEngine, itemText, *prompt );
- iQueryDlg = dialog;
- CleanupStack::PopAndDestroy( prompt );
- //Execute dialog,
- //In the dialog it will check input and show waring not
- if ( dialog->ExecuteLD( R_AKNFEP_LISTBOX_DATA_QUERY_DIALOG ) )
- {
- TInt currentIndex = 0;
- CAknFilteredTextListBoxModel* model =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- CDesCArray* itemArray =
- static_cast<CDesC16ArrayFlat*>( model->ItemTextArray() );
-
- //Add '\t' at the beginning of itemText for find
- itemText.Insert( 0, KItemStart() );
- //
- TInt ret = itemArray->Find( itemText, currentIndex, ECmpCollated);
- if ( ret != 0 )
- {
- //add the phrase to db
- itemText.Trim();
- if ( !iDBEngine->AddPhraseToDB( itemText ) )
- {
- iDBEngine->GetErrMsg( errMsg );
- //note fot err message
- CAknWarningNote* note = new( ELeave ) CAknWarningNote();
- note->SetTone( CAknNoteDialog::EWarningTone );
- note->ExecuteLD( errMsg );
- // add by chen
- return;
- }
- // Add '\t' in front of text
- itemText.Insert( 0, KItemStart() );
- // Insert item to the item array
- if ( itemArray->Count() > 0 )
- {
- itemArray->InsertL( currentIndex, itemText );
- }
- else
- {
- itemArray->InsertL( 0, itemText );
- }
- // Update the listbox
- listbox->HandleItemAdditionL();
- itemArray->Sort(ECmpCollated);
-
- FindBox()->SetSearchTextL( KSearchTextEmpty );
- ResetSearchFieldL();
- model->Filter()->HandleItemArrayChangeL();
-
- //Highlight the item you have just edited
- itemArray->Find( itemText, currentIndex, ECmpCollated );
- listbox->SetCurrentItemIndexAndDraw( currentIndex );
-
- }
- else
- {
- FindBox()->SetSearchTextL( KSearchTextEmpty );
- ResetSearchFieldL();
- listbox->SetCurrentItemIndexAndDraw( currentIndex );
- }
-
- model->Filter()->UpdateCachedDataL();
- UpdateListBoxL();
- }
- }
-
-void CAknFepUserdbDlg::RemoveItemL()
- {
- //error message
- TBuf<KErrMsgMaxLength> errMsg;
- TBuf<KListBoxItemMaxLength> removePhrase;
- TInt oldIndex = ListBox()->View()->CurrentItemIndex();
- CAknFilteredTextListBoxModel* model =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- CDesCArrayFlat* item =
- static_cast<CDesCArrayFlat*>( model->ItemTextArray() );
- model->Filter()->UpdateSelectionIndexesL();
- TInt markItems = model->Filter()->SelectionIndexes()->Count();
- if ( markItems )
- {
- HBufC * message = StringLoader::LoadLC(
- R_AKNFEP_DELETE_CONFIRMATION_TEXT, markItems,
- iEikonEnv ); //message
- CAknQueryDialog* delsomenote =
- CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone );
- delsomenote->SetPromptL( *message );
- if ( delsomenote->ExecuteLD( R_AKNFEP_DELETE_QUERY_DIALOG ) )
- {
- iProgressDialog = new (ELeave) CAknProgressDialog(
- ( REINTERPRET_CAST( CEikDialog**, &iProgressDialog ) ), ETrue );
- iProgressDialog->PrepareLC( R_AKNFEP_WAIT_DIALOG );
- iProgressInfo = iProgressDialog->GetProgressInfoL();
- iProgressInfo->SetFinalValue( markItems );
- iProgressDialog->RunLD();
- CArrayFix<TInt>* selectionArray = new( ELeave ) CArrayFixFlat<TInt>( markItems );
- CleanupStack::PushL( selectionArray ); //message, selectionArray
- //loop for copy selection index
- for ( TInt idx = markItems; idx > 0; idx-- )
- {
- selectionArray->AppendL( model->Filter()->SelectionIndexes()->At( idx-1 ) );
- }
- TKeyArrayFix* key= new (ELeave) TKeyArrayFix(0, ECmpTInt);
- CleanupStack::PushL( key ); //message, selectionArray, key
- //sort selection array
- selectionArray->Sort( *key );
- CleanupStack::PopAndDestroy( key ); //message, selectionArray
- // loop throught the selected item indexes, and delete items
- for ( TInt idx = markItems; idx > 0; idx-- )
- {
- // get the index of the selected item
- TInt itemIndex = selectionArray->At( idx-1 );
- //romve the phrase form the db
- removePhrase.Copy( item->MdcaPoint( itemIndex ) );
- removePhrase.Trim();
- if( !iDBEngine->RemovePhraseFromDB( removePhrase ) )
- {
- iDBEngine->GetErrMsg( errMsg );
- iProgressDialog->ProcessFinishedL();
- iProgressDialog = NULL;
- CleanupStack::PopAndDestroy( selectionArray ); //message
- CleanupStack::PopAndDestroy( message );//
- //note fot err message
- CAknWarningNote* errnote = new( ELeave ) CAknWarningNote();
- errnote->SetTone( CAknNoteDialog::EWarningTone );
- errnote->ExecuteLD( errMsg );
- return;
- }
- iProgressInfo->IncrementAndDraw(1);
- //delte the item
- item->Delete( itemIndex );
- }
- CleanupStack::PopAndDestroy( selectionArray ); //message
- iProgressDialog->ProcessFinishedL();
- iProgressDialog = NULL;
-
- // Update the listbox
- ResetSearchFieldL();
- ListBox()->HandleItemRemovalL();
- model->Filter()->HandleItemArrayChangeL();
- model->Filter()->SelectionIndexes()->Reset();
- ListBox()->View()->ClearSelection();
- }
- CleanupStack::PopAndDestroy( message );//
- }
- else
- {
- HBufC * message = StringLoader::LoadLC(
- R_AKNFEP_DELETE_CONFIRMATION_TEXT, 1,
- iEikonEnv );
- CAknQueryDialog* delonenote =
- CAknQueryDialog::NewL( CAknQueryDialog::EConfirmationTone );
- delonenote->SetPromptL( *message );
- if ( delonenote->ExecuteLD( R_AKNFEP_DELETE_QUERY_DIALOG ) )
- {
- //remove from db
- removePhrase.Copy( model->ItemText( ListBox()->CurrentItemIndex() ) );
- removePhrase.Delete( 0, 1 );
- if( !iDBEngine->RemovePhraseFromDB( removePhrase ) )
- {
- iDBEngine->GetErrMsg( errMsg );
- //note fot err message
- CAknWarningNote* errnote = new( ELeave ) CAknWarningNote();
- errnote->ExecuteLD( errMsg );
- CleanupStack::PopAndDestroy( message );
- return;
- }
- TInt itemIndex = ListBox()->View()->CurrentItemIndex();
- //get the actual index of list
- TInt actualIndex = FindActualIndex( itemIndex );
- // Remove highlighted item from the listbox.
- item->Delete( actualIndex );
- // Update the listbox
- ResetSearchFieldL();
- }
- CleanupStack::PopAndDestroy( message );
- }
- // If focused item is out of range, bring it forth
- if ( ( ( item->Count()-1 ) >= 0 ) && FindBox()->TextLength() == 0 )
- {
- if ( ( oldIndex > ( item->Count()-1 ) ))
- {
- ListBox()->SetCurrentItemIndexAndDraw( item->Count()-1 );
- }
- else
- {
- ListBox()->SetCurrentItemIndexAndDraw( oldIndex );
- }
- }
- UpdateListBoxL();
- }
-
-void CAknFepUserdbDlg::EditItemL()
- {
- CAknSingleStyleListBox* listbox =
- static_cast<CAknSingleStyleListBox*>( Control( ESelectionListControl ) );
-
- // If we don't have items, do nothing and return
- if ( listbox->Model()->NumberOfItems() < 1 )
- {
- return;
- }
- CTextListBoxModel* model = listbox->Model();
- // New item text
- TBuf<KListBoxItemMaxLength> itemText;
- TBuf<KErrMsgMaxLength> errMsg;
- TBuf<KListBoxItemMaxLength> itemOldText;
- itemText.Copy( model->ItemText(listbox->CurrentItemIndex () ) );
- itemText.Trim();
- itemOldText.Copy( model->ItemText( listbox->CurrentItemIndex() ) );
- itemOldText.Trim();
- HBufC* prompt = StringLoader::LoadLC( R_AKNFEP_USER_DB_LIST_EDIT_ITEM_TEXT );
- CAknFepUserDBQueryDlg* dialog =
- CAknFepUserDBQueryDlg::NewL( iDBEngine, itemText, *prompt );
- iQueryDlg = dialog;
- CleanupStack::PopAndDestroy( prompt );
- // Execute dialog
- if ( dialog->ExecuteLD( R_AKNFEP_LISTBOX_DATA_QUERY_DIALOG ) )
- {
- TInt currentIndex = 0;
- CDesCArray* itemArray =
- static_cast<CDesC16ArrayFlat*>( model->ItemTextArray() );
-
- // Add '\t' in front of text for find
- itemText.Insert( 0, KItemStart() );
- //Find if the text is exist
- TInt ret = itemArray->Find( itemText, currentIndex, ECmpCollated );
- if ( ret != 0 )
- {
- //edit the phrase from db
- itemText.Trim();
- if(!iDBEngine->EditPhraseFromDB( itemOldText, itemText ) )
- {
- iDBEngine->GetErrMsg( errMsg );
-
- //note fot err message
- CAknWarningNote* note = new( ELeave ) CAknWarningNote();
- note->ExecuteLD( errMsg );
- return;
- }
- currentIndex = ListBox()->CurrentItemIndex();
- //get the actual index of list
- TInt actualIndex = FindActualIndex( currentIndex );
-
- // Remove highlighted item from the listbox.
- itemArray->Delete( actualIndex );
-
- // Add '\t' in front of text
- itemText.Insert( 0, KItemStart() );
-
- // Insert item to the item array
- itemArray->InsertL( actualIndex, itemText );
-
- // Update the listbox
- listbox->HandleItemAdditionL();
- itemArray->Sort(ECmpCollated);
-
- if ( FindBox()->TextLength() != 0 )
- {
- FindBox()->SetSearchTextL( KSearchTextEmpty );
- ResetSearchFieldL();
- }
-
- ListBox()->View()->ClearSelection();
- CAknFilteredTextListBoxModel* filterModel =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- filterModel->Filter()->HandleItemArrayChangeL();
- filterModel->Filter()->UpdateCachedDataL();
-
- //SetHightlight
- itemArray->Find( itemText, currentIndex, ECmpCollated );
- ListBox()->SetCurrentItemIndexAndDraw( currentIndex );
- }
- else
- {
- //get the actual index of list
- TInt actualIndex = FindActualIndex( listbox->CurrentItemIndex() );
- if ( currentIndex != actualIndex )
- {
- itemOldText.Copy( model->ItemText( listbox->CurrentItemIndex() ) );
- itemOldText.Trim();
- //Here need user db engine
- if( !iDBEngine->RemovePhraseFromDB( itemOldText ) )
- {
- iDBEngine->GetErrMsg( errMsg );
-
- //note fot err message
- CAknWarningNote* note = new( ELeave ) CAknWarningNote();
- note->ExecuteLD( errMsg );
- return;
- }
-
- currentIndex = ListBox()->CurrentItemIndex();
-
- //get the actual index of list
- actualIndex = FindActualIndex( currentIndex );
-
- // Remove highlighted item from the listbox.
- itemArray->Delete( actualIndex );
-
- listbox->HandleItemRemovalL();
- itemArray->Sort(ECmpCollated);
-
- if ( FindBox()->TextLength() != 0 )
- {
- FindBox()->SetSearchTextL( KSearchTextEmpty );
- ResetSearchFieldL();
- }
-
- ListBox()->View()->ClearSelection();
- CAknFilteredTextListBoxModel* filterModel =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- filterModel->Filter()->HandleItemArrayChangeL();
- filterModel->Filter()->UpdateCachedDataL();
-
- //SetHightlight
- itemArray->Find( itemText, currentIndex, ECmpCollated );
- ListBox()->SetCurrentItemIndexAndDraw( currentIndex );
- }
- }
- UpdateListBoxL();
- }
- }
-
-void CAknFepUserdbDlg::CmdMarkL( TInt aItemIndex, TBool aMark )
- {
- CAknSingleStyleListBox* listbox =
- static_cast<CAknSingleStyleListBox*>( Control( ESelectionListControl ) );
- CTextListBoxModel* model = listbox->Model();
- TInt itemCount = model->NumberOfItems();
- CListBoxView* listBoxView = listbox->View();
- if ( aMark )
- {
- for ( TInt i = 0; i < itemCount; i++ )
- if ( aItemIndex == -1 || aItemIndex == i )
- listBoxView->SelectItemL( i );
- }
- else
- {
- for ( TInt i = 0; i < itemCount; i++ )
- {
- if ( aItemIndex == -1 || aItemIndex == i )
- {
- listBoxView->DeselectItem( i );
- }
- }
- }
- CAknFilteredTextListBoxModel* filterModel =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- filterModel->Filter()->UpdateCachedDataL();
- }
-
-void CAknFepUserdbDlg::ChangeCurrentCbaL ( TInt aCbaResourceId )
- {
- if ( iOwner->IsEntryPhrase() || iOldCbaRes == aCbaResourceId )
- {
- return;
- }
- CEikButtonGroupContainer& cba = ButtonGroupContainer();
- cba.SetCommandSetL( aCbaResourceId );
- cba.AddCommandSetToStackL( aCbaResourceId );
- iOldCbaRes = aCbaResourceId;
- cba.DrawNow();
- }
-
-void CAknFepUserdbDlg::ProcessCommandL( TInt aCommandId )
- {
- HideMenu();
-
- iContextMenuBar->StopDisplayingMenuBar();
-
- switch ( aCommandId )
- {
- case EAknCmdUserDBAdd:
- {
- AddItemL();
- }
- break;
- case EAknCmdUserDBEdit:
- {
- EditItemL();
- }
- break;
- case EAknCmdUserDBDelete:
- {
- RemoveItemL();
- }
- break;
- case EAknCmdMark:
- case EAknMarkAll:
- case EAknCmdUnmark:
- case EAknUnmarkAll:
- {
- AknSelectionService::HandleMarkableListProcessCommandL( aCommandId, ListBox() );
- UpdateListBoxL( aCommandId );
- }
- break;
- default:
- {
- break;
- }
- }
- }
-
-TBool CAknFepUserdbDlg::OkToExitL( TInt aButtonId )
- {
- switch ( aButtonId )
- {
- case EAknSoftkeyOptions:
- {
- CAknSelectionListDialog::DisplayMenuL(); // display the menu
- }
- break;
- case EAknCmdUserDBAdd:
- {
- ProcessCommandL(EAknCmdUserDBAdd);
- }
- break;
- case EAknSoftkeyMark:
- {
- TInt ItemCount = ListBox()->Model()->NumberOfItems();
- TInt selectedItem = ListBox()->SelectionIndexes()->Count();
- if ( selectedItem < 1 && ItemCount > 0 )
- {
- //Show options-context-exit cba
- ChangeCurrentCbaL ( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT );
- }
- }
- break;
- case EAknSoftkeyUnmark:
- {
- TInt ItemCount = ListBox()->Model()->NumberOfItems();
- TInt selectedItem = ListBox()->SelectionIndexes()->Count();
- if ( selectedItem == 0 && ItemCount > 0 )
- {
- //Show options-context-exit cba
- ChangeCurrentCbaL ( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT );
- }
- }
- break;
- case EAknSoftkeyContextOptions:
- {
- TInt items = ListBox()->Model()->NumberOfItems();
- if ( items )
- {
- ShowContextMenuL();
- }
- }
- break;
- case EAknCmdMark:
- case EAknMarkAll:
- case EAknCmdUnmark:
- case EAknUnmarkAll:
- {
- ProcessCommandL( aButtonId );
- }
- break;
- case EAknSoftkeyExit:
- {
- return ETrue;
- }
- default:
- {
- break;
- }
- }
-
- return EFalse;
- }
-
-void CAknFepUserdbDlg::FocusChanged(TDrawNow aDrawNow)
- {
- if ( aDrawNow == EDrawNow )
- {
- if ( ( FindBox()->IsVisible() && !iOwner->IsEntryPhrase()) )
- {
- FindBox()->SetFocus( ETrue );
- }
- }
- }
-
-void CAknFepUserdbDlg::DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane )
- {
- if ( aResourceId == R_AKNFEP_USERDB_DLG_MENU )
- {
- const CArrayFix<TInt>* itemArray = ListBox()->SelectionIndexes();
- if ( itemArray->Count() != 0 )
- {
- aMenuPane->SetItemDimmed( EAknCmdUserDBAdd, ETrue );
- aMenuPane->SetItemDimmed( EAknCmdUserDBEdit, ETrue );
- }
- else
- {
- aMenuPane->SetItemDimmed( EAknCmdUserDBAdd, EFalse );
- aMenuPane->SetItemDimmed( EAknCmdUserDBEdit, EFalse );
- }
- }
- if ( aResourceId == R_AKNFEP_MARK_UNMARK_MENUPANE )
- {
- TInt currentIndex = ListBox()->CurrentItemIndex();
- TInt selectedItem = ListBox()->SelectionIndexes()->Count();
- TInt listItems = ListBox()->Model()->NumberOfItems();
-
- // Display mark, mark all
- if ( selectedItem == 0 )
- {
- aMenuPane->SetItemDimmed( EAknCmdUnmark, ETrue );
- aMenuPane->SetItemDimmed( EAknUnmarkAll, ETrue );
- return;
- }
- // Display unmark, unmark all
- if ( selectedItem == listItems )
- {
- aMenuPane->SetItemDimmed( EAknCmdMark, ETrue );
- aMenuPane->SetItemDimmed( EAknMarkAll, ETrue );
- return;
- }
- TBool isMarked = EFalse;
-
- for ( TInt i = 0; i < selectedItem; i++ )
- {
- TInt selectedId = ListBox()->SelectionIndexes()->At( i );
- if ( selectedId == currentIndex )
- {
- isMarked = ETrue;
- }
- }
-
- if ( isMarked )
- {
- aMenuPane->SetItemDimmed( EAknCmdMark, ETrue );
- }
- else
- {
- aMenuPane->SetItemDimmed( EAknCmdUnmark, ETrue );
- }
- }
- }
-
-TKeyResponse CAknFepUserdbDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent,
- TEventCode aType )
- {
- TKeyResponse ret(EKeyWasNotConsumed);
-
- CAknFilteredTextListBoxModel* filterModel =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
-
- TInt ItemCount = ListBox()->Model()->NumberOfItems();
-
- ListBoxItemsChanged( ListBox() );
-
- if ( ret != EKeyWasConsumed && aKeyEvent.iCode == EKeyPhoneEnd )
- {
- TryExitL( EAknSoftkeyExit );
- return EKeyWasConsumed;
- }
-
- TBool claerKeyPressed = ( aType == EEventKey ) && ( aKeyEvent.iCode == EKeyBackspace );
- if( claerKeyPressed && ItemCount > 0 && FindBox()->TextLength() == 0 )
- {
- ProcessCommandL(EAknCmdUserDBDelete);
- UpdateListBoxL();
- ret = EKeyWasConsumed;
- }
- else
- {
- if ( FindBox()->IsVisible() )
- {
- ret = CAknMarkableListDialog::OfferKeyEventL( aKeyEvent, aType );
- }
- else
- {
- ret = ListBox()->OfferKeyEventL( aKeyEvent, aType );
- }
- }
-
- if ( ret != EKeyWasConsumed && aType == EEventKey &&
- aKeyEvent.iCode == EKeyOK )
- {
- iContextMenuBar->TryDisplayMenuBarL();
- ret = EKeyWasConsumed;
- }
-
- return ret;
- }
-
-void CAknFepUserdbDlg::PostLayoutDynInitL()
- {
- CAknMarkableListDialog::PostLayoutDynInitL();
- FindBox()->Editor().SetMaxLength( KFindBoxInputMaxLength );
- ListBox()->SetObserver( this );
- ListBox()->AddItemChangeObserverL( this );
-
- InitListBoxItemL();
- UpdateListBoxL();
-
- return;
- }
-
-void CAknFepUserdbDlg::ConstructContextMenuL()
- {
- CEikMenuBar* newMenuBar = new ( ELeave ) CEikMenuBar();
- CleanupStack::PushL( newMenuBar );
- newMenuBar->ConstructL
- ( this, NULL, R_AKNFEP_USERDB_DLG_CONTEXT_MENUBAR );
- iEikonEnv->EikAppUi()->AddToStackL( newMenuBar, ECoeStackPriorityMenu,
- ECoeStackFlagRefusesFocus );
- iContextMenuBar = newMenuBar;
- CleanupStack::Pop( newMenuBar );
- }
-
-void CAknFepUserdbDlg::HandleListBoxEventL(CEikListBox* /*aListBox*/, TListBoxEvent aEventType)
- {
- CTextListBoxModel* model = static_cast<CTextListBoxModel*>( ListBox()->Model() );
- CDesCArrayFlat* itemArray =
- static_cast<CDesCArrayFlat*>( model->ItemTextArray() );
- TInt listItems = itemArray->Count();
-
- if ( !listItems )
- {
- return;
- }
-
- CAknSelectionListDialog::HandleListBoxEventL( ListBox(), aEventType );
-
- switch ( aEventType )
- {
- case EEventItemDoubleClicked:
- {
- TInt selectItems = ListBox()->SelectionIndexes()->Count();
- if ( selectItems )
- {
- iOldIndex = ListBox()->CurrentItemIndex();
- MarkOrUnmarkItemL();
- }
- else
- {
- ShowContextMenuL();
- }
- }
- break;
- default:
- break;
- }
- }
-
-
-void CAknFepUserdbDlg::ResetSearchFieldL()
- {
- CAknFilteredTextListBoxModel* selectmodel =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- selectmodel->Filter()->HandleItemArrayChangeL();
- }
-
-TInt CAknFepUserdbDlg::FindActualIndex( const TInt aItemIndex )
- {
- TInt itemIndex;
- CTextListBoxModel* model =
- static_cast<CTextListBoxModel*>( ListBox()->Model() );
- CDesCArrayFlat* itemArray =
- static_cast<CDesCArrayFlat*>( model->ItemTextArray() );
- //get the real index of list
- TBuf<KListBoxItemMaxLength> itemText;
- itemText.Copy( model->ItemText(aItemIndex) );
- itemArray->Find( itemText, itemIndex, ECmpCollated );
- return itemIndex;
- }
-
-void CAknFepUserdbDlg::ShowContextMenuL()
- {
- iContextMenuBar->SetMenuTitleResourceId( R_AKNFEP_USERDB_DLG_CONTEXT_MENUBAR );
- iContextMenuBar->SetMenuType( CEikMenuBar::EMenuContext );
- iContextMenuBar->StopDisplayingMenuBar();
- iContextMenuBar->TryDisplayMenuBarL();
- iContextMenuBar->SetMenuTitleResourceId( R_AKNFEP_USERDB_DLG_MENUBAR );
- iContextMenuBar->SetMenuType( CEikMenuBar::EMenuOptions );
- }
-
-void CAknFepUserdbDlg::MarkOrUnmarkItemL()
- {
- TInt selectIndex = 0;
- TKeyArrayFix* key= new (ELeave) TKeyArrayFix( 0, ECmpTInt32 );
- CleanupStack::PushL( key );
- TInt index = ListBox()->CurrentItemIndex();
- const CArrayFix<TInt>* selectitemArray = ListBox()->SelectionIndexes();
- TInt ret = selectitemArray->Find( index, *key, selectIndex );
- if ( ret == 0)
- {
- ProcessCommandL( EAknCmdUnmark );
- }
- else
- {
- ProcessCommandL( EAknCmdMark );
- }
- CleanupStack::PopAndDestroy( key );
- }
-
-void CAknFepUserdbDlg::InsertIconL( CDesC16Array* aDataArray )
- {
- TBuf<KListBoxItemMaxLength> itemText;
- for ( TInt i = 0; i < aDataArray->Count(); i++ )
- {
- itemText = aDataArray->MdcaPoint( i );
- itemText.Insert( 0, KItemStart );
- aDataArray->Delete( i );
- aDataArray->InsertL( i, itemText );
- }
- aDataArray->Sort( ECmpCollated );
- }
-
-void CAknFepUserdbDlg::OnChangeLanguageL( TInt aInputLanguage )
- {
- if ( aInputLanguage != ELangPrcChinese &&
- aInputLanguage != ELangTaiwanChinese &&
- aInputLanguage != ELangHongKongChinese )
- {
- if ( iQueryDlg && iQueryDlg->IsVisible() )
- {
- delete iQueryDlg;
- iQueryDlg = NULL;
- }
- this->TryExitL( EAknSoftkeyExit );
- return;
- }
- if ( iOldLanguage == aInputLanguage )
- {
- return;
- }
- iOldLanguage = aInputLanguage;
-
- CAknFilteredTextListBoxModel* model =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- CDesCArrayFlat* itemArray =
- static_cast<CDesCArrayFlat*>( model->ItemTextArray() );
- TBuf<KErrMsgMaxLength> errMsg;
-
- AknSelectionService::HandleMarkableListProcessCommandL( EAknUnmarkAll, ListBox() );
- itemArray->Reset();
-
- //get the phrases from the DB
- if ( !iDBEngine->GetPhraseFromDBL( *itemArray ) )
- {
- iDBEngine->GetErrMsg( errMsg );
- //note fot err message
- CAknWarningNote* note = new( ELeave ) CAknWarningNote();
- note->SetTone( CAknNoteDialog::EWarningTone );
- note->ExecuteLD( errMsg );
- }
- else
- {
- InsertIconL( itemArray );
- ListBox()->HandleItemAdditionL();
- ListBox()->ClearSelection();
- FindBox()->SetFocus( ETrue );
- FindBox()->SetFocusing( ETrue );
- FindBox()->MakeVisible( ETrue );
- }
- if ( itemArray->Count() == 0 )
- {
- FindBox()->SetSearchTextL( KSearchTextEmpty );
- FindBox()->SetFocus( EFalse );
- FindBox()->SetFocusing( EFalse );
- FindBox()->MakeVisible( EFalse );
- ListBox()->SetRect( Rect() );
- ListBox()->View()->DrawEmptyList( Rect() );
-
- //Show add-add-exit cba
- ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_ADD_EXIT );
- }
- else
- {
- ListBox()->SetCurrentItemIndex( 0 );
- }
- }
-
-void CAknFepUserdbDlg::ListBoxItemsChanged( CEikListBox* aListBox )
- {
- CAknFilteredTextListBoxModel* filterModel =
- static_cast<CAknFilteredTextListBoxModel*>( aListBox->Model() );
- CDesCArrayFlat* itemArray =
- static_cast<CDesCArrayFlat*>( filterModel->ItemTextArray() );
-
- TInt ItemCount = aListBox->Model()->NumberOfItems();
- TInt selectedItem = filterModel->Filter()->SelectionIndexes()->Count();
- if ( ItemCount > 0 && selectedItem < 1 )
- {
- //Show options-context-exit cba
- TRAP_IGNORE ( ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT ) );
- }
- else
- {
- if ( ItemCount == 0)
- {
- //Show add-add-exit cba
- TRAP_IGNORE ( ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_ADD_EXIT ) );
- if ( itemArray->Count() == 0 && FindBox()->TextLength() == 0 )
- {
- FindBox()->SetFocus( EFalse );
- FindBox()->MakeVisible( EFalse );
- }
-
- if ( FindBox()->TextLength() == 0 )
- {
- ListBox()->SetRect( Rect() );
- ListBox()->View()->DrawEmptyList( Rect() );
- }
- }
- }
- }
-
-void CAknFepUserdbDlg::UpdateListBoxL( TInt aCommandId )
- {
- // Update the listbox
- CAknFilteredTextListBoxModel* filterModel =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- filterModel->Filter()->UpdateCachedDataL();
-
- TInt selectedItem = ListBox()->SelectionIndexes()->Count();
-
-
- CAknFilteredTextListBoxModel* model =
- static_cast<CAknFilteredTextListBoxModel*>( ListBox()->Model() );
- CDesCArrayFlat* itemArray =
- static_cast<CDesCArrayFlat*>( model->ItemTextArray() );
- TInt listItems = model->NumberOfItems();
-
- if ( listItems != 0 && selectedItem != 0)
- {
- TInt CurrentItemIndex = ListBox()->CurrentItemIndex();
- if( ( aCommandId == EAknCmdMark || aCommandId == EAknMarkAll ) &&
- ListBox()->View()->ItemIsSelected(CurrentItemIndex))
- {
- //Show options-unmark-exit menu
- ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_MARK );
- }
- if( ( aCommandId == EAknCmdUnmark || aCommandId == EAknUnmarkAll ) &&
- !ListBox()->View()->ItemIsSelected(CurrentItemIndex))
- {
- //Show options-mark-exit menu
- ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_UNMARK );
- }
- }
-
- if ( listItems == 0 )
- {
- //Show add-add-exit cba
- ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_ADD_EXIT );
- if ( itemArray->Count() == 0 && FindBox()->TextLength() == 0 )
- {
- FindBox()->SetFocus( EFalse );
- FindBox()->MakeVisible( EFalse );
- }
-
- if ( FindBox()->TextLength() == 0 )
- {
- ListBox()->SetRect( Rect() );
- ListBox()->View()->DrawEmptyList( Rect() );
- }
- }
- if( selectedItem == 0 && listItems != 0 )
- {
- FindBox()->MakeVisible( ETrue );
- FindBox()->SetFocus( ETrue );
- FindBox()->DrawNow();
- TRect findpaneRect(FindBox()->Rect());
- TRect clientRect = Rect();
- TSize size = TSize(clientRect.Width(),
- clientRect.Height() - findpaneRect.Height());
- ListBox()->SetRect( TRect(clientRect.iTl, size) );
- ListBox()->View()->Draw();
- //Show options-context-exit cba
- ChangeCurrentCbaL( R_AKNFEP_SOFTKEYS_LIST_OPTIONS_EXIT_CONTEXT );
- }
-
- if ( FindBox()->IsVisible() )
- {
- FindBox()->SetFocus( ETrue );
- FindBox()->MakeVisible( ETrue );
- }
- }
-
-CCoeControl* CAknFepUserdbDlg::ComponentControl(TInt aIndex) const
- {
- if ( aIndex == CAknMarkableListDialog::CountComponentControls() )
- {
- return ListBox();
- }
- else
- {
- return CAknMarkableListDialog::ComponentControl(aIndex);
- }
- }
-
-TInt CAknFepUserdbDlg::CountComponentControls() const
- {
- if ( ListBox() )
- {
- return CAknMarkableListDialog::CountComponentControls() + 1;
- }
- else
- {
- return CAknMarkableListDialog::CountComponentControls();
- }
- }
-
-
-
-void CAknFepUserdbDlg::SizeChanged()
- {
- //Change title text
- CEikStatusPane* statusPane = CEikonEnv::Static()->AppUiFactory()->StatusPane();
- CAknTitlePane* title = NULL;
- TRAP_IGNORE( title = static_cast< CAknTitlePane* >(
- statusPane->ControlL( TUid::Uid( EEikStatusPaneUidTitle) ) ) );
-
- //Load the new title text
- HBufC* titletext = StringLoader::LoadLC( R_AKNFEP_USER_DB_MANAGEMENT_TITLE );
- //Set title to the new text
- TRAP_IGNORE( title->SetTextL( *titletext ));
- CleanupStack::PopAndDestroy( titletext );
- }
-// End of file