--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputhwrtrui/src/truicontainerbase.cpp Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,434 @@
+/*
+* 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 CTruiContainerBase
+*
+*/
+
+
+#include <AknDef.h>
+#include <aknbutton.h>
+#include <barsread.h>
+#include <akntoolbar.h>
+#include <e32property.h>
+#include <AvkonInternalCRKeys.h>
+#include <eikapp.h>
+#include <AknsUtils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <layoutmetadata.cdl.h>
+#include <gulicon.h>
+#include <aknview.h>
+#include <s32stor.h>
+
+#include "truicontainerbase.h"
+#include "truiappui.h"
+
+_LIT( KChangeLine, "\n" );
+
+const TSize KHwrBoxSizeLandscape = TSize( 200, 200 );
+
+// ======== MEMBER FUNCTIONS ========
+
+CTruiContainerBase::CTruiContainerBase()
+ {
+ iAppUi = static_cast<CTruiAppUi*>( iAvkonViewAppUi );
+ iEngine = iAppUi->HwrEngine();
+ }
+
+CTruiContainerBase::~CTruiContainerBase()
+ {
+ }
+
+// ---------------------------------------------------------------------------
+// Get the origin size in which input the model for preset symbols.
+// ---------------------------------------------------------------------------
+//
+TSize CTruiContainerBase::OriginSymbolSize()
+ {
+ TRect rect = iAvkonViewAppUi->ClientRect();
+
+ 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_write_pane
+ TAknWindowComponentLayout write_pane_layout =
+ AknLayoutScalable_Apps::hwr_training_write_pane( 2 );
+ TAknLayoutRect write_pane_layout_rect;
+ write_pane_layout_rect.LayoutRect( main_pane_rect, write_pane_layout );
+
+ TAknWindowComponentLayout drawable_rect_layout =
+ AknLayoutScalable_Apps::hwr_training_write_pane_g7( 0 );
+ TAknLayoutRect drawable_rect_layout_rect;
+ drawable_rect_layout_rect.LayoutRect( write_pane_layout_rect.Rect(),
+ drawable_rect_layout );
+ return drawable_rect_layout_rect.Rect().Size();
+ }
+
+// ---------------------------------------------------------------------------
+// Wrap the text to fit the minisize of Label.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiContainerBase::WrapLabelText( const CEikLabel* aLabel,
+ const TDesC& aText,
+ TInt aMaxLines,
+ HBufC* aWrappedText )
+ {
+ return DoWrapLabelText( aLabel->Font(), aLabel->Size().iWidth, aText,
+ aMaxLines, aWrappedText );
+ }
+
+// ---------------------------------------------------------------------------
+// Wrap the text to fit the minisize of Label.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiContainerBase::WrapLabelText( const TAknLayoutText& aLayoutText,
+ const TDesC& aText,
+ TInt aMaxLines,
+ HBufC* aWrappedText )
+ {
+ const CFont* font = aLayoutText.Font();
+ TInt width = aLayoutText.TextRect().Size().iWidth;
+ return DoWrapLabelText( font, width, aText, aMaxLines, aWrappedText );
+ }
+
+// ---------------------------------------------------------------------------
+// Wrap the text to fit the minisize of Label.
+// ---------------------------------------------------------------------------
+//
+void CTruiContainerBase::WrapLabelTextL( const CFont* aFont, const TDesC& aText,
+ const RArray<TInt>& aLineWidthArray,
+ HBufC* aWrappedText )
+ {
+ if ( aWrappedText && aLineWidthArray.Count() > 0 )
+ {
+ CArrayFixFlat<TInt>* lineWidthArray = new (ELeave)
+ CArrayFixFlat<TInt>( aLineWidthArray.Count() );
+ CleanupStack::PushL( lineWidthArray );
+ // Create line array
+ for ( TInt i = 0; i < aLineWidthArray.Count(); i++ )
+ {
+ lineWidthArray->AppendL( aLineWidthArray[i] );
+ }
+ // Do wrap and clip
+ TPtr wrappedTextPtr = aWrappedText->Des();
+ AknTextUtils::WrapToStringAndClipL( aText, *lineWidthArray, *aFont,
+ wrappedTextPtr );
+ CleanupStack::PopAndDestroy( lineWidthArray );
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// Create skin specified button from resource.
+// ---------------------------------------------------------------------------
+//
+CAknButton* CTruiContainerBase::CreateButtonL( TInt aResourceId,
+ const CCoeControl* aParent,
+ MCoeControlObserver* aObserver )
+ {
+ TResourceReader reader;
+ iEikonEnv->CreateResourceReaderLC( reader, aResourceId );
+ CAknButton* button = ConstructButtonFromResourceL( reader );
+ if ( aParent )
+ {
+ button->SetContainerWindowL( *aParent );
+ }
+ if ( aObserver )
+ {
+ button->SetObserver( aObserver );
+ }
+ CleanupStack::PopAndDestroy(); // reader
+ return button;
+ }
+
+// ---------------------------------------------------------------------------
+// Add skin specified buttons into toolbar.
+// ---------------------------------------------------------------------------
+//
+void CTruiContainerBase::AddButtonsToToolbarL( CAknToolbar* aToolbar, TInt aResourceId )
+ {
+ TResourceReader reader;
+ iEikonEnv->CreateResourceReaderLC( reader, aResourceId );
+ const TInt buttonCount = reader.ReadInt16();
+ for ( TInt i = 0; i < buttonCount; i++ )
+ {
+ // Create each toolbar item
+ TInt controlType = reader.ReadInt16();
+ TInt commandId = reader.ReadInt16();
+ reader.ReadInt16(); // flags
+ reader.ReadInt16(); // length
+ CAknButton* button = ConstructButtonFromResourceL( reader );
+ aToolbar->AddItemL( button, controlType, commandId, 0, i );
+ }
+ CleanupStack::PopAndDestroy(); // reader
+ }
+
+// ---------------------------------------------------------------------------
+// Return current keyboard mode.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiContainerBase::CurrentKeyBoardModeL()
+ {
+ RProperty keyboardProperty;
+ CleanupClosePushL( keyboardProperty );
+ User::LeaveIfError( keyboardProperty.Attach( KCRUidAvkon,
+ KAknQwertyInputModeActive ) );
+ TInt keyboardMode = 0;
+ keyboardProperty.Get( keyboardMode );
+ CleanupStack::PopAndDestroy( &keyboardProperty );
+ return keyboardMode;
+ }
+
+// ---------------------------------------------------------------------------
+// Read setting from ini file to decide if display wizard view.
+// ---------------------------------------------------------------------------
+//
+void CTruiContainerBase::GetSettingFromIniFileL( TUint32 aKey, TInt& aValue )
+ {
+ CDictionaryStore* iniFile = iAppUi->Application()->OpenIniFileLC( iEikonEnv->FsSession() );
+ RDictionaryReadStream readSteam;
+ readSteam.OpenLC( *iniFile, TUid::Uid( aKey ) );
+ TInt16 value;
+ readSteam >> value;
+ aValue = value;
+ CleanupStack::PopAndDestroy( &readSteam );
+ CleanupStack::PopAndDestroy( iniFile );
+ }
+
+// ---------------------------------------------------------------------------
+// Save settings into file.
+// ---------------------------------------------------------------------------
+//
+void CTruiContainerBase::SaveSettingIntoIniFileL( TUint32 aKey, TInt aValue )
+ {
+ CDictionaryStore* iniFile =
+ iAppUi->Application()->OpenIniFileLC( iEikonEnv->FsSession() );
+ RDictionaryWriteStream stream;
+ stream.AssignLC( *iniFile, TUid::Uid( aKey ) );
+ stream << (TInt16)aValue;
+ stream.CommitL();
+ iniFile->CommitL();
+ CleanupStack::PopAndDestroy( &stream );
+ CleanupStack::PopAndDestroy( iniFile );
+ }
+
+// ---------------------------------------------------------------------------
+// Get cached color of skin for label control
+// ---------------------------------------------------------------------------
+//
+TInt CTruiContainerBase::GetCachedLabelTextColor( TRgb& aColor )
+ {
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ // Set pen color to the color of test in main area
+ return AknsUtils::GetCachedColor( skin,
+ aColor,
+ KAknsIIDQsnTextColors,
+ EAknsCIQsnTextColorsCG6 );
+ }
+
+// ---------------------------------------------------------------------------
+// Get cached color of skin for icon
+// ---------------------------------------------------------------------------
+//
+TInt CTruiContainerBase::GetCachedIcontColor( TRgb& aColor,
+ const TAknsItemID& aColorId,
+ TInt aColorIndex )
+ {
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ // Set pen color to the color of test in main area
+ return AknsUtils::GetCachedColor( skin,
+ aColor,
+ aColorId,
+ aColorIndex );
+ }
+
+// ---------------------------------------------------------------------------
+// Create skin specified button from resource.
+// ---------------------------------------------------------------------------
+//
+CAknButton* CTruiContainerBase::ConstructButtonFromResourceL( TResourceReader& aReader )
+ {
+ TInt flags = aReader.ReadInt16();
+ TPtrC helpText = aReader.ReadTPtrC();
+ TPtrC fileName = aReader.ReadTPtrC();
+ TInt bmpId = aReader.ReadInt16();
+ TInt bmpMaskId = aReader.ReadInt16();
+ TInt pressId = aReader.ReadInt16();
+ TInt pressMaskId = aReader.ReadInt16();
+ TInt mainItemId = aReader.ReadInt32();
+ TInt minorItemId = aReader.ReadInt32();
+ TInt mainItemPressId = aReader.ReadInt32();
+ TInt minorItemPressId = aReader.ReadInt32();
+
+ CGulIcon* icon = NULL;
+ TInt length = fileName.Length();
+ if ( fileName.Length() )
+ {
+ TAknsItemID aknItemId = { mainItemId, minorItemId };
+
+ // Create icon
+ CFbsBitmap* bitmap;
+ CFbsBitmap* bitmapm;
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ AknsUtils::CreateColorIconL( skin,
+ aknItemId,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG30,
+ bitmap,
+ bitmapm,
+ fileName,
+ bmpId,
+ bmpMaskId,
+ KRgbBlack );
+ CleanupStack::PushL( bitmap );
+ CleanupStack::PushL( bitmapm );
+ icon = CGulIcon::NewL( bitmap, bitmapm ); // Ownership transfered
+ CleanupStack::Pop( bitmapm );
+ CleanupStack::Pop( bitmap );
+ }
+ CleanupStack::PushL( icon );
+ CAknButton* button = CAknButton::NewL ( icon,
+ NULL,
+ NULL,
+ NULL,
+ KNullDesC,
+ helpText,
+ flags,
+ NULL );
+ CleanupStack::Pop( icon );
+ return button;
+ }
+
+// ---------------------------------------------------------------------------
+// Construct icons from resource.
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CTruiContainerBase::ConstructIconFromResourceL( TInt aResourceId )
+ {
+ TResourceReader reader;
+ iEikonEnv->CreateResourceReaderLC( reader, aResourceId );
+ TInt flags = reader.ReadInt16();
+ TPtrC helpText = reader.ReadTPtrC();
+ TPtrC fileName = reader.ReadTPtrC();
+ TInt bmpId = reader.ReadInt16();
+ TInt bmpMaskId = reader.ReadInt16();
+ TInt pressId = reader.ReadInt16();
+ TInt pressMaskId = reader.ReadInt16();
+ TInt mainItemId = reader.ReadInt32();
+ TInt minorItemId = reader.ReadInt32();
+ TInt mainItemPressId = reader.ReadInt32();
+ TInt minorItemPressId = reader.ReadInt32();
+
+ TAknsItemID aknItemId = { mainItemId, minorItemId };
+
+ // Create icon
+ CFbsBitmap* bitmap;
+ CFbsBitmap* bitmapm;
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+ AknsUtils::CreateColorIconL( skin,
+ aknItemId,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG30,
+ bitmap,
+ bitmapm,
+ fileName,
+ bmpId,
+ bmpMaskId,
+ KRgbBlack );
+ CleanupStack::PushL( bitmap );
+ CleanupStack::PushL( bitmapm );
+ CGulIcon* icon = CGulIcon::NewL( bitmap, bitmapm ); // Ownership transfered
+ CleanupStack::Pop( bitmapm );
+ CleanupStack::Pop( bitmap );
+ CleanupStack::PopAndDestroy(); // reader
+ return icon;
+ }
+
+// ---------------------------------------------------------------------------
+// Wrap the text to fit the minisize of Label.
+// ---------------------------------------------------------------------------
+//
+TInt CTruiContainerBase::DoWrapLabelText( const CFont* aFont, TInt aWidth,
+ const TDesC& aText, TInt aMaxLines,
+ HBufC* aWrappedText )
+ {
+ TInt lineCount;
+ TInt startPos = 0;
+ TInt lines = 1;
+ if ( aWidth <= 0 || !aWrappedText )
+ {
+ return 0;
+ }
+ TPtrC subText = aText.Mid( startPos, aText.Length() - startPos );
+ TPtr newTextPtr = aWrappedText->Des();
+ newTextPtr.Copy( KNullDesC );
+ while ( ( lineCount = aFont->TextCount( subText, aWidth ) ) < subText.Length() )
+ {
+ // Need to wrap
+ if ( ++lines > aMaxLines )
+ {
+ // Check if it is up to maximum line
+ break;
+ }
+ // get the last char of every line
+ TChar nextCharLine = aText[ startPos + lineCount ];
+
+ // Decide at which position insert the \n
+ if ( nextCharLine == TChar( ' ' ) )
+ {
+ // Replace nextCharLine with \n
+ newTextPtr.Append( subText.Mid( 0, lineCount ) );
+ newTextPtr.Append( KChangeLine );
+ // And move the startPos for the next loop.
+ startPos += lineCount + 1;
+ }
+ else
+ {
+ // Go forward to find " " and replace it with \n
+ // And move the startPos for the next loop.
+ TPtrC subTextPtr = subText.Mid( 0, lineCount );
+ TInt pos = subTextPtr.LocateReverse( TChar( ' ' ) );
+ if ( pos != KErrNotFound )
+ {
+ newTextPtr.Append( subTextPtr.Left( pos ) );
+ newTextPtr.Append( KChangeLine );
+ startPos += pos + 1;
+ }
+ else
+ {
+ newTextPtr.Append( subTextPtr );
+ newTextPtr.Append( KChangeLine );
+ startPos += lineCount;
+ }
+ }
+ subText.Set( aText.Mid( startPos, aText.Length() - startPos ) );
+ }
+ newTextPtr.Append( subText );
+ return lines;
+ }
+
+// ---------------------------------------------------------------------------
+// From class CCoeControl.
+// Handles a change to the control's resources.
+// ---------------------------------------------------------------------------
+//
+void CTruiContainerBase::HandleResourceChange( TInt aType )
+ {
+ CCoeControl::HandleResourceChange( aType );
+ if ( aType==KEikDynamicLayoutVariantSwitch && iView )
+ {
+ SetRect( iView->ClientRect() );
+ }
+ }