diff -r 000000000000 -r eb1f2e154e89 textinput/peninputhwrtrui/src/truiinfomessagecontainer.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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& 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 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 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 ); + } + } + }