textinput/peninputgenerichwr/src/peninputgenerichwrlafdatamgr.cpp
changeset 0 eb1f2e154e89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/textinput/peninputgenerichwr/src/peninputgenerichwrlafdatamgr.cpp	Tue Feb 02 01:02:04 2010 +0200
@@ -0,0 +1,358 @@
+/*
+* Copyright (c) 2002-2005 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:  peninput hwr laf data manager
+*
+*/
+
+
+// System includes
+#include <peninputdataconverter.h>
+#include <peninputcommonlayoutglobalenum.h>
+#include <AknUtils.h> 
+#include <aknlayoutscalable_avkon.cdl.h>
+
+// User includes
+#include "peninputgenerichwrlafdatamgr.h"
+
+// ======== MEMBER FUNCTIONS ========
+
+// ---------------------------------------------------------------------------
+// CPeninputHwrLayoutDataInfo::NewLC
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputHwrLayoutDataInfo* CPeninputHwrLayoutDataInfo::NewLC()
+	{
+    CPeninputHwrLayoutDataInfo* self = 
+        new ( ELeave ) CPeninputHwrLayoutDataInfo();
+    CleanupStack::PushL( self );
+    return self;
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::NewL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputGenericHwrLafMgr* CPeninputGenericHwrLafMgr::NewL(TPeninputHwrLayoutType aLayoutType)
+	{
+	CPeninputGenericHwrLafMgr* self = NewLC(aLayoutType);
+    CleanupStack::Pop(self);
+    
+    return self;
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::NewLC
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputGenericHwrLafMgr* CPeninputGenericHwrLafMgr::NewLC(TPeninputHwrLayoutType aLayoutType)
+	{
+    CPeninputGenericHwrLafMgr* self = 
+        new ( ELeave ) CPeninputGenericHwrLafMgr(aLayoutType);
+    CleanupStack::PushL( self );
+    self->ConstructL(); 
+
+    return self;
+	
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::ConstructL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericHwrLafMgr::ConstructL()
+	{
+	ReadLafInfoL();
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::~CPeninputGenericHwrLafMgr
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputGenericHwrLafMgr::~CPeninputGenericHwrLafMgr()
+	{
+	iLayoutData.ResetAndDestroy();
+	iLayoutData.Close();
+	}
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::GetButtonRect
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericHwrLafMgr::GetButtonRect( TPeninputCommonCtrlID aButtonID, 
+										  	   TRect& aOutterRect,
+										       TRect& aInnerRect )
+	{
+	ASSERT( IsValid() );
+
+	switch( aButtonID )
+		{
+		case EPeninutWindowCtrlIdMoveBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iMoveButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iMoveButton.iInnerRect;
+			}
+			break;
+		case EPeninutWindowCtrlIdCloseBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iCloseButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iCloseButton.iInnerRect;
+			}
+			break;
+		case EPeninutWindowCtrlIdOptionBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iOptionButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iOptionButton.iInnerRect;
+			}
+			break;
+		case EPeninutWindowCtrlIdSwitchToVkbBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iSwitchButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iSwitchButton.iInnerRect;							
+			}
+			break;
+		case EPeninutWindowCtrlIdSymbolBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iRangbar.iSymbolButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iRangbar.iSymbolButton.iInnerRect;							
+			}
+			break;
+		case EPeninutWindowCtrlIdNativeCharBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iRangbar.iAlphaButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iRangbar.iAlphaButton.iInnerRect;							
+			}
+			break;
+		case EPeninutWindowCtrlIdInputLangSwitcherBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iLanguageButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iLanguageButton.iInnerRect;							
+			}
+			break;	
+		case EPeninutWindowCtrlIdLatinNumberBtn:
+			{
+			aOutterRect = iLayoutData[iCurLayoutType]->iRangbar.iNumberButton.iRect;
+			aInnerRect  = iLayoutData[iCurLayoutType]->iRangbar.iNumberButton.iInnerRect;							
+			}
+			break;
+		default:
+			ASSERT( EFalse );
+			break;
+		}
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::EntirePaneRect
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+inline const TRect& CPeninputGenericHwrLafMgr::EntirePaneRect() const
+	{
+	ASSERT( IsValid() );	
+	return 	iLayoutData[iCurLayoutType]->iHwrWndRect;
+	}	
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::RangbarRect
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+inline const TRect& CPeninputGenericHwrLafMgr::RangbarRect() const
+	{
+	ASSERT( IsValid() );
+	return 	iLayoutData[iCurLayoutType]->iRangbar.iRect;
+	}	
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::TextAreaRect
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+inline const TRect& CPeninputGenericHwrLafMgr::TextAreaRect() const
+	{
+	ASSERT( IsValid() );
+	return 	iLayoutData[iCurLayoutType]->iICF.iRect;
+	}	
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::WriteAreaRect
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+inline const TRect& CPeninputGenericHwrLafMgr::WriteAreaRect() const
+	{
+	ASSERT( IsValid() );
+	return 	iLayoutData[iCurLayoutType]->iWriteAreaRect;
+	}	
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::CPeninputGenericHwrLafMgr
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+CPeninputGenericHwrLafMgr::CPeninputGenericHwrLafMgr(TPeninputHwrLayoutType aLayoutType) 
+	: iCurLayoutType(aLayoutType),iIsValid(EFalse) 
+	{
+		
+	}	
+	
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::SetLayoutType
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+inline void CPeninputGenericHwrLafMgr::SetLayoutType(TPeninputHwrLayoutType aLayoutType)
+	{
+	iCurLayoutType = aLayoutType;
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::LayoutType
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+inline TPeninputHwrLayoutType CPeninputGenericHwrLafMgr::LayoutType() const
+	{
+	return iCurLayoutType;
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::IsValid
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+inline TBool CPeninputGenericHwrLafMgr::IsValid() const
+	{
+	return iIsValid && iCurLayoutType != ELayoutNone;
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::ReadLafInfoL
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericHwrLafMgr::ReadLafInfoL()
+	{
+    TAknWindowLineLayout appWnd, mainPane, wndLayout;
+	TAknLayoutRect wndLayoutRect;
+	
+    // Get hwr window layout
+    appWnd = AknLayoutScalable_Avkon::application_window(0).LayoutLine();
+
+    if (appWnd.iW > appWnd.iH) // landscape
+        {	    
+	    mainPane = AknLayoutScalable_Avkon::main_pane(4).LayoutLine();
+        wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(2).LayoutLine();
+        }
+    else  // portrait	
+        {        
+        mainPane = AknLayoutScalable_Avkon::main_pane(1).LayoutLine();
+        wndLayout = AknLayoutScalable_Avkon::popup_fep_hwr_window(0).LayoutLine();
+        }
+	wndLayoutRect.LayoutRect(appWnd.Rect(), wndLayout);
+	
+	// Get latin layout
+	CPeninputHwrLayoutDataInfo* pDataInfo = CPeninputHwrLayoutDataInfo::NewLC();
+	GetHwrLayoutDataInfo( wndLayoutRect.Rect(), 0, *pDataInfo );
+	iLayoutData.AppendL( pDataInfo );
+	CleanupStack::Pop( pDataInfo );
+	
+	// Get non latin layout
+	pDataInfo = CPeninputHwrLayoutDataInfo::NewLC();
+	GetHwrLayoutDataInfo( wndLayoutRect.Rect(), 2, *pDataInfo );
+	iLayoutData.AppendL( pDataInfo );
+	CleanupStack::Pop( pDataInfo );	
+	
+	iIsValid = ETrue;
+	}
+
+// ---------------------------------------------------------------------------
+// CPeninputGenericHwrLafMgr::GetHwrLayoutDataInfo
+// (other items were commented in a header)
+// ---------------------------------------------------------------------------
+//
+void CPeninputGenericHwrLafMgr::GetHwrLayoutDataInfo( const TRect& aParentWndRect, 
+							   						  TInt aLayoutType, 
+							                          CPeninputHwrLayoutDataInfo& aDataInfo )
+	{
+	TAknWindowLineLayout topPane, sidePane, topTextPane;
+	TAknWindowLineLayout cellBtn, cellBtnInner, writePane;
+	
+	TAknLayoutRect topPaneRect, sidePaneRect;
+	TAknLayoutRect topTextPaneRect, writePaneRect;
+	TAknLayoutRect cellBtnRect, cellBtnInnerRect;
+	TAknTextLineLayout cellText;
+
+	aDataInfo.iHwrWndRect = aParentWndRect;
+	
+	// Get top pane laf info
+	topPane = AknLayoutScalable_Avkon::fep_hwr_top_pane(aLayoutType).LayoutLine();
+	topPaneRect.LayoutRect(aParentWndRect, topPane);
+		// move button
+	cellBtn = AknLayoutScalable_Avkon::fep_hwr_top_pane_g1(aLayoutType).LayoutLine();
+	cellBtnRect.LayoutRect(topPaneRect.Rect(), cellBtn);
+	aDataInfo.iMoveButton.iRect = cellBtnRect.Rect();
+		// close button
+	cellBtn = AknLayoutScalable_Avkon::fep_hwr_top_pane_g2(aLayoutType).LayoutLine();
+	cellBtnRect.LayoutRect(topPaneRect.Rect(), cellBtn);
+	aDataInfo.iCloseButton.iRect = cellBtnRect.Rect();	
+		// option button
+	cellBtn = AknLayoutScalable_Avkon::fep_hwr_top_pane_g3(aLayoutType).LayoutLine();
+	cellBtnRect.LayoutRect(topPaneRect.Rect(), cellBtn);
+	aDataInfo.iOptionButton.iRect = cellBtnRect.Rect();
+		// ICF and it's text font
+	topTextPane = AknLayoutScalable_Avkon::fep_hwr_top_text_pane(aLayoutType).LayoutLine();
+	topTextPaneRect.LayoutRect(topPaneRect.Rect(), topTextPane);
+	aDataInfo.iICF.iRect = topTextPaneRect.Rect();	
+	cellText = AknLayoutScalable_Avkon::fep_hwr_top_text_pane_t1().LayoutLine();
+	aDataInfo.iICF.iTextFont = AknLayoutUtils::FontFromId(cellText.iFont, NULL);
+
+	// Get side pane laf info
+	sidePane = AknLayoutScalable_Avkon::fep_hwr_side_pane(aLayoutType).LayoutLine();
+	sidePaneRect.LayoutRect(aParentWndRect, sidePane);
+		// alphabet button
+	cellBtn = AknLayoutScalable_Avkon::cell_hwr_side_pane(aLayoutType, 0, 0).LayoutLine();
+	cellBtnRect.LayoutRect(sidePaneRect.Rect(), cellBtn);
+	aDataInfo.iRangbar.iAlphaButton.iRect = cellBtnRect.Rect();
+		// number button
+	cellBtn = AknLayoutScalable_Avkon::cell_hwr_side_pane(aLayoutType, 1, 0).LayoutLine();
+	cellBtnRect.LayoutRect(sidePaneRect.Rect(), cellBtn);
+	aDataInfo.iRangbar.iNumberButton.iRect = cellBtnRect.Rect();	
+		// symbol button
+	cellBtn = AknLayoutScalable_Avkon::cell_hwr_side_pane(aLayoutType, 2, 0).LayoutLine();
+	cellBtnRect.LayoutRect(sidePaneRect.Rect(), cellBtn);
+	aDataInfo.iRangbar.iSymbolButton.iRect = cellBtnRect.Rect();		
+		// set range bar rect
+	aDataInfo.iRangbar.iRect = TRect( aDataInfo.iRangbar.iAlphaButton.iRect.iTl,
+										aDataInfo.iRangbar.iSymbolButton.iRect.iBr );	
+		// language button
+	cellBtn = AknLayoutScalable_Avkon::cell_hwr_side_pane(aLayoutType, 3, 0).LayoutLine();
+	cellBtnRect.LayoutRect(sidePaneRect.Rect(), cellBtn);
+	aDataInfo.iLanguageButton.iRect = cellBtnRect.Rect();
+		// switch button
+	cellBtn = AknLayoutScalable_Avkon::cell_hwr_side_pane(aLayoutType, 4, 0).LayoutLine();
+	cellBtnRect.LayoutRect(sidePaneRect.Rect(), cellBtn);
+	aDataInfo.iSwitchButton.iRect = cellBtnRect.Rect();
+	
+	// Get write pane laf info
+	writePane = AknLayoutScalable_Avkon::fep_hwr_write_pane(aLayoutType).LayoutLine();
+	writePaneRect.LayoutRect(aParentWndRect, writePane);
+	aDataInfo.iWriteAreaRect = writePaneRect.Rect();	
+	}
+