--- /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 <aknlayoutscalable_apps.cdl.h>
+#include <aknscontrolcontext.h>
+#include <aknpreviewpopupcontroller.h>
+#include <aknpreviewpopupobserver.h>
+#include <layoutmetadata.cdl.h>
+
+#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<CEikEdwin*>( EditorControl() );
+ HBufC* shortcutText = edwin->GetTextInHBufL();
+ if ( shortcutText )
+ {
+ // Replace paragraph seperator to line break
+ TPtr ptr = shortcutText->Des();
+ TBuf<KParaDelimiterSize> 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<CTruiAppUi*>( 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<CTruiAppUi*>( iAvkonViewAppUi );
+ CTruiEngine* engine = appUi->HwrEngine();
+ CEikEdwin* edwin = static_cast<CEikEdwin*>( EditorControl() );
+ HBufC* shortcutText = edwin->GetTextInHBufL();
+ CleanupStack::PushL( shortcutText );
+ // Replace paragraph seperator to line break
+ TPtr ptr = shortcutText->Des();
+ TBuf<KParaDelimiterSize> 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<CTruiShortcutEditTextView*>
+ ( 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<CTruiAppUi*>( iAvkonViewAppUi );
+ CTruiEngine* engine = appUi->HwrEngine();
+ CEikEdwin* edwin = static_cast<CEikEdwin*>( EditorControl() );
+ HBufC* shortcutText = edwin->GetTextInHBufL();
+ CleanupStack::PushL( shortcutText );
+ // Replace paragraph seperator to line break
+ TPtr ptr = shortcutText->Des();
+ TBuf<KParaDelimiterSize> 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<CTruiAppUi*>( 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<CTruiAppUi*>( 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 );
+ }
+ }