uifw/EikStd/coctlsrc/akntoolbarextensionview.cpp
branchRCL_3
changeset 9 aabf2c525e0f
parent 0 2f259fa3e83a
child 16 71dd06cfe933
--- a/uifw/EikStd/coctlsrc/akntoolbarextensionview.cpp	Fri Feb 19 23:04:46 2010 +0200
+++ b/uifw/EikStd/coctlsrc/akntoolbarextensionview.cpp	Fri Mar 12 15:43:43 2010 +0200
@@ -32,6 +32,10 @@
 
 #include "aknresourceprovider.h"
 
+#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
+#include <gfxtranseffect/gfxtranseffect.h>
+#include <akntransitionutils.h>
+#endif
 const TInt KNoItemSelected = -1; 
 const TUint32 KToolbarExtensionBgColor = 0x00000000;
 const TInt KToolBarExtensionBgAlpha = 0x7F;
@@ -70,6 +74,16 @@
 //
 CAknToolbarExtensionView::~CAknToolbarExtensionView()
     {
+#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
+    if ( IsVisible() )
+        {
+        CAknControl::MakeVisible( EFalse );
+        }
+    if ( GfxTransEffect::IsRegistered( this ) )
+        {
+        GfxTransEffect::Deregister( this );
+        }
+#endif
     SetFocus( EFalse );
     CEikonEnv::Static()->EikAppUi()->RemoveFromStack( this );
     if ( iSelectedItem >= 0 && iSelectedItem < iItems.Count() ) 
@@ -184,9 +198,23 @@
         
         // Calling this here, so that iVisibleItems array has been updated and
         // all items visible in extension get call makevisible
+#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
+        if ( !GfxTransEffect::IsRegistered( this ) )
+            {
+            CAknControl::MakeVisible( aVisible );
+            }            
+#else
         CAknControl::MakeVisible( aVisible );
+#endif 
         SetRect( rect );     
         DrawableWindow()->SetOrdinalPosition( 0, ECoeWinPriorityNormal );    
+#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS       
+        if ( GfxTransEffect::IsRegistered( this ) )
+            {
+            CAknTransitionUtils::MakeVisibleSubComponents( this,
+                                    CAknTransitionUtils::EAppearInvisible );
+            }
+#endif
         TBool floating = !IsNonFocusing(); 
         for ( TInt i = 0; i < iItems.Count(); i++ )
             {
@@ -227,16 +255,61 @@
                 }
             iPreviousItem = KNoItemSelected;
             }
+#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS        
+        if ( GfxTransEffect::IsRegistered( this ) )
+            {
+            CAknTransitionUtils::SetAllParents( this );
+            GfxTransEffect::NotifyExternalState( EInternalHandleSequence, 
+                    ( const TDesC8* )this );
+            GfxTransEffect::Begin( this, KGfxControlAppearAction );
+            GfxTransEffect::NotifyExternalState( ECaptureComponentsBegin, 
+                    ( const TDesC8* )this );
+            GfxTransEffect::SetDemarcation( this, rect );
+            CAknControl::MakeVisible( ETrue );
+            CAknTransitionUtils::MakeVisibleSubComponents( this,
+                                    CAknTransitionUtils::EAppearVisible );
+            GfxTransEffect::NotifyExternalState( ECaptureComponentsEnd, 
+                    ( const TDesC8* )this );
+            GfxTransEffect::End( this );
+            }
+        else
+            {
         DrawNow(); 
+            }
+#else
+        DrawNow();
+#endif 
         }
     else if ( !aVisible && isVisible )
         {
         CEikonEnv::Static()->EikAppUi()->UpdateStackedControlFlags( this, 
             ~0, ECoeStackFlagRefusesFocus | ECoeStackFlagRefusesAllKeys );
         CEikonEnv::Static()->EikAppUi()->HandleStackChanged();
-        CAknControl::MakeVisible( aVisible );
         TRAP_IGNORE( SelectItemL( iSelectedItem, EFalse ) ); 
-        DrawableWindow()->SetOrdinalPosition( 0, ECoeWinPriorityNeverAtFront );
+        DrawableWindow()->SetOrdinalPosition( 0, 
+                ECoeWinPriorityNeverAtFront );
+#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
+        if ( GfxTransEffect::IsRegistered( this ) )
+            {
+            CAknTransitionUtils::SetAllParents( this );
+            GfxTransEffect::Begin( this, KGfxControlDisappearAction );
+            GfxTransEffect::NotifyExternalState( ECaptureComponentsBegin, 
+                    ( const TDesC8* )this );
+            GfxTransEffect::SetDemarcation( this, Rect() );
+            CAknControl::MakeVisible( EFalse );
+            CAknTransitionUtils::MakeVisibleSubComponents( this,
+                                    CAknTransitionUtils::EForceInvisible );
+            GfxTransEffect::NotifyExternalState( ECaptureComponentsEnd, 
+                    ( const TDesC8* )this );
+            GfxTransEffect::End( this );
+            }
+        else
+            {
+            CAknControl::MakeVisible( EFalse );
+            }
+#else
+        CAknControl::MakeVisible( EFalse );
+#endif 
         }
     else 
         {
@@ -814,6 +887,9 @@
     iSelectedItem( KNoItemSelected ), iNumberOfColumns( 1 ),
     iIsDownOutside( EFalse )
     {
+#ifdef RD_UI_TRANSITION_EFFECTS_POPUPS
+    GfxTransEffect::Register( this, KGfxTransEffectToolbarExtensionControlUid);
+#endif
     }
 
 
@@ -956,11 +1032,8 @@
          
     if( landscape && !floating )
         {
-
-        TRect extButtonRect( iExtension->Rect() );
-
         // Calculate new y coordinate according to button middle point
-        TInt newY = extButtonRect.iTl.iY + mainPaneRect.iTl.iY;             
+        TInt newY = ( mainPaneRect.Height() - viewSize.iHeight ) / 2 + mainPaneRect.iTl.iY;            
         // Check that rect with new y fits to extension view area
         if( newY < extensionRect.iTl.iY ) // Top
             {