mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSAppUI.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSAppUI.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,3640 @@
+// 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 <techview/eikfnlab.h>
+#include <techview/eikcfdlg.h>
+#include <techview/eikbtgpc.h>
+#include <techview/eikdialg.h>
+#include <techview/eikon.rsg>
+#include <eikmobs.h>
+#include <coecntrl.h>
+#include <eikenv.h>
+#include "MVSAppUI.h"
+#include "MVSApp.hrh"
+#include "MVSViewTicker.h"
+#include "MVSConstants.h"
+#include "MVSVolumeDialog.h"
+#include "MVSBalanceDialog.h"
+#include "MVSRepeatDialog.h"
+#include "MVSSelectPluginsDialog.h"
+#include "MVSSaveAsDialog.h"
+#include "MVSEditMetaInfoDialog.h"
+#include "MVSConfigAudioFormatDialog.h"
+#include "MVSConfigVideoFormatDialog.h"
+#include "MVSSystemInfoDialog.h"
+#include "MVSVideoSettingDialog.h"
+#include "MVSAudioSettingDialog.h"
+#include "MVSSetPlayWindowDialog.h"
+#include "MVSViewMetaInfoDialog.h"
+#include "MVSCropDialog.h"
+#include "MVSMultipleScreenDialog.h"
+#include "MVSResourceNotifyDialog.h"
+
+const TInt KMaxSupportedPlugins = 10;
+const TInt KMaxSupportedExtension = 10;
+const TInt KMaxSupportedCodecs = 10;
+const TInt KLabelCaptionMaxLength = 16;
+const TInt KTimeValueLength = 12;
+ 
+void CMVSAppUi::ConstructL()
+	{
+   	CEikAppUi::ConstructL();
+  	User::LeaveIfError(iLogs.Connect());
+  	iLogs.MkDirAll(KLogsPath);
+  	iButtons=iEikonEnv->AppUiFactory()->ToolBar();
+  	//Meta entry initialization	                                         
+  	iMetaTitle = CMMFMetaDataEntry::NewL(KTitle,Ka);
+    iMetaAuthor = CMMFMetaDataEntry::NewL(KAuthor,Ka);
+  	iMetaCopyright = CMMFMetaDataEntry::NewL(KCopyrt,Ka);
+  	iMetaRevision = CMMFMetaDataEntry::NewL(KRevision,Ka);
+  	iMetaCategory = CMMFMetaDataEntry::NewL(KCategory,Ka);
+  	iMetaComments = CMMFMetaDataEntry::NewL(KComments,Ka);
+  	iVideoPlayAgent = CMVSVideoPlayAgent::NewL(*this);
+  	iAppView = CMVSAppView::NewL(ClientRect(), *iVideoPlayAgent);
+  	iPluginArray = new(ELeave) CDesCArrayFlat(KMaxSupportedPlugins);
+  	iExtArray = new(ELeave) CDesCArrayFlat(KMaxSupportedExtension);
+  	iCodecArray = new(ELeave) CDesCArrayFlat(KMaxSupportedCodecs);
+  	iAudioPlayAgent = CMVSAudioPlayAgent::NewL(*this);
+  	iAudioRecordAgent = CMVSAudioRecordAgent::NewL(*this);
+  	iVideoRecordAgent = CMVSVideoRecordAgent::NewL(*this);
+  	iPluginInfo=CMVSControllerPluginInfo::NewL();
+  	iAutoplay = EFalse;
+  	iMode=EIdle;
+  	User::LeaveIfError(iLogger.Connect());
+  	iLogger.CreateLog(KLogsDir,KLogsFile,EFileLoggingModeAppend);
+  	iSettingManager = CSettingsManager::NewL();
+  	iRepeatDelay = 1000000;//initial value of 1 second in microseconds.
+  	iPriority = 1;//default settings
+    iPriorityPreference = EMdaPriorityPreferenceNone;//default settings
+    iRotation = EVideoRotationNone;//default settings
+    iNoRepeats = 0;
+	iScreenNumber = 0;
+  	if(!iSettingManager->FileExists())
+  		{
+  		iSettingManager->MakeSeedIndexL();
+  		}
+  	iSettingManager->ReadGeneralSettingsL(this);
+ 	iSelectedPluginIdx = -1;
+  	iMediaType = 0; //set audio media initially
+ 	iPluginsCnt = iPluginInfo->GetPluginListL(iPluginArray,iUidArray );
+  	iControllerUid = TUid::Null();
+  	iViewTicker = CMVSViewTicker::NewL(this);
+
+	// Add one video control per screen
+	// except for screen 0 which already has a video control
+	// via the app view
+	const TInt numScreens = CCoeEnv::Static()->WsSession().NumberOfScreens();
+
+	for(TInt i = 1; i < numScreens; ++i)
+		{
+		CMVSVideoControl* videoCtl = CMVSVideoControl::NewLC(*iVideoPlayAgent, i, *(CCoeEnv::Static()->RootWin(i)));
+		CWsScreenDevice* screenDevice = new (ELeave) CWsScreenDevice(CCoeEnv::Static()->WsSession());
+		CleanupStack::PushL(screenDevice);
+		User::LeaveIfError(screenDevice->Construct(i));
+		videoCtl->SetExtent(TPoint(0, 0), screenDevice->SizeInPixels());
+		CleanupStack::PopAndDestroy(screenDevice);
+		videoCtl->ActivateL();
+		iVideoCtls.AppendL(videoCtl);
+		CleanupStack::Pop(videoCtl);
+		}
+
+	iVideoCtl = iAppView->iMainWindowControl;
+	iLogger.Write(_L("Application START"));
+  	iSrcFName.Copy(KDefault);
+  	iDestFilename = KDefault;
+  	iRecordLimitSet = EFalse;
+	iAlreadyRegistered = EFalse;
+  	}
+
+CMVSAppUi::CMVSAppUi()
+:iVolumeOrGain(10),iNoRepeats(0),iMainWindowText(8), iMaxFileBuffer(0)
+#ifdef SYMBIAN_BUILD_GCE
+	,iAutoScaleType(EAutoScaleNone),
+    iAutoScaleHorizPos(EHorizontalAlignCenter),
+    iAutoScaleVertPos(EVerticalAlignCenter)
+#endif
+	{		
+	}
+
+CMVSAppUi::~CMVSAppUi()
+	{
+	delete iAudioPlayAgent;
+	delete iAudioRecordAgent;
+	delete iVideoPlayAgent;
+	delete iVideoRecordAgent;
+	iUidArray.Close();
+	iAudioUidArray.Close();
+	iVideoUidArray.Close();
+	iAudioPlayUidArray.Close();
+	iOverlayText.Close();
+	delete iPluginInfo;
+	delete iPluginArray;
+	delete iExtArray;
+	delete iCodecArray;
+	delete iMetaTitle;
+	delete iMetaAuthor;   
+	delete iMetaCopyright;
+	delete iMetaRevision;
+	delete iMetaCategory;
+	delete iMetaComments;
+	iMainWindowText.Reset();
+	if(iLogger.Handle())
+		{
+		iLogger.CloseLog();
+		iLogger.Close();	
+		}
+	iLogs.Close();
+	delete iViewTicker;
+	delete iSettingManager;
+	iVideoCtls.ResetAndDestroy();
+    delete iAppView;
+	}
+
+//All the user actvated actions in the UI is captured and handled 
+//through here
+void CMVSAppUi::HandleCommandL(TInt aCommand)
+	{
+	TBool needsUpdating = ETrue;
+	switch (aCommand)
+    	{
+     	case EMVSCmdNew:
+           	{
+           	if( iMode != EIdle )
+           		{
+           		return;//dont get into record mode,as the system is still in a previous active state,Playing/Recording.
+           		}
+           	FileOpenForRecordL();
+           	}
+   	    	break;
+        
+        
+        case EMVSCmdOpen:
+        	{
+        	if(iState == EAudioPlaying || iState == EVideoPlaying || iState == EAudioRecording || iState == EVideoRecording || iMode == EVideoRecord || iMode == EAudioRecord)
+           		{
+           		return;//dont get into record mode,as the system is still in a previous active state,Playing/Recording.
+           		}
+        	Reset();
+        	FileOpenL();
+    	 	iLogger.Write(_L("Opened for Play"));
+       	  	}
+       	  	break;	
+        	
+    	case EMVSCmdMultiScreen:
+    		{
+    	 	iSetScreen->SetupDialogLD(iScreenNumber,this);	
+    		}
+    		break;
+    		
+    	case EMVSRegisterForNotification:
+    		{
+    		iRegisterForNotification->SetupDialogLD(this);
+    		}
+    		break;
+    		
+        case EMVSCmdSetVolume:
+        	{
+        	if((iMode == EAudioPlay) || (iMode == EVideoPlay))
+	        	{
+	        	iVolumeDialog->SetupDialogLD(iVolumeOrGain,0,0, ETrue, this);	
+	        	iLogger.Write(_L("volume set"));
+	        	}
+        	else if((iMode == EAudioRecord)||(iMode == EVideoRecord))
+        		{
+        		iVolumeDialog->SetupDialogLD(iVolumeOrGain,0,0, EFalse, this);
+        		iLogger.Write(_L("gain set"));
+        		}
+           	}
+           	break;
+        	
+        	
+        case EMVSCmdSetPlayBalance:
+         	{
+         	iBalanceDialog->SetupDialogLD(iBalance,this, ETrue);    
+         	iLogger.Write(_L("Balance Set"));    
+           	}
+           	break;
+         	
+        
+        case EMVSCmdSetRecordBalance:
+         	{
+         	iBalanceDialog->SetupDialogLD(0,this, EFalse);    
+        	}
+        	break;
+         	
+         	     
+        case EMVSCmdSetRepeats:
+          	{
+         	iRepeatDialog->SetupDialogLD(iNoRepeats,iRepeatDelay, this);
+         	iLogger.Write(_L("Repeats Set"));	
+         	}
+        	break;
+       
+        case EMVSCmdEditMetadata:
+            {
+            iMetaArray.Reset();
+            if(iMetaArray.Count() == 0)
+            	{
+              	InitializeMetaArrayL();
+              	}
+            switch(iMode)
+            	{
+            	case EAudioRecord:
+            	case EVideoRecord:
+            		{
+            		iEditMetaInfoDialog->SetupDialogLD(iMetaArray,this);
+         			iLogger.Write(_L("MetaData Edited"));
+            		iMetaArray.Close();	
+            		}
+            	break;
+            	
+            	case EAudioPlay:
+            	case EVideoPlay:
+            		{
+            		iViewMetaInfoDialog->SetupDialogLD(iMetaArray,this);
+         			iLogger.Write(_L("MetaData View"));
+            		iMetaArray.Close();	
+            		}
+            	}
+            }
+            break;
+        
+        
+        case EMVSCmdExit:
+            {
+			if (iDisplayAdded)
+              	{
+				iVideoPlayAgent->RemoveDisplayWindowL(iVideoCtl->ControlWindow());
+				iVideoPlayAgent->RemoveDisplayWindowL(iVideoCtl->Pip().ControlWindow());
+				iVideoPlayAgent->RemoveDisplay(iVideoCtl->ScreenNumber());
+				iVideoCtl->Pip().Clear();
+				iDisplayAdded = EFalse;
+              	}
+            
+            iLogger.Write(_L("Application EXIT"));
+  		  	iSettingManager->WriteGeneralSettingsL(this);
+        	Exit();
+            }
+            break;
+    	
+    	
+    	case EMVSCmdPlay:
+    		{
+	    	if(!iButtons->IsCommandDimmed(EMVSCmdPlay))
+	    		{
+	    	 	switch(iMode)
+					{
+					case EAudioPlay:
+						{
+						iAppView->iStatusWindowTimeControl->ResetText2L();
+						SetVolumeL(iVolumeOrGain,0);
+						iButtons->DimCommand(EMVSCmdRecord, ETrue);
+						iButtons->DrawNow();
+						if(iState == ENotReady)
+							{
+							FileOpenL();	
+							iAutoplay=ETrue;
+							}
+						else
+							{
+							iAudioPlayAgent->Play();	
+							iLogger.Write(_L("Playing using AudioPlayAgent"));
+							}	
+						}
+					break;
+
+					case EAudioRecord:
+						{
+						iAppView->iStatusWindowTimeControl->ResetText2L();
+						SetVolumeL(iVolumeOrGain,0);
+						iAudioRecordAgent->PlayL();
+						iLogger.Write(_L("Playing using AudioRecordAgent"));
+						}
+					break;
+
+					case EVideoPlay:
+						{						
+						if (iVideoPlayAgent->AudioEnabledL())
+							{
+							SetVolumeL(iVolumeOrGain, 0);
+							}
+						iButtons->DimCommand(EMVSCmdSetRepeats, ETrue);
+						iButtons->DrawNow();
+						
+#ifdef SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS
+                        if (iVideoPlayAgent->SupportVideoPlayerUtility2())
+                            {
+							PrepareVideoControlsL();                        				
+		                    }
+#endif // SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS
+					    iVideoPlayAgent->Play();
+                        iLogger.Write(_L("Playing using VideoPlayAgent"));						    
+						}
+					    break;
+					
+					case EIdle:
+					case EVideoRecord:
+						break;
+					
+					default:
+						ASSERT(EFalse);
+					break;
+					}
+    			}
+    		else
+    			{
+    			needsUpdating = EFalse;
+    			}
+    		}
+    		break;
+    	
+    	
+    	case EMVSCmdRecord:
+    	 	{
+    	 	if(!iButtons->IsCommandDimmed(EMVSCmdRecord))
+    	 		{
+    	 		switch(iMode)
+	    			{
+	    			case EAudioRecord:
+		    			{
+		    			iAudioRecordAgent->RecordL();
+		    			iLogger.Write(_L("Recording using AudioRecordAgent"));	
+		    			iButtons->DimCommand(EMVSCmdRecord, ETrue);
+	                  	iButtons->DimCommand(EMVSCmdPlay, ETrue);
+	                  	iButtons->DrawNow();
+		    			}
+	    				break;	
+	    			case EVideoRecord:
+		    			{
+		    			//start view finder and record
+		    			CCamera *camera = iVideoRecordAgent->Camera();
+		    			TSize imageSize;
+						camera->EnumerateCaptureSizes(imageSize,1,CCamera::EFormatFbsBitmapColor16M);
+						TPoint pos = DrawBorders(imageSize);
+						TRect clientRect = ClientRect();
+						pos.iY += clientRect.iTl.iY;//add y-offset for menu bar
+						TRect screenRect(pos,imageSize);
+						TRect clipRect = screenRect ;
+						if (!camera->ViewFinderActive())
+							{
+							CCoeEnv *coenv = iAppView->iMainWindowControl->ControlEnv();
+							camera->StartViewFinderDirectL( coenv->WsSession(),
+															*coenv->ScreenDevice(),
+															*iAppView->DrawableWindow(),
+															screenRect,
+															clipRect);
+							}
+		    			if (!iFileReplace)
+		    				{
+		    				SetVideoFrameRateL(iVideoFrameRate);
+		    				SetVideoFrameSizeL(iFrameSize);
+		    				SetAudioEnabledL(iAudioEnabled);
+		    				}
+		    			iVideoRecordAgent->Record();
+		    			iLogger.Write(_L("Recording using VideoRecordAgent"));	
+		    			iButtons->DimCommand(EMVSCmdRecord, ETrue);
+	                  	iButtons->DimCommand(EMVSCmdPlay, ETrue);
+	                  	iButtons->DrawNow();
+		    			}
+		    			break;
+	    			default:
+	    				ASSERT(EFalse);
+	    				break;	
+	    			} 			
+    	 	 	}
+    	 	else
+    	 		{
+    	 		needsUpdating = EFalse;
+    	 		}
+    	 	}
+    	 	break;	
+        
+        
+        case EMVSCmdPause:
+        	{
+        	if(!iButtons->IsCommandDimmed(EMVSCmdPause))
+	        	{
+	        	switch(iMode)
+	        		{
+	        		case EAudioPlay:
+	        			{
+	        			iAudioPlayAgent->Pause();
+	        			iLogger.Write(_L("AudioPlayAgent Paused"));	
+	        			iButtons->DimCommand(EMVSCmdPlay, EFalse);
+	        			iButtons->DrawNow();
+	        			}
+	        			break;
+	        		
+	        		case EAudioRecord:
+	          	    	{
+	          	    	User::InfoPrint(KNotsupported);		
+	          	    	}
+	        			break;
+	        			
+	        		case EVideoPlay:
+	        		    {
+	        		    iVideoPlayAgent->PauseL();
+	        		    iLogger.Write(_L("AudioPlayAgent Paused"));	
+	        		    iButtons->DimCommand(EMVSCmdPlay, EFalse);
+	        			iButtons->DrawNow();
+	        		    }
+	        		    break;
+	        		    
+	        		case EVideoRecord:
+	          	    	{
+	          	    	iVideoRecordAgent->PauseL();
+	          	    	iLogger.Write(_L("VideoRecordAgent Paused"));	
+	          	    	iButtons->DimCommand(EMVSCmdRecord, EFalse);
+	          	        iButtons->DrawNow();
+	          	    	}
+	        			break;
+	        		
+	        		case EIdle:
+						break;
+	        		
+	        		default:
+	        			ASSERT(EFalse);
+	        			break;
+	        		}	
+	        	}
+        	else
+        		{
+        		needsUpdating = EFalse;
+        		}	
+        	}
+        	break;
+    	
+    	
+    	case EMVSCmdStop:
+    	    {
+    	    if(!iButtons->IsCommandDimmed(EMVSCmdStop))
+	    	    {
+	    	    switch(iMode)
+	        		{
+	        		case EAudioPlay:
+	        			{
+	        			iAudioPlayAgent->Stop();
+	        			iLogger.Write(_L("AudioPlayAgent Stopped"));	
+	        			iButtons->DimCommand(EMVSCmdPlay, EFalse);
+	        			iButtons->DrawNow();
+	        			}
+	        			break;
+	        		
+	        		case EAudioRecord:
+	        			{
+	        			iAudioRecordAgent->Stop();
+	        		   	iLogger.Write(_L("AudioRecordAgent Stopped"));	
+	        			iButtons->DimCommand(EMVSCmdRecord, EFalse);
+	        			iButtons->DrawNow();
+	        			iButtons->DimCommand(EMVSCmdPlay, EFalse);
+	        			iButtons->DrawNow();
+	        			}
+	        			break;
+	        		
+	        		case EVideoPlay:
+	        		    {
+	        		    iVideoPlayAgent->Stop();	
+	        		    iLogger.Write(_L("VideoPlayAgent Stopped"));	
+	        		    iButtons->DimCommand(EMVSCmdPlay, EFalse);
+	        			iButtons->DrawNow();
+	        		    iAppView->DrawNow();
+	        		    }
+	        			break;
+	        			
+	        		case EVideoRecord:
+	        			{
+	        			StopViewFinder();
+	        			iVideoRecordAgent->Stop();
+	        			iLogger.Write(_L("VideoRecordAgent Stopped"));		
+	        			iButtons->DimCommand(EMVSCmdRecord, EFalse);
+	        			iButtons->DrawNow();
+	        			}
+	        			break;
+	        		
+	        		case EIdle:
+	        			break;
+	        		
+	        		default:
+	        			ASSERT(EFalse);
+	        			break;
+	        		}		
+	    	    }
+    	    else
+    	    	{
+    	    	needsUpdating = EFalse;
+    	    	}
+    	    }
+         	break;
+     
+     
+        case EMVSCmdSetPlayWindow:
+       		{
+       		iSetPlayWindow->SetupDialogLD(iStart,iEnd,iDuration,this);
+       	    iLogger.Write(_L("AudioPlayAgent SetPlayWindow"));	
+       		}
+    		break;
+    
+    
+    	case EMVSCmdClearPlayWindow:
+    		{
+    		iStart = 0;
+    		iEnd = iAudioPlayAgent->Duration();
+    		iAudioPlayAgent->ClearPlayWindow();
+    	    iLogger.Write(_L("AudioPlayAgent ClearPlayWindow"));	
+    		}
+    		break;
+
+    
+       	case EMVSCmdSystemInfo:
+    		{
+    		iSystemInfo->SetupDialogLD(this);
+    		iLogger.Write(_L("System Info"));
+    		}
+    		break;
+    	
+    	
+    	case EMVSVideoCmdSettings:
+    		{
+            if (iVideoPlayAgent->SupportVideoPlayerUtility2())
+                {
+	    		iVideoSetting->SetupDialogLD(iRotation, this, iVideoExtent, iWindowClipRect, ETrue, iPip, iCrp);
+                }
+            else
+                {
+	    		iVideoSetting->SetupDialogLD(iRotation,this, TRect(0, 0, 0, 0), TRect(0, 0, 0, 0), EFalse, EFalse, iCrp);
+                }
+    		iLogger.Write(_L("Video Settings"));
+    		}
+    		break;
+    	
+    	
+    	case EMVSCmdAudioSetting:
+    		{
+    		iAudioSetting->SetupDialogLD(iNoRepeats,iRepeatDelay,iPriority,iPriorityPreference,iMaxFileBuffer, this);
+    		iLogger.Write(_L("Audio Setting"));	
+    		}
+    		break; 
+    	
+    	
+    	case EMVSCmdClose:
+    		{
+    		FileClose(); 
+    		iRecordLimitSet = EFalse;	
+    		}
+    		break;
+    	
+    	
+    	case EMVSCmdSetCropWindow:
+    	    {
+    	    iCropPosition=0;
+    	    iCropStart=GetCropStart();
+        	iClipLength = iAudioRecordAgent->Duration();
+    	    iCropEnd=iClipLength;
+    	    iCropDialog->SetupDialogLD(iCropPosition,iClipLength,0,iCropEnd,this);
+    	    iLogger.Write(_L("CropWindow set"));	
+    	    }
+    	    break;
+    		
+    	case EMVSCmdClearLog:
+    		{
+    		
+       		}
+    		break;
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+    	case EMVSCmdEnableSubtitles :
+    		{
+    		iVideoPlayAgent->EnableSubtitlesL();
+    		}
+    		break;
+    	case EMVSCmdDisableSubtitles :
+    		{
+    		iVideoPlayAgent->DisableSubtitlesL();
+    		}
+    		break;
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+    	}
+    if(needsUpdating)
+    	{
+    	UpdateDisplayL(iState);
+    	}
+  	}
+
+void CMVSAppUi::PrepareVideoControlsL()
+	{
+	if (iDisplayAdded)
+		{
+		iVideoPlayAgent->RemoveDisplayWindowL(iVideoCtl->ControlWindow());
+		iVideoPlayAgent->RemoveDisplay(iVideoCtl->ScreenNumber());
+		TRAP_IGNORE(iVideoPlayAgent->RemoveDisplayWindowL(iVideoCtl->Pip().ControlWindow()));
+		iDisplayAdded = EFalse;
+		}
+
+	iVideoCtl = iAppView->iMainWindowControl;
+
+	CCoeEnv* env = CCoeEnv::Static();
+
+	if (iScreenNumber > 0)
+		{
+		// Video ctls start at 0 in index for display 1
+		iVideoCtl = iVideoCtls[iScreenNumber - 1];
+		}
+
+	TRect extent = iVideoExtentSet ? iVideoExtent : iVideoCtl->Rect();
+	TRect clip = iWindowClipRectSet ? iWindowClipRect : iVideoCtl->Rect();
+	iVideoPlayAgent->AddDisplayWindowL(env->WsSession(), *(env->ScreenDevice(iScreenNumber)), iVideoCtl->ControlWindow(), extent, clip);
+	iDisplayAdded = ETrue;
+
+	if (iPip)
+		{
+		// Picture-in-picture has been enabled.
+		TSize videoFrameSize;
+		iVideoPlayAgent->VideoFrameSizeL(videoFrameSize);
+		TSize winSize = iVideoCtl->Size();
+	
+		// Picture-in-picture should be an 8th of original	
+		videoFrameSize.iHeight /= 4;
+		videoFrameSize.iWidth /= 4;
+		
+		TPoint pipLoc(winSize.iWidth - (videoFrameSize.iWidth + 4), 4);
+
+		iVideoCtl->Pip().SetExtent(pipLoc, videoFrameSize);
+
+		if (iCrp)
+			{
+			iVideoCtl->EnablePip(CMVSPipControl::EUseCrp);
+			iVideoPlayAgent->AddDisplayL(env->WsSession(), iScreenNumber, iVideoCtl->Pip());
+			}
+		else
+			{
+			iVideoCtl->EnablePip(CMVSPipControl::EUseMmf);
+			iVideoPlayAgent->AddDisplayWindowL(env->WsSession(), *(env->ScreenDevice(iScreenNumber)), iVideoCtl->Pip().ControlWindow());
+			iVideoPlayAgent->SetAutoScaleL(iVideoCtl->Pip().ControlWindow(), EAutoScaleBestFit, EHorizontalAlignCenter, EVerticalAlignCenter);
+			}
+		}
+	else
+		{
+		// Picture-in-picture has been disabled.
+		iVideoCtl->DisablePip();
+		}
+	}
+
+void CMVSAppUi::SetPosition(TTimeIntervalMicroSeconds& aPos)
+	{
+	if(iMode == EAudioPlay)
+		{
+		iAudioPlayAgent->SetPosition(aPos);
+		}
+	else if(iMode == EAudioRecord)
+		{
+		iAudioRecordAgent->SetPosition(aPos);
+		}
+	}
+  	
+//Opens a file for playing
+void CMVSAppUi::FileOpenL()
+	{
+	//Open the file dialog
+    CEikFileOpenDialog* dialog = new (ELeave) CEikFileOpenDialog(&iSrcFName);  
+    TInt val = dialog->ExecuteLD(R_EIK_DIALOG_FILE_OPEN);
+	if(val != 0)
+	    {
+	    TUid mediatype = iPluginInfo->GetMediaTypeL(iSrcFName);
+	    if(mediatype == KUidMediaTypeVideo)
+			{
+		    TRect rect, clipRect;
+		    rect = clipRect = TRect(iAppView->iMainWindowControl->PositionRelativeToScreen(), iAppView->iMainWindowControl->Size());
+
+			rect.Shrink(2,2);
+		    clipRect.Shrink(2,2);
+		    
+            // Clear the area where the video will be displayed 
+#ifdef SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS
+        	iVideoPlayAgent->SetVideoOutputL(iCoeEnv->WsSession(),
+											 *iCoeEnv->ScreenDevice(iScreenNumber),
+											 iVideoCtl->ControlWindow(),
+											 rect, 
+											 clipRect);
+#else
+        	iVideoPlayAgent->SetVideoOutputL(iCoeEnv->WsSession(),
+											 *iCoeEnv->ScreenDevice(),
+											 iVideoCtl->ControlWindow(),
+											 rect, 
+											 clipRect);
+#endif // SYMBIAN_WSERV_AND_CONE_MULTIPLE_SCREENS
+
+		    TInt res = iVideoPlayAgent->SetScreenNumber(iScreenNumber);
+			if(res == KErrNotSupported)
+				{
+				User::InfoPrint(KMultiScreenNotsupported);
+				}
+			//Enable AP&R for register notification made before opening the file
+			if(iRegistered)
+				{
+				TInt regerr = iVideoPlayAgent->RegisterForNotification();	
+				if(regerr == KErrNone)
+					{
+					User::InfoPrint(KRegisterSuccess);
+					}
+				else
+					{
+					User::InfoPrint(KRegisterFailure);	
+					}
+				}
+			else if(iAlreadyRegistered)
+				{
+				TInt cancelerr = iVideoPlayAgent->CancelNotification();
+				if(cancelerr == KErrNone)
+					{
+					iAlreadyRegistered = EFalse;	
+					User::InfoPrint(KRegisterCancelation);
+					}
+				else
+					{
+					User::InfoPrint(KCancelationFailure);	
+					}
+				}	
+		    iVideoPlayAgent->OpenFileL(iSrcFName);
+		    iMode = EVideoPlay;	
+		    }
+	    else if(mediatype == KUidMediaTypeAudio)
+		    {
+			iAudioPlayAgent->OpenFileL(iSrcFName);
+			iMode = EAudioPlay;
+	    	iButtons->DimCommand(EMVSCmdSetVolume,EFalse);
+			iButtons->DrawNow();
+	    	}
+	    else
+	    	{
+			User::InfoPrint(KNotSupported);    	
+	    	}   
+	 	}
+    return;
+	}
+
+//Opens a new or existing file to record.	
+void CMVSAppUi::FileOpenForRecordL()
+	{
+   	iExtArray->Reset();
+  	iPluginArray->Reset();
+    iCodecArray->Reset();
+   	iSelectedPluginIdx = KBeforeSelectingController;
+    iSelectPluginsDialog->SetupDialogLD(iPluginArray,iExtArray, iCodecArray, this);
+    //Indicates that the controller wasnt selected, leave it to the MMF to select
+    //tha appropriate controller.
+    if(iSelectedPluginIdx == KControllerNotSelected)
+    	{
+    	iControllerUid = TUid::Null();
+    	}
+    else
+    	{
+    	if(iMediaType)
+    		{
+    		iControllerUid = iVideoUidArray[iSelectedPluginIdx];
+    		}
+    	else
+    		{
+    		iControllerUid = iAudioUidArray[iSelectedPluginIdx];				
+    		}
+    	}
+    if(!iMediaType)
+    	{
+        iMode = EAudioRecord;
+        }
+    else if(iMediaType)
+    	{
+		iMode = EVideoRecord;        		
+        }	
+    SaveAsDialogL();
+    }
+    
+void CMVSAppUi::FileClose()    
+	{
+	iButtons->DimCommand(EMVSCmdSetVolume, ETrue);
+    iButtons->DimCommand(EMVSCmdRecord, ETrue);
+	switch(iMode)
+   		{
+	    case EAudioPlay:
+	    	{
+	        iAudioPlayAgent->Stop();
+	        iLogger.Write(_L("AudioPlayAgent Close"));	
+	        }
+	        break;
+	        		
+	    case EAudioRecord:
+	     	{
+	     	iAudioRecordAgent->Stop();
+	        iLogger.Write(_L("AudioRecordAgent Close"));	
+	        }
+	        break;
+	        
+	    case EVideoPlay:
+	    	{
+	        iVideoPlayAgent->Close();
+	        iLogger.Write(_L("VideoPlayAgent Close"));		
+	        iAppView->DrawNow();
+	        }
+	        break;
+	        	    
+	    case EVideoRecord:
+	    	{
+	        iVideoRecordAgent->Close();	
+	        iLogger.Write(_L("VideoRecordAgent Close"));		
+	        }
+	        break;
+	        		
+	    default:
+	        break;
+	    }
+	Reset();	
+	}
+	
+	
+void CMVSAppUi::SaveAsDialogL()
+	{
+	iFileReplace = ETrue;
+	TInt errVal = iSaveAsDialog->SetupDialogLD(iDestFilename, &iFileReplace);
+    if(errVal)
+    	{
+    	DetermineFinalFNameL();
+    	if(iProceed)
+    		{
+        	iOpeningForRecord=ETrue;
+        	RFs fs = CCoeEnv::Static()->FsSession();
+        	if(iMode==EAudioRecord)
+	    		{
+	    		TInt uidcount = iAudioPlayUidArray.Count();
+	    		TUid playcontrollerUid = TUid::Null();
+	    		if(uidcount)
+		    		{
+		    		playcontrollerUid = iAudioPlayUidArray[0];
+		    		}
+ 		    	if(iFileReplace)
+		    		{
+		    		fs.Delete(iDestFilename);
+		    		}
+		    	iAudioRecordAgent->CreateNewFileL(iDestFilename,iControllerUid,playcontrollerUid);	
+		    	iLogger.Write(_L("Opened file for Audio Record"));
+		    	iRecFName.Copy(iDestFilename);
+	        	iButtons->DimCommand(EMVSCmdRecord, EFalse);
+	        	iButtons->DrawNow();
+		    	}
+		    	    	
+        	else if(iMode==EVideoRecord)
+	    		{
+	    		if(iFileReplace)
+		    		{
+		    		fs.Delete(iDestFilename);
+		    		}
+	    		TInt err = iVideoRecordAgent->OpenFileL(iDestFilename,iControllerUid);
+	       		if(err != KErrNone)
+	      			{
+	       			iLogger.Write(_L("ECam Object creation failed"));
+	       			User::InfoPrint(KVideoError);
+	       			}
+	    		else
+	       			{
+	       			iLogger.Write(_L("Opened file for Video Record"));
+	       			iRecFName.Copy(iDestFilename);
+        			iButtons->DimCommand(EMVSCmdRecord, EFalse);
+        			iButtons->DrawNow();	
+	       			}
+	       		}
+        	}
+		}
+	else
+		{
+		iMode = EIdle;
+		UpdateStateChange(ENotReady , KErrNone);
+		}
+    }
+	
+//The state change calls from the agents
+void CMVSAppUi::UpdateStateChange(TMVSState aState, TInt aError)
+	{
+	TInt error = aError;
+	//if state changes from EVideoRecording and view finder is running, stop it.
+	if(iState == EVideoRecording && aState != EVideoRecording)
+		{
+		StopViewFinder();
+		}
+	//if playback stops, redraw the app view
+	if(iState == EVideoPlaying && aState != EVideoPlaying)
+		{
+		// the last frame is still on the display, but nothing is in charge
+		// of redrawing it. this would otherwise lead to graphical glitches
+		// as the frame is partially erased over time.
+		iAppView->iMainWindowControl->DrawNow();
+		}
+	iState=aState;
+	if(error == KErrNone)
+		{
+		if(aState == EAudioOpened)
+			{
+			iAppView->ResetProgressBar();
+	   		iButtons->DimCommand(EMVSCmdPlay,EFalse);
+	   		iButtons->DrawNow();
+	   		if(iMode == EAudioPlay)
+	   			{
+	   			iButtons->DimCommand(EMVSCmdRecord,ETrue);	
+ 				iDuration = iAudioPlayAgent->Duration();
+ 				if((iStart == 0) && (iEnd == 0))
+		   			{
+		   			iStart = 0;
+		   			iEnd = iDuration;	
+		   			}
+	   			}
+         	if(iButtons->IsCommandDimmed(EMVSCmdSetRepeats))
+         		{
+         		iButtons->DimCommand(EMVSCmdSetRepeats,EFalse);	
+         		iButtons->DrawNow();
+         		}
+         	if(iButtons->IsCommandDimmed(EMVSCmdSetPlayBalance))
+         		{
+         		iButtons->DimCommand(EMVSCmdSetPlayBalance,EFalse);	
+         		iButtons->DrawNow();
+         		}
+	   		//Provided to automatically start playing, when the play button is selected 
+			//without opening a file through the file menu.
+	   		if(iAutoplay)
+	   			{
+	   			iAudioPlayAgent->Play();
+	   			iAutoplay=EFalse;
+	   			}
+	   		if(iMode == EAudioRecord && !iOpeningForRecord)
+	   			{
+	   			iButtons->DimCommand(EMVSCmdRecord,EFalse);
+	   			iButtons->DimCommand(EMVSCmdPlay,EFalse);	
+	   			iButtons->DrawNow();
+	   			}
+	   		//Pop the Audio Record Settings Dialogue
+	   		if(iMode == EAudioRecord && iOpeningForRecord && iSelectedPluginIdx !=-2)
+	   			{
+	   			iButtons->DimCommand(EMVSCmdSetPlayBalance,EFalse);
+	   			if(iButtons->IsCommandDimmed(EMVSCmdRecord))
+         			{
+         			iButtons->DimCommand(EMVSCmdRecord,EFalse);
+		 			iButtons->DrawNow();	
+         			}
+	   			//if appending to an existing file no need to re-enter the controller configuration.
+	   			if(iFileReplace)
+	   				{
+	   				if(!iMediaType && iSelectedPluginIdx !=-1)
+	         			{
+				 		TRAP(error, iConfigFormatDialog->SetupDialogLD(this,iAudioUidArray[iSelectedPluginIdx],iSettingManager) );
+				 		iOpeningForRecord = EFalse;
+				 	  	}
+	   				}
+	   			}
+         	}
+		else if(aState == EAudioPlaying)
+			{
+			iButtons->DimCommand(EMVSCmdPlay, ETrue);
+			iButtons->DimCommand(EMVSCmdRecord,ETrue);
+			iButtons->DimCommand(EMVSCmdPause, EFalse);
+			iButtons->DimCommand(EMVSCmdStop, EFalse);
+			iButtons->DrawNow();
+	   		}
+		else if(aState == ENotReady)
+			{
+			iButtons->DimCommand(EMVSCmdSetPlayBalance,EFalse);
+			iButtons->DimCommand(EMVSCmdSetVolume, ETrue);
+            iButtons->DimCommand(EMVSCmdRecord, ETrue);
+            iButtons->DimCommand(EMVSCmdPlay, EFalse);
+            iButtons->DrawNow();
+
+			// File has been closed.  Remove the display window if it was added.
+			if (iDisplayAdded)
+				{
+				TRAP(error, iVideoPlayAgent->RemoveDisplayWindowL(iVideoCtl->ControlWindow()));
+				TRAP(error, iVideoPlayAgent->RemoveDisplayWindowL(iVideoCtl->Pip().ControlWindow()));
+				iVideoPlayAgent->RemoveDisplay(iVideoCtl->ScreenNumber());
+				iVideoCtl->Pip().Clear();
+				iDisplayAdded = EFalse;
+				}
+            }
+		else if(aState == EAudioOpening)
+			{
+			iButtons->DimCommand(EMVSCmdSetVolume,EFalse);
+	   		}
+		else if(aState == EAudioPaused)
+			{
+			iButtons->DimCommand(EMVSCmdPause, ETrue);
+	   		iButtons->DrawNow();
+	   		}
+		else if(aState == EAudioStopped)
+			{
+			iAppView->ResetProgressBar();
+			iButtons->DimCommand(EMVSCmdStop, ETrue);
+			iButtons->DimCommand(EMVSCmdPause, ETrue);
+	   		iButtons->DrawNow();
+			}
+		else if(aState == EVideoPaused)
+			{
+			iButtons->DimCommand(EMVSCmdPause,ETrue);
+			iButtons->DrawNow();
+			}
+		else if(aState == EVideoStopped)
+			{
+			iButtons->DimCommand(EMVSCmdStop,ETrue);
+			iButtons->DimCommand(EMVSCmdPause, ETrue);
+			iButtons->DrawNow();
+			}
+		else if(aState == EVideoPlaying)
+			{
+			iButtons->DimCommand(EMVSCmdPlay, ETrue);
+			iButtons->DimCommand(EMVSCmdRecord,ETrue);
+			iButtons->DimCommand(EMVSCmdPause,ETrue);
+			iButtons->DimCommand(EMVSCmdStop,EFalse);
+			iButtons->DrawNow();
+			}
+		else if(aState == EVideoRecording)
+			{
+			iButtons->DimCommand(EMVSCmdPlay, ETrue);
+			iButtons->DimCommand(EMVSCmdRecord, ETrue);
+			iButtons->DimCommand(EMVSCmdPause,EFalse);
+			iButtons->DimCommand(EMVSCmdSetRepeats,ETrue);
+			iButtons->DrawNow();
+			}
+		
+		else if(aState == EAudioRecording)
+			{
+			iButtons->DimCommand(EMVSCmdPlay, ETrue);
+			iButtons->DimCommand(EMVSCmdRecord,ETrue);
+			iButtons->DimCommand(EMVSCmdPause,ETrue);
+			iButtons->DrawNow();
+			}
+		else if(aState == EVideoOpened )
+			{
+			//Pop the Video Record Settings Dialogue
+			iButtons->DimCommand(EMVSCmdPlay,EFalse);
+         	iButtons->DimCommand(EMVSCmdPause,ETrue);
+         	iButtons->DimCommand(EMVSCmdSetRepeats,ETrue);
+         	iButtons->DrawNow();
+			if(iButtons->IsCommandDimmed(EMVSCmdSetPlayBalance))
+         		{
+         		iButtons->DimCommand(EMVSCmdSetPlayBalance,EFalse);	
+         		iButtons->DrawNow();
+         		}
+			if(iMode==EVideoRecord && iOpeningForRecord)
+				{
+				iButtons->DimCommand(EMVSCmdSetPlayBalance,ETrue);
+				if(iFileReplace)
+	   				{
+				if(iMediaType && iSelectedPluginIdx !=-1)
+	        			{
+		     			TRAP(error, iVideoFormatDialog->SetupDialogLD(this,iVideoUidArray[iSelectedPluginIdx],iSettingManager) );
+		     			iOpeningForRecord=EFalse;
+	         			}
+	   				}
+				}
+			}
+		if(error != KErrNone)		
+			{
+			LogErrors(error);		
+			}
+		}
+	else if ((error == KErrEof) && (aState == EAudioStopped))
+		{
+		iButtons->DimCommand(EMVSCmdPlay, EFalse);
+		iButtons->DimCommand(EMVSCmdRecord,ETrue);
+		iButtons->DimCommand(EMVSCmdPause,EFalse);
+		iButtons->DimCommand(EMVSCmdStop,EFalse);
+		iButtons->DrawNow();
+		}
+	else	
+		{
+		LogErrors(error);
+		}
+	
+	//As the state changes the display windows(views) contents also needs to be changed
+	TRAPD(err,UpdateDisplayL(iState));
+	if(err)
+		{
+		LogErrors(err);	
+		iState = ENotReady;
+		FileClose();
+		}
+	}
+
+void CMVSAppUi::MvsResourceNotification(const TDesC8& /*aNotificationData*/)
+	{
+	if(iMode == EVideoPlay)
+		{
+		iVideoPlayAgent->Play();
+		}
+	}
+//Return the current mode of the App
+void CMVSAppUi::Reset()
+	{
+	iMode =EIdle;
+	iState =ENotReady;
+	iBitRate = 0;
+	iSampleRate = 0;
+	iChannels =0;
+	iAutoplay = EFalse;
+	iStart = 0;
+	iEnd = 0;
+	iDuration = 0;
+	}
+
+
+//GetCropStart()
+TTimeIntervalMicroSeconds CMVSAppUi::GetCropStart() const
+    {
+    return iCropStart;
+    }
+
+
+// Returns the cropping end-point in microseconds
+TTimeIntervalMicroSeconds CMVSAppUi::GetCropEnd() const
+    {
+    return iCropEnd;
+    }
+
+//Volume setting
+void CMVSAppUi::SetVolumeL(TInt aVolume, TTimeIntervalMicroSeconds aRamp)
+    {
+    //Initialise the volume settings based on the parameters
+    iVolumeOrGain = aVolume;
+    iRamp = aRamp;
+	switch(iMode)
+		{
+	 	case EAudioPlay:
+     		{
+     		//And set the maximum volume based on the device's audio capabilities
+     		iMaxVolume = iAudioPlayAgent->MaxVolume();
+	    	//Set the volume, and volume ramps.
+     		iAudioPlayAgent->SetVolume((iVolumeOrGain*iMaxVolume)/100, iRamp);	
+     		}
+     		break;
+	 	
+	 	case EAudioRecord:
+	 		{
+	 		//And set the maximum volume based on the device's audio capabilities
+     		iMaxVolume = iAudioRecordAgent->MaxGain();
+	    	//Set the volume, and volume ramps.
+     		iAudioRecordAgent->SetGain((iVolumeOrGain*iMaxVolume)/100);	
+	 		}
+	 		break;
+     	
+	 	case EVideoPlay:
+	 		{
+	 		iMaxVolume = iVideoPlayAgent->MaxVolume();
+	 		iVideoPlayAgent->SetVolumeL((iVolumeOrGain*iMaxVolume)/100);	
+	 		}
+	 		break;
+	 	
+	 	case EVideoRecord:
+	 		{
+	 		iMaxVolume = iVideoRecordAgent->MaxGainL();
+			iVideoRecordAgent->SetGainL((iVolumeOrGain*iMaxVolume)/100); 		
+	 		}
+			break;
+		
+		case EIdle:
+			break;
+			
+		default:
+			ASSERT(EFalse);
+			break;
+	 	}
+    }
+ 
+ 
+//Set repeats
+void CMVSAppUi::SetRepeats(TInt aNoRepeats, TTimeIntervalMicroSeconds aDelay)
+    {
+    //Initialise the repeat variables based on the parameters
+    iNoRepeats = aNoRepeats;
+    iRepeatDelay = aDelay;
+	switch(iMode)
+	    {
+	    case EAudioPlay:
+	 		//Set the repeat settings based on these values
+     		iAudioPlayAgent->SetRepeats(iNoRepeats, iRepeatDelay);
+			break;
+		
+	 	case EAudioRecord:
+	 		//Set the repeat settings based on these values
+     		iAudioRecordAgent->SetRepeats(iNoRepeats, iRepeatDelay);
+	 		break;
+	 	default:
+	 		break;
+		}
+    }
+
+//Balance settings
+//
+//
+//
+// Sets the balance, based on the argument. This value is translated to both
+// the playback AND recording balance for the device.
+//
+void CMVSAppUi::SetBalanceL(TInt aBalance)
+	{
+    iBalance = aBalance;
+    switch(iMode)
+        {
+     	case EAudioPlay:
+     		iAudioPlayAgent->SetBalance(iBalance);
+     		break;
+     
+     	case EAudioRecord:
+     		iAudioRecordAgent->SetRecordBalance(iBalance);
+     		break;
+     		
+        case EVideoPlay:
+        	iVideoPlayAgent->SetBalanceL(iBalance);
+        	break;
+        
+        case EVideoRecord:
+          	User::InfoPrint(KNotsupported);
+        	break;
+        	
+        case EIdle:
+        	break;
+        	
+        default:
+        	ASSERT(EFalse);
+        	break;
+     		
+     	}
+    }
+
+     
+//
+//SetPriorityL(...)
+//
+// Sets the audio priority, and the priority preference, based on the
+// arguments.
+//
+void CMVSAppUi::SetPriorityL(TInt aPriority, 
+                                 TMdaPriorityPreference aPriorityPreference)
+    {
+    iPriority = aPriority;
+    iPriorityPreference = aPriorityPreference;
+    switch(iMode)
+	    {
+	    case EAudioPlay:
+		    iAudioPlayAgent->SetPriority(iPriority,iPriorityPreference);	
+		    break;
+	    
+	    case EVideoPlay:
+		    iVideoPlayAgent->SetPriorityL(iPriority,iPriorityPreference);		
+		    break;
+	    
+	    case EAudioRecord:
+	    	iAudioRecordAgent->SetPriority(iPriority,iPriorityPreference);	
+		    break;	
+		
+	    case EVideoRecord:
+	    	iVideoRecordAgent->SetPriorityL(iPriority,iPriorityPreference);		
+		    break;
+	    
+	    case EIdle:
+	    	break;
+		
+		default:
+			ASSERT(EFalse);
+			break;
+	    }
+    }
+
+
+//
+//SetPlayWindow(...)
+//
+// Sets the play window, based on the
+// arguments.
+// return value indicates if the operation is successful or not.
+TBool CMVSAppUi::SetPlayWindow(TTimeIntervalMicroSeconds aStart,
+                                 TTimeIntervalMicroSeconds aEnd)
+    {
+    iStart = aStart;
+    iEnd = aEnd;
+    TInt err = iAudioPlayAgent->SetPlayWindow(iStart,iEnd);
+    if(err != KErrNone)
+    	{
+    	LogErrors(err);
+    	iStart = 0;
+    	iEnd = iDuration;
+    	return EFalse;
+		}
+    else
+    	{
+    	return ETrue;
+    	}
+    }
+
+
+//
+//SetMetaDataL(...)
+//
+// Sets the MetaData, based on the arguments
+//
+void CMVSAppUi::SetMetaDataL(RPointerArray<CMMFMetaDataEntry> aMetaArray)
+	{
+	switch(iMode)
+		{
+		case EAudioRecord:
+			iAudioRecordAgent->SetMetaDataL(aMetaArray);
+			break;
+			
+		case EVideoRecord:
+			iVideoRecordAgent->SetMetaDataL(aMetaArray);
+			break;
+		default:
+			ASSERT(EFalse);
+			break;
+		}
+	
+	}
+	
+
+//
+//GetMetaDataL(...)
+//
+// Sets the MetaData, based on the arguments
+//
+void CMVSAppUi::GetMetaDataL(RPointerArray<CMMFMetaDataEntry>& aMetaArray)
+	{
+	switch(iMode)
+		{
+		case EAudioPlay:
+			iAudioPlayAgent->GetMetaArrayL(aMetaArray);
+			break;
+			
+		case EVideoPlay:
+			iVideoPlayAgent->GetMetaDataArrayL(aMetaArray);
+			break;
+		default:
+			ASSERT(EFalse);
+			break;
+		}
+	
+	}
+
+
+
+//
+//SetCrop(...)
+//
+// Sets the crop window, and also whether to crop from begining 
+// or end, based on the arguments passed
+//
+void CMVSAppUi::SetCropL(TTimeIntervalMicroSeconds aCropStart,TBool aCropFromBeginning)
+	{
+	iAudioRecordAgent->CropClipL(aCropStart,aCropFromBeginning);
+	iCropStart=aCropStart;
+	iCropFromBeginning=aCropFromBeginning;
+	}
+	
+
+void CMVSAppUi::SetBitRateL(TUint aBitRate)
+	{
+	TRAPD(err,iAudioRecordAgent->SetDestinationBitRateL(aBitRate));
+	if(err != KErrNone)
+		{
+		iLogger.Write(_L("SetDestinationBitRateL returned err"));
+		}
+	else
+		{
+		iBitRate = aBitRate;
+		}
+	}
+
+
+void CMVSAppUi::SetSampleRateL(TUint aSampleRate)
+	{
+	iAudioRecordAgent->SetDestinationSampleRateL(aSampleRate);
+	iSampleRate = aSampleRate;
+	}
+
+void CMVSAppUi::SetChannelsL(TUint aNumberOfChannels)
+	{
+	iAudioRecordAgent->SetDestinationNumberOfChannelsL(aNumberOfChannels);
+	iChannels = aNumberOfChannels;
+	}
+	
+void CMVSAppUi::SetCodecsL(TFourCC aDataType)
+	{
+	iAudioRecordAgent->SetDestinationDataTypeL(aDataType);	
+	}
+
+	
+	
+void CMVSAppUi::InitializeMetaArrayL()
+    {
+    //Reset the meta array
+    iMetaArray.Reset();
+    if(iMetaTitle != NULL)
+        {
+        iMetaArray.AppendL(iMetaTitle);
+        }
+
+    if(iMetaAuthor != NULL)
+        {
+        iMetaArray.AppendL(iMetaAuthor);
+        }
+
+    if(iMetaCopyright != NULL)
+        {
+        iMetaArray.AppendL(iMetaCopyright);
+        }
+
+    if(iMetaRevision != NULL)
+        {
+        iMetaArray.AppendL(iMetaRevision);
+        }
+
+    if(iMetaCategory != NULL)
+        {
+        iMetaArray.AppendL(iMetaCategory);
+        }
+
+    if(iMetaComments != NULL)
+        {
+        iMetaArray.AppendL(iMetaComments);
+        }
+    }
+ 
+//
+//DynInitMenuPaneL(...)            *** This method can LEAVE ***
+//
+// Initialises the availibility of controls on the menu bar depending on the
+// current state of the MVSApp. This allows the application to 
+// constrain the availibility of controls which are inappropriate in certain
+// states.
+//
+     
+void CMVSAppUi::DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane)
+    {
+    switch(iMode)
+    	{
+        case (EAudioRecord):
+            //File menu          
+            if(aResourceId == R_MVS_FILE_MENU)
+            	{
+                aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+				}
+
+            //Edit Menu
+            if(aResourceId == R_MVS_EDIT_MENU)
+                {
+                aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+                }
+
+            //Settings menu > 
+            if(aResourceId == R_MVS_SETTINGS_MENU)
+                {
+                aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,EFalse);
+                aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdClearLog,ETrue);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+         		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, ETrue);
+         		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, ETrue);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+                }
+			
+			if(iState == EAudioRecording)
+				{
+				//Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+		            aMenuPane->SetItemDimmed(EMVSCmdPlay,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdStop,EFalse);
+		            aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+		            }          	
+				}
+			else
+				{
+				if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+		            aMenuPane->SetItemDimmed(EMVSCmdPlay,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdStop,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdRecord,EFalse);
+		            }
+				}
+            break;
+            
+            
+        case (EVideoRecord):
+        	//File menu
+            if(aResourceId == R_MVS_FILE_MENU)
+            	{
+                aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+				}
+
+            //Edit Menu
+            if(aResourceId == R_MVS_EDIT_MENU)
+                {
+                aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+                }
+
+            //Settings menu > 
+            if(aResourceId == R_MVS_SETTINGS_MENU)
+                {
+                aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,ETrue);
+                aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdClearLog,ETrue);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+         		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, ETrue);
+         		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, ETrue);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+                }
+
+            if(iState == EVideoRecording)
+				{
+				//File menu
+            	if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	                aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+					}
+				
+				//Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+		            aMenuPane->SetItemDimmed(EMVSCmdPlay,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdStop,EFalse);
+		            aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+		            }          	
+				}
+			else
+				{
+				if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+		            aMenuPane->SetItemDimmed(EMVSCmdPlay,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdStop,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+		            aMenuPane->SetItemDimmed(EMVSCmdRecord,EFalse);
+		            }
+				}
+			if(iState == EVideoOpened)
+				{
+				//File menu
+            	if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	                aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+					}
+				}
+			if(iState == EVideoStopped)
+				{
+				//File menu
+            	if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	                aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+					}
+				}
+            break;
+
+        case (EAudioPlay):
+                       
+            if(iState == EAudioOpened)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,EFalse);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,ETrue);
+	                //aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, ETrue);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, ETrue);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}	
+            	}
+            
+            else if(iState == EAudioPlaying)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, ETrue);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, ETrue);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}	
+            	}
+            
+            else if(iState == EAudioPaused)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,EFalse);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, ETrue);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, ETrue);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}
+            	}
+            else if(iState == EAudioStopped)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,EFalse);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, ETrue);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, ETrue);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}
+            	}
+            break;
+         
+    	case (EVideoPlay):
+    		if(iState == EVideoOpened)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	                aMenuPane->SetItemDimmed(EMVSCmdMultiScreen,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		TBool subAvail = iVideoPlayAgent->SubtitlesAvailable();
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, !subAvail);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, !subAvail);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}	
+            	}
+            
+    		else if(iState == EVideoPlaying)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		TBool subAvail = iVideoPlayAgent->SubtitlesAvailable();
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, !subAvail);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, !subAvail);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}	
+            	}
+            else if(iState == EVideoPaused)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		TBool subAvail = iVideoPlayAgent->SubtitlesAvailable();
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, !subAvail);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, !subAvail);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}
+            	}
+            else if(iState == EVideoStopped)
+            	{
+            	//File menu
+	            if(aResourceId == R_MVS_FILE_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdNew,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdOpen,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClose,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+	               	}
+
+	             //Edit Menu
+	            if(aResourceId == R_MVS_EDIT_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+	               	}
+
+	            //Settings menu 
+	            if(aResourceId == R_MVS_SETTINGS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,EFalse);
+	                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+             		TBool subAvail = iVideoPlayAgent->SubtitlesAvailable();
+             		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, !subAvail);
+             		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, !subAvail);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+	               	}
+
+	            //Controls menu 
+	            if(aResourceId == R_MVS_CONTROLS_MENU)
+	            	{
+	               	aMenuPane->SetItemDimmed(EMVSCmdPlay,EFalse);
+	               	aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdStop,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	               	aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	               	}
+            	}
+            break;
+    
+    	case (EIdle):
+       		//File menu
+            if(aResourceId == R_MVS_FILE_MENU)
+            	{
+                aMenuPane->SetItemDimmed(EMVSCmdNew,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdOpen,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdClose,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdSystemInfo,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdExit,EFalse);
+				}
+
+            //Edit Menu
+            if(aResourceId == R_MVS_EDIT_MENU)
+                {
+                aMenuPane->SetItemDimmed(EMVSCmdSetCropWindow,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdSetPlayWindow,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdClearPlayWindow,ETrue);
+                }
+
+            //Settings menu > 
+            if(aResourceId == R_MVS_SETTINGS_MENU)
+                {
+                aMenuPane->SetItemDimmed(EMVSCmdAudioSetting,ETrue);
+                aMenuPane->SetItemDimmed(EMVSVideoCmdSettings,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdEditMetadata,ETrue);
+                aMenuPane->SetItemDimmed(EMVSCmdMultiScreen,EFalse);
+                aMenuPane->SetItemDimmed(EMVSCmdClearLog,EFalse);
+#ifdef SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+         		aMenuPane->SetItemDimmed(EMVSCmdEnableSubtitles, ETrue);
+         		aMenuPane->SetItemDimmed(EMVSCmdDisableSubtitles, ETrue);
+#endif //SYMBIAN_MULTIMEDIA_SUBTITLE_SUPPORT
+                }
+
+            //Controls menu 
+            if(aResourceId == R_MVS_CONTROLS_MENU)
+            	{
+	            aMenuPane->SetItemDimmed(EMVSCmdPlay,ETrue);
+	            aMenuPane->SetItemDimmed(EMVSCmdPause,ETrue);
+	            aMenuPane->SetItemDimmed(EMVSCmdStop,ETrue);
+	            aMenuPane->SetItemDimmed(EMVSCmdRewind,ETrue);
+	            aMenuPane->SetItemDimmed(EMVSCmdFastForward,ETrue);
+	            aMenuPane->SetItemDimmed(EMVSCmdRecord,ETrue);
+	            }
+            break;
+
+        default:
+            ASSERT(EFalse);
+            break;
+    	}
+    }
+
+
+void CMVSAppUi::InternalizeL(RReadStream& aStream)
+	{
+	iVolumeOrGain = aStream.ReadInt32L();
+	iBalance = aStream.ReadInt32L();
+	iNoRepeats = aStream.ReadInt32L();
+	iRepeatDelay = aStream.ReadReal64L();
+	}
+
+void CMVSAppUi::ExternalizeL(RWriteStream& aStream)
+	{
+	aStream.WriteInt32L(iVolumeOrGain);
+	aStream.WriteInt32L(iBalance);
+	aStream.WriteInt32L(iNoRepeats);
+	aStream.WriteReal64L(iRepeatDelay.Int64());
+	}
+
+//Returns the selected controller plugin from the UI
+void CMVSAppUi::SelectedPluginIdx(TInt aIdx)
+	{
+	iSelectedPluginIdx = aIdx;
+	}
+	
+//Returns the selected Extension from the UI	
+void CMVSAppUi::SelectedExtension(TDesC16& aDes)
+	{
+	iControllerExt = aDes;
+	}
+
+
+TInt CMVSAppUi::GetExtensionListL(CDesCArrayFlat* aExtArray,
+								  TBool aMediaType)
+	{
+ 	return iPluginInfo->GetExtensionListL(aMediaType,aExtArray);	
+	}
+
+
+TInt CMVSAppUi::GetPluginListL(TInt8 aExtIdx,CDesCArrayFlat* aExtArray,CDesCArrayFlat* aPluginArray,TBool aMediaType)
+	{
+	iControllerExt.Copy(aExtArray->operator[](aExtIdx));
+	iAudioUidArray.Reset();
+	iAudioPlayUidArray.Reset();
+	iVideoUidArray.Reset();
+	if(!aMediaType)
+		{
+		return iPluginInfo->GetAudioPluginListL(aPluginArray,iAudioUidArray,iAudioPlayUidArray,&iControllerExt);	
+		} 
+	else
+		{
+		return iPluginInfo->GetVideoPluginListL(aPluginArray,iVideoUidArray,&iControllerExt);	
+		}
+	}
+	
+TInt CMVSAppUi::GetSystemInfoL(CDesCArrayFlat* aPluginArray)
+	{
+	return iPluginInfo->GetPluginListL(aPluginArray,iUidArray);
+	}
+
+//Returnd the selected media type, ie Audio or Video
+void CMVSAppUi::SelectedMedia(TBool aMediaType)
+	{
+	iMediaType = aMediaType;	
+	}
+
+
+void CMVSAppUi::GetSupportedBitRatesL(RArray <TUint>& aBitRateArray) 
+	{
+	iAudioRecordAgent->GetSupportedBitRatesArrayL(aBitRateArray);
+	}
+
+void CMVSAppUi::GetSupportedSampleRatesArrayL(RArray<TUint>& aSampleRatesArray)
+	{
+	iAudioRecordAgent->GetSupportedSampleRatesArrayL(aSampleRatesArray);
+	}
+
+void CMVSAppUi::GetSupportedNoChannelsArrayL(RArray<TUint>& aNoChannelsArray)
+	{
+	iAudioRecordAgent->GetSupportedNoChannelsArrayL(aNoChannelsArray);
+	}
+
+void CMVSAppUi::GetSupportedCodecsArrayL(RArray<TFourCC>& aCodecsArray)
+	{
+	iAudioRecordAgent->GetSupportedCodecsArrayL(aCodecsArray);
+	}
+
+void CMVSAppUi::GetSupportedFrameRatesL(RArray <TReal32>& aFrameRateArray) 
+	{
+	iVideoRecordAgent->GetSupportedFrameRatesArrayL(aFrameRateArray);
+	}
+
+void CMVSAppUi::GetSupportedFrameSizeArrayL(RArray <TSize>& aFrameSizeArray) 
+	{
+	iVideoRecordAgent->GetSupportedFrameSizesArrayL(aFrameSizeArray);
+	}
+	
+void CMVSAppUi::SetVideoFrameRateL(TReal32 aFrameRate)
+	{
+	TRAPD(err,iVideoRecordAgent->SetVideoFrameRateL(aFrameRate));
+	if(err != KErrNone)
+		{
+		iLogger.Write(_L("SetVideoFrameRateL returned err"));
+		}
+	else
+		{
+		iVideoFrameRate = aFrameRate;
+		}
+	}
+
+void CMVSAppUi::SetVideoFrameSizeL(TSize aFrameSize)
+	{
+	TRAPD(err,iVideoRecordAgent->SetVideoFrameSizeL(aFrameSize));
+	if(err != KErrNone)
+		{
+		iLogger.Write(_L("SetVideoFrameRateL returned err"));
+		}
+	else
+		{
+		iFrameSize = aFrameSize;
+		}
+	}
+	
+void CMVSAppUi::SetAudioEnabledL(TBool aAudioEnabled)
+	{
+	iAudioEnabled = aAudioEnabled;
+	iVideoRecordAgent->SetAudioEnabledL(iAudioEnabled);
+	iLogger.Write(_L("Audio Enabled for Video"));
+	}
+
+void CMVSAppUi::GetSupportedVideoTypesL(CDesC8ArrayFlat& aMimeArray)
+	{
+	iVideoRecordAgent->GetSupportedVideoTypesL(aMimeArray);
+	}
+
+void CMVSAppUi::SetVideoTypeL(const TDesC8 &aType)
+	{
+	iVideoRecordAgent->SetVideoTypeL(aType);
+	}
+	
+void CMVSAppUi::WriteAudioDataL(CMVSConfigAudioFormatDialog* aAudioFormatDlg,
+					  const TUid& aUid)
+	{
+	iSettingManager->WriteAudioDataL(aAudioFormatDlg,aUid);
+	}
+
+void CMVSAppUi::WriteVideoDataL(CMVSConfigVideoFormatDialog* aVideoFormatDlg,
+						  const TUid& aUid)
+	{
+	iSettingManager->WriteVideoDataL(aVideoFormatDlg,aUid);
+	}
+
+TReal32 CMVSAppUi::GetVideoFrameRateL()
+	{
+	if(iMode == EVideoRecord)
+		{
+		iVideoFrameRate=iVideoRecordAgent->VideoFrameRateL();	
+		}
+	else if(iMode == EVideoPlay)
+		{
+		iVideoFrameRate=iVideoPlayAgent->VideoFrameRateL();
+		}
+	return iVideoFrameRate;	
+	}
+	
+TVideoRotation CMVSAppUi::GetRotationL() 
+	{
+	iVideoRotation = iVideoPlayAgent->RotationL();
+	return iVideoRotation;
+	}
+
+void CMVSAppUi::SetRotationL(TVideoRotation aRotation)
+	{
+	TRAPD(err, iVideoPlayAgent->SetRotationL(aRotation));
+	if (err == KErrNotSupported)
+		{
+		User::InfoPrint(KNotsupported);
+		iLogger.Write(_L("Error,This feature not supported by the controller"));
+		}
+	else if (err == KErrNotReady)
+		{
+		iLogger.Write(_L("Error, Videoplayer not yet created in the agent"));
+		}
+	else
+		{
+		iRotation = aRotation;
+		}
+	}
+
+void CMVSAppUi::GetScaleFactorL(TReal32& aScaleWidth, TReal32& aScaleHeight, TBool& aAntiAliasFiltering)
+	{
+	TRAPD(err, iVideoPlayAgent->GetScaleFactorL(aScaleWidth, aScaleHeight, aAntiAliasFiltering));
+	if (err == KErrNotSupported)
+		{
+		User::InfoPrint(KNotsupported);
+		}
+	else if (err == KErrNotReady)
+		{
+		iLogger.Write(_L("Error, Videoplayer not yet created in the agent"));
+		}
+	}
+
+void CMVSAppUi::SetScaleFactorL(TReal32 aScaleWidth,TReal32 aScaleHeight,TBool aAntiAliasFiltering)
+	{
+	TRAPD(err, iVideoPlayAgent->SetScaleFactorL(aScaleWidth,aScaleHeight,aAntiAliasFiltering));
+	if (err == KErrNotSupported)
+		{
+		User::InfoPrint(KNotsupported);
+		}
+	else if (err == KErrNotReady)
+		{
+		iLogger.Write(_L("Error, Videoplayer not yet created in the agent"));
+		}
+	}
+
+void CMVSAppUi::SetCropRegionL(const TRect& aCropRegion)
+	{
+	TRAPD(err, iVideoPlayAgent->SetCropRegionL(aCropRegion));
+	if (err == KErrNotSupported)
+		{
+		User::InfoPrint(KNotsupported);
+		}
+	else if (err == KErrNotReady)
+		{
+		iLogger.Write(_L("Error, Videoplayer not yet created in the agent"));
+		}
+	}
+	
+void CMVSAppUi::GetCropRegionL(TRect& aCropRegion)
+	{
+	TRAPD(err, iVideoPlayAgent->GetCropRegionL(aCropRegion));
+	if (err == KErrNotSupported)
+		{
+		User::InfoPrint(KNotsupported);
+		}
+	else if (err == KErrNotReady)
+		{
+		iLogger.Write(_L("Error, Videoplayer not yet created in the agent"));
+		}
+	}
+
+void CMVSAppUi::SetVideoExtent(const TRect& aVideoExtent)
+	{
+	TRAPD(err, iVideoPlayAgent->SetVideoExtentL(aVideoExtent));
+    if (err != KErrNone)
+		{
+		TBuf<50> text;
+		text.AppendFormat(_L("SetVideoExtentL - %d"), err);
+		User::InfoPrint(text);
+		return;
+		}
+    iVideoExtentSet = ETrue;
+    iVideoExtent = aVideoExtent;       			
+	}
+
+void CMVSAppUi::SetWindowClippingRect(const TRect& aWindowClipRect)
+	{
+	TRAPD(err, iVideoPlayAgent->SetWindowClipRectL(aWindowClipRect));
+    if (err != KErrNone)
+		{
+		TBuf<50> text;
+		text.AppendFormat(_L("SetWindowClippingRectL - %d"), err);
+		User::InfoPrint(text);
+		return;
+		}
+    
+    iWindowClipRectSet = ETrue;
+    iWindowClipRect = aWindowClipRect;                   			
+	}
+	
+void CMVSAppUi::SetOverlayTextL(const TDesC& aOverlayText)
+	{
+	iOverlayText.Close();
+	iOverlayText.CreateL(aOverlayText);	
+	
+	iAppView->iMainWindowControl->SetOverlayTextL(aOverlayText);
+	}
+
+const TDesC& CMVSAppUi::OverlayText() const
+	{
+	return iOverlayText;
+	}
+
+void CMVSAppUi::SetAutoScaleL(TAutoScaleType aScaleType, TInt aHorizPos, TInt aVertPos)
+	{
+	iVideoPlayAgent->SetAutoScaleL(aScaleType, aHorizPos, aVertPos);
+	iAutoScaleType = aScaleType;
+	iAutoScaleHorizPos = aHorizPos;
+	iAutoScaleVertPos = aVertPos;
+	}
+
+void CMVSAppUi::GetAutoScale(TAutoScaleType& aScaleType, TInt& aHorizPos, TInt& aVertPos)
+	{
+	aScaleType = iAutoScaleType;
+	aHorizPos = iAutoScaleHorizPos;
+	aVertPos = iAutoScaleVertPos;
+	}
+
+void CMVSAppUi::SetOutputScreen(TInt aScreenNumber)
+	{
+	iScreenNumber = aScreenNumber;
+	}
+	
+void CMVSAppUi::RegisterForNotification(TBool aRegistered)
+	{
+	if(iRegistered)
+		{
+		iAlreadyRegistered = ETrue;	
+		}
+	iRegistered = aRegistered;
+    if(iMode == EVideoPlay)
+		{
+		if(iRegistered && iAlreadyRegistered == EFalse)
+			{
+			TInt regerr = iVideoPlayAgent->RegisterForNotification();	
+			if(regerr == KErrNone)
+				{
+				User::InfoPrint(KRegisterSuccess);
+				}
+			else
+				{
+				User::InfoPrint(KRegisterFailure);	
+				}
+			}
+		else if(iAlreadyRegistered && iRegistered == EFalse)
+			{
+			TInt cancelerr = iVideoPlayAgent->CancelNotification();
+			if(cancelerr == KErrNone)
+				{
+				iAlreadyRegistered = EFalse;	
+				User::InfoPrint(KRegisterCancelation);
+				}
+			else
+				{
+				User::InfoPrint(KCancelationFailure);	
+				}
+			}		
+		}
+	else if(iMode == EAudioPlay && iRegistered)
+		{
+		}
+	}
+
+void CMVSAppUi::SetPip(TBool aPip)
+	{
+	iPip = aPip;
+	}
+
+void CMVSAppUi::SetCrp(TBool aCrp)
+	{
+	iCrp = aCrp;
+	}
+/*
+UpdteDisplay(....)
+Used to populate all the view windows,based
+on the arguments passed this includes updating the time bar,the file name
+and the state of the app.
+*/
+void CMVSAppUi::UpdateDisplayL(TMVSState aState)
+	{
+    TBuf<KTimeValueLength> disTime;
+    TFileName disFName;
+    TBuf<32> disState;
+    disTime.Append(iDisplayTime);
+    disFName.Append(iDisplayFName);
+    disState.Append(iDisplayState);
+
+    iDisplayFName.Zero();
+    iDisplayState.Zero();
+    iDisplayTime.Zero();
+     
+    switch(aState)
+    	{
+        case(ENotReady):
+        	iCoeEnv->ReadResourceL(iDisplayFName, R_NOFILE);
+            iCoeEnv->ReadResourceL(iDisplayState, R_IDLE);
+            iCoeEnv->ReadResourceL(iDisplayTime, R_ZEROTIME);
+            break;
+        case(EAudioOpened):
+        case(EVideoOpened):    
+          	if(iMode == EAudioPlay || iMode == EVideoPlay)
+          		{
+          	   	iDisplayFName.Append(iSrcFName);
+          	   	}
+           	if(iMode == EAudioRecord || iMode == EVideoRecord)
+           	   	{
+           	   	iDisplayFName.Append(iRecFName);
+           	   	}
+          	iCoeEnv->ReadResourceL(iDisplayState, R_OPEN);
+       	    break;
+          	   
+        case(EAudioStopped):
+        case(EVideoStopped):
+            if(iMode == EAudioPlay || iMode == EVideoPlay)
+            	{
+            	iDisplayFName.Append(iSrcFName);
+               	} 
+            if(iMode == EAudioRecord || iMode == EVideoRecord)
+               	{
+               	iDisplayFName.Append(iRecFName);
+               	}
+			iCoeEnv->ReadResourceL(iDisplayState, R_READY);
+            break;
+
+        case(EAudioPlaying):
+        case(EVideoPlaying):
+            if(iMode == EAudioPlay || iMode == EVideoPlay)
+            	{
+               	iDisplayFName.Append(iSrcFName);
+               	} 
+            if(iMode == EAudioRecord || iMode == EVideoRecord)
+               	{
+               	iDisplayFName.Append(iRecFName);
+               	}
+            iCoeEnv->ReadResourceL(iDisplayState, R_PLAYING);
+            break;
+
+        case(EAudioRecording):
+            iDisplayFName.Append(iRecFName);
+            iCoeEnv->ReadResourceL(iDisplayState, R_RECORDING);
+            ConvertTimeToDes(iAudioRecordAgent->Position(), iDisplayTime);
+            break;
+            
+        case(EVideoRecording):
+        	iDisplayFName.Append(iRecFName);
+            iCoeEnv->ReadResourceL(iDisplayState, R_RECORDING);
+            ConvertTimeToDes(iVideoRecordAgent->DurationL(), iDisplayTime);
+            break;
+
+        case(EAudioPaused):
+        case(EVideoPaused):
+            if(iMode == EAudioPlay || iMode == EVideoPlay)
+            	{
+               	iDisplayFName.Append(iSrcFName);
+               	} 
+            if(iMode == EAudioRecord || iMode == EVideoRecord)
+               	{
+               	iDisplayFName.Append(iRecFName);
+               	}
+            iCoeEnv->ReadResourceL(iDisplayState, R_PAUSED);
+            break;
+          
+        default:
+            iCoeEnv->ReadResourceL(iDisplayFName, R_NOFILE);
+            iCoeEnv->ReadResourceL(iDisplayState, R_IDLE);
+            iCoeEnv->ReadResourceL(iDisplayTime, R_ZEROTIME);
+            break;
+        }
+     
+    	if (iMode == EVideoPlay)
+    		{
+    		if (aState != EVideoPlaying && iVideoPlayAgent->SupportVideoPlayerUtility2() && iDisplayAdded)
+    			{
+    			iVideoCtl->Pip().Clear();
+    			PrepareVideoControlsL();
+       			}
+    		}    		
+    
+     PopulateInfoWindowDataL(aState);
+
+     if(disFName.CompareF(iDisplayFName) != 0)
+     	{
+        iAppView->iStatusWindowFNameControl->SetTextL(iDisplayFName);
+        iAppView->iStatusWindowFNameControl->DrawNow();
+        }
+     if(disTime.CompareF(iDisplayTime) != 0)
+     	{
+        iAppView->iStatusWindowTimeControl->SetTextL(iDisplayTime);
+        iAppView->iStatusWindowTimeControl->DrawNow();
+        }
+     if(disState.CompareF(iDisplayState) != 0)
+        {
+        iAppView->iStatusWindowStateControl->SetTextL(iDisplayState);
+        iAppView->iStatusWindowStateControl->DrawNow();
+        }
+     
+     TBuf<256> dollarDes;
+     BuildDollarDesFromArrayL(dollarDes);
+     if(iDollarDes.CompareF(dollarDes) != 0)
+        {
+        iDollarDes.Zero();
+        iDollarDes.Append(dollarDes);
+        iAppView->iInfoWindowControl->SetTextL(dollarDes);
+        iAppView->iInfoWindowControl->DrawNow();
+        }
+     }
+     
+
+
+//
+//PopulateMainWindowData(...)         ***TRAPPED ERRORS***
+//
+// Adds data to the array used to hold playback or recording data
+// such as the volume, cropping window and balance. This is then used to
+// build a $$-separated descriptor which is sent to the view to be
+// displayed as lines of text within the main window.
+//
+void CMVSAppUi::PopulateInfoWindowDataL(TMVSState aState)
+	{
+    TInt balance;
+    TBuf<256> infoBuf;
+    TBuf<75> welcome;
+    iCoeEnv->ReadResourceL(welcome, R_WELCOME);
+
+    TBuf<32> format;
+    iCoeEnv->ReadResourceL(format, R_FORMAT);
+    
+    TBuf<10> left;
+    iCoeEnv->ReadResourceL(left, R_LEFT);
+
+    TBuf<10> right;
+    iCoeEnv->ReadResourceL(right, R_RIGHT);
+
+    TBuf<1> close;
+    iCoeEnv->ReadResourceL(close, R_CLOSE);
+
+    TBuf<56> noCrop;
+    iCoeEnv->ReadResourceL(noCrop, R_NOCROP);
+     
+    TBuf<KLabelCaptionMaxLength> center;
+    iCoeEnv->ReadResourceL(center, R_CENTER);
+
+    TBuf<KLabelCaptionMaxLength> volume;
+    iCoeEnv->ReadResourceL(volume, R_VOLUME);
+
+    TBuf<KLabelCaptionMaxLength> ramp;
+    iCoeEnv->ReadResourceL(ramp, R_RAMP);
+
+    TBuf<KLabelCaptionMaxLength> balanceDes;
+    iCoeEnv->ReadResourceL(balanceDes, R_BALANCE);
+
+    TBuf<KLabelCaptionMaxLength> cropStart;
+    iCoeEnv->ReadResourceL(cropStart, R_CROPSTART);
+
+    TBuf<KLabelCaptionMaxLength> cropEnd;
+    iCoeEnv->ReadResourceL(cropEnd, R_CROPEND);
+
+    TBuf<KLabelCaptionMaxLength> noRepeats;
+    iCoeEnv->ReadResourceL(noRepeats, R_NOREPEATS);
+
+    TBuf<32> audioPriority;
+    iCoeEnv->ReadResourceL(audioPriority, R_AUDIOPRIORITY);
+
+    TBuf<KLabelCaptionMaxLength> gain;
+    iCoeEnv->ReadResourceL(gain, R_GAIN);
+
+    TBuf<KLabelCaptionMaxLength> clipLength;
+    iCoeEnv->ReadResourceL(clipLength, R_CLIPLENGTH);
+    
+    TBuf<KLabelCaptionMaxLength> bitRate;
+    iCoeEnv->ReadResourceL(bitRate, R_BITRATE);
+    
+    TBuf<KLabelCaptionMaxLength> sampleRate;
+    iCoeEnv->ReadResourceL(sampleRate, R_SAMPLERATE);
+    
+    TBuf<KLabelCaptionMaxLength> channels;
+    iCoeEnv->ReadResourceL(channels,R_CHANNELS);
+    
+    TBuf<KLabelCaptionMaxLength> AudioEnabled;
+    iCoeEnv->ReadResourceL(AudioEnabled, R_AUDIOENABLED);
+    
+    TBuf<KLabelCaptionMaxLength> AudioNotEnabled;
+    iCoeEnv->ReadResourceL(AudioNotEnabled, R_AUDIONOTENABLED);
+
+    _LIT(KPercent, "%");
+
+    TBuf<KTimeValueLength> clipLengthDes;
+
+    //If the window text has anything in it, clear it out
+    if(iMainWindowText.Count() > 0)
+    	{
+        iMainWindowText.Reset();
+        }
+    TTimeIntervalMicroSeconds duration;
+    TInt64 clipLengthVal =0;
+    TUint bitrateValue = 0;
+    TInt frameHeight = 0;
+    TInt frameWidth = 0;
+    TInt frameRate = 0;
+    //Populate the array based on the current state
+    switch(aState)
+    	{
+        //Idle, the main window is all but empty
+        case(ENotReady):
+        	iMainWindowText.AppendL(welcome);
+           	if(iButtons->IsCommandDimmed(EMVSCmdPause))
+         		{
+         		iButtons->DimCommand(EMVSCmdPause,EFalse);
+         		iButtons->DrawNow();	
+         		}
+         	if(iButtons->IsCommandDimmed(EMVSCmdPlay))
+         		{
+         		iButtons->DimCommand(EMVSCmdPlay,EFalse);
+         		iButtons->DrawNow();	
+         		}
+         	if(iButtons->IsCommandDimmed(EMVSCmdStop))
+         		{
+         		iButtons->DimCommand(EMVSCmdStop,EFalse);
+         		iButtons->DrawNow();	
+         		}	
+           	break;
+
+        //Recording: show the gain, balance and crop window.
+        case(EAudioRecording):
+            if(iButtons->IsCommandDimmed(EMVSCmdStop))
+            	{
+            	iButtons->DimCommand(EMVSCmdStop,EFalse);
+				iButtons->DrawNow();	
+           	 	}
+            infoBuf.Append(KAudioRecording);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(gain);
+  			infoBuf.AppendNum(iVolumeOrGain);
+  			infoBuf.Append(KPercent);
+  			iMainWindowText.AppendL(infoBuf);
+  			infoBuf.Zero();
+            infoBuf.Append(balanceDes);
+            //Convert the balance to a number between 0 and 100
+            iAudioRecordAgent->GetRecordBalance(iBalance);
+            balance = (iBalance/2) + 50;
+            //Translate this figure into 'Left', 'Right' or 'Center'
+            if(balance < 50)
+            	{
+                infoBuf.Append(left);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }
+            else if(balance == 50)
+                {
+                infoBuf.Append(center);
+                }
+            else
+                {
+                infoBuf.Append(right);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }
+  			iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(bitRate);
+            if(iBitRate == 0)
+            	{
+            	infoBuf.Append(KNotSupported);
+            	}
+            else
+	            {
+	            infoBuf.AppendNum(iBitRate);	
+	            }        
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(sampleRate);
+            infoBuf.AppendNum(iSampleRate);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            if(iChannels == 1)
+            	{
+            	infoBuf.Append(channels);
+            	infoBuf.Append(KMono);
+            	iMainWindowText.AppendL(infoBuf);
+            	infoBuf.Zero();
+            	}
+            else if(iChannels == 2)
+            	{
+            	infoBuf.Append(channels);
+            	infoBuf.Append(KStereo);
+            	iMainWindowText.AppendL(infoBuf);
+            	infoBuf.Zero();
+            	}
+            break;
+        
+        case(EVideoRecording):
+            if(iButtons->IsCommandDimmed(EMVSCmdStop))
+            	{
+            	iButtons->DimCommand(EMVSCmdStop,EFalse);
+				iButtons->DrawNow();	
+           	 	}
+            infoBuf.Append(KVideoRecording);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();	
+            if(iVideoRecordAgent->AudioEnabledL())
+  					{
+  					infoBuf.Zero();
+  					infoBuf.Append(AudioEnabled);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					infoBuf.Append(gain);
+  					infoBuf.AppendNum(iVolumeOrGain);
+  					infoBuf.Append(KPercent);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					}
+  				else
+  					{
+  					infoBuf.Zero();
+  					infoBuf.Append(AudioNotEnabled);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					}
+  			infoBuf.Append(KFrameSize);
+            frameHeight = iFrameSize.iHeight;
+            frameWidth = iFrameSize.iWidth;
+            infoBuf.AppendNum(frameWidth);
+            infoBuf.Append(KComma);
+            infoBuf.AppendNum(frameHeight);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(KFrameRate);
+            frameRate = TInt(iVideoFrameRate);
+            infoBuf.AppendNum(frameRate);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            break;
+ 
+        //The default state displays all playback information such as
+        //Volume, balance, cropping points, audio priority & the number of
+        //repeats.
+    	case(EAudioOpened):
+    		if(iMode == EAudioPlay)
+    			{
+    			infoBuf.Append(volume);	
+    			}
+    		if(iMode == EAudioRecord)
+    			{
+    			infoBuf.Append(KGain);
+    			}
+            infoBuf.AppendNum(iVolumeOrGain);
+            infoBuf.Append(KPercent);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(balanceDes);
+            balance = (iBalance/2) + 50;
+            if(balance < 50)
+            	{
+                infoBuf.Append(left);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }
+            else if(balance == 50)
+                {
+                infoBuf.Append(center);
+                }
+            else
+                {
+                infoBuf.Append(right);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }          
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(noRepeats);
+            infoBuf.AppendNum(iNoRepeats);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            //Audio Priority
+            infoBuf.Append(audioPriority);
+            infoBuf.AppendNum(iPriority);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(KDuration);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	duration = iAudioPlayAgent->Duration();	
+  		    	}
+  		    else if(iMode == EAudioRecord)
+  		    	{
+  		    	duration = iAudioRecordAgent->Duration();
+  		    	if(duration > 0)
+	  		    	{
+	  		    	iButtons->DimCommand(EMVSCmdPlay,EFalse);	
+	  		    	}
+  		    	else
+  		    		{
+  		    		iButtons->DimCommand(EMVSCmdPlay,ETrue);	
+  		    		}
+  		    	iButtons->DimCommand(EMVSCmdPause,ETrue);
+  		    	iButtons->DimCommand(EMVSCmdStop,ETrue);
+				iButtons->DrawNow();
+  		    	}
+  		    clipLengthVal = duration.Int64();
+  		    infoBuf.AppendNum(clipLengthVal);
+  		    infoBuf.Append(KMs);
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+  		    infoBuf.Append(KBitRate);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	iAudioPlayAgent->GetBitRate(bitrateValue);	
+  		    	infoBuf.AppendNum(bitrateValue);
+  		    	}
+  		    else if(iMode == EAudioRecord)
+	  		    {
+  		    	if(iBitRate == 0)
+		  		    {
+		  		    infoBuf.Append(KNotSupported);
+		  		    }
+	  		    else
+		  		    {
+		  		    infoBuf.AppendNum(iBitRate);	
+		  		    }
+	  		    }
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+            break;
+    	
+    	case(EAudioStopped):
+            infoBuf.Append(KStopped);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+    	    infoBuf.Append(volume);
+            infoBuf.AppendNum(iVolumeOrGain);
+            infoBuf.Append(KPercent);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(balanceDes);
+            balance = (iBalance/2) + 50;
+            if(balance < 50)
+            	{
+                infoBuf.Append(left);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }
+            else if(balance == 50)
+                {
+                infoBuf.Append(center);
+                }
+            else
+                {
+                infoBuf.Append(right);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }          
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(noRepeats);
+            infoBuf.AppendNum(iNoRepeats);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            //Audio Priority
+            infoBuf.Append(audioPriority);
+            infoBuf.AppendNum(iPriority);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(KDuration);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	duration = iAudioPlayAgent->Duration();	
+  		    	}
+  		    else if(iMode == EAudioRecord)
+  		    	{
+  		    	duration = iAudioRecordAgent->Duration();
+  		    	}
+  		    clipLengthVal = duration.Int64();
+  		    infoBuf.AppendNum(clipLengthVal);
+  		    infoBuf.Append(KMs);
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+  		    infoBuf.Append(KBitRate);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	iAudioPlayAgent->GetBitRate(bitrateValue);	
+  		    	infoBuf.AppendNum(bitrateValue);
+  		    	}
+  		    else if(iMode == EAudioRecord)
+	  		    {
+  		    	if(iBitRate == 0)
+		  		    {
+		  		    infoBuf.Append(KNotSupported);
+		  		    }
+	  		    else
+		  		    {
+		  		    infoBuf.AppendNum(iBitRate);	
+		  		    }
+	  		    }
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+            break;
+            
+        case(EAudioPlaying):
+            infoBuf.Append(KAudioPlaying);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(volume);
+            infoBuf.AppendNum(iVolumeOrGain);
+            infoBuf.Append(KPercent);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(balanceDes);
+            balance = (iBalance/2) + 50;
+            if(balance < 50)
+            	{
+                infoBuf.Append(left);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }
+            else if(balance == 50)
+                {
+                infoBuf.Append(center);
+                }
+            else
+                {
+                infoBuf.Append(right);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }          
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(noRepeats);
+            infoBuf.AppendNum(iNoRepeats);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            //Audio Priority
+            infoBuf.Append(audioPriority);
+            infoBuf.AppendNum(iPriority);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(KDuration);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	duration = iAudioPlayAgent->Duration();	
+  		    	}
+  		    else if(iMode == EAudioRecord)
+  		    	{
+  		    	duration = iAudioRecordAgent->Duration();
+  		    	}
+  		    clipLengthVal = duration.Int64();
+  		    infoBuf.AppendNum(clipLengthVal);
+  		    infoBuf.Append(KMs);
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+  		    infoBuf.Append(KBitRate);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	iAudioPlayAgent->GetBitRate(bitrateValue);	
+  		    	infoBuf.AppendNum(bitrateValue);
+  		    	}
+  		    else if(iMode == EAudioRecord)
+	  		    {
+  		    	if(iBitRate == 0)
+		  		    {
+		  		    infoBuf.Append(KNotSupported);
+		  		    }
+	  		    else
+		  		    {
+		  		    infoBuf.AppendNum(iBitRate);	
+		  		    }
+	  		    }
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+            break;    
+    	
+    	case(EAudioPaused):
+            infoBuf.Append(KPaused);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+    	    infoBuf.Append(volume);
+            infoBuf.AppendNum(iVolumeOrGain);
+            infoBuf.Append(KPercent);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(balanceDes);
+            balance = (iBalance/2) + 50;
+            if(balance < 50)
+            	{
+                infoBuf.Append(left);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }
+            else if(balance == 50)
+                {
+                infoBuf.Append(center);
+                }
+            else
+                {
+                infoBuf.Append(right);
+                infoBuf.AppendNum(balance);
+                infoBuf.Append(close);
+                }          
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(noRepeats);
+            infoBuf.AppendNum(iNoRepeats);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            //Audio Priority
+            infoBuf.Append(audioPriority);
+            infoBuf.AppendNum(iPriority);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            infoBuf.Append(KDuration);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	duration = iAudioPlayAgent->Duration();	
+  		    	}
+  		    else if(iMode == EAudioRecord)
+  		    	{
+  		    	duration = iAudioRecordAgent->Duration();
+  		    	}
+  		    clipLengthVal = duration.Int64();
+  		    infoBuf.AppendNum(clipLengthVal);
+  		    infoBuf.Append(KMs);
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+  		    infoBuf.Append(KBitRate);
+  		    if(iMode == EAudioPlay)
+  		    	{
+  		    	iAudioPlayAgent->GetBitRate(bitrateValue);	
+  		    	infoBuf.AppendNum(bitrateValue);
+  		    	}
+  		    else if(iMode == EAudioRecord)
+	  		    {
+  		    	if(iBitRate == 0)
+		  		    {
+		  		    infoBuf.Append(KNotSupported);
+		  		    }
+	  		    else
+		  		    {
+		  		    infoBuf.AppendNum(iBitRate);	
+		  		    }
+	  		    }
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+            break;
+    	
+    	case(EVideoOpened):
+  			if(iMode == EVideoPlay)
+  				{
+  				infoBuf.Append(KVideoOpened);
+            	iMainWindowText.AppendL(infoBuf);
+            	infoBuf.Zero();
+  				if(iVideoPlayAgent->AudioEnabledL())
+  					{
+  					infoBuf.Zero();
+  					infoBuf.Append(AudioEnabled);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					infoBuf.Append(volume);
+  					infoBuf.AppendNum(iVolumeOrGain);
+  					infoBuf.Append(KPercent);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					if(iButtons->IsCommandDimmed(EMVSCmdSetVolume))
+  						{
+  						iButtons->DimCommand(EMVSCmdSetVolume,EFalse);
+						iButtons->DrawNow();	
+  						}
+  					}
+  				else
+  					{
+  					infoBuf.Zero();
+  					infoBuf.Append(AudioNotEnabled);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					}
+  				infoBuf.Append(KDuration);
+  		    	duration = iVideoPlayAgent->DurationL();
+  		    	clipLengthVal = duration.Int64();
+  		    	infoBuf.AppendNum(clipLengthVal);
+  		    	iMainWindowText.AppendL(infoBuf);
+  		    	infoBuf.Zero();
+            	iVideoPlayAgent->VideoFrameSizeL(iFrameSize);
+            	frameHeight = iFrameSize.iHeight;
+            	frameWidth = iFrameSize.iWidth;
+            	infoBuf.Append(KFrameSize);
+            	infoBuf.AppendNum(frameWidth);
+            	infoBuf.Append(KComma);
+            	infoBuf.AppendNum(frameHeight);
+            	iMainWindowText.AppendL(infoBuf);
+            	infoBuf.Zero();
+            	iVideoFrameRate = GetVideoFrameRateL();
+            	}
+            else if(iMode == EVideoRecord)
+            	{
+            	iButtons->DimCommand(EMVSCmdPlay,ETrue);
+  		    	iButtons->DimCommand(EMVSCmdPause,ETrue);
+  		    	iButtons->DimCommand(EMVSCmdStop,ETrue);
+				iButtons->DrawNow();
+            	infoBuf.Append(KVideoOpenedForRecord);
+            	iMainWindowText.AppendL(infoBuf);
+            	if(iVideoRecordAgent->AudioEnabledL())
+  					{
+  					iButtons->DimCommand(EMVSCmdSetVolume, EFalse);
+	    			iButtons->DrawNow();
+  					infoBuf.Zero();
+  					infoBuf.Append(AudioEnabled);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					infoBuf.Append(gain);
+  					infoBuf.AppendNum(iVolumeOrGain);
+  					infoBuf.Append(KPercent);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					}
+  				else
+  					{
+  					infoBuf.Zero();
+  					infoBuf.Append(AudioNotEnabled);
+  					iMainWindowText.AppendL(infoBuf);
+  					infoBuf.Zero();
+  					}
+            	infoBuf.Append(KFrameSize);
+            	frameHeight =iFrameSize.iHeight;
+            	frameWidth =iFrameSize.iWidth;
+            	infoBuf.AppendNum(frameWidth);
+            	infoBuf.Append(KComma);
+            	infoBuf.AppendNum(frameHeight);
+            	iMainWindowText.AppendL(infoBuf);
+            	infoBuf.Zero();
+            	}
+            infoBuf.Zero();
+            infoBuf.Append(KFrameRate);
+            frameRate = TInt(iVideoFrameRate);
+            infoBuf.AppendNum(frameRate);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+            break;    	
+            	
+  		case(EVideoPlaying):
+    	    infoBuf.Append(KVideoPlaying);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+    	    if(	iVideoPlayAgent->AudioEnabledL())
+  				{
+  				infoBuf.Zero();
+  				infoBuf.Append(AudioEnabled);
+  				iMainWindowText.AppendL(infoBuf);
+  				infoBuf.Zero();
+  				infoBuf.Append(volume);
+  				infoBuf.AppendNum(iVolumeOrGain);
+  				infoBuf.Append(KPercent);
+  				iMainWindowText.AppendL(infoBuf);
+  				infoBuf.Zero();
+  				}
+  			else
+  				{
+  				infoBuf.Zero();
+  				infoBuf.Append(AudioNotEnabled);
+  				iMainWindowText.AppendL(infoBuf);
+  				infoBuf.Zero();
+  				}
+  			infoBuf.Append(KDuration);
+  		    duration = iVideoPlayAgent->DurationL();
+  		    clipLengthVal = duration.Int64();
+  		    infoBuf.AppendNum(clipLengthVal);
+  		    iMainWindowText.AppendL(infoBuf);
+  		    infoBuf.Zero();
+    	    iVideoPlayAgent->VideoFrameSizeL(iFrameSize);
+            frameHeight = iFrameSize.iHeight;
+            frameWidth = iFrameSize.iWidth;
+            infoBuf.Append(KFrameSize);
+            infoBuf.AppendNum(frameWidth);
+            infoBuf.Append(KComma);
+            infoBuf.AppendNum(frameHeight);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+    	    infoBuf.Append(KFrameRate);
+    	    iVideoFrameRate = GetVideoFrameRateL();
+            frameRate = TInt(iVideoFrameRate);
+            infoBuf.AppendNum(frameRate);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+    	    break;
+    	
+    	case(EVideoPaused):
+    	    infoBuf.Append(KPaused);
+            iMainWindowText.AppendL(infoBuf);
+            if(iMode == EVideoRecord)
+            	{
+            	if(iVideoRecordAgent->AudioEnabledL())	
+            		{
+            		infoBuf.Zero();
+	  				infoBuf.Append(AudioEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+            		}
+            	else
+            		{
+            		infoBuf.Zero();
+	  				infoBuf.Append(AudioNotEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+            		}
+            	infoBuf.Append(KDuration);
+	  		    duration = iVideoRecordAgent->DurationL();
+	  		    clipLengthVal = duration.Int64();
+	  		    infoBuf.AppendNum(clipLengthVal);
+	  		    iMainWindowText.AppendL(infoBuf);
+	  		    infoBuf.Zero();
+	    	    
+            	}
+            if(iMode == EVideoPlay)
+            	{
+	            if(iVideoPlayAgent->AudioEnabledL())
+	  				{
+	  				infoBuf.Zero();
+	  				infoBuf.Append(AudioEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				infoBuf.Append(volume);
+	  				infoBuf.AppendNum(iVolumeOrGain);
+	  				infoBuf.Append(KPercent);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				}
+	  			else
+	  				{
+	  				infoBuf.Zero();
+	  				infoBuf.Append(AudioNotEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				}
+	  			infoBuf.Append(KDuration);
+	  		    duration = iVideoPlayAgent->DurationL();
+	  		    clipLengthVal = duration.Int64();
+	  		    infoBuf.AppendNum(clipLengthVal);
+	  		    iMainWindowText.AppendL(infoBuf);
+	  		    infoBuf.Zero();
+	    	    iVideoPlayAgent->VideoFrameSizeL(iFrameSize);
+	            frameHeight = iFrameSize.iHeight;
+	            frameWidth = iFrameSize.iWidth;
+	            infoBuf.Append(KFrameSize);
+	            infoBuf.AppendNum(frameWidth);
+	            infoBuf.Append(KComma);
+	            infoBuf.AppendNum(frameHeight);
+	            iMainWindowText.AppendL(infoBuf);
+	            infoBuf.Zero();
+	    	    infoBuf.Append(KFrameRate);
+	            iVideoFrameRate = GetVideoFrameRateL();
+	            frameRate = TInt(iVideoFrameRate);
+	            infoBuf.AppendNum(frameRate);
+	            iMainWindowText.AppendL(infoBuf);
+	            infoBuf.Zero();
+            	}
+            break;
+    	    
+    	case(EVideoStopped):
+    	    infoBuf.Append(KStopped);
+            iMainWindowText.AppendL(infoBuf);
+            if(iMode == EVideoPlay)
+  				{
+	  			if(iVideoPlayAgent->AudioEnabledL())
+	  				{
+	  				infoBuf.Zero();
+	  				infoBuf.Append(AudioEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				infoBuf.Append(volume);
+	  				infoBuf.AppendNum(iVolumeOrGain);
+	  				infoBuf.Append(KPercent);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				}
+	  			else
+	  				{
+	  				infoBuf.Zero();
+	  				infoBuf.Append(AudioNotEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				}	
+	  			infoBuf.Append(KDuration);
+  		    	duration = iVideoPlayAgent->DurationL();
+  		    	clipLengthVal = duration.Int64();
+  		    	infoBuf.AppendNum(clipLengthVal);
+  		    	iMainWindowText.AppendL(infoBuf);
+  		    	infoBuf.Zero();
+	  			iVideoPlayAgent->VideoFrameSizeL(iFrameSize);
+            	frameHeight = iFrameSize.iHeight;
+            	frameWidth = iFrameSize.iWidth;
+            	infoBuf.Append(KFrameSize);
+            	infoBuf.AppendNum(frameWidth);
+            	infoBuf.Append(KComma);
+            	infoBuf.AppendNum(frameHeight);
+            	iMainWindowText.AppendL(infoBuf);
+            	infoBuf.Zero();
+	  			iVideoFrameRate = GetVideoFrameRateL();
+	  			}
+  			else if(iMode == EVideoRecord)
+  				{
+  				if(iVideoRecordAgent->AudioEnabledL())
+	  				{
+	  				infoBuf.Zero();
+	  				infoBuf.Append(AudioEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				infoBuf.Append(gain);
+	  				infoBuf.AppendNum(iVolumeOrGain);
+	  				infoBuf.Append(KPercent);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				}
+	  			else
+	  				{
+	  				infoBuf.Zero();
+	  				infoBuf.Append(AudioNotEnabled);
+	  				iMainWindowText.AppendL(infoBuf);
+	  				infoBuf.Zero();
+	  				}
+	  			infoBuf.Zero();	
+  				infoBuf.Append(KDuration);
+  		    	duration = iVideoRecordAgent->DurationL();
+  		    	clipLengthVal = duration.Int64();
+  		    	infoBuf.AppendNum(clipLengthVal);
+  		    	iMainWindowText.AppendL(infoBuf);
+  		    	infoBuf.Zero();
+  				infoBuf.Append(KFrameSize);
+            	frameHeight =iFrameSize.iHeight;
+            	frameWidth =iFrameSize.iWidth;
+            	infoBuf.AppendNum(frameWidth);
+            	infoBuf.Append(KComma);
+            	infoBuf.AppendNum(frameHeight);
+            	iMainWindowText.AppendL(infoBuf);
+            	infoBuf.Zero();
+  				}
+  			infoBuf.Zero();
+            infoBuf.Append(KFrameRate);
+            frameRate = TInt(iVideoFrameRate);
+            infoBuf.AppendNum(frameRate);
+            iMainWindowText.AppendL(infoBuf);
+            infoBuf.Zero();
+  			break;
+        }
+        TInt clipLen = I64INT(clipLengthVal);
+        iAppView->SetClipLength(clipLen);
+    }
+
+void CMVSAppUi::BuildDollarDesFromArrayL(TDes& aDollarDes)
+	{
+    //take the CDesCArrayFlat and build a dollar separated descriptor
+    TInt counter;
+    TBuf<2> dollar;
+    for(counter = 0; counter < iMainWindowText.Count(); ++counter)
+    	{
+        aDollarDes.Append(iMainWindowText[counter]);
+        iCoeEnv->ReadResourceL(dollar, R_DOLLARDOLLAR);
+        aDollarDes.Append(dollar);
+        }
+    return;
+    }
+
+//
+//ConvertTimeToDes(...)
+//
+// Converts the time to a  descriptor for display purposes. The display is
+// in the format HH:MM:SS:SS.
+//
+void CMVSAppUi::ConvertTimeToDes(TTimeIntervalMicroSeconds aPosition,
+                                         TDes& aDes)
+	{
+    _LIT(KColon, ":");
+    _LIT(KZeroDes, "0");
+    RArray<TInt> addZero; //array to record whether we need to append a '0'
+                          //to each value in the times array.
+    RArray<TInt> times;   //The array of times, stored hour, minute, second...
+    
+    TInt64 milliseconds = I64INT(aPosition.Int64())/1000;
+    TInt seconds = milliseconds/1000;
+    milliseconds = milliseconds - (seconds * 1000);
+    
+    TInt hundreds = milliseconds/10; //hundreds of seconds
+
+    TInt minutes = seconds/60;
+    seconds = seconds - minutes*60; //seconds
+
+    TInt hours = minutes/60; //hours
+    minutes = minutes - hours*60; //minutes
+
+    times.Append(hours);
+    times.Append(minutes);
+    times.Append(seconds);
+    times.Append(hundreds); //fill the array
+
+    TBuf<256> timeDes; //descriptor holding each element of the times array
+                     //in turn.
+
+    TInt counter = 0; //counter
+    for(counter = 0; counter < 4; ++counter) 
+    	{
+        timeDes.Zero();
+        timeDes.AppendNum(times[counter]);
+     
+        if(timeDes.Length() == 1)
+        	{
+            //If the time value is a single digit, we need to add a '0'
+            addZero.Append(1);
+            }
+        else
+            {
+            //Otherwise, we do not.
+            addZero.Append(0);
+            }
+        }
+
+    //Add zeros where required.
+    if(addZero[0])
+    	aDes.Append(KZeroDes);
+    aDes.AppendNum(hours);
+    aDes.Append(KColon);
+    if(addZero[1])
+    	aDes.Append(KZeroDes);
+    aDes.AppendNum(minutes);
+    aDes.Append(KColon);
+    if(addZero[2])
+    	aDes.Append(KZeroDes);
+    aDes.AppendNum(seconds);
+    aDes.Append(KColon);
+    if(addZero[3])
+    	aDes.Append(KZeroDes);
+    aDes.AppendNum(hundreds);
+
+    //Close the RArrays and return
+    addZero.Close();
+    times.Close();
+    return;
+    }
+
+//
+//UpdatePositionViewL()
+//
+// Updates the view if the state is recording or playing. Otherwise, this is
+// unnecessary.
+//
+void CMVSAppUi::UpdatePositionViewL()
+	{
+	TBuf<64> dispStr1;
+	TBuf<256> temp;
+	TInt64 currentposition = 0;
+    if(iState == EAudioRecording || iState == EAudioPlaying || iState == EVideoRecording 
+       || iState == EVideoPlaying || iState == EAudioPaused || iState == EVideoPaused 
+       || iState == EVideoStopped || iState == EAudioStopped)
+    	{
+        iDisplayTime.Zero();
+        if(iMode==EAudioRecord)
+        	{
+        	TBuf<64> dispStr2;
+        	TBuf<32> recTimeLeft;
+        	TTimeIntervalMicroSeconds timeLeft = iAudioRecordAgent->RecordTimeAvailable();
+        	if(iRecordLimitSet && iState == EAudioRecording)
+        		{
+        		ConvertTimeToDes(timeLeft, recTimeLeft);
+	        	dispStr2.Copy(_L("Time Left:"));
+	        	dispStr2.Append(recTimeLeft);
+	        	iAppView->iStatusWindowTimeControl->SetText2L(dispStr2);
+	        	dispStr1.Copy(_L("Rec. Time:"));	
+        		}
+        	}
+        if(iMode==EAudioRecord && iState==EAudioRecording)
+	    	{
+	        iClipLength = iAudioRecordAgent->Duration();
+	        iTimeElapsed = iAudioRecordAgent->Position();
+	        TInt64 duration = iClipLength.Int64();
+	        TInt64 position = iTimeElapsed.Int64();
+	        currentposition = duration + position;
+	        iTimeElapsed = TTimeIntervalMicroSeconds(currentposition);
+	        }
+	    else if(iMode==EAudioRecord && iState==EAudioPlaying)
+	    	{
+	    	iTimeElapsed=iAudioRecordAgent->Position();
+	    	iAppView->UpdatePlayProgress(iTimeElapsed);
+	    	}
+		else if(iMode==EAudioPlay)
+			{
+		   	iAudioPlayAgent->GetPosition(iTimeElapsed);	
+		   	iAppView->UpdatePlayProgress(iTimeElapsed);
+		  	}
+		else if(iMode==EVideoPlay)
+			{
+			iTimeElapsed = iVideoPlayAgent->PositionL();
+			}
+		else if(iMode==EVideoRecord)
+			{
+			iTimeElapsed = iVideoRecordAgent->DurationL();
+			}
+		temp.AppendNum(currentposition);
+		
+        ConvertTimeToDes(iTimeElapsed, iDisplayTime);
+        dispStr1.Append(iDisplayTime);
+        iAppView->iStatusWindowTimeControl->SetTextL(dispStr1);
+        iAppView->iStatusWindowTimeControl->DrawNow();
+        }
+    }
+
+
+void CMVSAppUi::SetMaxFileSize(TInt& aVal)
+	{
+	if(aVal>0)
+		{
+		iRecordLimitSet = ETrue;
+		iAudioRecordAgent->SetMaxWriteLength(aVal);
+		}
+	else
+		{
+		iRecordLimitSet = EFalse;
+		iAudioRecordAgent->SetMaxWriteLength(aVal);
+		TRAP_IGNORE(iAppView->iStatusWindowTimeControl->ResetText2L());
+		}
+	}
+
+//Handling the errors and logging it to the 
+//log file
+void CMVSAppUi::LogErrors(TInt aError)
+	{
+	TBuf<KErrorTextLength> erorrDes;
+	CEikonEnv::Static()->GetErrorText(erorrDes,aError);
+	CEikonEnv::Static()->AlertWin(erorrDes);
+	iLogger.Write(erorrDes);	 
+	}
+	
+
+void CMVSAppUi::DetermineFinalFNameL()
+     {
+     //check whether the extension and the controller 
+     //has been selected or not.If not selected proceed
+     //to the next dialog, nothing to be appended here to 
+     //the filename.Else append the selected extension to
+     //the filename.
+     if(iSelectedPluginIdx == KControllerNotSelected)
+     	{
+     	iProceed = ETrue;
+     	}
+     TFileName givenExt;
+     TParsePtr parser(iDestFilename);
+     TPtrC extensionval = parser.Ext();
+     if(extensionval.Length() == 0)
+     	{
+        iDestFilename.Append(iControllerExt);
+        iProceed = ETrue;
+        return;
+        }
+     else
+     	{
+        //If the extension is too long, report an error.
+        if(extensionval.Length() > 4)
+        	{
+            _LIT(KExtTooLong, "Extension TOO long");
+            User::InfoPrint(KExtTooLong);
+            iProceed = EFalse;
+            }
+
+        //Otherwise record the extension given in the filename
+        if(extensionval.CompareF(iControllerExt)==0)
+        	{
+            iProceed = ETrue;
+            return;
+            }
+
+        //Otherwise, append the right extension to the filename and return.
+        else
+          	{
+            _LIT(KWrongExt, "Wrong Extension");
+            _LIT(KWrongExtBody, "Extension mismatch,Please re-enter");
+            CEikonEnv::Static()->InfoWinL(KWrongExt, KWrongExtBody);
+            SaveAsDialogL();
+            iProceed = EFalse;
+            }
+        }
+     }
+
+TPoint CMVSAppUi::DrawBorders(const TSize& aSize) const
+	{
+	CWindowGc& gc = iAppView->iMainWindowControl->SystemGc();
+	gc.Activate(iAppView->iMainWindowControl->ControlWindow());
+	TRect rect(iAppView->iMainWindowControl->Size());
+	TPoint pos( rect.iTl.iX + rect.Width()/2 - aSize.iWidth/2,
+				rect.iTl.iY + rect.Height()/2 - aSize.iHeight/2);
+	TRect drawRect(pos,aSize);
+	gc.SetPenColor(KRgbBlack);
+	drawRect.Grow(1,1);
+	gc.DrawRect(drawRect);
+	gc.Deactivate();
+	iAppView->iMainWindowControl->ControlEnv()->WsSession().Flush();
+	return pos;
+	}
+	
+void CMVSAppUi::StopViewFinder()
+	{
+	if(!iVideoRecordAgent)
+		{
+		return;			
+		}
+	CCamera *camera = iVideoRecordAgent->Camera();
+	if (camera->ViewFinderActive())
+		{
+		camera->StopViewFinder();
+		iAppView->iMainWindowControl->DrawNow();
+		}
+	}