mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSSelectPluginsDialog.cpp
--- /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;
+ }