commands/fed/inc/lrtextview.h
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/fed/inc/lrtextview.h	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,121 @@
+// lrtextview.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 LRTEXTVIEW_H_
+#define LRTEXTVIEW_H_
+
+#include "textview.h"
+
+class CColorConsoleBase;
+class CLineData;
+
+//Main class reading/writing normal (not-unicode) text arranged left-to-right on the screen.
+class CLRTextView : public CTextView
+{
+public:
+	static CLRTextView* NewL(MConsoleProvider& aConsoleProvider, CFedBufferBase& aBuffer);
+	~CLRTextView();
+
+protected:
+	CLRTextView(MConsoleProvider& aConsoleProvider, CFedBufferBase& aBuffer);
+	void ConstructL();
+
+public:
+	//MDeferredClose
+	TBool TryCloseL();
+
+	//MKeyConsumer
+	TBool ConsumeKeyL(const TKeyCode& aCode);
+
+	//CTextView
+	void DoResizeL(const TWindow& aOldWindow);
+	void DoRedrawL();
+	void DoDrawL();
+
+protected:
+	void ValidateCursor();
+	void UpdateCursor(const TPoint& aNewPos);
+	void HandleControlChar();
+	void AppendChar(TUint16 aChar);
+	void WriteLine();
+	void WriteChars();
+	void GoToNextLine();
+	void WriteLineContinue();
+	void LineFinished();
+	TInt DocumentPosition() const;
+	void MoveCursor(TInt aX, TInt aY);
+	void InsertTextL(const TDesC& aText);
+	void DeleteTextL(TInt aNumChars);
+	void DeleteCurrentLineL();
+	void UpdateStatus();
+	TInt Save();
+	TInt SaveAs();
+	void HandleSaveResult(TInt aError, TBool aWasOpen, const TDesC& aName);
+	void GoToLine();
+	void GoToLine(TInt aLine);
+	void DoDrawL(TBool aUpdateCursorAndStatus); // Occasionally we want to do a draw without updating
+	void CenterDocPosOnScreen(TInt aDocumentPosition);
+	TPoint WindowLocationForDocumentPosition(TInt aDocPos) const; // Assuming the doc pos is on screen in an area that's been drawn
+	void RedrawFromPositionToEndOfLine(TInt aDocumentPosition, TInt aNumCharsInserted);
+	void Find();
+	void CopyOrCutL(TBool aCut);
+	void PasteL();
+	void CopyToClipboardL(const TDesC& aBuf);
+	HBufC* GetFromClipboardL();
+	void SetMark();
+	void CancelMark();
+	static TInt FlashMark(TAny* aSelf);
+	void DoFlashMark();
+	TBool MarkActive() const;
+	void UpdateDocumentPositionsStartingAtLine(TInt aLine, TInt aDelta);
+
+private:
+	CLineData* iLineData;
+	TInt iCurrentDrawDocIndex; // Used while drawing to construct iLineData document positions, has no meaning outside of there
+	TBool iLineIsErrorMessage;
+	TBuf<256> iFindText;
+	CPeriodic* iMarkFlasher;
+	TInt iMarkDocPos;
+	TBool iMarkShown;
+	TInt iOldNextLine; // Used to limit how much redrawing we need to do
+	TInt iOldNextLineDocPos; // Ditto
+	TInt iPredictedOldNextLineDocPosDelta; // Ditto
+	TBool* iRecursiveUpdateFlag; // For times when DoDrawL's aUpdateStatusAndCursor flag needs tracking through calls to RequestData
+};
+
+class CLineData : public CBase
+	{
+public:
+	void EnsureCapacityL(TInt aWidth, TInt aHeight);
+	TInt DocumentPosition(TInt aLine) const;
+	TInt FileLineNumber(TInt aLine) const;
+	TBool IsScreenPositionValid(TInt aLine, TInt aCol) const;
+	TInt LastValidPosition(TInt aLine) const;
+
+	void SetDocumentPositionForLine(TInt aLine, TInt aDocumentPosition);
+	void SetFileLineNumberForLine(TInt aLine, TInt aDocumentPosition);
+	void SetPositionIsValid(TInt aLine, TInt aCol, TBool aValid);
+	void LineFinishedAt(TInt aLine, TInt aCol);
+
+	~CLineData();
+
+private:
+	const TUint8& ByteForPos(TInt aLine, TInt aCol, TInt& aOffset) const;
+	TUint8& ByteForPos(TInt aLine, TInt aCol, TInt& aOffset);
+
+private:
+	TInt iLineLen;
+	TInt* iDocPosAndLine;
+	TUint8* iScreenIndexes;
+	};
+
+
+#endif /*LRTEXTVIEW_H_*/