commands/fed/inc/common.h
changeset 0 7f656887cf89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/commands/fed/inc/common.h	Wed Jun 23 15:52:26 2010 +0100
@@ -0,0 +1,171 @@
+// common.h
+// 
+// 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
+//
+#ifndef COMMON_H_
+#define COMMON_H_
+
+#include <e32std.h>
+#include <e32def.h>
+#include <e32cmn.h>
+#include <e32keys.h>
+
+#ifdef ASSERT
+#undef ASSERT
+#endif
+#define ASSERT(x) __ASSERT_ALWAYS(x, AssertionFail(#x, __FILE__, __LINE__))
+void AssertionFail(const char* aAssertion, const char* aFile, TInt aLine);
+
+#if defined(_DEBUG)
+#define ASSERT_DEBUG(c,p) ASSERT(c)
+#else
+#define ASSERT_DEBUG(c,p)
+#endif
+
+#define CTRL(x) ((x)-'a'+1)
+
+class DCommandWindow;
+
+class TWindow
+{
+public:
+	TWindow()
+		: iX(0), iY(0), iWidth(0), iHeight(0) {}
+	TWindow(TInt aPosX, TInt aPosY, TInt aWidth, TInt aHeight)
+		: iX(aPosX), iY(aPosY), iWidth(aWidth), iHeight(aHeight) {}
+
+	TBool operator==(const TWindow& aWindow) const
+		{return iX == aWindow.iX && iY == aWindow.iY && iWidth == aWindow.iWidth && iHeight == aWindow.iHeight;}
+
+	TPoint Relocate(const TPoint& aPos) const
+		{return TPoint(iX + aPos.iX, iY + aPos.iY);}
+
+	TInt NextX() const {return iX + iWidth;}
+	TInt NextY() const {return iY + iHeight;}
+
+	TPoint Origin() const { return TPoint(iX, iY); }
+
+	TInt iX;
+	TInt iY;
+	TInt iWidth;
+	TInt iHeight;
+};
+
+//Overloaded by a class which can draw on the console
+class MViewController
+{
+public:
+	/*
+	 Activate the View and set the new position and size of the window (which may be not changed).
+	 The window is visible so only the difference between the old and the new window has to be redrawn.
+	 Used when the window needs to be resized or moved.*/
+	virtual void ResizeL(const TWindow& aWindow) = 0;
+	/*
+	 Activate the View and set the new position and size of the window (which may be not changed).
+	 The View is not visible so it has to redraw the whole window.
+	 Used when switching views visible in the same window.*/
+	virtual void RedrawL(const TWindow& aWindow) = 0;
+	/*
+	This view must stop drawing on the console, however It can still process data in the background.*/
+	virtual void DeactivateL() = 0;
+};
+
+//Overloaded by a class which uses a memory cache shared by another class (i.e. by MShareCacheProvider)
+class MSharedCacheClient
+{
+	//Gives the class, which owns the buffer, a chance to complete all writings using data in the buffer
+	virtual void InvalidateBuffer(TRequestStatus& aStatus) = 0;
+};
+
+class TRange;
+
+/*
+ Overloaded by a class which provides shared access to its memory cache. The MSharedCacheClient class, which
+ needs access to the memory cache provided by this class, supplies TPtrC8 descriptor pointer, which is being
+ set to point to the existing data loaded to the memory cache and maintained by this class.
+*/
+class MSharedCacheProvider
+	{
+	//Called to add a new client to this file buffer
+	virtual TInt RegisterClient(MSharedCacheClient& aClient, TPtrC& aDes, TRange& aRange, TInt& aRangeStartLineNumber) = 0;
+	virtual void UnregisterClient(MSharedCacheClient& aClient) = 0;
+	};
+
+//Overloaded by a class which can receive key input from the user
+class MKeyConsumer
+{
+public:
+	//Returns EFalse if the key wasn't consumed
+	virtual TBool ConsumeKeyL(const TKeyCode& aCode) = 0;
+};
+
+//Overloaded by a class which can defer closing the application
+class MDeferredClose
+{
+public:
+	/*
+	 Called when the object is about to be closed, gives a chance to save changed data.
+	 If the object can be closed immediately it should return ETrue, otherwise EFalse.
+	 If any data or info should be shown to the user then a request should be registered with MRequestHandler*/
+	virtual TBool TryCloseL() = 0;
+};
+
+class CConsoleBase;
+class CColorConsoleBase;
+class RFs;
+
+class MConsoleProvider
+	{
+public:
+	virtual CConsoleBase& Console() = 0;
+	virtual CColorConsoleBase* ColorConsole() = 0;
+	virtual RFs& Fs() = 0;
+	virtual void WriteStatus(const TDesC& aNameToTruncate, TRefByValue<const TDesC> aFmt, ...) = 0;
+	virtual void InfoPrint(TRefByValue<const TDesC> aFmt, ...) = 0;
+	virtual TKeyCode Query(const TDesC& aPrompt, const TDesC& aValidKeys) = 0;
+	virtual TBool QueryFilename(const TDesC& aPrompt, TFileName& aFileName) = 0;
+	virtual TBool QueryText(const TDesC& aPrompt, TDes& aText) = 0;
+	};
+
+// General helper class, suprised we don't have anything else suitable...
+class TRange
+	{
+public:
+	inline TRange() : iLocation(0), iLength(0) {}
+	inline TRange(TInt aLocation, TInt aLength)
+		: iLocation(aLocation), iLength(aLength)
+		{}
+		
+	inline TInt Max() const
+		{
+		return iLocation + iLength;
+		}
+
+	inline TBool Contains(TInt aLocation) const
+		{
+		return aLocation >= iLocation && aLocation < Max();
+		}
+	inline void Intersect(const TRange& aRange)
+		{
+		TInt end = Min(this->Max(), aRange.Max());
+		iLocation = ::Max(iLocation, aRange.iLocation); // Have to use :: to say "look at global namespace implementation of Max()"
+		iLength = end - iLocation;
+		}
+public:
+	TInt iLocation;
+	TInt iLength;
+	};
+
+extern TInt KConsoleWidthCorrection;
+extern TInt KConsoleHeightCorrection;
+TInt TabWidth();
+void ShowHelpL();
+
+#endif /*COMMON_H_*/