uifw/AvKon/src/AknPreviewPopUp.cpp
branchRCL_3
changeset 19 aecbbf00d063
parent 18 fcdfafb36fe7
child 20 d48ab3b357f1
--- a/uifw/AvKon/src/AknPreviewPopUp.cpp	Thu Aug 19 10:11:06 2010 +0300
+++ b/uifw/AvKon/src/AknPreviewPopUp.cpp	Tue Aug 31 15:28:30 2010 +0300
@@ -30,12 +30,9 @@
 #include <aknview.h>
 #include <apgwgnam.h>
 #include <aknlayoutscalable_avkon.cdl.h>
-#include <akntransitionutils.h>
+
 #include <AknTasHook.h> // for testability hooks
 #include <touchfeedback.h>
-#include <gfxtranseffect/gfxtranseffect.h>
-#include <akntranseffect.h>
-#include <akntransitionutils.h>
 const TInt KWindowPosition = 1000;             // window's position
 
 // ============================ MEMBER FUNCTIONS ===============================
@@ -44,6 +41,7 @@
 // CAknPreviewPopUp::NewL
 // -----------------------------------------------------------------------------
 //
+#if defined( RD_SCALABLE_UI_V2 ) || defined( RD_PREVIEW_POPUP )
 CAknPreviewPopUp* CAknPreviewPopUp::NewL( CCoeControl& aContent,
         CAknPreviewPopUpController& aController,
         const TInt aStyle )
@@ -70,7 +68,6 @@
       iFlags( aStyle ),
       iAllowUpEvent(EFalse)
     {
-    GfxTransEffect::Register( this, KGfxPreviewPopupControlUid );
     }
 
 // -----------------------------------------------------------------------------
@@ -79,22 +76,7 @@
 //
 CAknPreviewPopUp::~CAknPreviewPopUp()
     {
-    if( iIsDeleted )
-        {
-    	*iIsDeleted = ETrue ;
-        iIsDeleted = 0 ;
-        }
-
-    if ( IsVisible() )
-        {
-        iCloseMenu = ETrue;
-        iController.HidePopUp();
-        }
-		
     AKNTASHOOK_REMOVE();
-    
-    GfxTransEffect::Deregister( this );
-
     if ( CapturesPointer() )
         {
         SetPointerCapture( EFalse );
@@ -132,30 +114,58 @@
     iBgContext = CAknsFrameBackgroundControlContext::NewL(
         iFrameId, nullRect, nullRect, EFalse );
 
-    CreateWindowL();
-    EnableWindowTransparency();
-    
-    TInt stackPriority = ECoeStackPriorityCba;
-    
     if ( !( iFlags & CAknPreviewPopUpController::EPermanentMode ) )
         {
+        
+        CreateWindowL();
+        
+        // try to enable window transparency
+        if( CAknEnv::Static()->TransparencyEnabled() )
+            {
+            Window().SetRequiredDisplayMode( EColor16MA );
+            if ( Window().SetTransparencyAlphaChannel() == KErrNone )
+                {
+                
+                Window().SetBackgroundColor( ~0 );
+                }
+            }
+
+        iAvkonAppUi->AddToStackL( this, ECoeStackPriorityCba,
+                                  ECoeStackFlagRefusesAllKeys |
+                                  ECoeStackFlagRefusesFocus );
+
         Window().SetPointerGrab( ETrue );
         SetGloballyCapturing( ETrue );
+        //fix for TSW error PTPA-7HNA25
         Window().SetOrdinalPosition(KWindowPosition);
         }
     else
         {
-        stackPriority = ECoeStackPriorityDefault;
+        CreateWindowL();
+
+        // try to enable window transparency
+        if( CAknEnv::Static()->TransparencyEnabled() )
+            {
+            Window().SetRequiredDisplayMode( EColor16MA );
+            if ( Window().SetTransparencyAlphaChannel() == KErrNone )
+                {
+                
+                Window().SetBackgroundColor( ~0 );
+                }
+            }
+        
+        iAvkonAppUi->AddToStackL( this, ECoeStackPriorityDefault,
+                                  ECoeStackFlagRefusesAllKeys |
+                                  ECoeStackFlagRefusesFocus );
+                                  
         Window().SetOrdinalPosition( 0, ECoeWinPriorityNormal );
         }
 
-    iAvkonAppUi->AddToStackL( this, stackPriority,
-                              ECoeStackFlagRefusesAllKeys |
-                              ECoeStackFlagRefusesFocus );
+    EnableDragEvents();
 
-    EnableDragEvents();
     SetComponentsToInheritVisibility( ETrue );
 
+
     iContent.SetBackground( this );
     iContent.SetContainerWindowL( *this );
     iContent.ActivateL();
@@ -171,6 +181,7 @@
         SetRect( layoutRect.Rect() );
         }
 
+    DrawableWindow()->EnableBackup( EWindowBackupAreaBehind );
     MakeVisible( EFalse );   
     ActivateL();
     }
