plugins/consoles/rcons/server/win32/TextView.h
changeset 0 7f656887cf89
--- /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__