--- a/extras/calcsoft/src/CalcView.cpp Tue Feb 02 00:11:26 2010 +0200
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1165 +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 );
- CreateContainerL();
- 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()
- {
- delete iContainer;
- 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:
- {
- 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);
-
- }
-
- 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->SetChangeSignEnableL();
- 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)
- {
- ErrorMsgL(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)
- {
- ErrorMsgL(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)
- {
- ErrorMsgL(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)
- {
- ErrorMsgL(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)
- {
- ErrorMsgL(errorCode);
- return;
- }
- iOutputSheet->ScrollToBottomL();
- UpdateState(EOperator);
- }
-
- iEditorSubPane->SetEditorNumber(result);
- iEditorSubPane->SetOperator(aOperator);
-
- if ( aOperator != TCalcEditLine::ECalcSqrt )
- {
- iEditorSubPane->DrawNow();
- }
- iContainer->ScrollArrowUpdate();
- iContainer->SetChangeSignEnableL();
- 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)
- {
- ErrorMsgL(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 */)
- {
- 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);
- }
- }
-
-// ---------------------------------------------------------
-// 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