@@ -183,28 +194,20 @@
     {
     if ( !( iFlags & CAknPreviewPopUpController::EPermanentMode ) )
         {
+        //fix for TSW error PTPA-7HNA25
         Window().SetOrdinalPosition( 0 );
         iAvkonAppUi->UpdateStackedControlFlags( this, NULL,
                                                 ECoeStackFlagRefusesAllKeys );
 
-        SetPointerCapture( ETrue );
+        if ( AknLayoutUtils::PenEnabled() )
+            {
+            SetPointerCapture( ETrue );
+            }
         }
 
     iCloseMenu = EFalse; 
-    TBool useTfx = !( iFlags & CAknPreviewPopUpController::EPermanentMode 
-            || iFlags & CAknPreviewPopUpController::EFixedMode );
-    
-    if ( useTfx && GfxTransEffect::IsRegistered( this ) )
-        {
-        GfxTransEffect::Begin( this, KGfxControlAppearAction );
-        MakeVisible( ETrue );
-        GfxTransEffect::SetDemarcation( this, iPosition );
-        GfxTransEffect::End( this );
-        }
-    else
-        {
-        MakeVisible( ETrue );
-        }
+    Window().Invalidate();
+    MakeVisible( ETrue );
     if( GrabbingComponent() )
         {
         iCloseMenu = ETrue;
@@ -224,28 +227,12 @@
         return; 
         }
 
-    // Skip disappear transition if the popup is either permanent, fixed or
-    // faded. Fading status is checked because there can't be two parallel
-    // effects applied to the same window.
-    TBool useTfx = !( iFlags & CAknPreviewPopUpController::EPermanentMode 
-            || iFlags & CAknPreviewPopUpController::EFixedMode ) 
-                    && !Window().IsFaded();
-    
-    if ( useTfx && GfxTransEffect::IsRegistered( this ) )
-        {
-        GfxTransEffect::Begin( this, KGfxControlDisappearAction );
-        MakeVisible( EFalse );
-        GfxTransEffect::End( this );
-        }
-    else
-        {
-        MakeVisible( EFalse );
-        }
-
     Window().ClearRedrawStore();
+    MakeVisible( EFalse );
 
     if ( !( iFlags & CAknPreviewPopUpController::EPermanentMode ) )
         {
+        //fix for TSW error PTPA-7HNA25
         Window().SetOrdinalPosition( KWindowPosition );
         iAvkonAppUi->UpdateStackedControlFlags( this,
                                                 ECoeStackFlagRefusesAllKeys,
@@ -416,6 +403,17 @@
         }
     }
 
+// -----------------------------------------------------------------------------
+// CAknPreviewPopUp::MakeVisible
+// -----------------------------------------------------------------------------
+//
+void CAknPreviewPopUp::MakeVisible( TBool aVisible )
+    {
+    if ( aVisible != IsVisible() )
+        {
+        CCoeControl::MakeVisible( aVisible );
+        }
+    }
     
 // -----------------------------------------------------------------------------
 // CAknPreviewPopUp::CountComponentControls
@@ -525,10 +523,7 @@
 // -----------------------------------------------------------------------------
 //
 void CAknPreviewPopUp::HandlePointerEventL( const TPointerEvent& aPointerEvent )
-    {   
-	TBool isDelete = EFalse; 
-	iIsDeleted = &isDelete;
-	
+    {
     if ( AknLayoutUtils::PenEnabled() )
         {
         iCloseMenu = EFalse;
@@ -536,18 +531,14 @@
             {
             SetPointerCapture( EFalse );
             }
-
+    
+        CAknTouchPane* touchPane = iAvkonAppUi->TouchPane();
+        
         // redirect pointer event to content
         if ( Rect().Contains( aPointerEvent.iPosition ) && IsVisible() )
             {
-            iAllowUpEvent = ETrue;         
-            CleanupStack::PushL( TCleanupItem( CleanLocalRef, this ) );
+            iAllowUpEvent = ETrue;
             CCoeControl::HandlePointerEventL( aPointerEvent );
-            CleanupStack::Pop();
-            if( isDelete )
-            	{
-            	return;
-            	}
             if ( !( iFlags & CAknPreviewPopUpController::EPermanentMode ) && aPointerEvent.iType == TPointerEvent::EButton1Up && IsVisible() )
                 {
             	  // if pointer up is already redirected to the content, but the popup is still visible,
@@ -558,6 +549,26 @@
             }
         else
             {
+            if ( touchPane )
+                {
+                if ( touchPane->IsVisible() )
+                    {
+                    // touchpane is a window-owning control -> Rect() cannot be used
+                    TRect touchPaneRect( touchPane->Position(), touchPane->Size() );
+                
+                    if ( touchPaneRect.Contains( aPointerEvent.iParentPosition ) )
+                        {
+                        TPointerEvent pointerEvent( aPointerEvent );
+                    
+                        // make event's coordinates touch pane relative
+                        pointerEvent.iPosition = aPointerEvent.iParentPosition - 
+                                                 touchPaneRect.iTl;
+                    
+                        static_cast<CCoeControl*>( touchPane )->HandlePointerEventL( 
+                                                                    pointerEvent );
+                        }
+                    }
+                }
             if ( !( iFlags & CAknPreviewPopUpController::EPermanentMode ) && 
                 aPointerEvent.iType != TPointerEvent::EDrag &&
                 aPointerEvent.iType != TPointerEvent::EButtonRepeat )
@@ -574,16 +585,10 @@
                     
                     if ( aPointerEvent.iType != TPointerEvent::EButton1Up )
                         {
-                        // popup will be hiden when EButton1Down comes.
                         MTouchFeedback* feedback = MTouchFeedback::Instance();
                         if ( feedback )
                             {
-                            TTouchLogicalFeedback feedbackType = ETouchFeedbackPopUp;
-                            if ( CAknTransitionUtils::TransitionsEnabled( AknTransEffect::EComponentTransitionsOff ) )
-                                {
-                                feedbackType = ETouchFeedbackOptionsMenuClosed;
-                                }
-                            feedback->InstantFeedback( feedbackType );
+                            feedback->InstantFeedback( ETouchFeedbackPopUp );
                             }        
                         iCloseMenu = ETrue; 
                         iController.HidePopUp(); 
@@ -607,19 +612,13 @@
                             }
                         else
                             {
-                            // popup will be hiden when EButton1Down comes.
-                            TTouchLogicalFeedback feedbackType = ETouchFeedbackPopUp;
-                            if ( CAknTransitionUtils::TransitionsEnabled( AknTransEffect::EComponentTransitionsOff ) )
-                                {
-                                feedbackType = ETouchFeedbackOptionsMenuClosed;
-                                }
                             feedback->InstantFeedback( this,
-                                                       feedbackType,
+                                                       ETouchFeedbackPopUp,
                                                        aPointerEvent );
                             }
                         }
                     iCloseMenu = ETrue;
-                    iController.HidePopUp();
+                    iController.HidePopUp();    
                     }          
                 }
                 
@@ -630,13 +629,7 @@
                     aPointerEvent.iType == TPointerEvent::EButtonRepeat ||
                     (aPointerEvent.iType == TPointerEvent::EButton1Up && iAllowUpEvent ) )
                     {
-                    CleanupStack::PushL( TCleanupItem( CleanLocalRef, this ) );
                     CCoeControl::HandlePointerEventL( aPointerEvent );
-                    CleanupStack::Pop();
-                    if( isDelete )
-                    	{
-                    	return;
-                    	}
                     }
                 }
             else
@@ -644,13 +637,7 @@
                 if ( aPointerEvent.iType == TPointerEvent::EDrag || 
                     aPointerEvent.iType == TPointerEvent::EButtonRepeat )
                     {
-                    CleanupStack::PushL( TCleanupItem( CleanLocalRef, this ) );
                     CCoeControl::HandlePointerEventL( aPointerEvent );
-                    CleanupStack::Pop();
-                    if( isDelete )
-                    	{
-                    	return;
-                    	}
                     }
                 }
                 
