commands/fed/src/textview.cpp
changeset 0 7f656887cf89
child 78 b3ffff030d5c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/fed/src/textview.cpp	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,183 @@
+// textview.cpp
+// 
+// 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
+//
+
+#include <e32cmn.h>
+#include <e32cons.h>
+
+#include "textview.h"
+#include "filebuffer.h"
+
+CTextView::CTextView(MConsoleProvider& aConsoleProvider, CFedBufferBase& aBuffer, TInt aPriority)
+	: CFedViewBase(aConsoleProvider, aPriority), iBuffer(aBuffer)
+	{
+	iBuffer.IncRef();
+	CActiveScheduler::Add(this);
+	}
+
+void CTextView::ConstructL()
+	{
+	User::LeaveIfError(iBuffer.RegisterClient(*this, iDes, iRange, iRangeStartLineNumber));
+	// Make iLine as big as it will ever need to be
+	TSize size = iConsole.ScreenSize();
+	iLine.CreateL(size.iWidth);
+	}
+
+CTextView::~CTextView()
+	{
+	Cancel();
+	iLine.Close();
+	iBuffer.DecRef();
+	}
+
+void CTextView::DoCancel()
+	{
+	ASSERT(EFalse);
+	}
+
+void CTextView::RunL()
+{
+	ASSERT(EFalse);
+/*
+	if(iStatus.Int() != KErrNone)
+		return;
+
+	//redraw by calling DoDrawL if iDrawPoint is within iWindow and iActive is ETrue
+	switch(iState)
+		{
+		case EStateGetData:
+			iState = EStateNone;
+			if(iActive)
+				DoDrawL();
+			break;
+		default:;
+		}
+*/
+}
+
+TInt CTextView::RunError(TInt aError)
+{
+	return aError;
+}
+
+//MViewController
+void CTextView::ShowCursor()
+	{
+	if (iBuffer.Editable())
+		{
+		// Don't show a cursor if the file isn't editable
+		iConsole.SetCursorHeight(20);
+		}
+	}
+
+void CTextView::HideCursor()
+	{
+	iConsole.SetCursorHeight(0);
+	}
+
+void CTextView::ResizeL(const TWindow& aWindow)
+{
+	iActive = ETrue;
+	TWindow oldWindow = iWindow;
+	StoreWindow(aWindow);
+	DoResizeL(oldWindow);
+}
+
+void CTextView::RedrawL(const TWindow& aWindow)
+{
+	iActive = ETrue;
+	StoreWindow(aWindow);
+	DoRedrawL();
+}
+
+void CTextView::DeactivateL()
+{
+	iActive = EFalse;
+}
+
+//MSharedCacheClient
+void CTextView::InvalidateBuffer(TRequestStatus& aStatus)
+{
+	aStatus = KRequestPending;
+	iDes.Set(NULL, 0);
+	TRequestStatus* stat = &aStatus;
+	User::RequestComplete(stat, KErrNone);
+}
+
+void CTextView::RequestData(TBool aFromTheTop, TInt aOffset)
+	{
+	if (aFromTheTop) iDrawPoint.SetXY(iWindow.iX, iWindow.iY);
+	TInt err = iBuffer.GetData(*this, aOffset);
+	if (err)
+		{
+		HandleDataLoadError(err);
+		}
+	else
+		{
+		DoDrawL();
+		}
+	}
+
+void CTextView::SeekData(TInt aDocumentPosition, TInt aNumLines)
+	{
+	if (aDocumentPosition == 0 && aNumLines <= 0)
+		{
+		// Nothing to do
+		return;
+		}
+
+	iDrawPoint.SetXY(iWindow.iX, iWindow.iY); // Seeks always cause a redraw from the top
+	TInt err = iBuffer.SeekFromOffset(*this, aDocumentPosition, aNumLines, iWindow.iWidth-1); // minus one because we can't use the last char
+	if (err)
+		{
+		HandleDataLoadError(err);
+		}
+	else
+		{
+		DoDrawL();
+		}
+	}
+
+void CTextView::UpdateCursor(const TPoint& aNewPos)
+	{
+	ASSERT(aNewPos.iX >= 0);
+	ASSERT(aNewPos.iY >= 0);
+	iCursor = aNewPos;
+	ValidateCursor();
+	if (iActive)
+		{
+		ShowCursor();
+		iConsole.SetCursorPosAbs(iCursor + iWindow.Origin());
+		}
+	}
+
+void CTextView::ValidateCursor()
+	{
+	// Subclasses can override for additional validation
+	if(iCursor.iX < 0)
+		iCursor.iX = 0;
+	if(iCursor.iX >= iWindow.iWidth)
+		iCursor.iX = iWindow.iWidth - 1;
+	if(iCursor.iY < 0)
+		iCursor.iY = 0;
+	if(iCursor.iY >= iWindow.iHeight)
+		iCursor.iY = iWindow.iHeight -1;
+	}
+
+CFedBufferBase& CTextView::Buffer()
+	{
+	return iBuffer;
+	}
+
+void CTextView::HandleDataLoadError(TInt aError)
+	{
+	iConsoleProvider.InfoPrint(_L("Error loading data: %d"), aError);
+	}