tvout/tvoutwrapper/src/glxtvoutwrapper_p.cpp
branchRCL_3
changeset 59 8e5f6eea9c9f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tvout/tvoutwrapper/src/glxtvoutwrapper_p.cpp	Tue Aug 31 15:14:51 2010 +0300
@@ -0,0 +1,252 @@
+/*
+* Copyright (c) 2008-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:    Implementation of private wrapper class
+*
+*/
+
+#include "glxtvoutwrapper.h"
+#include "glxtvoutwrapper_p.h"
+#include "glxtvconnectionobserver.h"
+#include "glxhdmicontroller.h"
+#include "glxmodelparm.h"
+#include "glxviewids.h"
+
+#include "glxtracer.h"
+#include "glxlog.h"
+
+// -----------------------------------------------------------------------------
+// Static method to create the private wrapper instance 
+// -----------------------------------------------------------------------------
+GlxTvOutWrapperPrivate* GlxTvOutWrapperPrivate::Instance(GlxTvOutWrapper* aTvOutWrapper,
+        QAbstractItemModel* aModel,QSize aScreenSize,bool aEfectsOn)
+    {
+    TRACER("GlxTvOutWrapperPrivate::Instance()");
+    GlxTvOutWrapperPrivate* self = new GlxTvOutWrapperPrivate(aTvOutWrapper,aModel);
+    if (self){
+        TRAPD(err,self->ConstructL(aScreenSize,aEfectsOn));
+        if(err != KErrNone){
+            delete self;
+            self = NULL;
+            }
+        }
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// ConstructL
+// This creates the Connection observer and the Hdmi Controller
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::ConstructL(QSize aScreenSize,bool aEfectsOn)
+    {
+    TRACER("GlxTvOutWrapperPrivate::ConstructL()");
+    iConnectionObserver = CGlxConnectionObserver::NewL(this);
+    if (!iHdmiController) {
+        TRect rect(0,0,aScreenSize.width(),aScreenSize.height());
+        iHdmiController = CGlxHdmiController::NewL(rect,
+                aEfectsOn);
+        iHdmiConnected = iConnectionObserver->IsHdmiConnected();
+        }
+    }
+    
+// -----------------------------------------------------------------------------
+// Constructor
+// -----------------------------------------------------------------------------
+GlxTvOutWrapperPrivate::GlxTvOutWrapperPrivate(GlxTvOutWrapper* aTvOutWrapper,
+        QAbstractItemModel* aModel):iTvOutWrapper(aTvOutWrapper),
+                iModel(aModel),
+                iConnectionObserver(NULL),
+                iHdmiController(NULL),
+                iHdmiConnected(false),
+                isImageSetToHdmi(false),
+                iIsPhotosInForeground(false)
+    {
+    TRACER("GlxTvOutWrapperPrivate::GlxTvOutWrapperPrivate()");
+    // Do Nothing
+    }
+
+// -----------------------------------------------------------------------------
+// Destructor
+// -----------------------------------------------------------------------------
+GlxTvOutWrapperPrivate::~GlxTvOutWrapperPrivate()
+    {
+    TRACER("GlxTvOutWrapperPrivate::~GlxTvOutWrapperPrivate()");
+    if (iConnectionObserver){
+    delete iConnectionObserver;
+    iConnectionObserver = NULL;
+    }
+    if (iHdmiController){
+    delete iHdmiController;
+    iHdmiController = NULL;
+    }
+    }
+
+// -----------------------------------------------------------------------------
+// HandleConnectionChange
+// observes the connection change to modify the connection flag
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::HandleConnectionChange(bool aConnected)
+    {
+    TRACER("GlxTvOutWrapperPrivate::HandleConnectionChange()");
+    iHdmiConnected = aConnected;
+    // if Connection state positive and uri/bmp are not passed to HDMI already
+    // then it is a new image - Set it.
+    GLX_LOG_INFO2("GlxTvOutWrapperPrivate::HandleConnectionChange() - isImageSetToHdmi-%d, iHdmiConnected-%d",
+            isImageSetToHdmi,iHdmiConnected);
+    if (!isImageSetToHdmi && iHdmiConnected && getSubState() !=IMAGEVIEWER_S && iIsPhotosInForeground)
+        {
+        SetNewImage();
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// SetImagetoHDMI
+// if the Hdmi is connected, Set the new image else do nothing
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::SetImagetoHDMI()
+    {
+    TRACER("GlxTvOutWrapperPrivate::SetImagetoHDMI()");
+    iIsPhotosInForeground = true;
+    if (iHdmiConnected)
+        {
+        // Set the Image
+        SetNewImage();
+        // Set the flag after HDMI is set for the image
+        isImageSetToHdmi = true;    
+        }
+    else
+        {
+        // UnSet the flag as HDMI not set
+        // this would be in future use if HDMI not set for a image in FS/SS and
+        // cable connected
+        isImageSetToHdmi = false;
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// SetNewImage
+// Private implementation of setting the image to HDMI
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::SetNewImage()
+    {
+    TRACER("GlxTvOutWrapperPrivate::SetNewImage()");
+    QVariant focusVariant =(iModel->data(iModel->index(0,0),GlxFocusIndexRole)); 
+    int focusIndex;
+    if (focusVariant.isValid() && focusVariant.canConvert<int>()) {
+        focusIndex = (focusVariant.value<int>());
+        GLX_LOG_INFO1("GlxTvOutWrapperPrivate::SetNewImage() focusindex = %d",focusIndex);
+	}
+	else{
+		return ;
+	}
+    
+    // Get the image uri
+    QString imagePath = (iModel->data(iModel->index(focusIndex,0),GlxUriRole)).value<QString>();
+    if(imagePath.isNull()) {
+    // Null path no need to proceed
+        return ;
+    }
+   
+    TPtrC aPtr = reinterpret_cast<const TUint16*>(imagePath.utf16());
+    QVariant var = (iModel->data(iModel->index(focusIndex,0),GlxHdmiBitmap));
+    CFbsBitmap* bmp = var.value<CFbsBitmap*>();
+    iHdmiController->SetImageL(aPtr,bmp);
+    iIsPhotosInForeground = true;
+    }
+
+// -----------------------------------------------------------------------------
+// setToCloningMode 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::SetToCloningMode()
+    {
+    TRACER("GlxTvOutWrapperPrivate::SetToCloningMode()");
+    iIsPhotosInForeground = false;
+    if(iHdmiController && iHdmiConnected){
+    iHdmiController->ShiftToCloningMode();
+    }
+    }
+
+// -----------------------------------------------------------------------------
+// setToNativeMode 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::SetToNativeMode()
+    {
+    TRACER("GlxTvOutWrapperPrivate::SetToNativeMode()");
+    iIsPhotosInForeground = true;
+    
+    if(iHdmiController && iHdmiConnected) {
+    if (!isImageSetToHdmi){
+    }
+    SetNewImage(); // this case can occur when FS image is opened and set to background
+                   // HDMI cable connected and then FS is brought to foreground
+    }
+    else{
+    iHdmiController->ShiftToPostingMode();
+    }
+    }
+
+// -----------------------------------------------------------------------------
+// itemNotSupported 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::ItemNotSupported()
+    {
+    TRACER("GlxTvOutWrapperPrivate::ItemNotSupported()");
+    if(iHdmiController && iHdmiConnected){
+    iHdmiController->ItemNotSupported();
+    }
+    }
+
+// -----------------------------------------------------------------------------
+// activateZoom 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::ActivateZoom(bool autoZoomOut)
+    {
+    if(iHdmiController && iHdmiConnected){
+    iHdmiController->ActivateZoom(autoZoomOut);
+    }
+    }
+
+// -----------------------------------------------------------------------------
+// deactivateZoom 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::DeactivateZoom()
+    {
+    if(iHdmiController && iHdmiConnected){
+    iHdmiController->DeactivateZoom();
+    }
+    }
+
+// -----------------------------------------------------------------------------
+// FadeSurface 
+// -----------------------------------------------------------------------------
+void GlxTvOutWrapperPrivate::FadeSurface(bool aFadeInOut)
+    {
+    if(iHdmiController && iHdmiConnected){
+    iHdmiController->FadeSurface(aFadeInOut);
+    }
+    }
+
+// -----------------------------------------------------------------------------
+// getSubState 
+// -----------------------------------------------------------------------------
+int GlxTvOutWrapperPrivate::getSubState()
+{
+    int substate = NO_FULLSCREEN_S;
+    QVariant variant = iModel->data( iModel->index(0,0), GlxSubStateRole );    
+    if ( variant.isValid() &&  variant.canConvert<int> ()  ) {
+        substate = variant.value<int>();
+    }
+    return substate;
+}
+
+// End of file