textinput/peninputhwrtrui/src/truiinfomessagecontainer.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrtrui/src/truiinfomessagecontainer.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,316 @@
+/*
+* 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 CTruiInfoMessageContainer
+*
+*/
+
+
+#include <eikenv.h>
+#include <AknsBasicBackgroundControlContext.h>
+#include <AknsDrawUtils.h>
+#include <trui.rsg>
+#include <eiklabel.h>
+#include <eikon.hrh>
+#include <AknUtils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <eikedwin.h>
+
+#include "truiinfomessagecontainer.h"
+#include "truiappradiobutton.h"
+#include "truiappui.h"
+#include "truiengine.h"
+#include "truicontainerbase.h"
+
+// Varity of instruct pane both for landscape and portrait
+const TInt KVarityInstructPane = 4;
+
+// Varity of list pane both for landscape and portrait
+const TInt KVarityListPane = 2;
+
+// Varity of symbol option pane both for landscape and portrait
+const TInt KVaritySymbolOptionPane = 2;
+
+// Varity of list symbol option pane both for landscape and portrait
+const TInt KVarityListSymbolOptionPane = 1;
+
+
+// ======== MEMBER FUNCTIONS ========
+
+CTruiInfoMessageContainer::CTruiInfoMessageContainer()
+    {  
+    }
+    
+void CTruiInfoMessageContainer::ConstructL( const TRect& aRect )
+    {    
+    // Initialize control array
+    InitComponentArrayL();
+        
+    // Set parent control or owning window
+    CreateWindowL();       
+
+    // Initialize controls
+    InitializeControlsL();
+
+    iLabelText = iEikonEnv->AllocReadResourceL( R_TRUI_INFOMAESSAGEVIEW_MESSAGE );
+    iEdwin->SetTextL( iLabelText );    
+
+    SetRect( aRect );
+    ActivateL();   
+    
+    iBackGround = CAknsBasicBackgroundControlContext::NewL
+                  ( KAknsIIDQsnBgAreaMain, Rect(), EFalse);
+    iEdwin->SetSkinBackgroundControlContextL( iBackGround );
+    }        
+    
+CTruiInfoMessageContainer* CTruiInfoMessageContainer::NewL( const TRect& aRect )
+    {
+    CTruiInfoMessageContainer* self = CTruiInfoMessageContainer::NewLC( aRect );
+    CleanupStack::Pop( self );
+    return self;
+    }
+    
+CTruiInfoMessageContainer* CTruiInfoMessageContainer::NewLC( const TRect& aRect )
+    {
+    CTruiInfoMessageContainer* self = new (ELeave) CTruiInfoMessageContainer();
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect );
+    return self;
+    }
+    
+CTruiInfoMessageContainer::~CTruiInfoMessageContainer()
+    {
+    delete iBackGround;        
+    delete iLabelText;
+    }
+
+// ---------------------------------------------------------------------------
+// Do something before exit.
+// ---------------------------------------------------------------------------
+// 
+void CTruiInfoMessageContainer::PrepareToExitL()
+    {
+    // Save checkbox setting
+    const RArray<CTruiRadioButton::TRadioButtonStatus>& statusArray = 
+                                          iRadioButtonContainer->StatusArray();
+    TBool isDisplayed = statusArray.Count() && statusArray[0] ? EFalse : ETrue;
+    iEngine->SetDisplayWizard( isDisplayed );
+    if ( statusArray.Count() )
+        {
+        SaveSettingIntoIniFileL( KAlwaysDisplayWizardKey, statusArray[0] );
+        }    
+    }
+    
+// ---------------------------------------------------------------------------
+// Create controls to be displayed in this container.
+// ---------------------------------------------------------------------------
+//
+void CTruiInfoMessageContainer::InitializeControlsL()
+    {
+    iRadioButtonContainer = CTruiRadioButton::NewL( this, 
+                                               CTruiRadioButton:: ECheckBox );
+    Components().AppendLC( iRadioButtonContainer );
+    CleanupStack::Pop( iRadioButtonContainer );
+    
+    HBufC* radioText1 = iEikonEnv->AllocReadResourceLC
+                             ( R_TRUI_INFOMAESSAGEVIEW_CHECKBOX_TEXT );
+    iRadioButtonContainer->AddItem( radioText1, CTruiRadioButton::ENonSelected );
+    CleanupStack::Pop( radioText1 ); // transfered ownership
+    iRadioButtonContainer->HandleItemAdditionL();
+    
+    iEdwin = new (ELeave) CEikEdwin;
+    iEdwin->ConstructL();
+    iEdwin->SetReadOnly( ETrue );     
+    Components().AppendLC( iEdwin );
+    CleanupStack::Pop( iEdwin );
+    
+    }
+
+// ---------------------------------------------------------------------------
+// Create label and display it in the container.
+// ---------------------------------------------------------------------------
+//
+CEikLabel* CTruiInfoMessageContainer::CreateLabelL( const CCoeControl* aParent )
+    {
+    CEikLabel* aknLabel = new (ELeave) CEikLabel();
+    CleanupStack::PushL( aknLabel );
+    aknLabel->SetContainerWindowL( *aParent );
+    aknLabel->ActivateL();
+    CleanupStack::Pop( aknLabel ); 
+    return aknLabel;
+    }
+
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Responds to changes to the size and position of the contents of this control.
+// ---------------------------------------------------------------------------
+//
+void CTruiInfoMessageContainer::SizeChanged()
+    {
+    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();
+
+    // hwr_training_instruct_pane    
+    TAknWindowComponentLayout instruct_pane_layout = 
+               AknLayoutScalable_Apps::hwr_training_instruct_pane( KVarityInstructPane );    
+    TAknLayoutRect instruct_pane_layout_rect;
+    instruct_pane_layout_rect.LayoutRect( main_pane_rect, instruct_pane_layout );
+    iInstructPaneRect = instruct_pane_layout_rect.Rect();
+    
+    // count of text rows    
+    TInt count = AknLayoutScalable_Apps::
+               list_single_hwr_training_instruct_pane_ParamLimits( KVarityListPane )
+               .LastRow() + 1;
+    
+    // array contains all text rows in help screen
+    RArray<TAknTextComponentLayout> textLayoutArray;
+    for( TInt i = 0; i < count; i++ )
+        {       
+        // pane area for each row
+        TAknWindowComponentLayout each_row_layout =  
+            AknLayoutScalable_Apps::list_single_hwr_training_instruct_pane
+                                    ( KVarityListPane, 0, i );
+        TAknLayoutRect each_row_layout_rect;
+        each_row_layout_rect.LayoutRect( iInstructPaneRect, 
+                                         each_row_layout );
+        // smaller pane for text itself
+        TAknTextComponentLayout each_row_text_layout =  
+            AknLayoutScalable_Apps::list_single_hwr_training_instruct_pane_t1();
+    
+        // composition of two latter componets
+        TAknTextComponentLayout textCompCompositionWiz = 
+            TAknWindowComponentLayout::ComposeText(
+                each_row_layout, each_row_text_layout );
+ 
+        TRAPD( error, textLayoutArray.AppendL( textCompCompositionWiz ) );
+        // if error in append function, then just exit the loop      
+        if ( error != KErrNone )
+            {
+            break;
+            }
+        }       
+    iMultilineLayout = TAknTextComponentLayout::Multiline( textLayoutArray );
+    textLayoutArray.Close();
+
+    // Do layout for edwin
+    AknLayoutUtils::LayoutEdwin( iEdwin, 
+                                 iInstructPaneRect, 
+                                 iMultilineLayout,
+                                 EAknsCIQsnTextColorsCG6 ); 
+
+	// Do layout for radio button
+    // hwr_training_instruct_pane
+    TAknWindowComponentLayout symbol_option_pane = 
+               AknLayoutScalable_Apps::main_hwr_training_symbol_option_pane
+                                      ( KVaritySymbolOptionPane );
+    TAknLayoutRect symbol_option_pane_layout_rect;
+    symbol_option_pane_layout_rect.LayoutRect( main_pane_rect, symbol_option_pane );
+    
+	TAknWindowComponentLayout list_option_pane = 
+               AknLayoutScalable_Apps::list_single_hwr_training_symbol_option_pane
+                                      ( KVarityListSymbolOptionPane );
+    TAknLayoutRect list_option_pane_layout_rect;
+    list_option_pane_layout_rect.LayoutRect( symbol_option_pane_layout_rect.Rect(), 
+                                             list_option_pane );
+    // Create multiline text for radion button
+    // count of text rows    
+    TInt radionLines = AknLayoutScalable_Apps::
+               list_single_hwr_training_symbol_option_pane_ParamLimits
+               ( KVarityListSymbolOptionPane )
+               .LastRow() + 1;
+    
+    // array contains all text rows in help screen
+    RArray<TAknTextComponentLayout> radionTextLayoutArray;
+    for( TInt i = 0; i < radionLines; i++ )
+        {       
+        // pane area for each row
+        TAknWindowComponentLayout each_row_layout =  
+            AknLayoutScalable_Apps::list_single_hwr_training_symbol_option_pane
+                                    ( KVarityListSymbolOptionPane, 0, i );
+        TAknLayoutRect each_row_layout_rect;
+        each_row_layout_rect.LayoutRect( symbol_option_pane_layout_rect.Rect(), 
+                                         each_row_layout );
+        // smaller pane for text itself
+        TAknTextComponentLayout each_row_text_layout =  
+            AknLayoutScalable_Apps::list_single_hwr_training_symbol_option_pane_t1();
+    
+        // composition of two latter componets
+        TAknTextComponentLayout textCompCompositionWiz = 
+            TAknWindowComponentLayout::ComposeText(
+                each_row_layout, each_row_text_layout );
+ 
+        TRAPD( error, radionTextLayoutArray.AppendL( textCompCompositionWiz ) );
+        // if error in append function, then just exit the loop      
+        if ( error != KErrNone )
+            {
+            break;
+            }
+        }       
+    TAknMultiLineTextLayout radioMultilineLayout 
+                            = TAknTextComponentLayout::Multiline( radionTextLayoutArray );
+    radionTextLayoutArray.Close();  
+    iRadioButtonContainer->SetMultilineLayout( radioMultilineLayout );
+    iRadioButtonContainer->SetRect( symbol_option_pane_layout_rect.Rect() );
+    
+    if ( iBackGround )
+        {
+        iBackGround->SetRect( Rect() );
+        }
+    }
+    
+// ---------------------------------------------------------------------------
+// Draw.
+// ---------------------------------------------------------------------------
+//    
+void CTruiInfoMessageContainer::Draw( const TRect& /*aRect*/ ) const
+   {
+    // Get the standard graphics context
+    CWindowGc& gc = SystemGc();
+    // Gets the control's extent
+    TRect rect( Rect());
+    // Clears the screen
+    gc.Clear( rect );
+
+    MAknsSkinInstance* skin = AknsUtils::SkinInstance();  
+    if ( AknsDrawUtils::HasBitmapBackground( skin, iBackGround ) ) 
+        {
+        AknsDrawUtils::Background( skin, iBackGround, gc, rect );
+        }   
+    }
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CTruiInfoMessageContainer::HandleResourceChange( TInt aType )
+    {    
+    CTruiContainerBase::HandleResourceChange( aType );
+    if ( aType == KAknsMessageSkinChange )
+        {
+        if ( iEdwin )
+            {
+            // Do layout for edwin
+            AknLayoutUtils::LayoutEdwin( iEdwin, 
+                                         iInstructPaneRect, 
+                                         iMultilineLayout,
+                                         EAknsCIQsnTextColorsCG6 );
+            }
+        }
+    }