diff -r 000000000000 -r 7f656887cf89 plugins/consoles/rcons/server/win32/TextView.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/plugins/consoles/rcons/server/win32/TextView.h Wed Jun 23 15:52:26 2010 +0100 @@ -0,0 +1,147 @@ +// TextView.h +// +// Copyright (c) 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 __TEXTVIEW_H__ +#define __TEXTVIEW_H__ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +#include "base.h" +#include "TextBuffer.h" + +class CWindow; + + +class CTextView : public CBase, public MTextBufferObserver + { +public: + static CTextView* New(CWindow& aWindow, CTextBuffer& aTextBuffer, int aWidthInChars, int aHeightInChars); + virtual ~CTextView(); + void EnableCursor(); + void DisableCursor(); + void BeginUpdate(); + void EndUpdate(); + void Draw() const; + void HandleFocusGained(); + void HandleFocusLost(); + void SetSize(int aWidth, int aHeight); + void GetSize(int& aWidth, int& aHeight) const; + void SetHorzScrollPosition(int aPosX); + void SetVertScrollPosition(int aPosY); + void StartSelection(int aPosX, int aPosY); + void AdjustSelection(int aPosX, int aPosY); + void EndSelection(int aPosX, int aPosY); + void SelectWord(int aPosX, int aPosY); + int CharHeight() const; + int CharWidth() const; + bool SelectionAvailable() const; + LPTSTR Selection() const; + void ClearSelection(); + void SetDimmed(bool aDimmed); + void ScrollToEndIfNeeded(); +private: + CTextView(CWindow& aWindow, CTextBuffer& aTextBuffer); + void Construct(int aWidthInChars, int aHeightInChars); +private: // From MTextBufferObserver. + virtual void HandleTextBufferChange(int aPosX, int aPosY, PTCHAR aPtr, int aLength); + virtual void HandleTextBufferScroll(); + virtual void HandleTextBufferCursorChange(); + virtual void HandleTextBufferCleared(); +private: + void SetCursorVisibility(); + bool CursorInView() const; + void GetCursorPixelPos(int& aX, int& aY) const; + void SetCursorPos(); + void ResetBufferPos(); + void SetBufferPos(int aPosX, int aPosY); + void MoveBuffer(int aDiffY); + void ConfigureScrollBars(bool aReset); + void ReDraw() const; + void GetViewRect(int aCharPosX, int aCharPosY, int aNumChars, RECT& aRect) const; + void GetViewRect(int aCharPosX1, int aCharPosY1, int aCharPosX2, int aCharPosY2, RECT& aRect) const; + bool RectVisible(const RECT& aRect) const; + bool LineVisible(int aLinePos) const; + bool TopLineVisible() const; + bool BottomLineVisible() const; + int TotalBufferHeight() const; + int MinBufferPosY() const; + int MaxBufferPosY() const; + void GetVisibleLines(const RECT& aRect, int& aFrom, int& aTo) const; + void MapBufCharToBufPix(int aBufCharPosX, int aBufCharPosY, int& aBufPixPosX, int& aBufPixPosY) const; + void MapBufPixToViewPix(int aBufPixPosX, int aBufPixPosY, int& aViewPixPosX, int& aViewPixPosY) const; + void MapBufPixToBufChar(int aBufPixPosX, int aBufPixPosY, int& aBufCharPosX, int& aBufCharPosY) const; + void MapViewPixToBufPix(int aViewPixPosX, int aViewPixPosY, int& aBufPixPosX, int& aBufPixPosY) const; + void MapScrollPosToBufPix(int aScrollPosX, int aScrollPosY, int& aBufPixPosX, int& aBufPixPosY) const; + void GetSelectionRect(RECT& aRect) const; + void ScrollSelection(); +private: + CWindow& iWindow; + CTextBuffer& iTextBuffer; + HFONT iFont; + int iCharWidth; ///< Character width in pixels. + int iCharHeight; ///< Character height in pixels. + int iViewWidth; + int iViewHeight; + int iBufferPosX; + int iBufferPosY; + int iNumOverflowLines; + bool iCursorEnabled; + bool iUpdating; + bool iCursorHidden; + bool iFocused; + int iSelectionX1; ///< In buffer character coordinates. + int iSelectionY1; ///< " " + int iSelectionX2; ///< " " + int iSelectionY2; ///< " " + bool iSelecting; + bool iDimmed; + }; + + + +/* + /-- (iBufferPosX, iBufferPosY) in pixels relative to view. + / + |----------------------------------------------------------------| + | | + | | + | | + | | + | | + | | + | /-- (0, 0) in Windows pixel coordinates. | + | / | + | i |-------------------------------------------------| | + | V | |-| | + | i | | | | + | e | | | | + | w | | | | + | H | | | | + | e | | | | + | i | | | | + | g | | | | + | h |-|---------------------------------------------|-| | + | t |-------------------------------------------------| | + | | + | <----------- iViewWidth (in pixels) -----------> | + | | + | | + | | + | | + | | + | | + |----------------------------------------------------------------| +*/ + +#endif // __TEXTVIEW_H__