ui/viewutilities/effectengine/src/glxeffectengine.cpp
changeset 43 72396548277c
child 44 aa2fa096cbfb
equal deleted inserted replaced
42:5e1df1b52eb3 43:72396548277c
       
     1 /*
       
     2 * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:   ?Description
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 #include "glxeffectengine.h"
       
    20 #include "glxeffectpluginbase.h"
       
    21 #include "glxtransitioneffect.h"
       
    22 #include "glxsettinginterface.h"
       
    23 #include "glxeffectpluginresolver.h"
       
    24 
       
    25 #include <QDebug>
       
    26 
       
    27 GlxEffectEngine::GlxEffectEngine( ) 
       
    28     : mNbrEffectRunning( 0 ), 
       
    29       mEffectPlugin( NULL ), 
       
    30       mTransitionEffect( NO_EFFECT ),
       
    31       mEffectResolver( NULL )
       
    32 {
       
    33     qDebug("GlxSlideShowEffectEngine::GlxSlideShowEffectEngine()");
       
    34     mTransitionEffectList.clear();
       
    35 }
       
    36 
       
    37 GlxEffectEngine::~GlxEffectEngine()
       
    38 {
       
    39     qDebug("GlxSlideShowEffectEngine::~GlxSlideShowEffectEngine()");
       
    40     delete mEffectResolver;
       
    41     mEffectResolver = NULL;
       
    42 	
       
    43     cleanTransitionEfffect();
       
    44 }
       
    45 
       
    46 void GlxEffectEngine::registerEffect(const QString &itemType)
       
    47 {
       
    48     GlxSettingInterface *settingObj = GlxSettingInterface::instance(); // NO ownership 
       
    49     if ( mEffectResolver == NULL ) {
       
    50         mEffectResolver = new GlxEffectPluginResolver();
       
    51     }
       
    52     /* read the selected effect through the centrep and get the effect plugin object through effect plugin resolver*/
       
    53     mEffectPlugin = mEffectResolver->effectPlugin( settingObj->slideShowEffectId( settingObj->slideShowEffectIndex ( ) ) ); //No ownership
       
    54     
       
    55     QList <QString > effectPathList = mEffectPlugin->effectFileList();
       
    56     
       
    57     qDebug("GlxSlideShowEffectEngine::registerEffect() item type %s file path %s", itemType.utf16(), effectPathList[0].utf16());
       
    58     for ( int i = 0; i < effectPathList.count() ; ++i ) {
       
    59         HbEffect::add(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i));
       
    60     }    
       
    61 }
       
    62 
       
    63 void GlxEffectEngine::deRegisterEffect(const QString &itemType)
       
    64 {
       
    65     qDebug("GlxSlideShowEffectEngine::deRegisterEffect() item type %s", itemType.utf16());
       
    66     QList <QString > effectPathList = mEffectPlugin->effectFileList();
       
    67     for ( int i = 0; i < effectPathList.count() ; ++i ) {
       
    68         HbEffect::remove(itemType, effectPathList.at(i), QString( "Click%1" ).arg(i));
       
    69     }
       
    70     mEffectPlugin = NULL;
       
    71 }
       
    72 
       
    73 void GlxEffectEngine::registerTransitionEffect()  
       
    74 {
       
    75     qDebug("GlxSlideShowEffectEngine::registerTransitionEffect()");
       
    76     initTransitionEffect();
       
    77 }
       
    78 
       
    79 void GlxEffectEngine::deregistertransitionEffect()
       
    80 {
       
    81     qDebug("GlxSlideShowEffectEngine::deregisterTransitionEffect()");
       
    82     cleanTransitionEfffect();
       
    83 }
       
    84 
       
    85 void GlxEffectEngine::runEffect(QGraphicsItem *  item, const QString &  itemType )
       
    86 {
       
    87     qDebug("GlxSlideShowEffectEngine::runEffect()1 item type %s", itemType.utf16());
       
    88     HbEffect::start(item, itemType, QString( "Click1" ), this, "slideShowEffectFinished");
       
    89     ++mNbrEffectRunning;
       
    90 }
       
    91 
       
    92 void GlxEffectEngine::runEffect(QList< QGraphicsItem * > &  items, const QString &  itemType )
       
    93 {
       
    94     qDebug("GlxSlideShowEffectEngine::runEffect()2 item Type %s", itemType.utf16());
       
    95     mEffectPlugin->setUpItems(items);
       
    96     for ( int i = 0; i < items.count() ; ++i ) {
       
    97         if ( mEffectPlugin->isAnimationLater(i) == FALSE ) {
       
    98             HbEffect::start(items.at(i), itemType, QString( "Click%1").arg(i), this, "slideShowEffectFinished");
       
    99         }
       
   100         ++mNbrEffectRunning;
       
   101     }
       
   102 }
       
   103 
       
   104 void GlxEffectEngine::runEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect)
       
   105 {
       
   106     qDebug("GlxSlideShowEffectEngine::runEffect()3 effect type %d ", transitionEffect);
       
   107     
       
   108     GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect );
       
   109     
       
   110     if ( effectSetting == NULL || items.count() != effectSetting->count() ) {
       
   111          return;
       
   112     }
       
   113     
       
   114     mTransitionEffect = transitionEffect;
       
   115     for ( int i = 0; i < effectSetting->count() ; ++i) {
       
   116         ++mNbrEffectRunning;
       
   117         if ( ( i == effectSetting->count() -1) && effectSetting->isTransitionLater() )
       
   118         {
       
   119             effectSetting->setAnimationItem( items.at(i) );
       
   120             items.at(i)->hide();
       
   121         }
       
   122         else {
       
   123             HbEffect::start(items.at(i), effectSetting->itemType().at(i), effectSetting->eventType().at(i), this, "transitionEffectFinished");
       
   124         }
       
   125     }    
       
   126 }
       
   127 
       
   128 void GlxEffectEngine::cancelEffect(QGraphicsItem *  item)
       
   129 {
       
   130     if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) {
       
   131         HbEffect::cancel( item, QString( "Click1" ) );
       
   132     }
       
   133 }
       
   134 
       
   135 void GlxEffectEngine::cancelEffect(const QList< QGraphicsItem * > &  items)
       
   136 {
       
   137     for ( int i = 0; i < items.count() ; ++i ) {    
       
   138         if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) {
       
   139             HbEffect::cancel( items.at(i), QString( "Click%1").arg(i) );
       
   140         }
       
   141     }
       
   142 }
       
   143 
       
   144 void GlxEffectEngine::cancelEffect(QList< QGraphicsItem * > &  items, GlxEffect transitionEffect)
       
   145 {
       
   146     GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( transitionEffect );
       
   147     
       
   148     if ( effectSetting == NULL || items.count() != effectSetting->count() ) {
       
   149          return;
       
   150     }
       
   151     
       
   152     for ( int i = 0; i < effectSetting->count() ; ++i) {
       
   153         HbEffect::cancel(items.at(i), effectSetting->eventType().at(i) );
       
   154     }     
       
   155 }
       
   156 
       
   157 bool GlxEffectEngine::isEffectRuning(QGraphicsItem *  item)
       
   158 {
       
   159     if ( HbEffect::effectRunning( item, QString( "Click1" ) ) ) {
       
   160         return true;
       
   161     }
       
   162     return false;
       
   163 }
       
   164 
       
   165 bool GlxEffectEngine::isEffectRuning(const QList< QGraphicsItem * > &  items)
       
   166 {
       
   167     for ( int i = 0; i < items.count() ; ++i ) {    
       
   168         if ( HbEffect::effectRunning( items.at(i), QString( "Click%1").arg(i) ) ) {
       
   169             return true;
       
   170         }
       
   171     }
       
   172     return false;
       
   173 }
       
   174 
       
   175 void GlxEffectEngine::slideShowEffectFinished( const HbEffect::EffectStatus &status )
       
   176 {
       
   177     Q_UNUSED( status )
       
   178     qDebug("GlxSlideShowEffectEngine::slideShowEffectFinished() number of effect %d ", mNbrEffectRunning);
       
   179     
       
   180     --mNbrEffectRunning;
       
   181     
       
   182     if ( mEffectPlugin->isAnimationLater( mNbrEffectRunning) ) {
       
   183         HbEffect::start( mEffectPlugin->animationItem(), mEffectPlugin->ItemType(), QString( "Click%1").arg(mNbrEffectRunning), this, "slideShowEffectFinished");
       
   184     }
       
   185     
       
   186     if (mNbrEffectRunning == 0) {
       
   187         emit effectFinished();
       
   188     }
       
   189 }
       
   190 
       
   191 void GlxEffectEngine::transitionEffectFinished( const HbEffect::EffectStatus &status )
       
   192 {
       
   193     Q_UNUSED( status )
       
   194     qDebug("GlxSlideShowEffectEngine::transitionEffectFinished() number of effect %d status %d", mNbrEffectRunning, status.reason);
       
   195     
       
   196     --mNbrEffectRunning;
       
   197     if ( mNbrEffectRunning == 1 ) {
       
   198         GlxTransitionEffectSetting *effectSetting = mTransitionEffectList.value( mTransitionEffect );
       
   199         if (  effectSetting->isTransitionLater() ){ 
       
   200             effectSetting->animationItem()->show();
       
   201             HbEffect::start( effectSetting->animationItem(), effectSetting->itemType().at(1), effectSetting->eventType().at(1), this, "transitionEffectFinished");
       
   202             mTransitionEffect = NO_EFFECT;
       
   203         }    
       
   204     }
       
   205     
       
   206     if (mNbrEffectRunning == 0) {
       
   207         emit effectFinished();
       
   208     }
       
   209 }
       
   210 
       
   211 void GlxEffectEngine::initTransitionEffect()
       
   212 {
       
   213     GlxTransitionEffectSetting *effectSetting = NULL;
       
   214     
       
   215     effectSetting = new GlxTransitionEffectSetting(GRID_TO_FULLSCREEN);
       
   216     for ( int i = 0; i < effectSetting->count(); ++i ) {
       
   217         HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
       
   218     }
       
   219     mTransitionEffectList[GRID_TO_FULLSCREEN] = effectSetting;
       
   220     
       
   221     effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_GRID );
       
   222     for ( int i = 0; i < effectSetting->count(); ++i ) {
       
   223         HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
       
   224     }
       
   225     mTransitionEffectList[FULLSCREEN_TO_GRID] = effectSetting;
       
   226     
       
   227     effectSetting = new GlxTransitionEffectSetting( GRID_TO_ALBUMLIST );
       
   228     for ( int i = 0; i < effectSetting->count(); ++i ) {
       
   229         HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
       
   230     }
       
   231     mTransitionEffectList[GRID_TO_ALBUMLIST] = effectSetting;
       
   232     
       
   233     effectSetting = new GlxTransitionEffectSetting( ALBUMLIST_TO_GRID );
       
   234     for ( int i = 0; i < effectSetting->count(); ++i ) {
       
   235         HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
       
   236     }
       
   237     mTransitionEffectList[ALBUMLIST_TO_GRID] = effectSetting;
       
   238     
       
   239     effectSetting = new GlxTransitionEffectSetting( FULLSCREEN_TO_DETAIL );
       
   240     for ( int i = 0; i < effectSetting->count(); ++i ) {
       
   241         HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
       
   242     }
       
   243     mTransitionEffectList[FULLSCREEN_TO_DETAIL] = effectSetting; 
       
   244     
       
   245     effectSetting = new GlxTransitionEffectSetting( DETAIL_TO_FULLSCREEN );
       
   246     for ( int i = 0; i < effectSetting->count(); ++i ) {
       
   247         HbEffect::add( effectSetting->itemType().at(i), effectSetting->effectFileList().at(i), effectSetting->eventType().at(i)) ;
       
   248     }
       
   249     mTransitionEffectList[DETAIL_TO_FULLSCREEN] = effectSetting;    
       
   250 }
       
   251 
       
   252 void GlxEffectEngine::cleanTransitionEfffect()
       
   253 {	
       
   254     qDebug("GlxSlideShowEffectEngine::cleanTrnastionEfffect()");
       
   255     
       
   256     foreach( GlxTransitionEffectSetting *list, mTransitionEffectList) {
       
   257         for ( int i = 0; i < list->count(); ++i ) {
       
   258             HbEffect::remove( list->itemType().at(i), list->effectFileList().at(i), list->eventType().at(i)) ;
       
   259         }
       
   260         delete list;
       
   261     }
       
   262     mTransitionEffectList.clear();	
       
   263     
       
   264 }
       
   265