diff -r 000000000000 -r eb1f2e154e89 textinput/peninputhwrtrui/src/truitextsettingpagecontainer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/textinput/peninputhwrtrui/src/truitextsettingpagecontainer.cpp Tue Feb 02 01:02:04 2010 +0200 @@ -0,0 +1,343 @@ +/* +* 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 CTruiTextSettingPageContainer +* +*/ + + +#include +#include +#include +#include +#include + +#include "truitextsettingpagecontainer.h" +#include "truihwrbox.h" +#include "truiappui.h" +#include "truiengine.h" +#include "truishortcutsview.h" +#include "truiapplication.h" +#include "truiinfomessageview.h" +#include "truishortcuteditview.h" +#include "truishortcutedittextview.h" +#include "trui.hrh" +#include "truicontainerbase.h" + +// Initialized size for hwrbox +const TSize KHwrboxSize = TSize( 100, 100 ); + +// The x-cordination of hwrbox pos +const TInt KHwrBoxPosPortraitX = 60; +const TInt KHwrBoxPosLandscapeX = 100; + +const TInt KPopupWindowVarity = 1; + +const TInt KParaDelimiterSize = 1; + +_LIT( KParaDelimiterFormat, "%c" ); + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +// +CTruiTextSettingPageContainer::CTruiTextSettingPageContainer + ( TInt aResourceID, TDes& aText, TInt aTextSettingPageFlags ) + :CAknTextSettingPage( aResourceID, aText, aTextSettingPageFlags ) + { + } + +// --------------------------------------------------------------------------- +// Perform the second phase construction of a CTruiMainViewContainer object. +// --------------------------------------------------------------------------- +// +void CTruiTextSettingPageContainer::ConstructL( const TRect& aRect, TBool aEnableHwrBox ) + { + CAknTextSettingPage::ConstructL(); + TextControl()->SetObserver( this ); + // Check character model + CEikEdwin* edwin = static_cast( EditorControl() ); + HBufC* shortcutText = edwin->GetTextInHBufL(); + if ( shortcutText ) + { + // Replace paragraph seperator to line break + TPtr ptr = shortcutText->Des(); + TBuf paraDelimiter; + paraDelimiter.Format( KParaDelimiterFormat, EKeyEnter ); + AknTextUtils::ReplaceCharacters( ptr, paraDelimiter, + TChar( CEditableText::EParagraphDelimiter ) ); + CleanupStack::PushL( shortcutText ); + edwin->SetTextL( shortcutText ); + CleanupStack::PopAndDestroy( shortcutText ); + } + + if ( aEnableHwrBox ) + { + CTruiAppUi* appUi = static_cast( iAvkonViewAppUi ); + CTruiEngine* engine = appUi->HwrEngine(); + if ( engine->CheckShortcutModel( engine->Shortcut() ) ) + { + // Create hwrbox + iHwrBox = CTruiHwrBox::NewL( NULL, NULL ); + iHwrBox->SetHwrBoxFlag( CTruiHwrBox::ENoFrameHwrBox + | CTruiHwrBox::EReadOnlyHwrBox); + + // Create preview popup + iPopupController = CAknPreviewPopUpController::NewL + ( *iHwrBox, CAknPreviewPopUpController::EPermanentMode ); + iPopupController->AddObserverL( *this ); + // Set guide line + iHwrBox->SetDisplayBottomGuideLine( ETrue ); + if ( engine->CurrentLanguageScript() == EMainViewSubmenuHebrew ) + { + iHwrBox->SetDisplayTopGuideLine( ETrue ); + } + iPopupController->SetPopUpShowDelay( 0 ); + } + } + SetRect( aRect ); + if ( iPopupController ) + { + iPopupController->ShowPopUp(); + } + ActivateL(); + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CTruiTextSettingPageContainer* CTruiTextSettingPageContainer::NewL + ( TInt aResourceId, + TDes& aText, + const TRect& aRect, + TBool aEnableHwrBox, + TInt aTextSettingPageFlags ) + { + CTruiTextSettingPageContainer* self = CTruiTextSettingPageContainer::NewLC + ( aResourceId, aText, + aRect, + aEnableHwrBox, + aTextSettingPageFlags ); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CTruiTextSettingPageContainer* CTruiTextSettingPageContainer::NewLC + ( TInt aResourceId, + TDes& aText, + const TRect& aRect, + TBool aEnableHwrBox, + TInt aTextSettingPageFlags ) + { + CTruiTextSettingPageContainer* self = new (ELeave) + CTruiTextSettingPageContainer + ( aResourceId, aText, + aTextSettingPageFlags ); + CleanupStack::PushL( self ); + self->ConstructL( aRect, aEnableHwrBox ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// + +CTruiTextSettingPageContainer::~CTruiTextSettingPageContainer() + { + delete iPopupController; + delete iHwrBox; + } + +// --------------------------------------------------------------------------- +// Responds to changes to the size and position of the contents of this control. +// --------------------------------------------------------------------------- +// +void CTruiTextSettingPageContainer::SizeChanged() + { + CAknTextSettingPage::SizeChanged(); + + if ( iHwrBox ) + { + // caculate main pane + TRect rect = Rect(); + TAknWindowComponentLayout main_pane_layout = + AknLayoutScalable_Apps::main_hwr_training_pane(); + TAknLayoutRect main_pane_layout_rect; + main_pane_layout_rect.LayoutRect( rect, main_pane_layout ); + TRect main_pane_rect = main_pane_layout_rect.Rect(); + + // Calculate popup_hwr_training_preview_window + TAknWindowComponentLayout preview_popup_layout = + AknLayoutScalable_Apps::popup_hwr_training_preview_window + ( KPopupWindowVarity ); + TAknLayoutRect preview_popup_layout_rect; + preview_popup_layout_rect.LayoutRect( main_pane_rect, preview_popup_layout ); + + TPoint labelPos = TextLabel()->PositionRelativeToScreen(); + TPoint hwrPos = TPoint( 0, 0 ); + if ( TBidiText::ScriptDirectionality( User::Language() ) + == TBidiText::ELeftToRight ) + { + TInt offset = Layout_Meta_Data::IsLandscapeOrientation() ? + KHwrBoxPosLandscapeX : KHwrBoxPosPortraitX; + hwrPos = labelPos + TPoint( offset, TextLabel()->Size().iHeight ); + } + else + { + hwrPos = labelPos + TPoint( TextLabel()->Size().iWidth, + TextLabel()->Size().iHeight ); + } + + iHwrBox->SetSize( preview_popup_layout_rect.Rect().Size() ); + iPopupController->SetPosition( hwrPos ); + } + } + +// --------------------------------------------------------------------------- +// Processes events from the softkeys. +// --------------------------------------------------------------------------- +// +void CTruiTextSettingPageContainer::ProcessCommandL( TInt aCommandId ) + { + HideMenu(); + switch ( aCommandId ) + { + case EAknSoftkeyOk: + case EAknSoftkeySelect: + { + // Get the current text in setting page + CTruiAppUi* appUi = static_cast( iAvkonViewAppUi ); + CTruiEngine* engine = appUi->HwrEngine(); + CEikEdwin* edwin = static_cast( EditorControl() ); + HBufC* shortcutText = edwin->GetTextInHBufL(); + CleanupStack::PushL( shortcutText ); + // Replace paragraph seperator to line break + TPtr ptr = shortcutText->Des(); + TBuf paraDelimiter; + paraDelimiter.Format( KParaDelimiterFormat, CEditableText::EParagraphDelimiter ); + AknTextUtils::ReplaceCharacters( ptr, paraDelimiter, TChar( EKeyEnter ) ); + // Update new text + engine->ChangeShortcutTextL( *shortcutText ); + // Recalculate selected index of shortcut list + // Update shortcut list + engine->UpdateShortcutListL(); + // Find the current shortcut's index in shortcut list + TInt index = 0; + CDesCArray* shortcutList = engine->ShortcutTextList(); + if ( shortcutList ) + { + TInt ret = 0; + ret = shortcutList->Find( *shortcutText, index ); + if ( ret == KErrNotFound ) + { + TInt oldIndex = engine->CurrentSelectedIndex(); + index = ( oldIndex > shortcutList->Count() ) + ? shortcutList->Count() : oldIndex; + } + } + // Set current index in Engine + engine->SetCurrentSelectedIndex( index + 1 ); + CleanupStack::PopAndDestroy( shortcutText ); + // Store the content of setting page + UpdateSettingL(); + CTruiShortcutEditTextView* view = + static_cast + ( appUi->View( KTruiShortcutEditTextViewId ) ); + if ( view->StartViewId() == + TVwsViewId( KUidtruiApp, KTruiInfoMessageViewId ) ) + { + ProcessCommandL( EAknSoftkeyNext ); + } + else + { + // Switch to shortcuts view. + iAvkonViewAppUi->ActivateLocalViewL + ( view->StartViewId().iViewUid ); + } + break; + } + case EAknSoftkeyCancel: + { + iAvkonViewAppUi->ActivateLocalViewL( KTruiShortcutsViewId ); + break; + } + case EAknSoftkeyNext: + { + UpdateSettingL(); + // Get the current text in setting page + CTruiAppUi* appUi = static_cast( iAvkonViewAppUi ); + CTruiEngine* engine = appUi->HwrEngine(); + CEikEdwin* edwin = static_cast( EditorControl() ); + HBufC* shortcutText = edwin->GetTextInHBufL(); + CleanupStack::PushL( shortcutText ); + // Replace paragraph seperator to line break + TPtr ptr = shortcutText->Des(); + TBuf paraDelimiter; + paraDelimiter.Format( KParaDelimiterFormat, CEditableText::EParagraphDelimiter ); + AknTextUtils::ReplaceCharacters( ptr, paraDelimiter, TChar( EKeyEnter ) ); + engine->SetShortcut( ptr ); + CleanupStack::PopAndDestroy( shortcutText ); + iAvkonViewAppUi->ActivateLocalViewL( KTruiShortcutEditViewId ); + break; + } + case EAknSoftkeyBack: + { + CTruiAppUi* appUi = static_cast( iAvkonViewAppUi ); + CTruiEngine* engine = appUi->HwrEngine(); + if ( engine->DisplayWizard() ) + { + iAvkonViewAppUi->ActivateLocalViewL( KTruiInfoMessageViewId ); + } + else + { + iAvkonViewAppUi->ActivateLocalViewL( KTruiShortcutsViewId ); + } + break; + } + } + } + +// --------------------------------------------------------------------------- +// From MAknPreviewPopUpObserver +// Called by the preview popup when an appropriate event takes place. +// --------------------------------------------------------------------------- +// +void CTruiTextSettingPageContainer::HandlePreviewPopUpEventL( + CAknPreviewPopUpController* aController, TPreviewPopUpEvent aEvent ) + { + if ( aController == iPopupController && aEvent == EPreviewPopUpShown ) + { + CTruiAppUi* appUi = static_cast( iAvkonViewAppUi ); + CTruiEngine* engine = appUi->HwrEngine(); + CEikEdwin* edwin = TextControl(); + HBufC* shortcutText = edwin->GetTextInHBufL(); + CleanupStack::PushL( shortcutText ); + // Get character model + TUint unicode = 0; + TRAPD( err, engine->GetShortcutModelL( engine->Shortcut(), iHwrBox->Model(), unicode ) ); + if ( err == KErrNone ) + { + TSize refSize = CTruiContainerBase::OriginSymbolSize(); + iHwrBox->ShowTrails( iHwrBox->Model(), ETrue, refSize ); + } + CleanupStack::PopAndDestroy( shortcutText ); + } + }