--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/extras/calcsoft/src/CalcOutSheet.cpp Wed Sep 01 12:29:54 2010 +0100
@@ -0,0 +1,821 @@
+/*
+* Copyright (c) 2002 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: The OutputSheet sub-pane class, CCalcOutputSheet.
+* Derived from CCoeControl.
+* The CCalcOutputSheet displays histroy data.
+* History data is scroll up and down.
+*
+*/
+
+
+
+// INCLUDE FILES
+#include <AknUtils.h>
+#include <Calcsoft.rsg>
+#include <applayout.cdl.h>
+#include <AknsDrawUtils.h>
+#include <layoutmetadata.cdl.h>
+#include "CalcEnv.h"
+#include "CalcCont.h"
+#include "CalcOutSheet.h"
+#include "CalcDoc.h"
+#include "CalcEditline.h"
+#include "CalcAppUi.h"
+#include "CalcHistory.h"
+#include "CalcDrawingConst.laf"
+#include "fbs.h"
+#include <AknIconUtils.h>
+#include <aknlayoutscalable_apps.cdl.h>
+#include <AknsBasicBackgroundControlContext.h>
+#include <AknFepInternalCRKeys.h>
+
+
+#include <eiksbfrm.h>
+#include <eikscrlb.h>
+
+// LOCAL CONSTANTS AND MACROS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// Two-phased constructor.
+CCalcOutputSheet* CCalcOutputSheet::NewL(
+ CCalcContainer* aContainer)
+ {
+ CCalcOutputSheet* self = new (ELeave) CCalcOutputSheet();
+ CleanupStack::PushL(self);
+ self->ConstructL(aContainer);
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+// Destructor
+CCalcOutputSheet::~CCalcOutputSheet()
+ {
+ delete iOpSheetContext;
+ if(iOperatorLayout)
+ {
+ iOperatorLayout->Reset();
+ delete iOperatorLayout;
+ }
+ if(iOperandLayout)
+ {
+ iOperandLayout->Reset();
+ delete iOperandLayout;
+ }
+ if(iEqualLineLayout)
+ {
+ iEqualLineLayout->Reset();
+ delete iEqualLineLayout;
+ }
+ if(iResultsLineLayout)
+ {
+ iResultsLineLayout->Reset();
+ delete iResultsLineLayout;
+ }
+ if (iCRKey)
+ {
+ delete iCRKey;
+ iCRKey = NULL;
+ }
+
+ //Delete the scrollbar frame
+ if(iSBFrame)
+ {
+ delete iSBFrame;
+ iSBFrame = NULL;
+ }
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::ScrollToBottomL
+// Scroll to bottom line.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::ScrollToBottomL()
+ {
+ iScrollOffset = 0;
+
+ //If scrollbar is present, update the scrollbar as well
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ UpdateScrollIndicatorL();
+ }
+ DrawNow();
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::NotifyClearHistory
+// Called after clearing calculation history.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::NotifyClearHistoryL()
+ {
+ iScrollOffset = 0;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ UpdateScrollIndicatorL();
+ }
+ DrawNow();
+ }
+
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::CanUp
+// Check whether scroll-up can be done or not.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCalcOutputSheet::CanUp() const
+ {
+ // The number of lines of the history which a document has is got.
+ TInt historyLine(iCalcHistory->Count());
+ if ( (iCalcOutputSheetLines + iScrollOffset) < historyLine )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::CanDown
+// Check whether scroll-down can be done or not.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TBool CCalcOutputSheet::CanDown() const
+ {
+ // The number of lines of the history which a document has is got.
+ return (iScrollOffset != 0);
+ }
+
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::ScrollUp
+// history is scrolled up.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::ScrollUp()
+ {
+
+ if (CanUp())
+ {
+ iScrollOffset++;
+ DrawNow();
+ }
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::ScrollDown
+// history is scrolled down.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::ScrollDown()
+ {
+
+ if (CanDown())
+ {
+ iScrollOffset--;
+ DrawNow();
+ }
+ }
+
+// C++ default constructor can NOT contain any code, that
+// might leave.
+//
+CCalcOutputSheet::CCalcOutputSheet()
+ {
+ }
+
+// default constructor can leave.
+void CCalcOutputSheet::ConstructL
+ (CCalcContainer* aContainer)
+
+ {
+ SetContainerWindowL(*aContainer);
+
+ iCalcContainer = aContainer;
+
+ iCalcAppEnv = CCalcAppEnv::Static();
+ iCalcPaper = iCalcAppEnv->PaperBitmap();
+ iCalcAppEnv->ScalablePaperBitmaps(iCalcScalablePaper);
+#ifdef __SCALABLE_ICONS
+ iCalcResultsLine = iCalcAppEnv->ResultsLineBitmap();
+#endif
+
+ CCalcAppUi* appui = iCalcAppEnv->AppUi();
+ CCalcDocument* calcDocument =
+ STATIC_CAST(CCalcDocument*, appui->Document());
+ iCalcHistory = calcDocument->History();
+ TAknLayoutScalableParameterLimits listLimits;
+ listLimits = AknLayoutScalable_Apps::list_calc_item_pane_ParamLimits();
+ iCalcOutputSheetLines = (listLimits.LastRow()-listLimits.FirstRow()) + 1;
+ iOpSheetContext = CAknsBasicBackgroundControlContext::NewL(KAknsIIDQsnFrCalcPaper , TRect(0,0,0,0), EFalse);
+ iOperatorLayout = new(ELeave)CArrayFixFlat<TAknLayoutText>(iCalcOutputSheetLines);
+ iOperandLayout = new(ELeave)CArrayFixFlat<TAknLayoutText>(iCalcOutputSheetLines);
+ iResultsLineLayout = new(ELeave)CArrayFixFlat<TAknLayoutRect>(iCalcOutputSheetLines-1);
+ iEqualLineLayout = new(ELeave)CArrayFixFlat<TAknLayoutRect>(iCalcOutputSheetLines-1);
+ iUiLanguage = User::Language();
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::SizeChanged
+// Set size of control.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::SizeChanged()
+ {
+ TRAP_IGNORE( SizeChangedOutSheetL() );
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::SizeChanged
+// Set size of control.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::SizeChangedOutSheetL()
+ {
+ TRect parentRect(iCalcContainer->Rect());
+
+ TAknLayoutScalableParameterLimits listLimits;
+ if(AknLayoutUtils::PenEnabled())
+ {
+ listLimits = AknLayoutScalable_Apps::list_calc_item_pane_ParamLimits(enTouch_enabled);
+ }
+ else
+ {
+ listLimits = AknLayoutScalable_Apps::list_calc_item_pane_ParamLimits(enTouch_disabled);
+ }
+ iCalcOutputSheetLines = (listLimits.LastRow()-listLimits.FirstRow()) + 1;
+ iOperatorLayout->ResizeL(iCalcOutputSheetLines);
+ iOperandLayout->ResizeL(iCalcOutputSheetLines);
+ iResultsLineLayout->ResizeL(iCalcOutputSheetLines-1);
+ iEqualLineLayout->ResizeL(iCalcOutputSheetLines-1);
+
+ iOperatorLayout->Reset();
+ iOperandLayout->Reset();
+ iResultsLineLayout->Reset();
+ iEqualLineLayout->Reset();
+
+ TAknLayoutRect rectParent;
+ TAknWindowLineLayout layoutOfParentResultsLine;
+ TAknLayoutRect rectListCalcPane;
+
+
+
+ if( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+ {
+ TAknWindowLineLayout calcPaperPane;
+
+ //For Touch UI Layouts, different configuration
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ if (Layout_Meta_Data::IsLandscapeOrientation())
+ {
+ calcPaperPane = AknLayoutScalable_Apps::calc_paper_pane(enTouch_with_lsc).LayoutLine();
+ }
+ else
+ {
+ calcPaperPane = AknLayoutScalable_Apps::calc_paper_pane(enTouch_with_prt).LayoutLine();
+ }
+ }
+ else
+ {
+ calcPaperPane = AknLayoutScalable_Apps::calc_paper_pane(enTouch_disabled).LayoutLine();
+ }
+ TAknLayoutRect rectcalcPaperPane;
+ rectcalcPaperPane.LayoutRect(parentRect,calcPaperPane);
+ iSBBrPoint = rectcalcPaperPane.Rect().iBr;
+ TAknWindowLineLayout layoutListCalcPane;
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ layoutListCalcPane = AknLayoutScalable_Apps::list_calc_pane(enTouch_enabled).LayoutLine();
+ }
+ else
+ {
+ layoutListCalcPane = AknLayoutScalable_Apps::list_calc_pane(enTouch_disabled).LayoutLine();
+ }
+
+ rectListCalcPane.LayoutRect(rectcalcPaperPane.Rect(),layoutListCalcPane);
+ }
+
+ TInt nTimes=(iCalcOutputSheetLines-1);
+ for (TInt cnt(0); cnt < iCalcOutputSheetLines; cnt++)
+ {
+ if (AknLayoutUtils::ScalableLayoutInterfaceAvailable())
+ {
+ if(AknLayoutUtils::PenEnabled())
+ {
+ if (Layout_Meta_Data::IsLandscapeOrientation())
+ {
+ layoutOfParentResultsLine = AknLayoutScalable_Apps::list_calc_item_pane(nTimes,enTouch_enabled).LayoutLine();
+ }
+ else
+ {
+ layoutOfParentResultsLine = AknLayoutScalable_Apps::list_calc_item_pane(nTimes,enTouch_enabled).LayoutLine();
+ }
+
+ }
+ else
+ {
+ layoutOfParentResultsLine = AknLayoutScalable_Apps::list_calc_item_pane(nTimes,enTouch_disabled).LayoutLine();
+ }
+
+
+ rectParent.LayoutRect(rectListCalcPane.Rect(),layoutOfParentResultsLine) ;
+
+ TAknLayoutText operatorLayout;
+ TAknLayoutText operendLayout;
+ if(AknLayoutUtils::PenEnabled())
+ {
+ operatorLayout.LayoutText(rectParent.Rect(),AknLayoutScalable_Apps::list_calc_item_pane_t2(enTouch_with_prt).LayoutLine(),iCalcAppEnv->OutSheetOperatorFont());
+ iOperatorLayout->AppendL(operatorLayout);
+
+ operendLayout.LayoutText(rectParent.Rect(),AknLayoutScalable_Apps::list_calc_item_pane_t1(enTouch_with_lsc).LayoutLine(),iCalcAppEnv->OutSheetOperatorFont());
+ iOperandLayout->AppendL(operendLayout);
+ }
+ else
+ {
+ operatorLayout.LayoutText(rectParent.Rect(),AknLayoutScalable_Apps::list_calc_item_pane_t2(enTouch_disabled).LayoutLine(),iCalcAppEnv->OutSheetOperatorFont());
+ iOperatorLayout->AppendL(operatorLayout);
+
+ operendLayout.LayoutText(rectParent.Rect(),AknLayoutScalable_Apps::list_calc_item_pane_t1(enTouch_disabled).LayoutLine(),iCalcAppEnv->OutSheetOperatorFont());
+ iOperandLayout->AppendL(operendLayout);
+ }
+
+ // aCustomFont
+ --nTimes;
+
+ }
+
+ else
+ {
+
+
+ //Scalable UI.
+
+ TAknLayoutText operatorLayout;
+ TAknLayoutText operendLayout;
+ operatorLayout.LayoutText(parentRect,AppLayout::Calculator_texts_Line_8(nTimes),iCalcAppEnv->OutSheetOperatorFont()); // aCustomFont
+ iOperatorLayout->AppendL(operatorLayout);
+
+ operendLayout.LayoutText(parentRect,AppLayout::Calculator_texts_Line_7(nTimes), NULL);
+ iOperandLayout->AppendL(operendLayout);
+ --nTimes;
+ }
+ }
+
+ //Scalable UI.
+ nTimes = iCalcOutputSheetLines - 2;
+ for (TInt ii(0); ii < (iCalcOutputSheetLines - 1); ii++)
+ {
+
+
+ if( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+ {
+#ifdef __SCALABLE_ICONS
+ layoutOfParentResultsLine = AknLayoutScalable_Apps::list_calc_item_pane(nTimes).LayoutLine();
+
+ rectParent.LayoutRect(rectListCalcPane.Rect(),layoutOfParentResultsLine) ;
+ TAknWindowLineLayout layoutOfResultsLine = AknLayoutScalable_Apps::list_calc_item_pane_g1().LayoutLine();
+ TAknLayoutRect lineLayout;
+ lineLayout.LayoutRect(rectParent.Rect(),layoutOfResultsLine);
+ iResultsLineLayout->AppendL(lineLayout);
+#else
+ TAknLayoutRect lineLayout;
+ lineLayout.LayoutRect(parentRect,AppLayout::Calculator_elements_Line_3(nTimes));
+ iEqualLineLayout->AppendL(lineLayout);
+#endif
+ }
+ else
+ {
+ TAknLayoutRect lineLayout;
+ lineLayout.LayoutRect(parentRect,AppLayout::Calculator_elements_Line_3(nTimes));
+ iEqualLineLayout->AppendL(lineLayout);
+ }
+
+ --nTimes;
+ }
+
+ TAknLayoutRect paperRect;
+ if( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+ {
+ TAknLayoutRect rectCalcPaperPane;
+ TAknLayoutRect rectbgCalcPaperPane;
+ //Different configuration for Touch Layouts
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ //In landscape mode different configuration is needed
+ if (Layout_Meta_Data::IsLandscapeOrientation())
+ {
+ rectCalcPaperPane.LayoutRect(parentRect,AknLayoutScalable_Apps::calc_paper_pane(enTouch_with_lsc).LayoutLine());
+ }
+ else
+ {
+ rectCalcPaperPane.LayoutRect(parentRect,AknLayoutScalable_Apps::calc_paper_pane(enTouch_with_prt).LayoutLine());
+ }
+ rectbgCalcPaperPane.LayoutRect(rectCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane(enTouch_enabled).LayoutLine());
+ }
+ else
+ {
+ rectCalcPaperPane.LayoutRect(parentRect,AknLayoutScalable_Apps::calc_paper_pane(enTouch_disabled).LayoutLine());
+ rectbgCalcPaperPane.LayoutRect(rectCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane().LayoutLine());
+ }
+
+ iPaperPaneRect = rectCalcPaperPane;
+
+
+ iCalcPaperLayout[0].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g1().LayoutLine());
+ iCalcPaperLayout[1].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g2().LayoutLine());
+ iCalcPaperLayout[2].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g3().LayoutLine());
+ iCalcPaperLayout[3].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g4().LayoutLine());
+ iCalcPaperLayout[4].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g5().LayoutLine());
+ iCalcPaperLayout[5].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g6().LayoutLine());
+ iCalcPaperLayout[6].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g7().LayoutLine());
+ iCalcPaperLayout[7].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::bg_calc_paper_pane_g8().LayoutLine());
+ iCalcPaperLayout[8].LayoutRect(rectbgCalcPaperPane.Rect(),AknLayoutScalable_Apps::calc_bg_paper_pane_g9().LayoutLine());
+ }
+
+ iOpSheetContext->SetRect(Rect());
+
+ //Only for touch UI, scrollbars are present
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ UpdateScrollIndicatorL();
+ }
+ else
+ {
+ if(iSBFrame)
+ {
+ delete(iSBFrame);
+ iSBFrame = NULL;
+ }
+
+ }
+
+ }
+
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::UpdateScrollIndicatorL
+// Creates and updates the scrollbar
+// (other items were commented in a header).
+// ---------------------------------------------------------
+void CCalcOutputSheet::UpdateScrollIndicatorL()
+ {
+
+ if( !AknLayoutUtils::PenEnabled() )
+ {
+ return;
+ }
+
+ TAknLayoutRect rectCalcScrollPane;
+
+ //Get the layout information for the scrollbar
+ if( AknLayoutUtils::PenEnabled() )
+ {
+ if (Layout_Meta_Data::IsLandscapeOrientation())
+ {
+ rectCalcScrollPane.LayoutRect(iPaperPaneRect.Rect(),AknLayoutScalable_Apps::scroll_pane_cp024().LayoutLine());
+ }
+ else
+ {
+ rectCalcScrollPane.LayoutRect(iPaperPaneRect.Rect(),AknLayoutScalable_Apps::scroll_pane_cp024().LayoutLine());
+ }
+
+ }
+ //Create scrollbar if not created already
+ if ( !iSBFrame )
+ {
+ //Make this class as the observer class as well
+ iSBFrame = new( ELeave ) CEikScrollBarFrame( this,this, ETrue );
+
+ // Decide which type of scrollbar is to be shown
+ CAknAppUi* appUi = iAvkonAppUi;
+ if (AknLayoutUtils::DefaultScrollBarType(appUi) == CEikScrollBarFrame::EDoubleSpan)
+ {
+ // For EDoubleSpan type scrollbar
+ iSBFrame->CreateDoubleSpanScrollBarsL(ETrue, EFalse); // non-window owning scrollbar
+ iSBFrame->SetTypeOfVScrollBar(CEikScrollBarFrame::EDoubleSpan);
+ }
+ else
+ {
+ // For EArrowHead type scrollbar
+ iSBFrame->SetTypeOfVScrollBar(CEikScrollBarFrame::EArrowHead);
+ }
+ iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,CEikScrollBarFrame::EOff);
+ }
+
+ TEikScrollBarModel hSbarModel;
+ TEikScrollBarModel vSbarModel;
+
+ //By default span is one if only one page is present
+ if(iCalcHistory->Count() < iCalcOutputSheetLines)
+ {
+ vSbarModel.iScrollSpan = 1;
+ vSbarModel.iThumbPosition = 0;
+
+ }
+ else
+ {
+ //span calculator if no of lines exceeds one page
+ vSbarModel.iScrollSpan = 1 + iCalcHistory->Count() - iCalcOutputSheetLines;
+ }
+
+ iPrevThumbPosition = vSbarModel.iThumbPosition = vSbarModel.iScrollSpan - 1;
+ vSbarModel.iThumbSpan = 1;
+
+ TRect clientRect( iAvkonAppUi->ClientRect() );
+ TRect rec(rectCalcScrollPane.Rect());
+ TPoint point = rectCalcScrollPane.Rect().iBr;
+ TInt width = rectCalcScrollPane.Rect().Width();
+ TInt rightPointRectX = iSBBrPoint.iX;
+ TInt pointRectX = point.iX;
+ TInt pointRectY = point.iY;
+ pointRectX = rightPointRectX;
+ TPoint newPoint;
+ newPoint.SetXY( pointRectX, pointRectY );
+ TRect rect;
+ rect.SetRect( rec.iTl, newPoint );
+
+ TEikScrollBarFrameLayout layout;
+ layout.iTilingMode = TEikScrollBarFrameLayout::EInclusiveRectConstant;
+
+ if (iSBFrame->TypeOfVScrollBar() == CEikScrollBarFrame::EDoubleSpan)
+ {
+ // For EDoubleSpan type scrollbar
+ if (vSbarModel.iThumbPosition + vSbarModel.iThumbSpan > vSbarModel.iScrollSpan)
+ {
+ // Not let scrollbar values overflow
+ vSbarModel.iThumbPosition = vSbarModel.iScrollSpan - vSbarModel.iThumbSpan;
+ }
+
+ TAknDoubleSpanScrollBarModel hDsSbarModel(hSbarModel);
+ TAknDoubleSpanScrollBarModel vDsSbarModel(vSbarModel);
+
+ if (iCalcHistory->Count() <= iCalcOutputSheetLines )
+ {
+ iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EOff);
+ }
+ else
+ {
+ iSBFrame->SetScrollBarVisibilityL(CEikScrollBarFrame::EOff,
+ CEikScrollBarFrame::EOn);
+ }
+
+ iSBFrame->TileL(&hDsSbarModel, &vDsSbarModel, clientRect, rect, layout);
+ iSBFrame->SetVFocusPosToThumbPos(vDsSbarModel.FocusPosition());
+ }
+ else
+ {
+ iSBFrame->TileL( &hSbarModel, &vSbarModel, clientRect, rect, layout );
+ iSBFrame->SetVFocusPosToThumbPos( vSbarModel.iThumbPosition );
+ }
+ }
+
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::Draw
+// Drawing frame and history.
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::Draw
+ (const TRect& aRect) const
+ {
+
+ CWindowGc& gc = SystemGc();
+ gc.Clear(aRect);
+ gc.SetClippingRect(aRect);
+ TRect rect(Rect());
+
+
+
+ MAknsSkinInstance* skin = AknsUtils::SkinInstance();
+
+ AknsDrawUtils::Background( AknsUtils:: SkinInstance(), AknsDrawUtils::ControlContext(this), this, gc, rect );
+
+
+ gc.SetBrushStyle(CGraphicsContext::ENullBrush);
+ gc.SetPenStyle(CGraphicsContext::ENullPen);
+ //set the size of the bitmap. SVG-T upgrade.
+ CAknsItemData* idata = NULL;
+ if (skin)
+ {
+ idata = skin->GetCachedItemData( KAknsIIDQsnFrCalcPaper);
+ }
+
+ if ( idata && idata->Type() == EAknsITImageTable )
+ {
+ if ( AknLayoutUtils::PenEnabled() )
+ {//when touch input,the paper become bigger,so it needs only one paper
+ AknIconUtils::SetSize(iCalcScalablePaper[0]->Bitmap(),iCalcPaperLayout[0].Rect().Size(),EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iCalcScalablePaper[0]->Mask(),iCalcPaperLayout[0].Rect().Size(),EAspectRatioNotPreserved);
+ iCalcPaperLayout[0].DrawImage(gc, iCalcScalablePaper[0]->Bitmap(),iCalcScalablePaper[0]->Mask());
+ }
+ else
+ {
+ for(TInt Cnt=0;Cnt < 9; Cnt++)
+ {
+ AknIconUtils::SetSize(iCalcScalablePaper[Cnt]->Bitmap(),iCalcPaperLayout[Cnt].Rect().Size(),EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iCalcScalablePaper[Cnt]->Mask(),iCalcPaperLayout[Cnt].Rect().Size(),EAspectRatioNotPreserved);
+ iCalcPaperLayout[Cnt].DrawImage(gc, iCalcScalablePaper[Cnt]->Bitmap(),iCalcScalablePaper[Cnt]->Mask());
+ }
+ }
+ }
+ else
+ {
+ // Make outsheet displayed in Jingmask is the same size as in other themes
+ // when there is a scrollbar on outsheet.
+ if ( AknLayoutUtils::PenEnabled() )
+ {
+ AknsDrawUtils::Background( AknsUtils:: SkinInstance(), iOpSheetContext, this, gc, iCalcPaperLayout[0].Rect() );
+ }
+ else
+ {
+ AknsDrawUtils::Background( AknsUtils:: SkinInstance(), iOpSheetContext, this, gc, rect );
+ }
+ }
+
+
+ for (TInt loop(iCalcOutputSheetLines - 1); loop >= 0; loop--)
+ {
+ const TCalcEditLine& history = (*iCalcHistory)[loop + iScrollOffset];
+ TCalcEditLine::TCalcOperatorType operatorType(
+ history.Operator());
+
+ if (loop < iCalcOutputSheetLines - 1)
+ {
+ // When an operator is Equal, a line is drawn at an upper end.
+ if (TCalcEditLine::ECalcEqual == operatorType)
+ {
+ TRgb ResultsLineolor;
+ TInt error1 = AknsUtils::GetCachedColor( skin, ResultsLineolor, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG29);
+ if(error1 == KErrNone)
+ {
+ AknIconUtils::SetIconColor(iCalcResultsLine->Bitmap(),ResultsLineolor);
+ }
+ if( AknLayoutUtils::ScalableLayoutInterfaceAvailable() )
+ {
+#ifdef __SCALABLE_ICONS
+ TAknLayoutRect& lineLayout = iResultsLineLayout->At(loop);
+ AknIconUtils::SetSize(iCalcResultsLine->Bitmap(),lineLayout.Rect().Size(),EAspectRatioNotPreserved);
+ AknIconUtils::SetSize(iCalcResultsLine->Mask(),lineLayout.Rect().Size(),EAspectRatioNotPreserved);
+ lineLayout.DrawImage(gc, iCalcResultsLine->Bitmap(),iCalcResultsLine->Mask());
+#else
+ TAknLayoutRect& equalLineLayout= iEqualLineLayout->At(loop);
+ TRect rectLine = equalLineLayout.Rect();
+ equalLineLayout.DrawRect(gc);
+#endif
+ }
+ else
+ {
+ TAknLayoutRect& equalLineLayout= iEqualLineLayout->At(loop);
+ TRect rectLine = equalLineLayout.Rect();
+ equalLineLayout.DrawRect(gc);
+ }
+ }
+ }
+ TRgb color;
+ TInt error = AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors, EAknsCIQsnTextColorsCG29);
+ if(error == KErrNone)
+ {
+ gc.SetPenColor(color);
+ }
+
+ //change TBuf<10> to TBuf<KCalcMaxNumberWidth>
+ TBuf<KCalcMaxNumberWidth> keyvalue;
+
+ keyvalue.Append(history.NumberString());
+ AknTextUtils::LanguageSpecificNumberConversion (keyvalue);
+ // An operand's drawing
+ TAknLayoutText& operendLayout = iOperandLayout->At(loop);
+
+ if ( iUiLanguage == ELangFarsi || iUiLanguage == ELangHindi ||
+ iUiLanguage == ELangUrdu || iUiLanguage == ELangArabic )
+ {
+ if( iUiLanguage == ELangUrdu || iUiLanguage == ELangArabic )
+ {
+ TInt len = keyvalue.Length();
+ TInt pos = KErrNotFound;
+ TBuf<1> ch;
+ ch.Append(iCalcAppEnv->MinusIndicator());
+ if( (pos = keyvalue.Locate(iCalcAppEnv->MinusIndicator())) != KErrNotFound &&
+ pos == keyvalue.LocateReverse(iCalcAppEnv->MinusIndicator()))
+ {
+ keyvalue.Delete( pos, 1 );
+ keyvalue.Insert( 0, ch );
+ }
+ }
+ operendLayout.DrawText(gc,keyvalue,EFalse,color);
+ }
+ else
+ {
+ operendLayout.DrawText(gc,history.NumberString(),EFalse,color);
+ }
+ // An operator's drawing
+ TPtrC operatorString(
+ iCalcAppEnv->OutSheetOperator(operatorType));
+ TAknLayoutText& operatorLayout = iOperatorLayout->At(loop);
+ operatorLayout.DrawText(gc, operatorString , EFalse, color);
+ }
+
+
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::HandleScrollEventL
+// Handles the events from the scrollbar
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::HandleScrollEventL(CEikScrollBar* aScrollBar, TEikScrollEvent aEventType)
+ {
+ //Only on page up/down,scroll up/down and drag events
+ if((aEventType == EEikScrollPageDown) || (aEventType == EEikScrollPageUp) ||
+ (aEventType == EEikScrollThumbDragVert) || (aEventType == EEikScrollUp) ||
+ (aEventType == EEikScrollDown))
+
+ {
+ //Get the current position from the scroll bar
+
+ if(iPrevThumbPosition >aScrollBar->ThumbPosition() )
+ {
+ //Move the scroll bar n times up
+ while(iPrevThumbPosition != aScrollBar->ThumbPosition())
+ {
+ ScrollUp();
+ iPrevThumbPosition--;
+ }
+ }
+ else
+ {
+ //Move the scroll bar n times down
+ while( iPrevThumbPosition != aScrollBar->ThumbPosition() )
+ {
+ ScrollDown();
+ iPrevThumbPosition++;
+ }
+ }
+
+ DrawNow();
+ }
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::HandleResourceChange
+// Handles the events that needs to be taken care after resource change
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::HandleResourceChange(TInt aType)
+{
+ TRAP_IGNORE(HandleResourceChangeOutSheetL(aType) );
+ }
+
+// ---------------------------------------------------------
+// CCalcOutputSheet::HandleResourceChangeOutSheetL
+// Handles the events that needs to be taken care after resource change
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CCalcOutputSheet::HandleResourceChangeOutSheetL(TInt aType)
+
+{
+
+ if ( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ if (AknLayoutUtils::PenEnabled())
+ {
+ ScrollToBottomL();
+ }
+ }
+ if ( aType == KAknsMessageSkinChange )
+ {
+ if (AknLayoutUtils::PenEnabled())
+ {
+ delete (iSBFrame);
+ iSBFrame = NULL;
+
+ UpdateScrollIndicatorL();
+ }
+ }
+}
+// End of File