diff -r 000000000000 -r 7f656887cf89 commands/fed/inc/bufferbase.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/commands/fed/inc/bufferbase.h Wed Jun 23 15:52:26 2010 +0100 @@ -0,0 +1,132 @@ +// bufferbase.h +// +// Copyright (c) 2009 - 2010 Accenture. All rights reserved. +// This component and the accompanying materials are made available +// under the terms of the "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: +// Accenture - Initial contribution +// + +#ifndef BUFFERBASE_H_ +#define BUFFERBASE_H_ + +#include + +#include "common.h" + +enum TEncodingType + { + EEncodingUnknown, + EEncodingNarrow, + EEncodingUtf8, + EEncodingUtf16LE, + EEncodingUtf16BE, +#ifdef __BIG_ENDIAN__ // I know Symbian doesn't actually define the endian macros (afaics) but if they do, we'll do the right thing(TM) + EEncodingUtf16Native = EEncodingUtf16BE, + EEncodingUtf16Switched = EEncodingUtf16LE, +#else + // Assume little-endian unless specifically told otherwise + EEncodingUtf16Native = EEncodingUtf16LE, + EEncodingUtf16Switched = EEncodingUtf16BE, +#endif + }; + +enum TDelimiterType + { + EDelimNotYetKnown = 0, + EDelimLF, // Unix + EDelimCRLF, // DOS + EDelimCR, // old school mac + EDelimUnicode, // KUnicodeLineBreak - really doubt we'll see many of these! + }; + +class CFileBlock; + +//Parent class for all memory buffers which can be used by appropriate views to read/write data and show it on the screen +class CFedBufferBase : public CActive, public MSharedCacheProvider +{ +protected: + CFedBufferBase(); + +public: + TInt RefCount() const; + void PushL(); // Pushes a cleanup stack item that does a DecRef() + void IncRef(); + TInt DecRef(); + ~CFedBufferBase(); + +public: // From MSharedCacheProvider + TInt RegisterClient(MSharedCacheClient& aClient, TPtrC& aDes, TRange& aRange, TInt& aRangeStartLineNumber); + void UnregisterClient(MSharedCacheClient& aClient); + +public: // CActive (noops in this class, override if you actually use the CActive-ness + void DoCancel(); + void RunL(); + +public: + virtual const TDesC& Title() const = 0; + virtual TBool Modified() const; + virtual TBool Editable() const; + virtual TDelimiterType DelimiterType() const = 0; + virtual TEncodingType Encoding() const = 0; + virtual TBool IsOpen() const; + + virtual TInt GetData(MSharedCacheClient& aClient, TInt aDocumentPosition) = 0; // "Get me the block containing aDocumentPosition". + virtual TInt SeekFromOffset(MSharedCacheClient& aClient, TInt aOffset, TInt aNumLinesFromOffset, TInt aLineLength) = 0; + virtual TBool DocumentPositionIsEof(TInt aDocumentPosition) const = 0; // The block containing aDocumentPosition MUST have already have been loaded (otherwise we could not guarantee const-ness) + virtual TInt Find(TInt aStartingPosition, const TDesC& aSearchString, TBool aBackwards) = 0; + + virtual void InsertTextL(TInt aDocumentPosition, const TDesC& aText); + virtual void DeleteTextL(TRange aRange); + virtual void SaveL(const TDesC& aName, TBool aReplace); + +protected: + TInt FindClientRequest(MSharedCacheClient& aClient); + + class TClientRequest + { + public: + TClientRequest(MSharedCacheClient* aClient, TPtrC& aDes, TRange& aRange, TInt& aRangeStartLineNumber) + : iClient(aClient), iDes(aDes), iRange(aRange), iLastRequestedBlock(NULL), iRangeStartLineNumber(aRangeStartLineNumber) + {} + public: + MSharedCacheClient* iClient; + TPtrC& iDes; + TRange& iRange; // iRange is the document range for whatever's in iDes (used for something else during seeking) + CFileBlock* iLastRequestedBlock; + TInt& iRangeStartLineNumber; + }; + +private: + TInt iRefCount; +protected: + RArray iClientRequests; + +}; + +class CConstDataBuffer : public CFedBufferBase + { +public: + CConstDataBuffer(const TDesC& aTitle, const TDesC& aText); + CConstDataBuffer(const TDesC& aTitle, HBufC* aTextPtr); + ~CConstDataBuffer(); + + const TDesC& Title() const; + TDelimiterType DelimiterType() const; + TEncodingType Encoding() const; + + TInt GetData(MSharedCacheClient& aClient, TInt aDocumentPosition); + TInt SeekFromOffset(MSharedCacheClient& aClient, TInt aOffset, TInt aNumLinesFromOffset, TInt aLineLength); + TBool DocumentPositionIsEof(TInt aDocumentPosition) const; + TInt Find(TInt aStartingPosition, const TDesC& aSearchString, TBool aBackwards); + +private: + const TDesC& iTitle; + TPtrC iText; + HBufC* iOwnedTextPtr; + }; + +#endif /*BUFFERBASE_H_*/