kernel/eka/include/ws_std.h
changeset 0 a41df078684a
child 62 4a8fed1c0ef6
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/ws_std.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,387 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "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:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32\include\ws_std.h
+// 
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+#ifndef __WS_STD_H__
+#define __WS_STD_H__
+
+#include <e32base.h>
+#include <e32base_private.h>
+#include <e32cons.h>
+#include <e32twin.h>
+#include <e32ver.h>
+#include <e32svr.h>
+#include <e32hal.h>
+#include <e32uid.h>
+//
+#include <twintnotifier.h>
+//
+const TInt KW32MajorVersionNumber=1;
+const TInt KW32MinorVersionNumber=0;
+const TInt KMessageSlots=3;
+//
+
+typedef TUint8 TColorIndex;
+
+enum TConsolePanic
+	{
+	EConsServerFailed,
+	EConsNotSupportedYet
+	};
+//
+enum TWsPanic
+	{
+	EPrematureOperation,
+	ETooManyWindowsOpen,
+	EWindowTooWide,
+	EWindowTooThin,
+	EWindowTooHigh,
+	EWindowTooShort,
+	EWindowOutOfMemory,
+	EDoubleReadRequest,
+	};
+//
+enum TWsFault
+	{
+	ECreateScheduler,
+	ECreateServer,
+	EStartServer,
+	ECreateEvent,
+	ECreateShell,
+	ESchedulerError,
+	EWindowsInitialisation,
+	ENoKeyboardTranslator,
+	ECreateNotifierSemaphore,
+	ECreateNotifierThread,
+	ELocaleDll,
+	EChangeLocale,
+	};
+//
+struct SWsKey
+	{
+	TKeyData iKeyData;
+    TInt iType;
+    TPoint iMousePos;
+	TSglQueLink iLink;
+	};
+
+struct ColorInformation
+	{
+	TColorIndex iFg;
+	TColorIndex iBg;	
+	};
+//
+class CScreenDriver;
+class CWsWindow : public CBase
+	{
+	friend class CEvent;
+	friend class CWsSession;
+	friend class CNotifierSession;
+    friend class CKeyRepeat;
+private:
+	enum
+		{
+		EBackgroundNumber=0,
+		EMaxOpenWindows=64,
+		ENormalAttribute=7,
+		EMouseCharacter=219,
+		ECursorPeriodicPriority=2000
+		};
+public:
+	CWsWindow();
+	static void New();
+	inline static void WaitOnService() {ServiceMutex.Wait();}
+	inline static void SignalService() {ServiceMutex.Signal();}
+	static TBool RawEventMode();
+	static void QueueRawEvent(TRawEvent& anEvent);
+	void CreateL(const TSize &aSize);
+
+private:
+	~CWsWindow();
+	void Display();
+	TBool IsTop() const;
+	void MakeTopWindow();
+	void SetClip();
+	void Clear();
+	void WriteCharacter(const TText *aCharacter);
+	void CarriageReturn();
+	void LineFeed();
+	void Write(const TDesC &aBuffer);
+	void Refresh();
+	void SaveEdges();
+	void RestoreEdges();
+	void SetWiew();
+	TBool IsInClippedTextArea(const TPoint& aPoint) const;
+	void SetCursor();
+	static void TextFill(TText *aBuffer, TInt aLength, const TText *aValue);
+	static TInt Offset(const TPoint &aPosition,const TSize &aSize);
+	static void RotateWindowsForwards();
+	static void RotateWindowsBackwards();
+	static void BeginUpdateScreen();
+	static void EndUpdateScreen();
+	static void DrainAllReadRequests();
+    static void ControlInformAllMouse(TBool anIndicator);
+#if defined(_UNICODE)
+	static TInt IsHankaku(const TText aCode);
+	static TInt FitInWidth(TText* aDest,TInt aWidth,TInt aAsciiCol,TText aCode);
+	static TInt OffsetHZa(const TText* aDest,const TPoint& aPosition,const TSize& aSize,TInt& aX);
+	static TInt OffsetHZwP(const TText* aDest,const TPoint& aPosition,const TSize& aSize,TPoint& aP);
+	static TInt OffsetHZ(const TText* aDest,const TPoint& aPosition,const TSize& aSize);
+	static TText GetCharFromOffset(const TText* aDest,const TPoint& aPosition,const TSize& aSize);
+	static TText *GetCpFromOffset(const TText* aDest,const TPoint& aPosition,const TSize& aSize);
+#endif
+	void ScrollUp();
+	void Left();
+	void Right();
+	void FormFeed();
+	void BackSpace();
+	void HorizontalTab();
+	TBool IsRectVisible(TRect& aRect) const;
+	void SetFrame();
+	void DrainReadRequest();
+	TBool EnqueReadRequest(const RMessage2& aMessage);
+	void DequeReadRequest();
+	void InformMouse(TPoint aPos);
+	void QueueWindowKey(TKeyData &aKeystroke);
+	void DoMouseLeftButton();
+	void ControlMaximised(TBool anIndicator);
+	void ControlOnTop(TBool anIndicator);
+	static void Delete();
+	static CWsWindow *TopWindow();
+	static CWsWindow *BottomWindow();
+	static TInt8 NewNumberL();
+	static void ReleaseNumber(TInt8 aNumber);
+	static void Redraw();
+	static void KeyPress(TKeyData& aKeystroke);
+	static void QueueTopWindowKey(TKeyData& aKeystroke);
+	static void InformTopMouse(TPoint aPos);
+	static TInt ChangeTopWindowSize(TSize aGrowth);
+	static TInt SlideTopWindowRelative(TPoint aDirection);
+	static TInt MoveTopWindowRelative(TPoint aDirection);
+	static void ControlTopWindowMaximised(TBool anIndicator);
+	static TInt FlashCursor(TAny *aParameter);
+	static void ResetVisibilityMap();
+	static void UpdateScreen(TPoint &aPosition,TInt aLength,TInt8 aNumber,TText *aTextBuffer,ColorInformation *anAttributeBuffer);
+	static void Background();
+	static void TurnMouseOff();
+	static void TurnMouseOn();
+	static void MouseMove(TPoint aGraphicsPosition);
+	static void MouseLeftButton();
+	static void MouseLeftButtonUp();
+	static CWsWindow *MouseWindow();
+	static void ChangeUIColors();
+	static TInt SetMode(TVideoMode aMode);
+	TSize Size();
+	TPoint CursorPosition();
+	void WriteDone();
+	void SetView();
+	void SetFull();
+	void ClearToEndOfLine();
+	void NewLine();
+	void SetCursorHeight(TInt aPercentage);
+	void SetTitle(const TDesC &aName);
+	void SetSize(const TSize &aSize); 
+	void SetWindowPosAbs(const TPoint &aPosition);
+	void SetCursorPosAbs(const TPoint &aPosition);
+	void SetCursorPosRel(const TPoint &aPosition);
+	void ControlScrollBars(TBool anIndicator);
+	void ControlWrapLock(TBool anIndicator);
+    void ControlPointerEvents(TBool anIndicator);
+	void ControlScrollLock(TBool anIndicator);
+	void ControlVisibility(TBool anIndicator);
+	void ControlAllowResize(TBool anIndicator);
+	void ControlCursorRequired(TBool anIndicator);
+	void ControlNewLineMode(TBool anIndicator);
+	void ControlRawEventMode(TBool anIndicator);
+    void QueueWindowRawEvent(TRawEvent& anEvent);
+	void MouseSlide();
+	void SetTextAttribute(TTextAttribute anAttribute);
+
+private:
+	TInt8 iNumber;
+	TSize iCurrentSize;
+	TSize iClippedSize;
+	TBool iIsVisible;
+	TPoint iViewOrigin;
+	TSize iViewSize;
+	TPoint iCurrentOffset;
+	TText *iTextBuffer;
+	ColorInformation *iAttributeBuffer;
+    TUint8 iFillAttribute;
+	TBool iCursorRequired;
+	TBool iCursorIsOn;
+	TPoint iCursorPos;
+	TPoint iLastCursorPos;
+	TText iCursor;
+	TBool iScrollLock;
+    TBool iWrapLock;
+	TBool iNewLineMode;
+	TBool iOnTop;
+	TBool iAllowResize;
+	TBool iAllowSlide;
+	TBool iReadIsValid;
+	TDblQueLink iLink;
+    static TSize ScreenSize;
+	static CScreenDriver *ScreenDriver;
+	static TDblQue<CWsWindow> WQueue;
+	static TInt8 *VisibilityMap;
+	static TPoint MousePos;
+	static TSize FontSize;
+	static CBitMapAllocator *Numbers;
+	static CPeriodic *CursorPeriodic;
+	static TText *BlankLineText;
+	static ColorInformation *BlankLineAttributes;
+	static TBool MouseIsCaptured;
+	static RMutex MouseMutex;
+	static RMutex ServiceMutex;
+	static TInt Count;
+	static const TText Cursors[101];
+	static CWsWindow* RawEventWindow;
+	static TPoint ScrollWithMouse;
+	static TPoint MoveWithMouse;
+	static TPoint ResizeWithMouse;
+	static TInt ScrollSpeed;
+	static TColorIndex ScreenColor;
+	static TColorIndex WindowBgColor;
+	static TColorIndex BorderColor;
+	static TColorIndex IndexOf[8];
+	TSglQue<SWsKey> iKQueue;
+	RMessage2 iReadRequest;
+	TPoint iMaximumOrigin;
+	TSize iMaximumSize;
+	TPoint iMinimumOrigin;
+	TSize iMinimumSize;
+    TBool iHasScrollBars;
+    TBool iPointerEvents;
+    TFileName iTitle;
+	RMessage2 iMessage;
+	TColorIndex iFgColor;
+	TColorIndex iBgColor;
+	};
+
+class CWsSession : public CSession2
+	{
+public:
+	enum
+		{
+		EConsoleCreate,
+		EConsoleSet,
+		EConsoleClearScreen,
+		EConsoleClearToEndOfLine,
+		EConsoleSetWindowPosAbs,
+		EConsoleSetCursorHeight,
+		EConsoleSetCursorPosAbs,
+		EConsoleSetCursorPosRel,
+		EConsoleCursorPos,
+		EConsoleControl,
+		EConsoleWrite,
+		EConsoleRead,
+		EConsoleReadCancel,
+		EConsoleDestroy,
+		EConsoleSetTitle,
+		EConsoleSetSize,
+		EConsoleSize,
+		EConsoleScreenSize,
+		EConsoleSetMode,
+		EConsoleSetPaletteEntry,
+		EConsoleGetPaletteEntry,
+		EConsoleSetTextColors,
+		EConsoleSetUIColors,
+		EConsoleSetTextAttribute
+		};
+public:
+	CWsSession();
+	~CWsSession();
+	void Attach(CWsWindow* aWindow);
+	virtual void ServiceL(const RMessage2& aMessage);
+	virtual void ServiceError(const RMessage2& aMessage,TInt aError);
+private:
+	CWsWindow* iWindow;
+	RMessagePtr2 iCurMsg;
+	TInt iTestFast;
+	};
+//
+class CWsServer : public CServer2
+	{
+public:
+	enum {EPriority=1000};
+public:
+	static void New();
+	~CWsServer();
+	virtual CSession2* NewSessionL(const TVersion& aVersion,const RMessage2& aMessage) const;
+private:
+	CWsServer(TInt aPriority);
+	};
+//
+class CKeyRepeat : public CTimer
+    {
+public:
+    enum { EKeyRepeatPriority=1990 };
+
+    CKeyRepeat(TInt aPriority);
+    void ConstructL();
+    void Request(TKeyData& aKeyData);
+    virtual void RunL();
+    void SetRepeatTime(TInt aDelay,TInt aRate);
+    void RepeatTime(TInt& aDelay,TInt& aRate);
+
+    TKeyData iKeyData;
+private:
+    enum { EDefaultKeyRepeatDelay=500000, EDefaultKeyRepeatRate=30000 };
+
+    TInt iDelay;
+    TInt iRate;
+    };
+//
+class CEvent : public CActive
+	{
+public:
+	enum {EPriority=2000};
+public:
+	static void New();
+	~CEvent();
+	void Request();
+	virtual void DoCancel();
+	virtual void RunL();
+protected:
+	CEvent(TInt aPriority);
+private:
+	TRawEventBuf iEvent;
+	static CCaptureKeys *CaptureKeys;
+    TInt iRepeatScanCode;
+	};
+//
+class CWsActiveScheduler : public CActiveScheduler
+	{
+public:
+	static void New();
+	virtual void Error(TInt anError) const;
+	};
+//
+#include "w32disp.h"
+//
+GLREF_C TInt WindowServerThread(TAny *anArg);
+GLREF_C void Panic(TWsPanic aPanic);
+GLREF_C void Fault(TWsFault aFault);
+//
+IMPORT_C void Panic(TConsolePanic aPanic);
+
+#endif	// __WS_STD_H__