--- /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 );
+ }
+ }
+ }