@@ -660,8 +647,6 @@
             iAllowUpEvent = EFalse;
             }
         }
-       
-    iIsDeleted = NULL;
     }
     
 // -----------------------------------------------------------------------------
@@ -669,27 +654,12 @@
 // -----------------------------------------------------------------------------
 //
 TKeyResponse CAknPreviewPopUp::OfferKeyEventL( const TKeyEvent& /*aKeyEvent*/,
-                                               TEventCode aType )
+                                               TEventCode /*aType*/ )
     {
-    TKeyResponse ret ( EKeyWasNotConsumed );
-
     if ( !( iFlags & CAknPreviewPopUpController::EPermanentMode ) )
         {
-        if ( !( iFlags & CAknPreviewPopUpController::EConsumeKeys ) )
-            {
-            iCloseMenu = ETrue;
-            iController.HidePopUp();
-            }
-        else
-            {
-            if ( aType == EEventKey || aType == EEventKeyUp )
-                {
-                iCloseMenu = ETrue;
-                iController.HidePopUp();
-
-                ret = EKeyWasConsumed;
-                }
-            }
+        iCloseMenu = ETrue; 
+        iController.HidePopUp();
         }
 
     if ( CapturesPointer() )
@@ -697,7 +667,7 @@
         SetPointerCapture( EFalse );
         }
 
