uifw/EikStd/dlgsrc/EIKDIALG.CPP
branchRCL_3
changeset 25 941195f2d488
parent 23 3d340a0166ff
child 29 a8834a2e9a96
--- a/uifw/EikStd/dlgsrc/EIKDIALG.CPP	Tue May 11 16:27:42 2010 +0300
+++ b/uifw/EikStd/dlgsrc/EIKDIALG.CPP	Tue May 25 12:58:19 2010 +0300
@@ -41,6 +41,7 @@
 #include <eikdpage.h>
 #include <eikmop.h>
 #include <aknenv.h>
+#include <touchfeedback.h>
 //<SKIN>
 #include "eikdialogext.h"
 #include <AknsListBoxBackgroundControlContext.h>
@@ -70,6 +71,7 @@
 #include <AknQueryDialog.h>
 #include <aknQueryControl.h>
 #include <aknitemactionmenuregister.h>
+#include <layoutmetadata.cdl.h>
 
 #include "akncbacontentobserver.h"
 #include "akntrace.h"
@@ -849,32 +851,33 @@
 	_AKNTRACE_FUNC_ENTER;
 	if (iDialogFlags&EEikDialogFlagFillAppClientRect)
 	    {
+        TRect destRect = iEikonEnv->EikAppUi()->ClientRect();       
         // if this is a view app then ask client rect from the currently active view
         TVwsViewId uid;    
         if ( iAvkonAppUi->GetActiveViewId( uid ) == KErrNone )
             {
             if ( uid.iAppUid != uid.iViewUid )
                 {
-                CAknView* view = iAvkonViewAppUi->View(uid.iViewUid);
-                if (view)
+                CAknView* view = iAvkonViewAppUi->View( uid.iViewUid );
+                if ( view )
                     {
-                    SetRect(view->ClientRect());
-                    }
-                else
-                    {
-                    SetRect(iEikonEnv->EikAppUi()->ClientRect());
+                    destRect = view->ClientRect();
                     }
                 }
-            else
+            }
+
+        if ( !Layout_Meta_Data::IsLandscapeOrientation() && iButtonGroupContainer != NULL )
+            {
+            TRect controlPane;
+            AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EControlPane, controlPane );
+
+            if ( destRect.iBr.iY > controlPane.iTl.iY )
                 {
-                SetRect(iEikonEnv->EikAppUi()->ClientRect());
+                destRect.iBr.iY = controlPane.iTl.iY;
                 }
-            }
-         else
-            {
-            SetRect( iEikonEnv->EikAppUi()->ClientRect() );
-            }
-	    }
+            }        
+        SetRect( destRect );
+        }
 	else
         {
         SetRect( TRect( AknPopupUtils::Position( aSize, this ), aSize ) );
@@ -1652,6 +1655,16 @@
 		GfxTransEffect::NotifyExternalState(EInternalHandleSequence, (const TDesC8*)this);
 #endif
 		GfxTransEffect::Begin(this, KGfxControlAppearAction);
+        MTouchFeedback* feedback = NULL;
+		if(AknLayoutUtils::PenEnabled())
+		    {
+            feedback = static_cast<MTouchFeedback*>(ExtensionInterface(KExIfTactileFeedbackUid));
+		    }
+		if(feedback && CAknTransitionUtils::TransitionsEnabled(AknTransEffect::EComponentTransitionsOff ))
+		    {
+            feedback->InstantFeedback(this, ETouchFeedbackIncreasingPopUp,
+                                        ETouchFeedbackVibra, TPointerEvent());
+		    }
 		GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
 		
 		TRect demarcation;
@@ -1664,6 +1677,11 @@
 
 		GfxTransEffect::NotifyExternalState(ECaptureComponentsEnd, (const TDesC8*)this);
 		GfxTransEffect::End(this);
+		if(feedback)
+		    {
+            feedback->InstantFeedback(this, ETouchFeedbackPopUp,
+                                        ETouchFeedbackVibra, TPointerEvent());
+		    }
 		}
 	else
 		{
@@ -1999,7 +2017,13 @@
 
     TBool effectTriggered = EFalse;
     CAknAppUi* aknAppUi = static_cast<CAknAppUi*>(iEikonEnv->EikAppUi());
-    
+
+    MTouchFeedback* feedback = NULL;
+    if(AknLayoutUtils::PenEnabled())
+        {
+        feedback = static_cast<MTouchFeedback*>(ExtensionInterface(KExIfTactileFeedbackUid));
+        }
+
     if (!(iDialogFlags & EEikDialogFlagDelayEffects)
         && IsFocusedWindowGroup( this )
         && GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
@@ -2012,6 +2036,21 @@
         {
         CAknTransitionUtils::SetAllParents(this);
         GfxTransEffect::Begin(this, KGfxControlDisappearAction);
+
+        if(feedback)
+            {
+            if(CAknTransitionUtils::TransitionsEnabled(AknTransEffect::EComponentTransitionsOff))
+                {
+                feedback->InstantFeedback(this, ETouchFeedbackDecreasingPopUp,
+                                        ETouchFeedbackVibra, TPointerEvent());
+                }
+            else
+                {
+                feedback->InstantFeedback(this, ETouchFeedbackPopUp,
+                                        ETouchFeedbackVibra, TPointerEvent());
+                }
+            }
+
         GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
         TRect demarcation;
         CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup, demarcation);
@@ -2080,6 +2119,21 @@
                 TRect demarcation;
                 CAknTransitionUtils::SetAllParents(this);
                 GfxTransEffect::Begin(this, KGfxControlDisappearAction);
+
+                if(feedback)
+                    {
+                    if(CAknTransitionUtils::TransitionsEnabled(AknTransEffect::EComponentTransitionsOff))
+                        {
+                        feedback->InstantFeedback(this, ETouchFeedbackDecreasingPopUp,
+                                                ETouchFeedbackVibra, TPointerEvent());
+                        }
+                    else
+                        {
+                        feedback->InstantFeedback(this, ETouchFeedbackPopUp,
+                                                ETouchFeedbackVibra , TPointerEvent());
+                        }
+                    }
+
                 GfxTransEffect::NotifyExternalState(ECaptureComponentsBegin, (const TDesC8*)this);
                 CAknTransitionUtils::GetDemarcation(CAknTransitionUtils::EPopup, demarcation);
                 GfxTransEffect::SetDemarcation(this, demarcation);
@@ -3241,7 +3295,8 @@
     // softkeys
     if ( iExtension && CbaEmbeddedInDialog( iDialogFlags ) )
         {
-        TSize dialogSize( Rect().Size() );
+        TRect oldDialogRect( Rect() );
+        TSize dialogSize( oldDialogRect.Size() );
         CEikCba* cba = static_cast<CEikCba*>(
                 iButtonGroupContainer->ButtonGroup() );
         TBool cbaVisible( cba->IsVisible() && !cba->IsEmpty() );
@@ -3266,8 +3321,14 @@
             dialogSize.iHeight -= cbaRect.Rect().Height();
             }
 
-        SetRect( TRect(
-            AknPopupUtils::Position( dialogSize, this ), dialogSize ) );
+        TRect newDialogRect( AknPopupUtils::Position( dialogSize, cbaVisible ),
+                             dialogSize );
+        SetRect( newDialogRect );
+        
+        if ( oldDialogRect != newDialogRect )
+            {
+            DrawDeferred();
+            }
         }
     }