diff -r 000000000000 -r 7f656887cf89 commands/fed/inc/common.h --- /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 +#include +#include +#include + +#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 aFmt, ...) = 0; + virtual void InfoPrint(TRefByValue 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_*/