diff -r ebd48d2de13c -r ecbabf52600f textinput/peninputhwrtrui/src/truimainview.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputhwrtrui/src/truimainview.cpp Wed Sep 01 12:23:33 2010 +0100 @@ -0,0 +1,401 @@ +/* +* Copyright (c) 2007 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 of class CTruiMainView +* +*/ + + +#include +#include +#include +#include +#include +#include + +#include "truimainview.h" +#include "truimainviewcontainer.h" +#include "trui.hrh" +#include "truiappui.h" +#include "truiengine.h" +#include "truishortcutsview.h" + +// ======== MEMBER FUNCTIONS ======== + +CTruiMainView::CTruiMainView() + { + } + +void CTruiMainView::ConstructL() + { + BaseConstructL( R_TRUI_MAINVIEW ); + } + +CTruiMainView* CTruiMainView::NewL() + { + CTruiMainView* self = CTruiMainView::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +CTruiMainView* CTruiMainView::NewLC() + { + CTruiMainView* self = new( ELeave ) CTruiMainView; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +CTruiMainView::~CTruiMainView() + { + } + +// --------------------------------------------------------------------------- +// From class CAknView. +// Returns views id. +// --------------------------------------------------------------------------- +// +TUid CTruiMainView::Id() const + { + return KTruiMainViewId; + } + +// --------------------------------------------------------------------------- +// From class CAknView. +// Command handling function. +// --------------------------------------------------------------------------- +// +void CTruiMainView::HandleCommandL( TInt aCommand ) + { + switch ( aCommand ) + { + case EMainViewCharGrid: + { + // Handle menu item command "Character Grid" + iContainer->HandleChooseCharEventL(); + } + break; + case EMainViewSubmenuWestern: + case EMainViewSubmenuCyrillic: + case EMainViewSubmenuGreek: + case EMainViewSubmenuHebrew: + { + iContainer->HandleLanguageScriptChangedL( aCommand ); + } + break; + case EMainViewSubmenuLatinLowerLetter: + case EMainViewSubmenuLatinUpperLetter: + case EMainViewSubmenuLatinAccent: + case EMainViewSubmenuDigital: + case EMainViewSubmenuSymbols: + case EMainViewSubmenuCyrillicLowerLetters: + case EMainViewSubmenuCyrillicUpperLetters: + case EMainViewSubmenuCyrillicAccent: + case EMainViewSubmenuGreekLowerLetters: + case EMainViewSubmenuGreekUpperLetters: + case EMainViewSubmenuHebrewLetters: + { + // Handle character range changed + // Get range index in menu pane by range Id + CTruiAppUi* appui = static_cast( AppUi() ); + CTruiEngine* engine = appui->HwrEngine(); + const RArray& rangeIdArray = + engine->GetCurrentSupportedRangesId(); + TInt indexOfMenuItems = rangeIdArray.Find( aCommand ); + if ( indexOfMenuItems != KErrNotFound ) + { + // Set current character range by index in Engine + engine->SetCharacterRangeByIndexL( indexOfMenuItems ); + + // Call iContainer->HandleCharRangeChanged to handle it. + iContainer->HandleCharRangeChangedL( indexOfMenuItems, + aCommand ); + } + } + break; + case EMainViewDeleteCurrentModel: + { + iContainer->DeleteModelL(); + } + break; + case EMainViewDeleteAllModel: + { + iContainer->DeleteAllModelL(); + break; + } + case EMainViewPreviewModel: + { + iContainer->PreviewCharacterModel(); + break; + } + case EMainViewToShortcutsView: + { + CTruiAppUi* appui = static_cast( AppUi() ); + CAknNavigationDecorator* naviDecorator = appui->GetNaviDecorator(); + CAknTabGroup* tabGroup = static_cast + ( naviDecorator->DecoratedControl() ); + tabGroup->SetActiveTabById( ENavigationPaneShortcutsViewTab ); + // Switch to local view. + appui->ActivateLocalViewL( KTruiShortcutsViewId ); + break; + } + case EAknSoftkeyExit: + { + iContainer->PrepareToExitL(); + AppUi()->HandleCommandL( aCommand ); + } + break; + default: + { + AppUi()->HandleCommandL( aCommand ); + } + } + } + +// --------------------------------------------------------------------------- +// From class CAknView. +// Carried out when View is activated +// --------------------------------------------------------------------------- +// +void CTruiMainView::DoActivateL( const TVwsViewId& /*aPrevViewId*/, + TUid /*aCustomMessageId*/, + const TDesC8& /*aCustomMessage*/ ) + { + // Set title pane + CTruiAppUi* appui = static_cast( AppUi() ); + HBufC* titleText = + iEikonEnv->AllocReadResourceLC( R_TRUI_MAINVIEW_TITLEPANE_TEXT ); + appui->ShowTitlePaneL( *titleText ); + CleanupStack::PopAndDestroy( titleText ); + + iContainer = CTruiMainViewContainer::NewL( ClientRect() ); + iContainer->SetMopParent( this ); + AppUi()->AddToStackL( *this, iContainer ); + iContainer->SetView( this ); + + // Set toolbar + CAknToolbar* toolbar = Toolbar(); + if ( toolbar ) + { + toolbar->SetToolbarObserver( this ); + toolbar->SetToolbarVisibility( ETrue, EFalse ); + } + } + +// --------------------------------------------------------------------------- +// From class CAknView. +// Carried out when View is deactivated +// --------------------------------------------------------------------------- +// +void CTruiMainView::DoDeactivate() + { + if ( iContainer ) + { + AppUi()->RemoveFromStack( iContainer ); + delete iContainer; + iContainer = NULL; + } + } + +// --------------------------------------------------------------------------- +// From class MAknToolbarObserver. +// Handles toolbar events for a certain toolbar item. +// --------------------------------------------------------------------------- +// +void CTruiMainView::OfferToolbarEventL( TInt aCommand ) + { + switch ( aCommand ) + { + case EMainViewButtonIdGrid: + { + // Open SCT + iContainer->HandleChooseCharEventL(); + break; + } + case EMainViewButtonIdPreview: + { + // Preview character animation + iContainer->PreviewCharacterModel(); + break; + } + case EMainViewButtonIdDelete: + { + // Clear HWR box and delete character model + iContainer->DeleteModelL(); + break; + } + } + } + +// --------------------------------------------------------------------------- +// Dynamically initialises a menu pane. +// --------------------------------------------------------------------------- +// +void CTruiMainView::DynInitMenuPaneL( TInt aResourceId, + CEikMenuPane* aMenuPane ) + { + // Get engine + CTruiAppUi* appui = static_cast( AppUi() ); + CTruiEngine* engine = appui->HwrEngine(); + + if ( aResourceId == R_TRUI_MAINVIEW_MENUPANE ) + { + // Get language script from engine + // Determine whether "Language script" will be displayed. + aMenuPane->SetItemDimmed( EMainViewLanguageScript, + ( engine->SupportedLanguageScript().Count() <= 1 ) ); + + // Determine whether "Delete model" will be displayed + iDimAllDelete = iContainer->IsAllDelete(); + + TBool isDimmed = ( iContainer->IsButtonDimmed() && iDimAllDelete ) + ? ETrue: EFalse; + aMenuPane->SetItemDimmed( EMainViewDeleteModel, isDimmed ); + + // Determine whether "Preview model" will be displayed. + TBool isPreviewDimmed = iContainer->IsButtonDimmed() ? ETrue: EFalse; + aMenuPane->SetItemDimmed( EMainViewPreviewModel, isPreviewDimmed ); + } + if ( aResourceId == R_TRUI_MAINVIEW_MENU_LANGUAGESCRIPT_CASCADE ) + { + // Set which items will be displayed by supported language script + const RArray& languageScriptId = + engine->SupportedLanguageScript(); + aMenuPane->SetItemDimmed( EMainViewSubmenuWestern, ETrue ); + aMenuPane->SetItemDimmed( EMainViewSubmenuCyrillic, ETrue ); + aMenuPane->SetItemDimmed( EMainViewSubmenuGreek, ETrue ); + aMenuPane->SetItemDimmed( EMainViewSubmenuHebrew, ETrue ); + for ( TInt i = 0; i < languageScriptId.Count(); i++ ) + { + aMenuPane->SetItemDimmed( languageScriptId[i], EFalse ); + } + + if ( IsMenuItemDimmed( aMenuPane, EMainViewSubmenuWestern ) ) + { + aMenuPane->DeleteMenuItem( EMainViewSubmenuWestern ); + } + if ( IsMenuItemDimmed( aMenuPane, EMainViewSubmenuCyrillic ) ) + { + aMenuPane->DeleteMenuItem( EMainViewSubmenuCyrillic ); + } + if ( IsMenuItemDimmed( aMenuPane, EMainViewSubmenuGreek ) ) + { + aMenuPane->DeleteMenuItem( EMainViewSubmenuGreek ); + } + if ( IsMenuItemDimmed( aMenuPane, EMainViewSubmenuHebrew ) ) + { + aMenuPane->DeleteMenuItem( EMainViewSubmenuHebrew ); + } + + // Set which item will be indicated by current language script + aMenuPane->SetItemButtonState( engine->CurrentLanguageScript(), + EEikMenuItemSymbolOn ); + + // Set current selected item + TInt pos; + aMenuPane->ItemAndPos( engine->CurrentLanguageScript(), pos ); + aMenuPane->SetSelectedItem( pos ); + } + if ( aResourceId == R_TRUI_MAINVIEW_MENU_CHARRANGE_CASCADE ) + { + // Get language script from model + // Init character range submenu + InitCharRangeSubMenuL( engine->CurrentLanguageScript(), aMenuPane ); + + if ( engine->CurrentLanguageScript() == EMainViewSubmenuCyrillic ) + { + // Dim cyrillic accent range + aMenuPane->SetItemDimmed( EMainViewSubmenuCyrillicAccent, ETrue ); + } + + // Get the current item's Id + TInt rangeId = engine->GetCurrentCharacterRange(); + + // Set which item to be indicated + aMenuPane->SetItemButtonState( rangeId, EEikMenuItemSymbolOn ); + + // Set which item to be highlighted + const RArray& rangeIdArray = + engine->GetCurrentSupportedRangesId(); + TInt indexOfMenuItems = rangeIdArray.Find( rangeId ); + if ( indexOfMenuItems != KErrNotFound ) + { + aMenuPane->SetSelectedItem( indexOfMenuItems ); + } + } + if ( aResourceId == R_TRUI_MAINVIEW_MENU_DELETE_CASCADE ) + { + aMenuPane->SetItemDimmed( EMainViewDeleteCurrentModel, + iContainer->IsButtonDimmed() ); + aMenuPane->SetItemDimmed( EMainViewDeleteAllModel, iDimAllDelete ); + } + } + +// --------------------------------------------------------------------------- +// Dynamically initialises the character range menu pane. +// --------------------------------------------------------------------------- +// +void CTruiMainView::InitCharRangeSubMenuL( TInt aScriptId, + CEikMenuPane* aMenuPane) + { + // Get the corrent reource ID of MENU_ITEMS by + TInt reourceId = MenuItemsReourceId( aScriptId ); + // Add these menu items into menu pane + aMenuPane->AddMenuItemsL( reourceId ); + } + +// --------------------------------------------------------------------------- +// Get reource ID of menu items for initializing menu pane. +// --------------------------------------------------------------------------- +// +TInt CTruiMainView::MenuItemsReourceId( TInt aScriptId ) + { + TInt reourceId; + switch ( aScriptId ) + { + case EMainViewSubmenuWestern: + { + reourceId = R_TRUI_MAINVIEW_SUBMENU_CHARRANGE_LATIN; + } + break; + case EMainViewSubmenuCyrillic: + { + reourceId = R_TRUI_MAINVIEW_SUBMENU_CHARRANGE_CYRILLIC; + } + break; + case EMainViewSubmenuGreek: + { + reourceId = R_TRUI_MAINVIEW_SUBMENU_CHARRANGE_GREEK; + } + break; + case EMainViewSubmenuHebrew: + { + reourceId = R_TRUI_MAINVIEW_SUBMENU_CHARRANGE_HEBREW; + } + break; + default: + reourceId = 0; + break; + } + return reourceId; + } + +// --------------------------------------------------------------------------- +// Check menu item dimmed by menu item id. +// --------------------------------------------------------------------------- +// +TBool CTruiMainView::IsMenuItemDimmed( CEikMenuPane* aMenuPane, TInt aMenuItemId ) + { + CEikMenuPaneItem::SData& itemdata = aMenuPane->ItemData( aMenuItemId ); + return ( itemdata.iFlags & EEikMenuItemDimmed == EEikMenuItemDimmed ); + }