mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSSelectPluginsDialog.cpp
changeset 0 40261b775718
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSSelectPluginsDialog.cpp	Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,226 @@
+// 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 "MVSSelectPluginsDialog.h"
+#include "MVSApp.hrh"
+#include <techview/eikmfne.h>
+#include <coecntrl.h>
+#include "MVSConstants.h"
+
+#include <techview/eikhopbt.h>
+
+
+
+void CMVSSelectPluginsDialog::SetupDialogLD(CDesCArrayFlat* aPluginArray,
+		                     CDesCArrayFlat* aExtArray, CDesCArrayFlat* aCodecArray, 
+                               CMVSAppUi* aAppUi)
+	{
+     
+    CMVSSelectPluginsDialog* dialog = new (ELeave) CMVSSelectPluginsDialog(
+                                                       aPluginArray, 
+                                                       aExtArray, aCodecArray,
+                                                       aAppUi);
+     
+    CleanupStack::PushL(dialog); 
+    dialog->ConstructL(aCodecArray);
+    CleanupStack::Pop(dialog);
+    dialog->ExecuteLD(R_MVS_DIALOG_SELECTPLUGINS);
+    }
+
+
+
+void CMVSSelectPluginsDialog::ConstructL(CDesCArrayFlat* aCodecArray)
+    {
+    //Create new arrays
+    iExtArray = new(ELeave) CDesCArrayFlat(8);
+    iPluginArray = new(ELeave) CDesCArrayFlat(8);
+	iCodecArray = new(ELeave) CDesCArrayFlat(8);
+    iAppUi->GetExtensionListL(iExtArray,iMediaType);
+    iAppUi->GetPluginListL(0,iExtArray,iPluginArray,iMediaType);
+    for(TInt counter = 0; counter< aCodecArray->Count(); ++counter)
+    	{
+        iCodecArray->AppendL((*aCodecArray)[counter]);
+        }
+    }
+
+
+void CMVSSelectPluginsDialog::PreLayoutDynInitL()
+    {
+    CEikChoiceList* myPluginArray = static_cast<CEikChoiceList*>(Control(EMVSCmdSelectControllerPlugin));
+    CEikChoiceList* myExt = static_cast<CEikChoiceList*>(Control(EMVSCmdSelectFormat));
+    if(iExtArray->Count()==0)
+    	{
+		User::InfoPrint(KNotsupported);    	
+    	}
+    else
+    	{
+    	if(myPluginArray)
+			{
+			myPluginArray->SetArrayL(iPluginArray);
+    		myPluginArray->SetArrayExternalOwnership(ETrue);	
+			myPluginArray->SetObserver(this);
+			iPluginCtl =  myPluginArray; 
+			}
+    	if(myExt)
+    		{
+    		myExt->SetArrayL(iExtArray);
+    		myExt->SetArrayExternalOwnership(ETrue);	
+    		myExt->SetObserver(this); 
+    		iExtCtl = myExt;
+    		}	
+    	}
+    //Get a pointer to the Option Button List control
+    CEikHorOptionButtonList* pRadioGroup = static_cast<CEikHorOptionButtonList*>(Control(EMVSCmdSelectMediaType));
+    //set audio as the default button to be selected
+    if(pRadioGroup)
+    	{
+    	pRadioGroup->SetButtonById(EMVSHorOptButtonAudio);
+    	pRadioGroup->SetObserver(this);
+    	}
+    }
+
+	
+CMVSSelectPluginsDialog::CMVSSelectPluginsDialog(CDesCArrayFlat* aPluginArray,
+		                      CDesCArrayFlat* aExtArray, CDesCArrayFlat* aCodecArray,  
+                              CMVSAppUi* aAppUi)
+: iPluginArray(aPluginArray), iExtArray(aExtArray), iCodecArray(aCodecArray), iAppUi(aAppUi)
+    {     
+    iPluginCtl = 0;
+    iExtCtl = 0;
+    iMediaType = 0;
+    }
+
+
+TBool CMVSSelectPluginsDialog::OkToExitL(TInt aButtonId)
+	{
+    TInt indx = 0;
+    //button options are Next> and Cancel
+    if(aButtonId == EMVSButtonNext)
+    	{
+        //Get a downcasted pointer to the controls
+        CEikChoiceList* myPluginArray = static_cast<CEikChoiceList*>(Control(EMVSCmdSelectControllerPlugin));
+        CEikChoiceList* myExt = static_cast<CEikChoiceList*>(Control(EMVSCmdSelectFormat));
+		iExt.Zero(); //zero the buffer, and append the extension
+        if(myPluginArray && myExt)
+	        {
+	        CDesCArray *pDescArr = myExt->DesCArray();
+	        CDesCArray *pControllerArr = myPluginArray->DesCArray();
+	        if(pDescArr->MdcaCount() > 0)
+		    	{
+		        indx = myExt->CurrentItem();
+				iExt.Append((*iExtArray)[indx]);		  	          	
+		        } 
+		    indx = myPluginArray->CurrentItem();
+			iAppUi->SelectedExtension(iExt);
+		    iAppUi->SelectedPluginIdx(indx);
+		    iAppUi->SelectedMedia(iMediaType);	
+	        }
+        }
+    else if(aButtonId == EMVSButtonCancel)
+    	{
+    	//to indicate that a suitable controller has to be selected automatically
+    	//by the system based on the file name entered by the user.
+    	indx= KControllerNotSelected;
+    	iAppUi->SelectedPluginIdx(indx);
+    	}
+    return ETrue; //return
+    }
+
+
+void CMVSSelectPluginsDialog::HandleControlEventL(CCoeControl *aControl, TCoeEvent aEventType)
+	{
+	CEikDialog::HandleControlEventL(aControl,aEventType);
+	CEikChoiceList* myPluginArray = static_cast<CEikChoiceList*>(Control(EMVSCmdSelectControllerPlugin));
+	CEikChoiceList* myExt = static_cast<CEikChoiceList*>(Control(EMVSCmdSelectFormat));		
+	if(myPluginArray && myExt)
+		{
+		TInt8 idx  = iExtCtl->CurrentItem();
+		if(iExtCtl == aControl && aEventType == EEventStateChanged)
+			{
+			iPluginArray->Reset();
+			TInt8 temp = iAppUi->GetPluginListL(idx,iExtArray,iPluginArray,iMediaType);
+			TInt n = iPluginArray->Count();
+			myPluginArray->SetArrayL(iPluginArray);
+			myPluginArray->SetArrayExternalOwnership(ETrue);
+			myPluginArray->SetCurrentItem(0);
+			myPluginArray->DrawDeferred();
+			return;
+			}
+		
+		//Get a pointer to the Option Button List control
+	    CEikHorOptionButtonList* pRadioGroup = 
+	    	static_cast<CEikHorOptionButtonList*>(Control(EMVSCmdSelectMediaType)); 	
+	    if(pRadioGroup == aControl && aEventType == EEventStateChanged)
+	    	{
+	     	TInt nButtonId = pRadioGroup->LabeledButtonId();
+	     	if(nButtonId == EMVSHorOptButtonAudio) //if selected media - audio
+	     		{
+	     		iMediaType = 0;
+	     		}
+	     	else if(nButtonId == EMVSHorOptButtonVideo) //if selected media - video
+	     		{
+	     		iMediaType = 1;
+	     		}
+	       	iPluginArray->Reset();
+	   		iExtArray->Reset();
+	   		idx=0;  	
+	      	iAppUi->GetExtensionListL(iExtArray,iMediaType);
+	      	if(iExtArray->Count()==0)
+	      		{
+	      		User::InfoPrint(KNotsupported);
+	      		}
+	      	else
+	      		{
+	      		iAppUi->GetPluginListL(idx,iExtArray,iPluginArray,iMediaType);
+	      		myPluginArray->SetArrayL(iPluginArray);
+	     		myPluginArray->SetCurrentItem(0);
+	     		myPluginArray->DrawDeferred();
+	     		myExt->SetArrayL(iExtArray);
+				myExt->SetArrayExternalOwnership(ETrue);
+				myExt->SetCurrentItem(0);
+				myExt->DrawDeferred();	
+	      		}		
+	      	}	
+		}
+	}
+
+
+TKeyResponse CMVSSelectPluginsDialog::OfferKeyEventL(const TKeyEvent& aKeyEvent, TEventCode aType)
+	{
+	//In this case iScanCode is used in preference to iCode, 
+	//as using iCode in list selection doesn't seem to work well
+	//with shortkeys,gives a panic
+	if (aKeyEvent.iScanCode == EStdKeyEscape && aType == EEventKeyDown)
+		{
+		OkToExitL(EMVSButtonCancel);	
+		}
+	if(aKeyEvent.iScanCode == EStdKeyEnter && aType == EEventKeyDown)
+		{
+		OkToExitL(EMVSButtonNext);
+		}
+	return CEikDialog::OfferKeyEventL(aKeyEvent,aType);
+	}
+
+
+CMVSSelectPluginsDialog::~CMVSSelectPluginsDialog()
+	{
+	iPluginArray->Reset(); //reset the arrays
+    iExtArray->Reset();
+    iCodecArray->Reset();
+    delete iExtArray; //and delete them both
+    delete iPluginArray;
+	delete iCodecArray;
+	}