diff -r 000000000000 -r 7f656887cf89 commands/fed/src/textview.cpp --- /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 +#include + +#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); + }