idlehomescreen/xmluirendering/uiengine/src/xnwallpaperview.cpp
branchRCL_3
changeset 12 9674c1a575e9
parent 5 c743ef5928ba
child 18 d05a55b217df
equal deleted inserted replaced
11:ff572dfe6d86 12:9674c1a575e9
    13 *
    13 *
    14 * Description:  Wallpaper view.
    14 * Description:  Wallpaper view.
    15 *
    15 *
    16 */
    16 */
    17 
    17 
    18 
    18 // System includes
    19 // INCLUDE FILES
       
    20 #include "xnwallpaperview.h"
       
    21 #include "xnwallpapercontainer.h"
       
    22 #include "xnuiengine.h"
       
    23 #include "xnappuiadapter.h"
       
    24 #include "xnviewadapter.h"
       
    25 #include "xnbackgroundmanager.h"
       
    26 #include <xnuiengine.rsg>
       
    27 
       
    28 // SYSTEM INCLUDE FILES
       
    29 #include <aknappui.h>
    19 #include <aknappui.h>
    30 #include <eikbtgpc.h>
    20 #include <eikbtgpc.h>
    31 #include <avkon.rsg>
    21 #include <avkon.rsg>
    32 #include <AknsWallpaperUtils.h>
    22 #include <AknsWallpaperUtils.h>
    33 #include <MGFetch.h>
    23 #include <MGFetch.h>
    34 #include <aknnotewrappers.h>
    24 #include <aknnotewrappers.h>
    35 #include <StringLoader.h> 
    25 #include <StringLoader.h> 
    36 #include <caf/caf.h>
    26 #include <caf/caf.h>
       
    27 #include <bautils.h>
       
    28 #include <data_caging_path_literals.hrh>
       
    29 
       
    30 // User includes
       
    31 #include <xnwallpaperview.rsg>
       
    32 #include "xnwallpaperview.h"
       
    33 #include "xnwallpapercontainer.h"
       
    34 #include "xnuiengine.h"
       
    35 #include "xnappuiadapter.h"
       
    36 #include "xnviewadapter.h"
       
    37 #include "xnbackgroundmanager.h"
       
    38 #include "xneffectmanager.h"
       
    39 #include "xnviewmanager.h"
       
    40 
       
    41 // Constants
       
    42 _LIT( KResourceDrive, "z:" );
       
    43 _LIT( KResourceFile, "xnwallpaperview.rsc" );
    37 
    44 
    38 _LIT8( KMulti, "multi" );
    45 _LIT8( KMulti, "multi" );
    39 const TInt KFileArrayGranularity = 6;
    46 
       
    47 const TInt KFileArrayGranularity( 6 );
    40 
    48 
    41 // ============================ MEMBER FUNCTIONS ===============================
    49 // ============================ MEMBER FUNCTIONS ===============================
    42 
    50 
    43 // -----------------------------------------------------------------------------
    51 // -----------------------------------------------------------------------------
    44 // C++ default constructor.
    52 // C++ default constructor.
    45 // -----------------------------------------------------------------------------
    53 // -----------------------------------------------------------------------------
    46 //
    54 //
    47 CXnWallpaperView::CXnWallpaperView( CXnUiEngine& aEngine ) :
    55 CXnWallpaperView::CXnWallpaperView( CXnUiEngine& aEngine ) 
    48     iEngine( aEngine )
    56     : iEngine( aEngine ), iAppUi( iEngine.AppUiAdapter() )    
    49     {
    57     {
    50     }
    58     }
    51 
    59 
    52 // -----------------------------------------------------------------------------
    60 // -----------------------------------------------------------------------------
    53 // Symbian 2nd phase constructor.
    61 // Symbian 2nd phase constructor.
    54 // -----------------------------------------------------------------------------
    62 // -----------------------------------------------------------------------------
    55 //
    63 //
    56 void CXnWallpaperView::ConstructL()
    64 void CXnWallpaperView::ConstructL()
    57     {
    65     {
    58     BaseConstructL();
    66     TFileName resFile;
       
    67     resFile.Append( KResourceDrive );
       
    68     resFile.Append( KDC_APP_RESOURCE_DIR );
       
    69     resFile.Append( KResourceFile );
       
    70     
       
    71     CCoeEnv* env( CCoeEnv::Static() );
       
    72 
       
    73     BaflUtils::NearestLanguageFile( env->FsSession(), resFile );
       
    74 
       
    75     iResourceOffset = env->AddResourceFileL( resFile );
       
    76     
       
    77     BaseConstructL( R_WALLPAPER_VIEW );
       
    78            
    59     iTimer = CPeriodic::NewL( CActive::EPriorityIdle );
    79     iTimer = CPeriodic::NewL( CActive::EPriorityIdle );
    60     }
    80     }
    61 
    81 
    62 // -----------------------------------------------------------------------------
    82 // -----------------------------------------------------------------------------
    63 // Two-phased constructor.
    83 // Two-phased constructor.
    75 // -----------------------------------------------------------------------------
    95 // -----------------------------------------------------------------------------
    76 // Destructor.
    96 // Destructor.
    77 // -----------------------------------------------------------------------------
    97 // -----------------------------------------------------------------------------
    78 //
    98 //
    79 CXnWallpaperView::~CXnWallpaperView()
    99 CXnWallpaperView::~CXnWallpaperView()
    80     {
   100     {    
    81     if ( iContainer )
   101     CCoeEnv::Static()->DeleteResourceFile( iResourceOffset );    
    82         {
   102     
    83         delete iContainer;
   103     delete iContainer;    
    84         iContainer = NULL;
       
    85         }
       
    86     delete iTimer;
   104     delete iTimer;
    87     }
   105     }
    88 
   106 
    89 // -----------------------------------------------------------------------------
   107 // -----------------------------------------------------------------------------
    90 // CXnWallpaperView::Id
   108 // CXnWallpaperView::Id
    97 
   115 
    98 // -----------------------------------------------------------------------------
   116 // -----------------------------------------------------------------------------
    99 // CXnWallpaperView::DoActivateL
   117 // CXnWallpaperView::DoActivateL
   100 // -----------------------------------------------------------------------------
   118 // -----------------------------------------------------------------------------
   101 //
   119 //
   102 void CXnWallpaperView::DoActivateL(
   120 void CXnWallpaperView::DoActivateL( const TVwsViewId& aPrevViewId,           
   103             const TVwsViewId& aPrevViewId,
   121     TUid /*aCustomMessageId*/, const TDesC8& aCustomMessage )            
   104             TUid /*aCustomMessageId*/,
   122     {
   105             const TDesC8& aCustomMessage )
   123     // switch layout 
   106     {
   124     CEikStatusPane* sp( iAppUi.StatusPane() );
   107     iAvkonAppUi->StatusPane()->SwitchLayoutL(
   125     
   108             R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT );
   126     sp->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL_FLAT );
   109     iAvkonAppUi->StatusPane()->DrawNow();
   127     sp->ApplyCurrentSettingsL();
       
   128             
       
   129     // disable transparancy
       
   130     if ( sp->IsTransparent() )
       
   131         {
       
   132         sp->EnableTransparent( EFalse );
       
   133         }
       
   134     
       
   135     sp->DrawNow();
       
   136     
       
   137     // update cba
       
   138     CEikButtonGroupContainer* bgc( Cba() );
       
   139     CEikCba* cba = static_cast< CEikCba* >( bgc->ButtonGroup() );
       
   140 
       
   141     if ( cba ) 
       
   142         {       
       
   143         bgc->SetBoundingRect( TRect() );
       
   144         cba->DrawNow();
       
   145         }
       
   146     
   110     if ( !iContainer )
   147     if ( !iContainer )
   111         {
   148         {
   112         iContainer = CXnWallpaperContainer::NewL();
   149         iContainer = CXnWallpaperContainer::NewL();
   113         iAvkonAppUi->AddToStackL( *this,  iContainer );
   150         iAppUi.AddToStackL( *this, iContainer );
   114         iContainer->ActivateL();
   151         iContainer->ActivateL();
   115         iContainer->DrawNow();
   152         iContainer->DrawNow();
   116         }
   153         }
   117     
   154     
   118     iData.iAppUid = aPrevViewId.iAppUid;
   155     iData.iAppUid = aPrevViewId.iAppUid;
   119     iData.iViewUid = aPrevViewId.iViewUid; 
   156     iData.iViewUid = aPrevViewId.iViewUid; 
   120     iData.iMultiple = EFalse;
   157     iData.iMultiple = EFalse;
   121     iData.iTimer = iTimer;
   158         
   122     
   159     if ( aCustomMessage == KMulti )
   123     if( aCustomMessage == KMulti )
       
   124         {
   160         {
   125         iData.iMultiple = ETrue;
   161         iData.iMultiple = ETrue;
   126         }
   162         }
   127 
   163 
   128     // Run image selection dialog asynchronously
   164     // Run image selection dialog asynchronously
   129     if ( iTimer->IsActive() )
   165     iTimer->Cancel();
   130         {
   166     iTimer->Start( 0, 1000, TCallBack( TimerCallbackL, this ) );
   131         iTimer->Cancel();
   167     
   132         }
   168     iAppUi.EffectManager()->UiRendered();
   133     iTimer->Start( 0, 1000, TCallBack( TimerCallbackL, &iData ) );
       
   134     }
   169     }
   135 
   170 
   136 // -----------------------------------------------------------------------------
   171 // -----------------------------------------------------------------------------
   137 // CXnWallpaperView::DoActivateL
   172 // CXnWallpaperView::DoActivateL
   138 // -----------------------------------------------------------------------------
   173 // -----------------------------------------------------------------------------
   139 //
   174 //
   140 void CXnWallpaperView::DoDeactivate()
   175 void CXnWallpaperView::DoDeactivate()
   141     {
   176     {
   142     if ( iContainer )
   177     if ( iContainer )
   143         {
   178         {
   144         iAvkonAppUi->RemoveFromStack( iContainer );
   179         iAppUi.RemoveFromStack( iContainer );
   145         delete iContainer;
   180         delete iContainer;
   146         iContainer = NULL;
   181         iContainer = NULL;
   147         }
   182         }
       
   183     
       
   184     iAppUi.EffectManager()->UiRendered();
   148     }
   185     }
   149 
   186 
   150 // -----------------------------------------------------------------------------
   187 // -----------------------------------------------------------------------------
   151 // CXnWallpaperView::TimerCallback
   188 // CXnWallpaperView::TimerCallback
   152 // -----------------------------------------------------------------------------
   189 // -----------------------------------------------------------------------------
   153 //
   190 //
   154 TInt CXnWallpaperView::TimerCallbackL(TAny *aPtr)
   191 TInt CXnWallpaperView::TimerCallbackL( TAny *aPtr )
   155     {
   192     {       
   156     TInt errAddWallpaper = KErrNone;
   193     CXnWallpaperView* self = reinterpret_cast< CXnWallpaperView* >( aPtr );
   157     
   194     self->iTimer->Cancel();
   158     TXnWallpaperViewData* data = reinterpret_cast<TXnWallpaperViewData*>( aPtr );
       
   159     data->iTimer->Cancel();
       
   160     
   195     
   161     CDesCArrayFlat* files = 
   196     CDesCArrayFlat* files = 
   162         new (ELeave) CDesCArrayFlat( KFileArrayGranularity );
   197         new (ELeave) CDesCArrayFlat( KFileArrayGranularity );    
   163     CleanupStack::PushL( files );
   198     CleanupStack::PushL( files );
   164     TBool selected = EFalse;
   199 
   165 
   200     TInt err( KErrNone );
   166     TRAPD( err, selected = MGFetch::RunL( *files, EImageFile, data->iMultiple ) );
   201     TBool selected( EFalse );
   167     if ( err == KErrNone &&
   202         
   168          selected &&
   203     TXnWallpaperViewData& data( self->iData );
   169          files->MdcaCount() > 0 )
   204     
   170         {
   205     CXnBackgroundManager& bg( self->iAppUi.ViewAdapter().BgManager() );
   171         // set wallpaper.
   206     
       
   207     TRAPD( fetch, selected = MGFetch::RunL( *files, EImageFile, data.iMultiple ) );
       
   208     
       
   209     if ( fetch == KErrNone && selected && files->MdcaCount() > 0 )                 
       
   210         {
       
   211         // set wallpaper
   172         if( files->MdcaCount() == 1 )
   212         if( files->MdcaCount() == 1 )
   173             {
   213             {                        
   174             CXnAppUiAdapter* appui = static_cast< CXnAppUiAdapter* >( iAvkonAppUi );
   214             err = bg.AddWallpaperL( files->MdcaPoint( 0 ) );
   175             CXnBackgroundManager& bgManager = appui->ViewAdapter().BgManager();
       
   176             errAddWallpaper = bgManager.AddWallpaperL( files->MdcaPoint( 0 ) );
       
   177             }
   215             }
   178         }
   216         }
       
   217     
   179     CleanupStack::PopAndDestroy( files );
   218     CleanupStack::PopAndDestroy( files );
   180 
   219 
   181     if( errAddWallpaper == KErrCACorruptContent )
   220     if ( err == KErrCACorruptContent )
   182         {
   221         {
   183         //load message text
   222         //load message text
   184         HBufC* msg = StringLoader::LoadLC( R_QTN_HS_CORRUPTED_IMAGE_NOTE );
   223         HBufC* msg = StringLoader::LoadLC( R_QTN_HS_CORRUPTED_IMAGE_NOTE );
   185         //ensure that dialog will not disappear immediatelly - by const. param
   224         //ensure that dialog will not disappear immediatelly - by const. param
   186         CAknErrorNote* dialog = new (ELeave) CAknErrorNote( true );
   225         CAknErrorNote* dialog = new (ELeave) CAknErrorNote( true );
   189         dialog->ExecuteLD( *msg );
   228         dialog->ExecuteLD( *msg );
   190         CleanupStack::Pop( dialog );
   229         CleanupStack::Pop( dialog );
   191         CleanupStack::PopAndDestroy( msg );
   230         CleanupStack::PopAndDestroy( msg );
   192         }
   231         }
   193     
   232     
   194     iAvkonAppUi->ActivateViewL( TVwsViewId( data->iAppUid, data->iViewUid ) );
   233     self->iAppUi.EffectManager()->BeginFullscreenEffectL( 
   195 
   234         KGfxContextCloseWallpaperView, self->iAppUi.ViewManager().ActiveViewData() );
   196     return EFalse;
   235     
   197     }
   236     self->iAppUi.ActivateViewL( TVwsViewId( data.iAppUid, data.iViewUid ) );
   198 
   237 
       
   238     return KErrNone;
       
   239     }
   199 
   240 
   200 //  End of File
   241 //  End of File