extras/calcsoft/src/CalcView.cpp
branchRCL_3
changeset 23 41b775cdc0c8
parent 22 0f21a5ec0db7
child 24 10c6e6d6e4d9
--- a/extras/calcsoft/src/CalcView.cpp	Thu Aug 19 09:56:23 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1188 +0,0 @@
-/*
-* 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:  CCalcView is a view class of Calculator application.
-*                Base class of CCalcView is CAknView. 
-*
-*/
-
-
-
-// INCLUDE FILES
-#include <avkon.hrh>
-#include <eikon.hrh>
-#include <eikmenup.h>
-#include <aknnotewrappers.h> 
-#include <AiwServiceHandler.h>
-
-#include <aknbutton.h>
-
-#include <hlplch.h>   // For HlpLauncher 
-#include <featmgr.h>      // Feature Manager
-
-#include <Calcsoft.rsg>
-
-#include "CalcView.h"
-#include "CalcCont.h" 
-#include "CalcEdit.h"
-#include "CalcAppUi.h"
-#include "CalcDoc.h"
-#include "CalcHistory.h"
-#include "CalcOutSheet.h"
-#include "CalcFunc.h"
-#include "CalcEnv.h"
-#include "calc.hrh" 
-#include "CalcEditline.h"
-
-//#include    "CalcCmdBtn.h"
-
-#include <layoutmetadata.cdl.h>
-#include <AiwMenu.h>
-#include <AiwCommon.h>
-
-
-//  LOCAL CONSTANTS AND MACROS  
-
-
-// ================= MEMBER FUNCTIONS =======================
-
-
-// Two-phased constructor.
-CCalcView* CCalcView::NewLC()
-    {
-    CCalcView* self = new (ELeave) CCalcView();
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    return self;
-    }
-  
-  // default constructor can leave.
-void CCalcView::ConstructL()
-    {
-    
-    BaseConstructL(R_CALC_VIEW_INFO);
-    
-    iCalcDocument = STATIC_CAST(CCalcDocument*, AppUi()->Document());
-
-    iCalcDocument->SetCalcView( this );
-
-    iCalcDocument->LoadStateL();
-   
-    /******** Initialize the ServiceHandler in the ConstructL *****/
-    
-    iServiceHandler = CAiwServiceHandler::NewL();
-    
-    /***** Attach the Menu Items of the Calculator and also the Interest *****/
-    
-    iServiceHandler->AttachMenuL(R_CALC_POPUPMENU, R_AIWHELPAPP_INTEREST);
-    
-    this->iLastResultSetected = EFalse;
-    }
-
-// Destructor
-CCalcView::~CCalcView()
-    {
-    if ( iContainer )
-        {
-        delete iContainer;
-        iContainer = NULL;
-        }
-
-    if( iServiceHandler )
-        {
-        delete iServiceHandler;
-        iServiceHandler = NULL;
-        }
-     
-     }
-
-// ---------------------------------------------------------
-// CCalcView::State
-// Return current state
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-CCalcView::TStateNo CCalcView::State() const
-    {
-    return iState;
-    }
-
-// ----------------------------------------------------
-// CCalcView::LatestInput
-// Return type of latest input
-// (other items were commented in a header).
-// ----------------------------------------------------
-//
-CCalcView::TKindOfInput CCalcView::LatestInput() const
-    {
-    return iLatestInput;
-    }
-
-// ----------------------------------------------------
-// CCalcView::UpdateState
-// Update state by using kind of input
-// (other items were commented in a header).
-// ----------------------------------------------------
-//
-void CCalcView::UpdateState
-        (const TKindOfInput& aKind)   
-    {
-    iLatestInput = aKind;
-    
-    switch (aKind)
-       {
-        case EOperand:
-        case EMemoryRecall:
-            {
-            switch (iState)
-                {
-                case EInitialMode: 
-                case ESelectResult:
-                    iState = EOperandOnly;
-                    break;
-                case EOperandAndOperator:
-                    iState = EOperandAndOperatorAndOperand;
-                    break;
-                default:
-                    break;
-                }
-            break;
-            }
-        case EOperatorResult:
-            {
-            iState = EOperatorOnlyResult;
-            break;
-            }
-        case EOperator:
-            {
-            iState = EOperandAndOperator;
-            break;
-            }
-        case EEqual:
-            {
-            iState = ESelectResult;
-            break;
-            }
-        case EMemorySave:
-            {
-            switch (iState)
-                {
-                case EOperandAndOperatorAndOperand:
-                    iState = ESelectResult;
-                    break;
-                case ESelectResult:
-                    iState = EOperandOnly;
-                    break;
-                default:
-                    break;
-                }
-            break;
-            }
-        case EAllClear:
-            {
-            iState = EOperandOnly;
-            break;
-            }
-        default:
-            {
-            break;
-            }
-        }
-    }
-
-
-// ----------------------------------------------------
-// CCalcView::ErrorMsgL
-// Display error message
-// (other items were commented in a header).
-// ----------------------------------------------------
-//
-void CCalcView::ErrorMsgL
-        (TInt aErrorCode) 
-    {
-    TInt resourceId(0);
-
-    switch (aErrorCode)
-        {
-        case KErrOverflow:
-            {
-            resourceId = R_CALC_ERROR_OUTOFRANGE;
-            break;
-            }
-        case KErrDivideByZero:
-            {
-            resourceId = R_CALC_ERROR_DIVISIONBYZERO;
-
-             // UpdateState( EOperator );
-            break;
-            }
-        case KErrNotSupported:
-            {
-            resourceId = R_CALC_ERROR_NEGATIVEVALUESQRT;
-            break;
-            }
-        default:
-            {
-            return;
-            }
-        }
-    
-    //Localisation of scalable UI.
-    HBufC* message = iCoeEnv->AllocReadResourceLC(resourceId) ;
-    CAknErrorNote* note = new (ELeave) CAknErrorNote();
-    note->ExecuteLD(*message);
-    CleanupStack::PopAndDestroy(message);
-    
-    }
-
-
-// ----------------------------------------------------
-// CCalcView::DynInitMainMenuPane
-// Delete meaningless items from main menu.
-// (other items were commented in a header).
-// ----------------------------------------------------
-//
-void CCalcView::DynInitMainMenuPane    
-              (CEikMenuPane* aMenuPane) 
-    {
-    
-            
-
-    switch (iState)
-        {
-        case ESelectResult:
-            {
-            aMenuPane->DeleteMenuItem(ECalcCmdLastResult);
-            break;
-            }
-        case EInitialMode:
-            {
-            aMenuPane->DeleteMenuItem(ECalcCmdClearCalcAndHistory);
-            break;
-            }
-        case EOperandOnly:
-            {
-            if (iCalcDocument->History()->Count() == 0)
-                {
-                aMenuPane->DeleteMenuItem(ECalcCmdClearCalcAndHistory);
-                }
-             if(iLastResultSetected)
-                 {
-                aMenuPane->DeleteMenuItem(ECalcCmdLastResult);     
-                 }
-            break;
-            }
-        case EOperandAndOperator:
-        case EOperandAndOperatorAndOperand:
-             if(iLastResultSetected)
-                 {
-                aMenuPane->DeleteMenuItem(ECalcCmdLastResult);     
-                 }
-            break;      
-        default:
-            {
-            break;
-            }
-        }
-    }                        
-
-
-// ----------------------------------------------------
-// CCalcView::DynInitMemoryMenuPane
-// Delete meaningless items from menu of memory 
-// (other items were commented in a header).
-// ----------------------------------------------------
-//
-void CCalcView::DynInitMemoryMenuPane
-        (CEikMenuPane* aMenuPane)
-    {
-    if (!iCalcDocument->HasMemory())
-        {
-        aMenuPane->DeleteMenuItem(ECalcCmdMemoryClear);
-        }    
-    }
-    
-// ---------------------------------------------------------
-// CCalcView::NotifyChangeDecimal
-// Call when decimal separator is changed.
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::NotifyChangeDecimal(TChar aOld, TChar aNew)
-    {
-    iContainer->NotifyChangeDecimal(aOld, aNew);
-    }
-    
-
-
-// ---------------------------------------------------------
-// CCalcView::HandleCommandL
-// Handling command.
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleCommandL
-        ( TInt aCommand ) 
-    {
-    // Handle the command generated by:
-    //   1. menu item selection
-    //   2. short-cut key press
-   
-    switch ( aCommand )
-        {
-        case ECalcCmdResult:
-            {
-            HandleResultL();
-            break;
-            }
-        case ECalcCmdAdd:
-            {
-            HandleOperatorL(TCalcEditLine::ECalcAdd);
-            break;
-            }
-        case ECalcCmdSubtract:
-            {
-            HandleOperatorL(TCalcEditLine::ECalcSubtract);
-            break;
-            }
-        case ECalcCmdMultiply:
-            {
-            HandleOperatorL(TCalcEditLine::ECalcMultiply);
-            break;
-            }
-        case ECalcCmdDivide:
-            {
-            HandleOperatorL(TCalcEditLine::ECalcDivide);
-            break;
-            }
-        case ECalcCmdChangeSign:
-            {
-            this->iLastResultSetected = EFalse;
-            HandleChangeSignL();
-            break;
-            }
-        case ECalcCmdLastResult:
-            {
-            HandleLastResultL();
-            break;
-            }
-        case ECalcCmdPercent:
-            {
-            HandleOperatorL(TCalcEditLine::ECalcPercent);
-            // The result is always is displayed
-            // after the percent button is pressed.
-            // But if there was a error in the calculation
-            // this if will enable us to not call the
-            // HandleResultL and thus making sure that
-            // the state of the buttons is identical to the
-            // situation before the calculation.
-            if (iState == EOperatorOnlyResult)
-                HandleResultL();
-            break;
-            }
-        case ECalcCmdSqrt:
-            {
-//            TRequestStatus trs;
-//            RTimer timer;
-//            timer.CreateLocal();
-//            timer.After(trs, 1000*2);
-//            while ( trs == KRequestPending) {
-//                  User::WaitForAnyRequest();
-//            }
-//            timer.Cancel();
-//            timer.Close();
-            HandleOperatorL(TCalcEditLine::ECalcSqrt);
-            // HandleResultL only if sqrt was pressed after single operand.
-            if (iState == EOperatorOnlyResult)
-                HandleResultL();
-
-            break;
-            }
-        case ECalcCmdMemorySave:
-            {
-            HandleMemorySaveL();
-            break;
-            }
-        case ECalcCmdMemoryRecall:
-            {
-            this->iLastResultSetected = EFalse;
-            HandleMemoryRecallL();
-            break;
-            }
-        case ECalcCmdMemoryClear:
-            {
-            HandleMemoryClearL();
-            break;
-            }
-        case ECalcCmdScrollUp:
-            {
-            HandleScrollUp();
-            break;
-            }
-        case ECalcCmdScrollDown:
-            {
-            HandleScrollDown();
-            break;
-            }
-        case ECalcCmdClearCalcAndHistory:
-            {
-            DoClearCalcAndHistoryL();
-            break;
-            }
-        case EAknSoftkeyExit:
-        case EEikCmdExit:
-            {
-            STATIC_CAST(CCalcAppUi*, AppUi())->ExitCalculator();
-            break;
-            }
-        case ECalcCmdHelp: 
-            {
-            if (FeatureManager::FeatureSupported( KFeatureIdHelp ))
-                {
-                HlpLauncher::LaunchHelpApplicationL(iEikonEnv->WsSession(), AppUi()->AppHelpContextL());
-                }
-            break;
-            }
-        case EAknSoftkeySelect:
-            {
-            iContainer->HandleMiddleSoftKey();
-            break;
-            }
-            
-        //Below cases are possible only for Touch UI Layouts
-        case ECalcCmdOne:
-            {
-            iContainer->SetOperatorFromTouchL(1);
-            }
-            break;
-        case ECalcCmdTwo:
-            {
-            iContainer->SetOperatorFromTouchL(2);
-            }
-            break;
-        case ECalcCmdThree:
-            {
-            iContainer->SetOperatorFromTouchL(3);
-            }
-            break;
-        case ECalcCmdFour:
-            {
-            iContainer->SetOperatorFromTouchL(4);
-            }
-            break;
-        case ECalcCmdFive:
-            {
-            iContainer->SetOperatorFromTouchL(5);
-            }
-            break;
-        case ECalcCmdSix:
-            {
-            iContainer->SetOperatorFromTouchL(6);
-            }
-            break;
-        case ECalcCmdSeven:
-            {
-            iContainer->SetOperatorFromTouchL(7);
-            }
-            break;
-        
-        case ECalcCmdEight:
-            {
-            iContainer->SetOperatorFromTouchL(8);
-            }
-            break;
-        
-        case ECalcCmdNine:
-            {
-            iContainer->SetOperatorFromTouchL(9);
-            }
-            break;
-        
-        case ECalcCmdZero:
-            {
-            iContainer->SetOperatorFromTouchL(0);
-            }
-            break;
-            
-        case ECalcCmdSeparator:
-            {
-            iContainer->SetSeparatorFromTouchL();
-            }
-            break;
-        case ECalcCmdCancel:
-            {
-            TInt repeat( iContainer->FuncmapSubPane()->IsKeyLongPressed() );           
-            iContainer->ClearInputKeyL( repeat );
-            }
-            break; 
-            
-    /****** If none of the cases handle the Aiw Help then it will come to the default case ****/
-        default:
-            {
-                 CArrayFix<TCoeHelpContext>* buf = AppUi()->AppHelpContextL();
-                 TCoeHelpContext& helpContext = buf->At(0);         
-                   TAiwVariant uidVariant;
-                 TAiwVariant contextVariant;         
-                 uidVariant.Set(helpContext.iMajor);         
-                 TAiwGenericParam uidParam(EGenericParamHelpItem, uidVariant);                          contextVariant.Set(helpContext.iContext);         
-                 contextVariant.Set(helpContext.iContext);         
-                 TAiwGenericParam contextParam(EGenericParamHelpItem, contextVariant);     
-                 CAiwGenericParamList* list = CAiwGenericParamList::NewLC();         
-                 list->AppendL(uidParam);
-                 list->AppendL(contextParam); 
-                 iServiceHandler->ExecuteMenuCmdL(aCommand,*list,iServiceHandler->OutParamListL());     
-                 CleanupStack::PopAndDestroy(list);
-                 delete buf;
-                 buf= NULL;
-            break;
-            }
-        }
-    }
-
-
-// C++ default constructor can NOT contain any code, that
-// might leave.
-//
-CCalcView::CCalcView():
-           iState(EInitialMode),
-           iLatestInput(EOperand)
-    {
-    }
-
-
-// ---------------------------------------------------------
-// CCalcView::CreateContainerL
-// Create CCalcContainer class
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::CreateContainerL()
-    {
-    iContainer = CCalcContainer::NewL(this);
-    
-    iContainer->SetMopParent(this);
-        
-    TRect mainPaneRect ;
-    TRect statusPaneRect;
-    
-    if (Layout_Meta_Data::IsLandscapeOrientation())
-      
-      {
-      
-        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainPaneRect);
-        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane,statusPaneRect);
-        mainPaneRect.iTl= statusPaneRect.iTl;
-          
-      }
-      
-      else
-      
-      {
-      
-        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EMainPane,mainPaneRect);
-        AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EStatusPane,statusPaneRect);
-       
-       mainPaneRect.iTl= statusPaneRect.iTl;
-                                                
-      } 
-    
-    
-    iContainer->SetRect(mainPaneRect);    
-    iEditorSubPane = iContainer->EditorPane();
-    iOutputSheet = iContainer->OutputSheet();
-    }
-
-
-// ---------------------------------------------------------
-// CCalcView::HandleResultL
-// Handle result command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleResultL()
-    {
-    if (!HandleEqualSubRoutineL())
-        {
-        iEditorSubPane->DrawNow();
-        UpdateState(EEqual);
-
-        iContainer->SetSqrtEnableL();
-        iContainer->ShowPercentButton(EFalse);
-        iContainer->SetClearKeyEnable();             
-        }
-    }
-
-
-// ---------------------------------------------------------
-// CCalcView::HandleChangeSignL
-// Handle ChangeSign command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleChangeSignL()
-    {
-    iEditorSubPane->DoChangeSignL(iState);        
-    
-    if (iState == CCalcView::EOperandAndOperator)
-        {
-        UpdateState(EMemoryRecall);
-        }
-    }
-
-// ---------------------------------------------------------
-// CCalcView::HandleLastResultL
-// Handle LastResult command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleLastResultL()
-    {
-    iLastResultSetected = ETrue;
-    //  Recall "LastResult", which is the answer based on latest "=" input.
-    iEditorSubPane->DoMemoryRecallOrLastResult(
-        iCalcDocument->LastResult(), iState);
-
-    UpdateState(EMemoryRecall);
-    if ( iState == EOperandOnly && 
-         iEditorSubPane->EditLine().CheckZeroL() )
-        {
-        UpdateState(EAllClear);
-        }
-    iContainer->SetChangeSignEnableL();
-    iContainer->SetSqrtEnableL();
-    iContainer->SetClearKeyEnable(); 
-
-    //highlighting the sign "%".
-    if ( iState == EOperandAndOperatorAndOperand )
-        {
-        iContainer->SetPercentEnableL();
-        }        
-    }
-
-// ---------------------------------------------------------
-// CCalcView::HandleMemorySaveL
-// Handle MemorySave command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleMemorySaveL()
-    {
-    CCalcView::TKindOfInput kindOfInput(CCalcView::EMemorySave);
-    
-    if (iState == EOperandAndOperatorAndOperand)
-        {
-        if (HandleEqualSubRoutineL()) // Calculate result
-            {
-            return;
-            }
-        }
-    else
-        {
-        if (iState == ESelectResult)
-            {
-            iCalcDocument->AddEmptyLine();
-            iOutputSheet->ScrollToBottomL();
-            iContainer->ScrollArrowUpdate();
-            iEditorSubPane->SetOperator(TCalcEditLine::ECalcOperatorNone);
-            
-            if (iEditorSubPane->EditLine().CheckZeroL())
-                {
-                kindOfInput = CCalcView::EAllClear;
-                }
-            }
-        }
-    iCalcDocument->MemorySaveL(iEditorSubPane->EditorNumber());
-    iEditorSubPane->DrawNow();
-    UpdateState(kindOfInput);
-    iContainer->SetChangeSignEnableL();
-    iContainer->SetSqrtEnableL();
-    }
-
-// ---------------------------------------------------------
-// CCalcView::HandleMemoryRecallL
-// Handle MemoryRecall command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleMemoryRecallL()
-    {
-    iEditorSubPane->DoMemoryRecallOrLastResult(
-        iCalcDocument->Memory(), iState );
-
-    if ( iState == ESelectResult )
-        {
-        iCalcDocument->AddEmptyLine();
-        iOutputSheet->ScrollToBottomL();
-        iContainer->ScrollArrowUpdate();
-        }
-        
-    UpdateState( EMemoryRecall );
-    if ( iState == EOperandOnly && 
-         iEditorSubPane->EditLine().CheckZeroL() )
-        {
-        UpdateState( EAllClear );
-        }
-
-    iContainer->SetChangeSignEnableL();
-    iContainer->SetSqrtEnableL();
-
-    iContainer->SetClearKeyEnable();
-
-    // highlighting the sign "%".
-    if ( iState == EOperandAndOperatorAndOperand )
-        {
-        iContainer->SetPercentEnableL();
-        }        
-    }
-
-// ---------------------------------------------------------
-// CCalcView::HandleMemoryClear
-// Handle MemoryClear command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-// 
-
-void CCalcView::HandleMemoryClearL()
-    {
-    iCalcDocument->MemoryClearL();
-    iEditorSubPane->DrawNow();
-    }
-
-// ---------------------------------------------------------
-// CCalcView::HandleScrollUp
-// Handle Scroll up button command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleScrollUp()
-    {
-    iOutputSheet->ScrollUp();
-    iContainer->ScrollArrowUpdate();
-    }
-
-// ---------------------------------------------------------
-// CCalcView::HandleScrollDown
-// Handle Scroll down button command
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleScrollDown()
-    {
-    iOutputSheet->ScrollDown();
-    iContainer->ScrollArrowUpdate();
-    }
-
-// ---------------------------------------------------------
-// CCalcView::DoClearCalcAndHistoryL
-// Clear calculation history and clear calculation.
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::DoClearCalcAndHistoryL()
-    {
-    iCalcDocument->History()->ClearHistory();
-    iOutputSheet->NotifyClearHistoryL();
-    iContainer->ScrollArrowUpdate();
-    // Clear calculation
-    TKeyEvent keyEvent;
-    keyEvent.iCode = EKeyBackspace;
-    keyEvent.iRepeats = 1; 
-    iEditorSubPane->OfferKeyEventL(keyEvent, EEventKey);
-    iContainer->ShowPercentButton(EFalse);
-    }
-        
-
-// ---------------------------------------------------------
-// CCalcView::HandleOperatorL
-// Operator Handler common routin.
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::HandleOperatorL
-        (TCalcEditLine::TCalcOperatorType aOperator) 
-    {
-    TCalcEditLine editLine(iEditorSubPane->EditLine());
-    TReal64 editorNumber(iEditorSubPane->EditorNumber());
-    TReal64 result(editorNumber);
-
-    this->iLastResultSetected = EFalse;
-    // User has pressed %
-    if (aOperator == TCalcEditLine::ECalcPercent)
-        {    
-        if (iState == EOperandAndOperatorAndOperand)
-            {
-            editLine.TrimZeroL();
-            // Save the previous operator
-            TCalcEditLine::TCalcOperatorType previousOperator = editLine.Operator();
-            // Set the operator to percent
-            editLine.SetOperator(TCalcEditLine::ECalcPercent);
-            
-            
-            // Calculate
-            TRAPD(errorCode3, 
-                result = iCalcDocument->CalculateAndModifyHistoryL(
-                editorNumber, editLine, previousOperator));
-            
-            if (errorCode3)
-                {
-                iContainer->SetErrorCode(errorCode3);
-                return;
-                }
-
-            iOutputSheet->ScrollToBottomL();
-            // Show the correct operand in the output sheet
-            aOperator = previousOperator;
-            // Set the state to EOperatorResult so that the HandleResult knows what to do
-            UpdateState(EOperatorResult);
-            }    
-        }
-
-    // User has pressed sqrt
-    else if (aOperator == TCalcEditLine::ECalcSqrt)
-        {
-        // We are in a middle of calculation chain
-        if (iState == EOperandAndOperatorAndOperand)
-            {
-            editLine.TrimZeroL();
-            // Save the previous operator
-            TCalcEditLine::TCalcOperatorType previousOperator = editLine.Operator();
-            // Set the operator to sqrt
-            editLine.SetOperator(TCalcEditLine::ECalcSqrt);
-            
-            // First calculate the sqrt
-            TRAPD(errorCode, 
-                result = iCalcDocument->CalculateAndNoHistoryL(
-                editorNumber, editLine));
-                                                 
-            if (errorCode)
-                {
-                iContainer->SetErrorCode(errorCode);
-                return;
-                }
-            
-            // Set the operator to previous one
-            editLine.SetOperator(previousOperator);
-            // Result goes to the outputsheet
-            editLine.SetNumber(result);
-
-            // Calculate again
-            TRAPD(errorCode2, 
-                result = iCalcDocument->CalculateAndAddHistoryL(
-                result, editLine));
-                                                 
-            if (errorCode2)
-                {
-                iContainer->SetErrorCode(errorCode2);
-                return;
-                }
-            // Set this so that we will display correct operator in the output sheet
-            aOperator = previousOperator;
-            iOutputSheet->ScrollToBottomL();
-            UpdateState(EOperator);
-            // Dimm the square root and percent
-            iContainer->ShowSqrtButton(EFalse);
-            iContainer->ShowPercentButton(EFalse);
-            }
-        // Only operand and sqrt
-        else
-            {
-            editLine.SetOperator(aOperator);
-                    
-            // Trap harness, because the CalculateAndHistoryL leaves in case of negative operand
-            TRAPD(errorCode,
-                result = iCalcDocument->CalculateAndAddHistoryL(
-                editorNumber, editLine));
-            
-            if (errorCode)
-                {
-                iContainer->SetErrorCode(errorCode);
-                return;
-                }
-
-            iOutputSheet->ScrollToBottomL();
-            //Set the state to EOperatorResult so that we know to call HandleResult later
-            UpdateState(EOperatorResult);
-            }
-        }
-    //  Current state is state4 and previous input is MS,
-    // provisional result is get and show this the editor.
-    // And a line is not added to OutputSheet because a line
-    // is already added.
-    
-    else if (iState == ESelectResult)
-        {
-        iCalcDocument->AddEmptyLine();
-        editLine.SetOperator(TCalcEditLine::ECalcOperatorNone);
-        //  Because the state is "User has selected result",
-        // this function does not occur leave.
-        result = iCalcDocument->CalculateAndAddHistoryL(
-                 editorNumber, editLine);
-        iOutputSheet->ScrollToBottomL();
-        UpdateState(EOperator);    
-        iContainer->SetSqrtEnableL();
-        }
-        
-    //  If a input is a operator and state is updated,
-    // calculate and update history.
-    else if (iState != EOperandAndOperator)  
-        {
-        editLine.TrimZeroL();
-
-        // If the number in the EditLine is not a operand
-        // we need to dim square root and percent buttons
-        if (iState == EOperandAndOperatorAndOperand)
-            {
-            iContainer->ShowSqrtButton(EFalse);
-            iContainer->ShowPercentButton(EFalse);
-            }
-        // Calculate by user's input
-        TRAPD(errorCode, 
-              result = iCalcDocument->CalculateAndAddHistoryL(
-              editorNumber, editLine));
-                                                 
-        if (errorCode)
-            {
-            iContainer->SetErrorCode(errorCode);
-            return;
-            }
-        iOutputSheet->ScrollToBottomL();
-        UpdateState(EOperator);
-        }
-    
-    iEditorSubPane->SetEditorNumber(result);
-    iEditorSubPane->SetOperator(aOperator);
-    
-    if ( aOperator != TCalcEditLine::ECalcSqrt )
-        {
-        iEditorSubPane->DrawNow();  
-        }
-    iContainer->ScrollArrowUpdate();
- 
-    iContainer->SetClearKeyEnable(); 
-    if (aOperator == TCalcEditLine::ECalcAdd ||aOperator == TCalcEditLine::ECalcSubtract ||
-         aOperator == TCalcEditLine::ECalcMultiply ||aOperator == TCalcEditLine::ECalcDivide )
-        {
-        iContainer->SetChangeSignDisable();
-        }  
-    
-    }
-
-
-// ---------------------------------------------------------
-// CCalcView::HandleEqualSubRoutineL
-// Common routine for select result and MemorySave on two operands
-// and operator or State4.
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-TInt CCalcView::HandleEqualSubRoutineL()
-    {
-    TCalcEditLine editLine(iEditorSubPane->EditLine());
-    TInt calculationError(KErrNone);
-    TReal64 result(0);
-
-    if (iState == EOperandAndOperator || iState == EOperatorOnlyResult)
-        {
-        // User has selected equal or operand and sqrt, or percent
-        result = iCalcDocument->ProvisionalResult();
-        }
-    else 
-        {
-        editLine.TrimZeroL();
-        // We are calculating the intermediate result. 
-        // So we need to dim the sqrt and percent buttons.
-        iContainer->ShowSqrtButton(EFalse); 
-        iContainer->ShowPercentButton(EFalse);
-        
-        if (iState == ESelectResult)
-            {
-            iCalcDocument->AddEmptyLine();
-            editLine.SetOperator(TCalcEditLine::ECalcOperatorNone);
-            }
-        TRAP(calculationError,
-             result = iCalcDocument->CalculateAndAddHistoryL(
-             iEditorSubPane->EditorNumber(), editLine));
-        }
-    
-    //  If overflow or division by zero occurs,
-    // error message is displayed.
-    if (calculationError)
-        {
-        iContainer->SetErrorCode(calculationError);
-        }
-    else
-        {
-        iCalcDocument->AddEqualLineAndUpdateLastResultL();
-        iEditorSubPane->SetEditorNumber(result);
-        iEditorSubPane->SetOperator(TCalcEditLine::ECalcEqual);
-        // Show result on the sheet
-        CCalcOutputSheet* sheet = iContainer->OutputSheet();
-        sheet->ScrollToBottomL();
-        iContainer->ScrollArrowUpdate();
-        }
-    return calculationError;
-    }
-
-// ----------------------------------------------------
-// CCalcView::DoActivateL
-// This is called when CCalcView becomes active.
-// (other items were commented in a header).
-// ----------------------------------------------------
-//
-void CCalcView::DoActivateL
-                (const TVwsViewId& /* aPrevViewId */,
-                 TUid /* aCustomMessageId */,
-                 const TDesC8& /* aCustomMessage */)
-    {
-    if ( iContainer == NULL )
-        {
-        CreateContainerL();
-        AppUi()->AddToStackL( *this, iContainer );
-        iContainer->ActivateL();
-        } 
-    
-    }
-
-// ----------------------------------------------------
-// CCalcView::DoDeactivate
-// This is called when CCalcView becomes deactive.
-// (other items were commented in a header).
-// ----------------------------------------------------
-//
-void CCalcView::DoDeactivate()
-    {
-    if ( iContainer )
-        {
-        AppUi()->RemoveFromStack( iContainer );
-        delete iContainer;
-        iContainer = NULL;
-        }
-    }
-
-// ---------------------------------------------------------
-// CCalcView::Id
-// Return UID of CCalcView
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-TUid CCalcView::Id() const
-    {
-    return TUid::Uid(KCalcViewId);
-    }
-
-// ---------------------------------------------------------
-// CCalcView::DynInitMenuPaneL
-// This app can have only one menu.
-// But menu of Calculator application is changed on State, memory etc.
-// Therefore to delete meaningless items from menu, this function is defined. 
-// (other items were commented in a header).
-// ---------------------------------------------------------
-//
-void CCalcView::DynInitMenuPaneL
-        (TInt aResourceId,        
-         CEikMenuPane* aMenuPane) 
-    {
-    if(iServiceHandler->HandleSubmenuL(*aMenuPane))
-        {
-            return;
-        }
-    switch (aResourceId)
-        {
-        case (R_CALC_POPUPMENU):
-            {
-                
-                       DynInitMainMenuPane(aMenuPane);
-                    
-                /***** Get the context of the Help topic from here *****/
-                  CArrayFix<TCoeHelpContext>* buf= AppUi()->AppHelpContextL();
-                   TInt i= buf->Count();
-                   if(i!=0)
-                       {
-                       /***** Check whether our flag is defined or not *****/
-                       #ifdef RD_HELP_AIW_INTEGRATION
-                       
-                       /***** Call the AiwProvider's AddItemsL  to attach the mnu items********/
-                           
-                            iServiceHandler->InitializeMenuPaneL(*aMenuPane,aResourceId,
-                                        ECmdLast,iServiceHandler->InParamListL()); 
-                    /**** Set the old embedded help as dimmed one ****/ 
-                        aMenuPane->SetItemDimmed(ECalcCmdHelp, ETrue);                     
-                    #else
-                    /**** Set the Aiw Help as dimmed one as our feature flag is not defined ****/ 
-                        aMenuPane->SetItemDimmed(ECmdAiwPlaceHolder,ETrue);    
-                    #endif
-                       }
-                else 
-                    {
-                 /**** If the Feature flag is not defined dont show the Aiw Help ****/
-                    aMenuPane->SetItemDimmed(ECmdAiwPlaceHolder,ETrue);
-                    }
-                    
-                /******* Delete the buffer and make it to NULL *****/
-                   delete buf;
-                buf = NULL;   
-                if (!FeatureManager::FeatureSupported( KFeatureIdHelp ))
-                    {
-                    aMenuPane->DeleteMenuItem(ECalcCmdHelp);
-                    aMenuPane->DeleteMenuItem(ECmdAiwPlaceHolder);
-                    }  
-            break;
-            }
-
-        case (R_CALC_MEMORY_MENU):
-            {
-            DynInitMemoryMenuPane(aMenuPane);
-            break;
-            }
-        default:
-            {
-            break;
-            }
-        }
-    }   
-// ---------------------------------------------------------
-// CCalcView::HandleForegroundEventL
-//Refresh and draw display ,paper and function map Icons.
-// ---------------------------------------------------------
-//
-void CCalcView::HandleForegroundEventL(TBool aForeground)
-    {
-    if( (aForeground) && (STATIC_CAST(CCalcAppUi*, AppUi())->IsSkinChanged()) )
-        {
-        iEditorSubPane->RefreshDisplaySideLBitmap();
-        iEditorSubPane->RefreshDisplayCenterBitmap();
-        iEditorSubPane->RefreshDisplaySideRBitmap();    
-        
-        iEditorSubPane->DrawNow();
-
-        iOutputSheet->RefreshPaperBitmap();
-        iOutputSheet->RefreshScalablePaperBitmap();
-#ifdef __SCALABLE_ICONS
-        iOutputSheet->RefreshResultsLineBitmap();
-#endif
-        iOutputSheet->DrawNow();
-
-        iContainer->FunctionSubPane()->RefreshButtonIcons();        
-        for(TInt i =0; i< 10; i++)
-            {
-            iContainer->FunctionSubPane()->GetButtonBitmapControl(i)->DrawNow();
-            }
-        }
-    else
-        {
-        CAknView::HandleForegroundEventL(aForeground);
-        }
-    }
-
-
-//  End of File