mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSAppView.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSAppView.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,907 @@
+// Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "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:
+// Part of the MVS Application for TechView
+//
+
+#include  <w32std.h>
+
+#include "MVSApp.h"
+#include "MVSAppUI.h"
+#include "mvsvideocontrol.h"
+
+CMVSAppView* CMVSAppView::NewL(const TRect& aRect, CMVSVideoPlayAgent& aVideoPlayAgent)
+	{
+  	CMVSAppView * self = new(ELeave) CMVSAppView;
+ 	CleanupStack::PushL(self);
+  	self->ConstructL(aRect, aVideoPlayAgent);
+  	CleanupStack::Pop();
+  	return self;
+  	}
+
+
+CMVSAppView::CMVSAppView()
+    {
+    }
+
+
+CMVSAppView::~CMVSAppView()
+	{
+  	//Remove our controls
+  	delete iMainWindowControl;
+  	delete iStatusWindowFNameControl;
+  	delete iStatusWindowStateControl;
+  	delete iStatusWindowTimeControl;
+  	delete iInfoWindowControl;
+  	delete iProgress;
+  	
+  	CloseWindow();
+  	}
+
+
+void CMVSAppView::ConstructL(const TRect& aRect, CMVSVideoPlayAgent& aVideoPlayAgent)
+	{
+  	//we need a window in which to place controls, so take ownership of one
+  	CreateWindowL();
+  
+  	//Set the extent of the control.
+  	SetRect(aRect);
+  	TRect fullRectWindow = Rect();
+  	//vertical point co-ordinate
+  	TInt statusPaneHeight = 4*(fullRectWindow.iTl.iY + fullRectWindow.iBr.iY)/5;
+  	TInt halfLength = (fullRectWindow.iTl.iX + fullRectWindow.iBr.iX)/2;
+  	TInt threeQuarterLength= 3*(fullRectWindow.iTl.iX + fullRectWindow.iBr.iX)/4;
+
+	//set the dimensions of our main window
+  	TRect mainWindow(Rect());
+  	mainWindow.iTl.iX = halfLength-115;
+  	mainWindow.iBr.iY = statusPaneHeight;
+  
+	iMainWindowControl = CMVSVideoControl::NewL(aVideoPlayAgent, 0, Window());
+	iMainWindowControl->SetExtent(mainWindow.iTl, mainWindow.Size());
+
+  	//set the dimensions of our status window
+  	TRect statusWindowFName = fullRectWindow;
+  	statusWindowFName.iTl.iY = statusPaneHeight;
+  	statusWindowFName.iBr.iX = halfLength;
+
+  	//now construct our status window filename control
+  	iStatusWindowFNameControl = CMVSFileControl::NewL(*this, statusWindowFName,
+                                                     KNullDesC);
+   	//set the dimensions of our state window
+  	TRect statusWindowState = fullRectWindow;
+  	statusWindowState.iTl.iX = halfLength;
+  	statusWindowState.iTl.iY = statusPaneHeight;
+  	statusWindowState.iBr.iX = threeQuarterLength;
+
+  	//now construct our status window state control
+  	iStatusWindowStateControl = CMVSStateControl::NewL(*this, statusWindowState, 
+                                                     KNullDesC);
+  
+  	//set the dimensions of our timer window
+  	TRect statusWindowTime = fullRectWindow;
+  	statusWindowTime.iTl.iX = threeQuarterLength;
+  	statusWindowTime.iTl.iY = statusPaneHeight;
+  
+  	//now construct our status window timer control
+  	iStatusWindowTimeControl = CMVSTimeControl::NewL(*this, statusWindowTime, 
+                                                    KNullDesC);
+    TRect infoWindow = fullRectWindow;
+  	infoWindow.iTl.iX=0;
+  	infoWindow.iBr.iX= halfLength-115;
+  	infoWindow.iBr.iY =statusPaneHeight-15;
+  	iInfoWindowControl = CMVSInfoControl::NewL(*this,infoWindow,KNullDesC);
+  	iInfoWindowControl->SetParent(this);
+  	//now activate the control.
+  	
+  	// construct and draw the progress bar 
+  	iProgress = new (ELeave) CEikProgressInfo();
+  	
+  	TResourceReader reader;
+  	iEikonEnv->CreateResourceReaderLC(reader, R_CLIP_PROGRESSINFO);
+	iProgress->ConstructFromResourceL(reader);
+	iProgress->SetContainerWindowL(*this);
+	iProgress->SetExtent(TPoint(fullRectWindow.iTl.iX+ (fullRectWindow.iBr.iX/20),statusPaneHeight-10),TSize((fullRectWindow.iBr.iX - fullRectWindow.iTl.iX - (fullRectWindow.iBr.iX/10) ),10));
+	iProgress->SetAndDraw(0);
+	CleanupStack::PopAndDestroy();	
+	
+  	ActivateL();
+  	}
+
+void CMVSAppView::SetClipLength(TInt& aClipLen)
+	{
+	iClipLength = aClipLen;
+	}
+
+//
+//CountComponentControls()
+//
+// Implemented by a view with more than one control so that a call to
+// DrawNow successfully draws all four component controls.
+//
+TInt CMVSAppView::CountComponentControls() const
+	{
+	return 6; //we have six controls
+	}
+	
+//
+// To handle the Pointer events on the Progress Bar
+//
+void CMVSAppView::HandlePointerEventL(const TPointerEvent &aPointerEvent)
+	{
+	TInt clipPos;
+	TRect rect = iProgress->Rect();
+	if(	(aPointerEvent.iPosition.iX>=rect.iTl.iX && aPointerEvent.iPosition.iX<=rect.iBr.iX) && 
+		(aPointerEvent.iPosition.iY>=rect.iTl.iY && aPointerEvent.iPosition.iY<=rect.iBr.iY)	)
+		{
+		TInt pos = aPointerEvent.iPosition.iX - rect.iTl.iX;
+		switch(aPointerEvent.iType)
+			{
+			case TPointerEvent::EButton1Down:
+				break;
+			case TPointerEvent::EDrag:
+				{
+				iProgress->SetAndDraw(pos);
+				break;
+				}
+			case TPointerEvent::EButton1Up:
+				{
+				TInt progToDraw = pos* (static_cast<double>(200)/(rect.iBr.iX -rect.iTl.iX));
+				iProgress->SetAndDraw(progToDraw+1);
+				clipPos = (progToDraw+1) *(static_cast<double>(iClipLength)/200);
+				TTimeIntervalMicroSeconds clipTime(clipPos);	
+				static_cast<CMVSAppUi*>(CEikonEnv::Static()->EikAppUi())->SetPosition(clipTime);
+				break;
+				}
+				
+			default:
+				break;
+			}
+		}
+	CCoeControl::HandlePointerEventL(aPointerEvent);
+	
+	}
+	
+	
+//
+// Updates the Audion play progress 
+//
+void CMVSAppView::UpdatePlayProgress(TTimeIntervalMicroSeconds& aPos)
+	{
+	TInt curPos = I64INT(aPos.Int64());
+	TInt percent = curPos*(static_cast<double>(100)/iClipLength);
+	TInt progressPos = percent*2;
+	iProgress->SetAndDraw(progressPos+1);
+	}
+	
+//	
+// Reset the Progress to ) and redraw	
+//
+void CMVSAppView::ResetProgressBar()
+	{
+	iProgress->SetAndDraw(0);
+	}
+//
+//ComponentControl(...)
+//
+// Returns the control by index. The counting sequence goes left to right, top
+// to bottom.
+//
+CCoeControl* CMVSAppView::ComponentControl(TInt aIndex) const
+	{
+	switch (aIndex)
+		{
+	 	case 0: return iMainWindowControl;
+	 	case 1: return iStatusWindowFNameControl;
+     	case 2: return iStatusWindowStateControl;
+     	case 3: return iStatusWindowTimeControl;
+	 	case 4: return iInfoWindowControl;
+	 	case 5: return iProgress;
+	 	default: return 0;
+		}
+	}
+
+
+
+//
+//
+// class CMVSFileControl
+//
+//
+
+
+
+//
+//NewL(...)              *** This method can LEAVE ***
+//
+// Factory contructor, initialises a control based on the rectangle provided.
+//
+CMVSFileControl* CMVSFileControl::NewL(const CCoeControl& aContainer, 
+                                         const TRect& aRect, 
+                                         const TDesC& aText)
+	{
+	CMVSFileControl* self=new(ELeave) CMVSFileControl;
+	CleanupStack::PushL(self);
+	self->ConstructL(aContainer, aRect, aText);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+//
+//ContructL(...)              *** This method can LEAVE ***
+//
+//
+void CMVSFileControl::ConstructL(const CCoeControl& aContainer, 
+                                  const TRect& aRect, const TDesC& aText)
+    {
+	SetContainerWindowL(aContainer);
+	SetRect(aRect);
+    iWindow = aRect;
+	SetTextL(aText);
+    //Activate the control
+	ActivateL();
+	}
+
+
+//
+//CMVSControl()
+//
+// Constructor, does nothing. Private to prevent it being called.
+//
+CMVSFileControl::CMVSFileControl()
+     {
+     }
+
+
+//
+//~CMVSControl()
+//
+// Destructor.
+//
+CMVSFileControl::~CMVSFileControl()
+     {
+     delete iText;
+     }
+
+
+//Draw the FileName Display Window
+void CMVSFileControl::Draw(const TRect& /*aRect*/) const
+	{
+	//Establish a Graphics Context
+	CWindowGc& gc=SystemGc();
+
+    //Establish a drawing rectangle
+	TRect rect=Rect();
+
+    //Move in 2 pixels each side to give a white border
+	rect.Shrink(2,2);
+
+    //Set-up a pen
+	gc.SetPenStyle(CGraphicsContext::ENullPen);
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbDarkGray);
+
+    //Draw a blank rectangle
+    gc.DrawRect(rect);
+
+    //Fill in the border-regions
+	DrawUtils::DrawBetweenRects(gc, Rect(), rect); 
+
+    //Change the pen colour to black
+    gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	gc.SetPenColor(KRgbWhite);
+	
+	//Set the fill colour to 'no fill'
+    gc.SetBrushStyle(CGraphicsContext::ENullBrush);
+
+    //Draw a rectangle (transparent with a black border)
+	gc.DrawRect(rect);
+	rect.Shrink(1,1);
+     
+    const CFont* appFont = iEikonEnv->AnnotationFont();
+    DrawOtherWindows(gc,rect,appFont);
+    return;
+	}
+
+
+
+//
+//DrawOtherWindows(...)
+//
+// Draw the text in a central position in the window.
+//
+void CMVSFileControl::DrawOtherWindows(CGraphicsContext& aGc, 
+                                        const TRect& aDeviceRect, 
+                                        const CFont* aFont) const
+     {
+     //Set up the pen and brush colours
+     aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	 aGc.SetBrushColor(KRgbGray);
+
+	 aGc.SetPenStyle(CGraphicsContext::ESolidPen);
+	 aGc.SetPenColor(KRgbWhite);
+	
+     //Set-up a font
+     aGc.UseFont(aFont);
+
+     //Set the baseline to be half the height of the rectangle + half
+     //the height of the font
+	 TInt baseline=aDeviceRect.Height()/2 + aFont->AscentInPixels()/2;
+
+     //Draw the text
+     //__ASSERT_ALWAYS(iText != NULL, User::Panic(KNullPtr, KNAPanicNullPointer));
+	 aGc.DrawText(*iText, aDeviceRect, baseline, CGraphicsContext::ECenter);
+
+     //Done with the font
+	 aGc.DiscardFont();
+     }
+
+void CMVSFileControl::SetTextL(const TDesC& aText)
+     {
+     HBufC* text=aText.AllocL();
+	 delete iText;
+	 iText=text;
+     }
+
+//
+//Window()
+//
+// Returns the window defined by this object.
+TRect& CMVSFileControl::Window()
+     {
+     return iWindow;
+     }
+     
+        
+
+//
+//
+// class CMVSStateControl
+//
+//
+
+
+
+//
+//NewL(...)              *** This method can LEAVE ***
+//
+// Factory contructor, initialises a control based on the rectangle provided.
+//
+CMVSStateControl* CMVSStateControl::NewL(const CCoeControl& aContainer, 
+                                         const TRect& aRect, 
+                                         const TDesC& aText)
+	{
+	CMVSStateControl* self=new(ELeave) CMVSStateControl;
+	CleanupStack::PushL(self);
+	self->ConstructL(aContainer, aRect, aText);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+
+//
+//ContructL(...)              *** This method can LEAVE ***
+//
+//
+void CMVSStateControl::ConstructL(const CCoeControl& aContainer, 
+                                  const TRect& aRect, const TDesC& aText)
+    {
+	SetContainerWindowL(aContainer);
+	SetRect(aRect);
+    iWindow = aRect;
+	SetTextL(aText);
+	
+    //Activate the control
+	ActivateL();
+	}
+
+
+
+//
+//CMVSControl()
+//
+// Constructor, does nothing. Private to prevent it being called.
+//
+CMVSStateControl::CMVSStateControl()
+     {
+     }
+
+
+//
+//~CMVSControl()
+//
+// Destructor.
+//
+CMVSStateControl::~CMVSStateControl()
+     {
+     delete iText;
+     }
+
+
+
+
+//For Displaying the state
+void CMVSStateControl::Draw(const TRect& /*aRect*/) const
+	{
+	//Establish a Graphics Context
+	CWindowGc& gc=SystemGc();
+
+    //Establish a drawing rectangle
+	TRect rect=Rect();
+
+    //Move in 2 pixels each side to give a white border
+	rect.Shrink(2,2);
+
+    //Set-up a pen
+	gc.SetPenStyle(CGraphicsContext::ENullPen);
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbDarkGray);
+
+    //Draw a blank rectangle
+    gc.DrawRect(rect);
+
+    //Fill in the border-regions
+	DrawUtils::DrawBetweenRects(gc, Rect(), rect); 
+
+    //Change the pen colour to black
+    gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	gc.SetPenColor(KRgbWhite);
+	
+	//Set the fill colour to 'no fill'
+    gc.SetBrushStyle(CGraphicsContext::ENullBrush);
+
+    //Draw a rectangle (transparent with a black border)
+	gc.DrawRect(rect);
+	rect.Shrink(1,1);
+
+    const CFont* appFont = iEikonEnv->AnnotationFont();
+          DrawOtherWindows(gc,rect,appFont);
+    return;
+	}
+
+
+
+
+//
+//DrawOtherWindows(...)
+//
+// Draw the text in a central position in the window.
+//
+void CMVSStateControl::DrawOtherWindows(CGraphicsContext& aGc, 
+                                        const TRect& aDeviceRect, 
+                                        const CFont* aFont) const
+    {
+    //Set up the pen and brush colours
+    aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	aGc.SetBrushColor(KRgbGray);
+
+	aGc.SetPenStyle(CGraphicsContext::ESolidPen);
+	aGc.SetPenColor(KRgbWhite);
+	
+    //Set-up a font
+    aGc.UseFont(aFont);
+
+    //Set the baseline to be half the height of the rectangle + half
+    //the height of the font
+	TInt baseline=aDeviceRect.Height()/2 + aFont->AscentInPixels()/2;
+
+    //Draw the text
+    //__ASSERT_ALWAYS(iText != NULL, User::Panic(KNullPtr, KNAPanicNullPointer));
+	aGc.DrawText(*iText, aDeviceRect, baseline, CGraphicsContext::ECenter);
+
+    //Done with the font
+	aGc.DiscardFont();
+    }
+
+void CMVSStateControl::SetTextL(const TDesC& aText)
+    {
+    HBufC* text=aText.AllocL();
+	delete iText;
+	iText=NULL;
+	iText=text;
+    }
+
+//
+//Window()
+//
+// Returns the window defined by this object.
+TRect& CMVSStateControl::Window()
+    {
+    return iWindow;
+    }
+    
+    
+     
+//
+//
+// class CMVSTimeControl
+//
+//
+
+
+
+//
+//NewL(...)              *** This method can LEAVE ***
+//
+// Factory contructor, initialises a control based on the rectangle provided.
+//
+CMVSTimeControl* CMVSTimeControl::NewL(const CCoeControl& aContainer, 
+                                         const TRect& aRect, 
+                                         const TDesC& aText)
+	{
+	CMVSTimeControl* self=new(ELeave) CMVSTimeControl;
+	CleanupStack::PushL(self);
+	self->ConstructL(aContainer, aRect, aText);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+
+//
+//ContructL(...)              *** This method can LEAVE ***
+//
+//
+void CMVSTimeControl::ConstructL(const CCoeControl& aContainer, 
+                                  const TRect& aRect, const TDesC& aText)
+    {
+	SetContainerWindowL(aContainer);
+	SetRect(aRect);
+    iWindow = aRect;
+    SetTextL(aText);
+    iText2 = NULL;
+    //Activate the control
+	ActivateL();
+	}
+
+
+
+//
+//CMVSControl()
+//
+// Constructor, does nothing. Private to prevent it being called.
+//
+CMVSTimeControl::CMVSTimeControl()
+    {
+    }
+
+
+//
+//~CMVSControl()
+//
+// Destructor.
+//
+CMVSTimeControl::~CMVSTimeControl()
+    {
+    delete iText;
+    if(iText2)
+    	{
+    	delete iText2;
+    	}
+    }
+
+
+
+
+//For TimeDisplay
+void CMVSTimeControl::Draw(const TRect& /*aRect*/) const
+	{
+     //Establish a Graphics Context
+	CWindowGc& gc=SystemGc();
+
+     //Establish a drawing rectangle
+	TRect rect=Rect();
+
+    //Move in 2 pixels each side to give a white border
+	rect.Shrink(2,2);
+
+    //Set-up a pen
+	gc.SetPenStyle(CGraphicsContext::ENullPen);
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbDarkGray);
+
+    //Draw a blank rectangle
+    gc.DrawRect(rect);
+
+    //Fill in the border-regions
+	DrawUtils::DrawBetweenRects(gc, Rect(), rect); 
+
+    //Change the pen colour to black
+    gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	gc.SetPenColor(KRgbWhite);
+	
+	//Set the fill colour to 'no fill'
+    gc.SetBrushStyle(CGraphicsContext::ENullBrush);
+
+    //Draw a rectangle (transparent with a black border)
+	gc.DrawRect(rect);
+	rect.Shrink(1,1);
+
+    const CFont* appFont = iEikonEnv->AnnotationFont();
+    DrawOtherWindows(gc,rect,appFont);
+    return;
+	}
+
+
+
+
+//
+//DrawOtherWindows(...)
+//
+// Draw the text in a central position in the window.
+//
+void CMVSTimeControl::DrawOtherWindows(CGraphicsContext& aGc, 
+                                        const TRect& aDeviceRect, 
+                                        const CFont* aFont) const
+    {
+    //Set up the pen and brush colours
+    aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	aGc.SetBrushColor(KRgbGray);
+	
+	aGc.SetPenStyle(CGraphicsContext::ESolidPen);
+	aGc.SetPenColor(KRgbWhite);
+	
+    //Set-up a font
+    aGc.UseFont(aFont);
+	
+	
+	if(iText2)
+		{
+		TInt rWidth =  aDeviceRect.iBr.iX - aDeviceRect.iTl.iX;
+		TInt rHeight = aDeviceRect.iBr.iY - aDeviceRect.iTl.iY;
+		
+		TRect rect1(aDeviceRect.iTl,TSize(rWidth, rHeight/2));
+		TRect rect2(TPoint(aDeviceRect.iTl.iX, aDeviceRect.iTl.iY + rHeight/2),TSize(rWidth, rHeight/2));
+		
+		TInt baseline = rect1.Height();
+	    //Draw the text 1
+	    aGc.DrawText(*iText, rect1, baseline - 2, CGraphicsContext::ECenter);	
+	    //Draw the text 2
+	    aGc.DrawText(*iText2, rect2, baseline - 3 , CGraphicsContext::ECenter);	
+		}
+    else
+    	{
+    	//Set the baseline to be half the height of the rectangle + half
+	    //the height of the font
+		TInt baseline=aDeviceRect.Height()/2 + aFont->AscentInPixels()/2;
+
+	    //Draw the text
+	    aGc.DrawText(*iText, aDeviceRect, baseline, CGraphicsContext::ECenter);	
+    	}
+
+    //Done with the font
+	aGc.DiscardFont();
+    }
+
+void CMVSTimeControl::SetTextL(const TDesC& aText)
+    {
+    HBufC* text=aText.AllocL();
+	delete iText;
+	iText=NULL;
+	iText=text;
+    }
+   
+void CMVSTimeControl::SetText2L(const TDesC& aText) 
+	{
+	HBufC* text=aText.AllocL();
+	delete iText2;
+	iText2=NULL;
+	iText2=text;
+	}
+	
+void CMVSTimeControl::ResetText2L()	
+	{
+	delete iText2;
+	iText2=NULL;
+	}
+//
+//Window()
+//
+// Returns the window defined by this object.
+TRect& CMVSTimeControl::Window()
+    {
+    return iWindow;
+    }
+    
+     
+//
+//
+// class CMVSInfoControl
+//
+//
+
+
+
+//
+//NewL(...)              *** This method can LEAVE ***
+//
+// Factory contructor, initialises a control based on the rectangle provided.
+//
+CMVSInfoControl* CMVSInfoControl::NewL(const CCoeControl& aContainer, 
+                                         const TRect& aRect, 
+                                         const TDesC& aText)
+	{
+	CMVSInfoControl* self=new(ELeave) CMVSInfoControl;
+	CleanupStack::PushL(self);
+	self->ConstructL(aContainer, aRect, aText);
+	CleanupStack::Pop();
+	return self;
+	}
+
+
+
+//
+//ContructL(...)              *** This method can LEAVE ***
+//
+//
+void CMVSInfoControl::ConstructL(const CCoeControl& aContainer, 
+                                  const TRect& aRect, const TDesC& aText)
+    {
+	SetContainerWindowL(aContainer);
+	SetRect(aRect);
+    iWindow = aRect;
+    SetTextL(aText);
+    //Activate the control
+	ActivateL();
+	}
+
+
+
+//
+//CMVSControl()
+//
+// Constructor, does nothing. Private to prevent it being called.
+//
+CMVSInfoControl::CMVSInfoControl()
+    {
+    }
+
+
+//
+//~CMVSControl()
+//
+// Destructor.
+//
+CMVSInfoControl::~CMVSInfoControl()
+    {
+    delete iText;
+    }
+
+
+
+//
+//Draw(...)
+//
+void CMVSInfoControl::Draw(const TRect& /*aRect*/) const
+	{
+    //Establish a Graphics Context
+	CWindowGc& gc=SystemGc();
+
+    //Establish a drawing rectangle
+	TRect rect=Rect();
+
+    //Move in 2 pixels each side to give a white border
+	rect.Shrink(2,2);
+
+    //Set-up a pen
+	gc.SetPenStyle(CGraphicsContext::ENullPen);
+	gc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	gc.SetBrushColor(KRgbDarkGray);
+
+    //Draw a blank rectangle
+    //gc.DrawRect(rect);
+    
+    //To cover Progress Bar area
+    TRect ProgRect = rect;
+    TInt statusPaneHeight = 4*(Parent()->Rect().iTl.iY + Parent()->Rect().iBr.iY)/5;
+    ProgRect.iBr.iY = statusPaneHeight;	
+    ProgRect.Grow(2,0);
+    gc.DrawRect(ProgRect);
+    
+    //Fill in the border-regions
+	DrawUtils::DrawBetweenRects(gc, Rect(), rect); 
+
+    //Change the pen colour to black
+    gc.SetPenStyle(CGraphicsContext::ESolidPen);
+	gc.SetPenColor(KRgbWhite);
+	
+	//Set the fill colour to 'no fill'
+    gc.SetBrushStyle(CGraphicsContext::ENullBrush);
+
+    //Draw a rectangle (transparent with a black border)
+	gc.DrawRect(rect);
+	rect.Shrink(1,1);
+
+    const CFont* appFont = iEikonEnv->AnnotationFont();
+    DrawMainWindow(gc,rect,appFont);
+    return;
+	}
+
+
+
+void CMVSInfoControl::DrawMainWindow(CGraphicsContext& aGc, 
+                                      const TRect& /*aDeviceRect*/, 
+                                      const CFont* aFont) const
+    {
+    //Set up a brush and pen
+    aGc.SetBrushStyle(CGraphicsContext::ESolidBrush);
+	aGc.SetBrushColor(KRgbDarkGray);
+	
+	aGc.SetPenStyle(CGraphicsContext::ESolidPen);
+	aGc.SetPenColor(KRgbWhite);
+
+    //Get a font
+    aGc.UseFont(aFont);
+
+    //The 'step' by which we move down to get to a fresh line in
+    //the window
+    TInt distToNextBaseline = (aFont->AscentInPixels()/2)*3;
+	
+    //The main window text
+    TPtrC mainWindowText;
+    mainWindowText.Set(iText->Des());
+
+    //The escape sequence
+    _LIT(KDollarDollar, "$$");
+
+    TRect rect;
+    TInt x = 10; //The left hand side of the rectangle
+    TInt y = 10; //The top of the rectangle.
+     
+    //Whilst we can find a '$$' in the string
+    while(mainWindowText.Find(KDollarDollar) != KErrNotFound)
+    	{
+       	//do text up to $$
+        TInt pos = mainWindowText.Find(KDollarDollar);
+        TPtrC text(mainWindowText.Mid(0,pos));
+         
+        //define the rectangle for this text
+        TInt height = aFont->HeightInPixels();
+	    TInt width = aFont->TextWidthInPixels( text );
+	    rect.SetRect( x, y, x + width, y + height );
+         
+		//Draw the text
+        aGc.DrawText(text, rect, height - aFont->DescentInPixels(), 
+                     CGraphicsContext::ELeft);
+	     
+        //delete text upto and including '$$'
+        text.Set(mainWindowText.Right(mainWindowText.Length() - (pos+2)));
+        mainWindowText.Set(text);
+
+		//adjust the baseline offset
+        y+=distToNextBaseline;
+        }
+
+    //Done with our font
+    aGc.DiscardFont();
+    }
+
+
+void CMVSInfoControl::SetTextL(const TDesC& aText)
+    {
+    HBufC* text=aText.AllocL();
+	delete iText;
+	iText=NULL;
+	iText=text;
+    }
+
+//
+//Window()
+//
+// Returns the window defined by this object.
+TRect& CMVSInfoControl::Window()
+    {
+    return iWindow;
+    }