mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSVideoSettingDialog.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mmlibs/mmfw/tsrc/mmvalidationsuite/mmvalidationsuiteapp/src/MVSVideoSettingDialog.cpp Tue Feb 02 01:56:55 2010 +0200
@@ -0,0 +1,476 @@
+// 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 <e32math.h>
+#include <techview/eikfpne.h>
+
+#include "MVSVideoSettingDialog.h"
+#include "MVSApp.hrh"
+
+void CMVSVideoSettingDialog::SetupDialogLD(TVideoRotation aRotation,
+ CMVSAppUi* aAppUi,
+ const TRect& aVideoSize,
+ const TRect& aWindowRect,
+ TBool aSupportVideoPlayerUtility2,
+ TBool aPip,
+ TBool aCrp)
+ {
+ CMVSVideoSettingDialog* dialog = new (ELeave) CMVSVideoSettingDialog(aRotation,
+ aAppUi,
+ aVideoSize,
+ aWindowRect,
+ aSupportVideoPlayerUtility2,
+ aPip,
+ aCrp);
+ dialog->ExecuteLD(R_MVS_VIDEO_DIALOG_VIDEOSETTING);
+ }
+
+
+void CMVSVideoSettingDialog::PreLayoutDynInitL()
+ {
+ // Get a downcasted pointer to the controls
+ CEikChoiceList* rotation = static_cast<CEikChoiceList*>(Control(EMVSVideoRotationSettings));
+ if(rotation)
+ {
+ rotation->SetCurrentItem(iRotation);
+ }
+
+ // default the scaling factor to the current scaling factor as used by the video playback
+ // utility
+ iAppUi->GetScaleFactorL(iScaleWidth, iScaleHeight, iAntiAliasFiltering);
+
+ CEikCheckBox* antiAliasFiltering = static_cast<CEikCheckBox*>(Control(EMVSAntiAliasFiltering));
+ if(antiAliasFiltering)
+ {
+ iAntiAliasFilteringCtl = antiAliasFiltering;
+ antiAliasFiltering->SetObserver(this);
+ antiAliasFiltering->SetState(
+ iAntiAliasFiltering ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+ }
+
+ CEikFloatingPointEditor* editor = static_cast<CEikFloatingPointEditor*> (Control(EMVSCmdScaleWidth));
+ TReal temp(iScaleWidth);
+ editor->SetValueL(&temp);
+
+ temp = iScaleHeight;
+ editor = static_cast<CEikFloatingPointEditor*> (Control(EMVSCmdScaleHeight));
+ editor->SetValueL(&temp);
+
+ // default the crop region to the current crop region values as used by the video playback
+ // utility
+ iAppUi->GetCropRegionL(iCropRegion);
+
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetTopLeftx))->SetNumber(iCropRegion.iTl.iX);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetTopLefty))->SetNumber(iCropRegion.iTl.iY);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetBottomRightx))->SetNumber(iCropRegion.iBr.iX);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetBottomRighty))->SetNumber(iCropRegion.iBr.iY);
+
+ if (!iSupportVideoPlayerUtility2)
+ {
+ // hide the video extent & window clipping rect UI elements if CVideoPlayerUtility2
+ // is not in effect
+ for (TInt i = EMVSCmdSetVideoExtentTopLeftx; i <= EMVSCmdSetOverlayText; i++)
+ {
+ SetLineDimmedNow(i, ETrue);
+ SetLineNonFocusing(i);
+ }
+ }
+ else
+ {
+ // default the video extent to values currently set in the application
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetVideoExtentTopLeftx))->SetNumber(iVideoExtent.iTl.iX);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetVideoExtentTopLefty))->SetNumber(iVideoExtent.iTl.iY);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetVideoExtentBottomRightx))->SetNumber(iVideoExtent.iBr.iX);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetVideoExtentBottomRighty))->SetNumber(iVideoExtent.iBr.iY);
+
+ // default the window clipping rect to values currently set in the application
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetWindowClipTopLeftx))->SetNumber(iWindowClip.iTl.iX);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetWindowClipTopLefty))->SetNumber(iWindowClip.iTl.iY);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetWindowClipBottomRightx))->SetNumber(iWindowClip.iBr.iX);
+ static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetWindowClipBottomRighty))->SetNumber(iWindowClip.iBr.iY);
+
+ if (iAppUi->OverlayText().Length() > 0)
+ {
+ static_cast<CEikCheckBox*>
+ (Control(EMVSCmdSetDisplayOverlayText))->SetState(CEikButtonBase::ESet);
+ static_cast<CEikEdwin*>
+ (Control(EMVSCmdSetOverlayText))->SetTextL(&iAppUi->OverlayText());
+ }
+ else
+ {
+ static_cast<CEikCheckBox*>
+ (Control(EMVSCmdSetDisplayOverlayText))->SetState(CEikButtonBase::EClear);
+ static_cast<CEikEdwin*>
+ (Control(EMVSCmdSetOverlayText))->SetTextL(NULL);
+ SetLineDimmedNow(EMVSCmdSetOverlayText, ETrue);
+ }
+ }
+
+#ifdef SYMBIAN_BUILD_GCE
+ TAutoScaleType autoScaleType;
+ TInt autoScaleHorizPos;
+ TInt autoScaleVertPos;
+ iAppUi->GetAutoScale(autoScaleType, autoScaleHorizPos, autoScaleVertPos);
+
+ CEikChoiceList* autoScaleTypeList = static_cast<CEikChoiceList*>(Control(EMVSAutoScaleType));
+ switch (autoScaleType)
+ {
+ case EAutoScaleNone:
+ autoScaleTypeList->SetCurrentItem(0);
+ break;
+ case EAutoScaleBestFit:
+ autoScaleTypeList->SetCurrentItem(1);
+ break;
+ case EAutoScaleClip:
+ autoScaleTypeList->SetCurrentItem(2);
+ break;
+ case EAutoScaleStretch:
+ autoScaleTypeList->SetCurrentItem(3);
+ break;
+ }
+
+ CEikChoiceList* autoScaleHoriz = static_cast<CEikChoiceList*>(Control(EMVSAutoScaleHoriz));
+ switch (autoScaleHorizPos)
+ {
+ case EHorizontalAlignLeft:
+ autoScaleHoriz->SetCurrentItem(0);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleHorizPos))->SetNumber(0);
+ break;
+ case EHorizontalAlignCenter:
+ autoScaleHoriz->SetCurrentItem(1);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleHorizPos))->SetNumber(0);
+ break;
+ case EHorizontalAlignRight:
+ autoScaleHoriz->SetCurrentItem(2);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleHorizPos))->SetNumber(0);
+ break;
+ default:
+ autoScaleHoriz->SetCurrentItem(3);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleHorizPos))->SetNumber(autoScaleHorizPos);
+ break;
+ }
+
+ CEikChoiceList* autoScaleVert = static_cast<CEikChoiceList*>(Control(EMVSAutoScaleVert));
+ switch (autoScaleVertPos)
+ {
+ case EVerticalAlignTop:
+ autoScaleVert->SetCurrentItem(0);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleVertPos))->SetNumber(0);
+ break;
+ case EVerticalAlignCenter:
+ autoScaleVert->SetCurrentItem(1);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleVertPos))->SetNumber(0);
+ break;
+ case EVerticalAlignBottom:
+ autoScaleVert->SetCurrentItem(2);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleVertPos))->SetNumber(0);
+ break;
+ default:
+ autoScaleVert->SetCurrentItem(3);
+ static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleVertPos))->SetNumber(autoScaleVertPos);
+ break;
+ }
+
+ CEikCheckBox* pip = static_cast<CEikCheckBox*>(Control(EMVSPIP));
+
+ if(pip)
+ {
+ pip->SetObserver(this);
+ pip->SetState(iPip ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+ }
+
+ CEikCheckBox* crp = static_cast<CEikCheckBox*>(Control(EMVSCRP));
+
+ if(crp)
+ {
+ crp->SetObserver(this);
+ crp->SetState(iCrp ? CEikButtonBase::ESet : CEikButtonBase::EClear);
+ }
+
+#endif // SYMBIAN_BUILD_GCE
+ }
+
+
+CMVSVideoSettingDialog::CMVSVideoSettingDialog(TVideoRotation aRotation,
+ CMVSAppUi* aAppUi,
+ const TRect& aVideoSize,
+ const TRect& aWindowRect,
+ TBool aSupportVideoPlayerUtility2,
+ TBool aPip,
+ TBool aCrp)
+ : iRotation(aRotation),
+ iAppUi(aAppUi),
+ iVideoExtent(aVideoSize),
+ iWindowClip(aWindowRect),
+ iSupportVideoPlayerUtility2(aSupportVideoPlayerUtility2),
+ iPip(aPip),
+ iCrp(aCrp)
+ {
+ //Nothing to do here - all done in initialisation list
+ }
+
+
+TBool CMVSVideoSettingDialog::OkToExitL(TInt aButtonId)
+ {
+ switch(aButtonId)
+ {
+ case EMVSButtonUpdate:
+ {
+ HandleUpdateL();
+ break;
+ }
+
+ case EMVSButtonCancel:
+ default: //cancel
+ break;
+ }
+
+ return ETrue;
+ }
+
+void CMVSVideoSettingDialog::HandleUpdateL()
+ {
+ // retrieve crop region value
+ iAx = static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetTopLeftx))->Number();
+
+ iAy = static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetTopLefty))->Number();
+
+ iBx = static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetBottomRightx))->Number();
+
+ iBy = static_cast<CEikNumberEditor*>
+ (Control(EMVSCmdSetBottomRighty))->Number();
+ TRect newCrop(iAx, iAy, iBx, iBy);
+ if (newCrop != iCropRegion)
+ {
+ iAppUi->SetCropRegionL(newCrop);
+ }
+
+ // retrieve scale factor
+ TReal32 scaleWidth = TReal32(static_cast<CEikFloatingPointEditor*>
+ (Control(EMVSCmdScaleWidth))->Value());
+ TReal32 scaleHeight = TReal32(static_cast<CEikFloatingPointEditor*>
+ (Control(EMVSCmdScaleHeight))->Value());
+ TBool antiAlias = (iAntiAliasFilteringCtl->State() == CEikButtonBase::ESet);
+
+ if (iScaleWidth != scaleWidth || iScaleHeight != scaleHeight || antiAlias != iAntiAliasFiltering)
+ {
+ iAppUi->SetScaleFactorL(scaleWidth, scaleHeight, antiAlias);
+ }
+
+ // retrieve rotation value
+ TVideoRotation newRotation(EVideoRotationNone);
+ CEikChoiceList* rotation = static_cast<CEikChoiceList*>(Control(EMVSVideoRotationSettings));
+ if(rotation)
+ {
+ switch (rotation->CurrentItem())
+ {
+ case 0:
+ newRotation = EVideoRotationNone;
+ break;
+
+ case 1:
+ newRotation = EVideoRotationClockwise90;
+ break;
+
+ case 2:
+ newRotation = EVideoRotationClockwise180;
+ break;
+
+ case 3:
+ newRotation = EVideoRotationClockwise270;
+ break;
+
+ default:
+ newRotation = EVideoRotationNone;
+ break;
+ }
+ }
+ if (iRotation != newRotation)
+ {
+ iAppUi->SetRotationL(newRotation);
+ iRotation = newRotation;
+ }
+
+#ifdef SYMBIAN_BUILD_GCE
+ // retrieves window clipping rect
+ TRect newWinClipRect;
+ RetrieveWindowClipRectFieldValues(newWinClipRect);
+
+ if (newWinClipRect != iWindowClip)
+ {
+ iAppUi->SetWindowClippingRect(newWinClipRect);
+ }
+
+
+ // retrieves video extent properties
+ TRect newVideoExtent;
+ RetrieveVideoExtentFieldValues(newVideoExtent);
+
+ if (newVideoExtent != iVideoExtent)
+ {
+ iAppUi->SetVideoExtent(newVideoExtent);
+ }
+
+ // retrieve overlay text
+ HBufC* overlayText = NULL;
+ if (static_cast<CEikCheckBox*>(Control(EMVSCmdSetDisplayOverlayText))->State()
+ == CEikButtonBase::ESet)
+ {
+ overlayText
+ = static_cast<CEikEdwin*>(Control(EMVSCmdSetOverlayText))->GetTextInHBufL();
+ }
+
+ if (overlayText)
+ {
+ iAppUi->SetOverlayTextL(*overlayText);
+ delete overlayText;
+ }
+ else
+ {
+ iAppUi->SetOverlayTextL(KNullDesC);
+ }
+
+ // retrieve autoscale values
+ TAutoScaleType newAutoScaleType = EAutoScaleNone;
+ TInt newAutoScaleHorizPos = 0;
+ TInt newAutoScaleVertPos = 0;
+
+ CEikChoiceList* autoScaleType = static_cast<CEikChoiceList*>(Control(EMVSAutoScaleType));
+
+ if (autoScaleType)
+ {
+ switch (autoScaleType->CurrentItem())
+ {
+ case 0:
+ newAutoScaleType = EAutoScaleNone;
+ break;
+ case 1:
+ newAutoScaleType = EAutoScaleBestFit;
+ break;
+ case 2:
+ newAutoScaleType = EAutoScaleClip;
+ break;
+ case 3:
+ newAutoScaleType = EAutoScaleStretch;
+ break;
+ default:
+ newAutoScaleType = EAutoScaleNone;
+ break;
+ }
+ }
+
+ CEikChoiceList* autoScaleHoriz = static_cast<CEikChoiceList*>(Control(EMVSAutoScaleHoriz));
+ switch (autoScaleHoriz->CurrentItem())
+ {
+ case 0:
+ newAutoScaleHorizPos = EHorizontalAlignLeft;
+ break;
+ case 1:
+ newAutoScaleHorizPos = EHorizontalAlignCenter;
+ break;
+ case 2:
+ newAutoScaleHorizPos = EHorizontalAlignRight;
+ break;
+ default:
+ newAutoScaleHorizPos = static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleHorizPos))->Number();
+ break;
+ }
+
+ CEikChoiceList* autoScaleVert = static_cast<CEikChoiceList*>(Control(EMVSAutoScaleVert));
+ switch (autoScaleVert->CurrentItem())
+ {
+ case 0:
+ newAutoScaleVertPos = EVerticalAlignTop;
+ break;
+ case 1:
+ newAutoScaleVertPos = EVerticalAlignCenter;
+ break;
+ case 2:
+ newAutoScaleVertPos = EVerticalAlignBottom;
+ break;
+ default:
+ newAutoScaleVertPos = static_cast<CEikNumberEditor*>(Control(EMVSAutoScaleVertPos))->Number();
+ break;
+ }
+
+ iAppUi->SetAutoScaleL(newAutoScaleType, newAutoScaleHorizPos, newAutoScaleVertPos);
+
+ CEikButtonBase::TState state = static_cast<CEikCheckBox*>(Control(EMVSPIP))->State();
+ iAppUi->SetPip(CEikButtonBase::ESet == state);
+
+ state = static_cast<CEikCheckBox*>(Control(EMVSCRP))->State();
+ iAppUi->SetCrp(CEikButtonBase::ESet == state);
+#endif // SYMBIAN_BUILD_GCE
+ }
+
+
+void CMVSVideoSettingDialog::RetrieveVideoExtentFieldValues(TRect& aVideoExtentValues) const
+ {
+ aVideoExtentValues.iTl.iX
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetVideoExtentTopLeftx))->Number();
+
+ aVideoExtentValues.iTl.iY
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetVideoExtentTopLefty))->Number();
+
+ aVideoExtentValues.iBr.iX
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetVideoExtentBottomRightx))->Number();
+
+ aVideoExtentValues.iBr.iY
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetVideoExtentBottomRighty))->Number();
+ }
+
+void CMVSVideoSettingDialog::RetrieveWindowClipRectFieldValues(TRect& aNewVideoExtent) const
+ {
+ aNewVideoExtent.iTl.iX
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetWindowClipTopLeftx))->Number();
+
+ aNewVideoExtent.iTl.iY
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetWindowClipTopLefty))->Number();
+
+ aNewVideoExtent.iBr.iX
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetWindowClipBottomRightx))->Number();
+
+ aNewVideoExtent.iBr.iY
+ = static_cast<CEikNumberEditor*>(Control(EMVSCmdSetWindowClipBottomRighty))->Number();
+ }
+
+void CMVSVideoSettingDialog::HandleControlEventL(CCoeControl *aControl, TCoeEvent aEventType)
+ {
+ CEikDialog::HandleControlEventL(aControl,aEventType);
+ if (aControl == Control(EMVSCmdSetDisplayOverlayText) && aEventType == EEventStateChanged)
+ {
+ CEikCheckBox* overlayCheckBox
+ = static_cast<CEikCheckBox*>(Control(EMVSCmdSetDisplayOverlayText));
+
+ TBool disableOverlayText = (overlayCheckBox->State() != CEikButtonBase::ESet);
+ SetLineDimmedNow(EMVSCmdSetOverlayText, disableOverlayText);
+ }
+ }