extras/calcsoft/inc/CalcDoc.h
author Pat Downey <patd@symbian.org>
Wed, 01 Sep 2010 12:29:54 +0100
branchRCL_3
changeset 21 10c6e6d6e4d9
parent 0 3ee3dfdd8d69
permissions -rw-r--r--
Revert incorrect RCL_3 drop: Revision: 201033 Kit: 201035

/*
* 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:  Document class, CCalcDocument
*                Derived from CEikDocument
*                The history of inputted data is held.
*                The memory of four-arithmetical-operations operation 
*                or a calculation result is held.
*                The last result and memory are saved at a file and 
*                it restores.
*
*/


#ifndef     CALCDOC_H
#define     CALCDOC_H


//  INCLUDES
#include <eikdoc.h>

#include "CalcEditline.h"

#include "CalcView.h"
//  CONSTANTS
const TInt KCalcErrEditorSpaceFull(-10000); 

//  FORWARD DECLARATIONS

class  CEikAppUi;
class  CCalcHistory;
class  CCalcAppEnv;

//  CLASS DEFINITIONS 

/**
CCalcDocument : 'Document' class
*/
class   CCalcDocument 
        :public CEikDocument
    {
    public:  // Constructors and destructor  
        /**
        * Two-phased constructor.
        * @param aApp : Reference of CEikApplication class 
        */
        static CCalcDocument* NewL(CEikApplication& aApp);

        /**
        * Destructor.
        */
        virtual ~CCalcDocument();

        
    public:  // New functions
		/**
        * Set the pointer to CalcAppEnv. 
        */
		void SetAppEnv(CCalcAppEnv* aCalcAppEnv);

        /**
        * Set the pointer to CalcAppEnv. 
        */		
        void SetCalcView( CCalcView* aCCalcView );
        
		/**
        * Make calculation, and add result to calcluation history.
        * Leave may occur, causes KErrOverflow or KErrDivideByZero or KErrNotSupported (negative value with square root).
        * @param aOperand : operand.
        * @param aLine : inputted edit line
        * @return TReal64: Provisional result.
        */
        TReal64 CalculateAndAddHistoryL(
                TReal64 aOperand,
               const TCalcEditLine& aLine);  
		
		/**
        * Make calculation, nothing is added to the calculation history.
        * Leave may occur, causes KErrOverflow or KErrDivideByZero or KErrNotSupported (negative value with square root).
        * @param aOperand : operand.
        * @param aLine : inputted edit line
        * @return TReal64: Provisional result.
        */
		TReal64 CalculateAndNoHistoryL(
				TReal64 aOperand,
               const TCalcEditLine& aLine);  

		/**
        * Make calculation, and modify the operator
		* before adding anything to the calculation history.
        * Leave may occur, causes KErrOverflow or KErrDivideByZero or KErrNotSupported (negative value with square root).
        * @param aOperand : operand.
        * @param aLine : inputted edit line
        * @return TReal64: Provisional result.
        */
		TReal64 CalculateAndModifyHistoryL(
				TReal64 aOperand,
               TCalcEditLine& aLine,
			   TCalcEditLine::TCalcOperatorType aOperator); 

        /**
        * Add a line which is "= (provisional result)" to calculation history.
        * And Last Result is updated to provisional result
        */
        void AddEqualLineAndUpdateLastResultL();

        /**
        * Empty line is added to calculation history.
        */
        void AddEmptyLine();
        
        /**
        * Memory is saved.
        * @param aNewMemory : New memory, current operand.
        */
        void MemorySaveL(TReal64 aNewMemory); 

        /**
        * Memory is saved.
        * @param aLine : Current value of editor
        */
        TBool HasMemory() const;

        /**
        * Return current memory.
        * @return TReal64 : current memory.
        */
        TReal64 Memory() const; 

        /**
        * Clear memory.
        */
        void MemoryClearL();
        
        /**
        * Return last result
        * @param TReal64 : Last result.
        */
        TReal64 LastResult() const;  

        /**
        * Return provisional result
        * @param aLine : For getting provisional result.
        */
        TReal64 ProvisionalResult() const;

        /**
        * Return pointer of CCalcHistory class. 
        * @return Pointer of CCalcHistory class
        */
        CCalcHistory* History() const;
        
        /**
        * Restore memory and last result
        */
        void LoadStateL();
        
        /**
        * Store memory and last result
        */
		void SaveStateL();
        
    private:   //  New functions
        /**
        * By default constructor is private.
        * @param aApp: Reference of CEikApplication class
        */
        CCalcDocument(CEikApplication& aApp); 

        /**
        * Second-phase constructor
        */
        void ConstructL();

        /**
        * Make calculation by using argument aLine 
        * Leave may occur, causes KErrOverflow or KErrDivideByZero.
        * @param aOperand : operand
        * @param aOperator : Operator type enum.
        * @return Result of calculation
        */
        TReal64 CalculateL(TReal64 aOperand,
            TCalcEditLine::TCalcOperatorType aOperator);
        
        /**
        * Check overflow and underflow 
        * Leave may occur, causes KErrOverflow
        * @param aResult : result of calculation
        */
        void CheckResultL(TReal64* aResult);  

        /**
        * Write last result and memory to document file.
        * @param aStream : Interface of write steam
        */
        void ExternalizeL(RWriteStream& aStream) const;
        
        /**
        * Read last result and memory from document file.
        * @param aStream : Interface of read steam
        */
        void InternalizeL(RReadStream& aStream);

        
    private:  // Functions from base classes  
        /**
        * From CEikDocument : Create CCalcAppUi object
        */
        CEikAppUi* CreateAppUiL();  

    private:    // Data
	    CCalcAppEnv* iCalcAppEnv;  // Not own
        TReal64 iProvisionalResult; // Provisional result
        TReal64 iMemory;        // Memory
        TReal64 iLastResult;    // Last result
        CCalcHistory* iHistory; // History
        CCalcView* iCCalcView;  // Not own
    };

#endif      //  CALCDOC_H
            
// End of File