-    return ret;
+    return EKeyWasNotConsumed;
     }
     
 // -----------------------------------------------------------------------------
@@ -727,16 +697,78 @@
 //
 void CAknPreviewPopUp::Draw( const TRect& aRect ) const
     {
-    CWindowGc& gc = SystemGc();
+    if( CAknEnv::Static()->TransparencyEnabled() )
+        {
+    
+        CWindowGc& gc = SystemGc();
+
+        TRegionFix< 4 > region;
+        region.AddRect( Rect() );
+        region.SubRect( iContent.Rect() );
+        gc.SetClippingRegion( region );
+    
+        DrawBackground( gc, aRect );
+
+        gc.CancelClippingRegion();
+        }
+    else
+        {
+        CWindowGc& gc = SystemGc();
+        MAknsSkinInstance* skin = AknsUtils::SkinInstance();
 
-    TRegionFix<4> region;
-    region.AddRect( Rect() );
-    region.SubRect( iContent.Rect() );
-    gc.SetClippingRegion( region );
+        if ( !AknsDrawUtils::Background( skin, iBgContext, gc, aRect ) )
+            {
+            gc.Clear( aRect );
+            }
+    
+        if ( HasHeading() )
+            {
+            gc.SetClippingRect( aRect );
+        
+            // heading graphics
+            TAknLayoutRect layoutRect;
+            layoutRect.LayoutRect( Rect(),
+                TAknWindowComponentLayout::Compose( 
+                AknLayoutScalable_Avkon::heading_preview_pane(),
+                AknLayoutScalable_Avkon::bg_popup_heading_pane_cp2( 1 ) ).LayoutLine() );
+        
+            TRect outerRect( layoutRect.Rect() );
+        
+            layoutRect.LayoutRect( outerRect, 
+                AknLayoutScalable_Avkon::bg_popup_heading_pane_g1() );
+            
+            // There's no error checking since if skinned drawing fails heading 
+            // text will be drawn on top of the background.
+            AknsDrawUtils::DrawFrame( skin, gc, outerRect, layoutRect.Rect(), 
+                KAknsIIDQsnFrPopupHeading, KAknsIIDDefault );
+        
+            // heading text                               
+            TAknLayoutText textLayout;
+            textLayout.LayoutText( Rect(),
+                TAknWindowComponentLayout::ComposeText(
+                AknLayoutScalable_Avkon::heading_preview_pane(),
+                AknLayoutScalable_Avkon::heading_preview_pane_t1( 1 ) ).LayoutLine() );
 
-    DrawBackground( gc, aRect );
+            gc.SetBrushStyle( CGraphicsContext::ENullBrush );
+            
+            TRgb color( textLayout.Color() );
 
-    gc.CancelClippingRegion();
+            if ( iFlags & CAknPreviewPopUpController::ELayoutSubMenu )
+                {
+                AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors,
+                     EAknsCIQsnTextColorsCG55 );
+                }
+            else
+                {
+                AknsUtils::GetCachedColor( skin, color, KAknsIIDQsnTextColors,
+                     EAknsCIQsnTextColorsCG19 );
+                }
+        
+            textLayout.DrawText( gc, *iHeadingText, ETrue, color );
+        
+            gc.CancelClippingRect();
+            }
+        }
     }
 
 // -----------------------------------------------------------------------------
@@ -863,14 +895,6 @@
         }   
     }
 
-// -----------------------------------------------------------------------------
-// CAknPreviewPopUp::CleanLocalRef
-// -----------------------------------------------------------------------------
-//
-void CAknPreviewPopUp::CleanLocalRef( TAny* aParam )
-    {
-    static_cast<CAknPreviewPopUp*>( aParam )->iIsDeleted = NULL;
-    }
+#endif // RD_SCALABLE_UI_V2 || RD_PREVIEW_POPUP
 
 //  End of File  
-