--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrtrui/src/truimainview.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -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 <aknViewAppUi.h>
+#include <eikmenup.h>
+#include <trui.rsg>
+#include <akntoolbar.h>
+#include <aknnavide.h>
+#include <akntabgrp.h>
+
+#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<CTruiAppUi*>( AppUi() );
+ CTruiEngine* engine = appui->HwrEngine();
+ const RArray<TInt>& 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<CTruiAppUi*>( AppUi() );
+ CAknNavigationDecorator* naviDecorator = appui->GetNaviDecorator();
+ CAknTabGroup* tabGroup = static_cast<CAknTabGroup*>
+ ( 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<CTruiAppUi*>( 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<CTruiAppUi*>( 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<TInt>& 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<TInt>& 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 );
+ }