uifw/EikStd/dlgsrc/EIKDIALG.CPP
branchRCL_3
changeset 23 3d340a0166ff
parent 18 0aa5fbdfbc30
child 25 941195f2d488
equal deleted inserted replaced
18:0aa5fbdfbc30 23:3d340a0166ff
    82 // @return ETrue if cba is embedded.
    82 // @return ETrue if cba is embedded.
    83 // -----------------------------------------------------------------------------
    83 // -----------------------------------------------------------------------------
    84 //
    84 //
    85 TBool CbaEmbeddedInDialog( const TInt& aFlags )
    85 TBool CbaEmbeddedInDialog( const TInt& aFlags )
    86     {
    86     {
    87     return AknLayoutUtils::PenEnabled() && 
    87     return !( aFlags & EEikDialogFlagFillAppClientRect ) &&
    88         !( aFlags & EEikDialogFlagFillAppClientRect ) &&
       
    89         !( aFlags & EEikDialogFlagFillScreen ) &&
    88         !( aFlags & EEikDialogFlagFillScreen ) &&
    90         !( aFlags & EEikDialogFlagVirtualInput );
    89         !( aFlags & EEikDialogFlagVirtualInput ) &&
       
    90         !( aFlags & EEikDialogFlagNoEmbeddedSoftkeys );
    91     }
    91     }
    92 
    92 
    93 
    93 
    94 // ---------------------------------------------------------------------------
    94 // ---------------------------------------------------------------------------
    95 // ---------------------------------------------------------------------------
    95 // ---------------------------------------------------------------------------
   278         Extension()->iPublicFlags.Set( CEikDialogExtension::EFullyConstructed );
   278         Extension()->iPublicFlags.Set( CEikDialogExtension::EFullyConstructed );
   279         }
   279         }
   280 
   280 
   281     EnableContentObserver( ETrue );
   281     EnableContentObserver( ETrue );
   282 
   282 
       
   283     // Extension member variable iDeleteEmbeddedCba is used to track whether
       
   284     // dialog's implementation of CCoeControl::SizeChanged gets called. If it
       
   285     // isn't then embedded softkeys won't work.
       
   286     CEikDialogExtension* extension = Extension();
       
   287     TBool checkCba = extension && iButtonGroupContainer 
       
   288             && CbaEmbeddedInDialog( iDialogFlags );
       
   289         
       
   290     if ( checkCba )
       
   291         {
       
   292         extension->iDeleteEmbeddedCba = ETrue;
       
   293         }
       
   294 
   283     Layout();
   295     Layout();
       
   296 
       
   297     // At this point CBA's rect should be correctly set. If it isn't, then
       
   298     // assume that dialog didn't properly call CEikDialog::SizeChanged thus 
       
   299     // embedded softkeys won't work.
       
   300     // In that case softkeys are deleted and re-created as a window-owning
       
   301     // component in "legacy" way.    
       
   302     if ( checkCba && extension->iDeleteEmbeddedCba 
       
   303 	        && extension->iButtonGroupResourceId != 0 )
       
   304         {
       
   305         delete iButtonGroupContainer;
       
   306         iButtonGroupContainer = NULL;
       
   307         iButtonGroupContainer = CEikButtonGroupContainer::NewL(
       
   308                 CEikButtonGroupContainer::ECba,
       
   309                 CEikButtonGroupContainer::EHorizontal,
       
   310                 iButtonCommandObserver,
       
   311                 extension->iButtonGroupResourceId,
       
   312                 0 );
       
   313 
       
   314         iDialogFlags |= EEikDialogFlagNoEmbeddedSoftkeys; 
       
   315         }
       
   316 
   284     PostLayoutDynInitL();
   317     PostLayoutDynInitL();
   285     _AKNTRACE_FUNC_EXIT;
   318     _AKNTRACE_FUNC_EXIT;
   286 	}
   319 	}
   287 
   320 
   288 /**
   321 /**
   771             CEikButtonGroupContainer::ECba,
   804             CEikButtonGroupContainer::ECba,
   772             CEikButtonGroupContainer::EHorizontal,
   805             CEikButtonGroupContainer::EHorizontal,
   773             iButtonCommandObserver, aResourceId, *this, flags );
   806             iButtonCommandObserver, aResourceId, *this, flags );
   774 
   807 
   775     EnableContentObserver( ETrue );
   808     EnableContentObserver( ETrue );
       
   809     
       
   810     if ( Extension() )
       
   811         {
       
   812         Extension()->iButtonGroupResourceId = aResourceId;
       
   813         }
   776 	
   814 	
   777 	AknGlobalPopupPriorityController::AddSubPopupL(*this, *iButtonGroupContainer->ButtonGroup()->AsControl());
   815 	AknGlobalPopupPriorityController::AddSubPopupL(*this, *iButtonGroupContainer->ButtonGroup()->AsControl());
   778 	AknGlobalPopupPriorityController::AddPopupToControlStackL(*iButtonGroupContainer->ButtonGroup()->AsControl(), ECoeStackPriorityCba, ECoeStackFlagRefusesFocus);
   816 	AknGlobalPopupPriorityController::AddPopupToControlStackL(*iButtonGroupContainer->ButtonGroup()->AsControl(), ECoeStackPriorityCba, ECoeStackFlagRefusesFocus);
   779 	_AKNTRACE_FUNC_EXIT;
   817 	_AKNTRACE_FUNC_EXIT;
   780 	}
   818 	}
   911  * 
   949  * 
   912  * @since ER5U
   950  * @since ER5U
   913  */
   951  */
   914 EXPORT_C TSize CEikDialog::PreferredSize(const TSize& aMaxSize) const
   952 EXPORT_C TSize CEikDialog::PreferredSize(const TSize& aMaxSize) const
   915 	{
   953 	{
       
   954     _AKNTRACE_FUNC_ENTER;
   916 	if (iDialogFlags&EEikDialogFlagFillScreen)
   955 	if (iDialogFlags&EEikDialogFlagFillScreen)
   917 		return iEikonEnv->ScreenDevice()->SizeInPixels();
   956 		return iEikonEnv->ScreenDevice()->SizeInPixels();
   918 	else if (iDialogFlags&EEikDialogFlagFillAppClientRect)
   957 	else if (iDialogFlags&EEikDialogFlagFillAppClientRect)
   919 	
   958 	
   920 	    {
   959 	    {
   925             if ( uid.iAppUid != uid.iViewUid )
   964             if ( uid.iAppUid != uid.iViewUid )
   926                 {
   965                 {
   927                 CAknView* view = iAvkonViewAppUi->View(uid.iViewUid);
   966                 CAknView* view = iAvkonViewAppUi->View(uid.iViewUid);
   928                 if (view)
   967                 if (view)
   929                     {
   968                     {
       
   969                     _AKNTRACE_FUNC_EXIT;
   930                     return view->ClientRect().Size();
   970                     return view->ClientRect().Size();
   931                     }
   971                     }
   932                 else
   972                 else
   933                     {
   973                     {
       
   974                     _AKNTRACE_FUNC_EXIT;
   934                     return iEikonEnv->EikAppUi()->ClientRect().Size();
   975                     return iEikonEnv->EikAppUi()->ClientRect().Size();
   935                     }
   976                     }
   936                 }
   977                 }
   937             else
   978             else
   938                 {
   979                 {
       
   980                 _AKNTRACE_FUNC_EXIT;
   939                 return iEikonEnv->EikAppUi()->ClientRect().Size();
   981                 return iEikonEnv->EikAppUi()->ClientRect().Size();
   940                 }
   982                 }
   941             }
   983             }
   942         else
   984         else
   943             {
   985             {
       
   986             _AKNTRACE_FUNC_EXIT;
   944             return iEikonEnv->EikAppUi()->ClientRect().Size();
   987             return iEikonEnv->EikAppUi()->ClientRect().Size();
   945             }
   988             }
   946 	    }
   989 	    }
   947 		
   990 		
   948 
   991 
   989             
  1032             
   990             preferredSize += TSize( 0, cbaRect.Rect().Height() );
  1033             preferredSize += TSize( 0, cbaRect.Rect().Height() );
   991             }
  1034             }
   992         }
  1035         }
   993         
  1036         
       
  1037     _AKNTRACE_FUNC_EXIT;
   994 	return preferredSize;
  1038 	return preferredSize;
   995 	}
  1039 	}
   996 
  1040 
   997 /**
  1041 /**
   998  * Lays out the dialog's components when the size of the dialog is changed.
  1042  * Lays out the dialog's components when the size of the dialog is changed.
  1057                 {
  1101                 {
  1058                 // Otherway softkeys are located out of dialog rect
  1102                 // Otherway softkeys are located out of dialog rect
  1059                 cba->SetRect( TRect(0, 0, 0, 0 ) );
  1103                 cba->SetRect( TRect(0, 0, 0, 0 ) );
  1060                 }
  1104                 }
  1061             }
  1105             }
  1062 		}
  1106 
       
  1107         if ( Extension() )
       
  1108             {
       
  1109             Extension()->iDeleteEmbeddedCba = EFalse;
       
  1110             }
       
  1111         }
  1063 	if (iTitleBar)
  1112 	if (iTitleBar)
  1064 		{
  1113 		{
  1065 		TRect nullRect(0,0,0,0);
  1114 		TRect nullRect(0,0,0,0);
  1066 		iTitleBar->SetRect( nullRect );
  1115 		iTitleBar->SetRect( nullRect );
  1067 		}
  1116 		}
  1182  * 
  1231  * 
  1183  * @since ER5U
  1232  * @since ER5U
  1184  */
  1233  */
  1185 EXPORT_C void CEikDialog::Layout()
  1234 EXPORT_C void CEikDialog::Layout()
  1186 	{
  1235 	{
       
  1236     _AKNTRACE_FUNC_ENTER;
  1187     TAknWindowLineLayout windowLineLayoutScreen = AknLayoutScalable_Avkon::Screen().LayoutLine();
  1237     TAknWindowLineLayout windowLineLayoutScreen = AknLayoutScalable_Avkon::Screen().LayoutLine();
  1188     TRect rectZero = TRect(0,0,0,0);
  1238     TRect rectZero = TRect(0,0,0,0);
  1189     TAknLayoutRect layoutRect;
  1239     TAknLayoutRect layoutRect;
  1190     layoutRect.LayoutRect( rectZero, windowLineLayoutScreen );
  1240     layoutRect.LayoutRect( rectZero, windowLineLayoutScreen );
  1191     TRect rectScreen( layoutRect.Rect() );
  1241     TRect rectScreen( layoutRect.Rect() );
  1192 
  1242 
  1193 	TSize maxSize = rectScreen.Size();
  1243 	TSize maxSize = rectScreen.Size();
  1194 
  1244 
       
  1245     _AKNTRACE( "size = %d x %d", iSize.iWidth, iSize.iHeight );
  1195 	SetSizeAndPosition(PreferredSize( maxSize ));
  1246 	SetSizeAndPosition(PreferredSize( maxSize ));
       
  1247     _AKNTRACE( "size = %d x %d", iSize.iWidth, iSize.iHeight );
       
  1248     _AKNTRACE_FUNC_EXIT;
  1196 	}
  1249 	}
  1197 
  1250 
  1198 /**
  1251 /**
  1199  * Deletes the dialog line with the control identified by aControlId.
  1252  * Deletes the dialog line with the control identified by aControlId.
  1200  */
  1253  */
  1946 
  1999 
  1947     TBool effectTriggered = EFalse;
  2000     TBool effectTriggered = EFalse;
  1948     CAknAppUi* aknAppUi = static_cast<CAknAppUi*>(iEikonEnv->EikAppUi());
  2001     CAknAppUi* aknAppUi = static_cast<CAknAppUi*>(iEikonEnv->EikAppUi());
  1949     
  2002     
  1950     if (!(iDialogFlags & EEikDialogFlagDelayEffects)
  2003     if (!(iDialogFlags & EEikDialogFlagDelayEffects)
       
  2004         && IsFocusedWindowGroup( this )
  1951         && GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
  2005         && GfxTransEffect::IsRegistered(this) && IsVisible() && effectButton
  1952 #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS        
  2006 #ifdef RD_UI_TRANSITION_EFFECTS_POPUPS        
  1953         && !(iDialogFlags & EEikDialogFlagSleeping)
  2007         && !(iDialogFlags & EEikDialogFlagSleeping)
  1954 #endif
  2008 #endif
  1955         && (!aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground())
  2009         && (!aknAppUi->IsFullScreenApp() || aknAppUi->IsForeground())
  1979         if (effectTriggered)
  2033         if (effectTriggered)
  1980             {
  2034             {
  1981             GfxTransEffect::NotifyExternalState(ECaptureComponentsAbort, (const TDesC8*)this);
  2035             GfxTransEffect::NotifyExternalState(ECaptureComponentsAbort, (const TDesC8*)this);
  1982             GfxTransEffect::Abort(this);
  2036             GfxTransEffect::Abort(this);
  1983             }
  2037             }
       
  2038             
       
  2039         // Draw again in cast any content change in OkToExitL
       
  2040         DrawDeferred();
  1984         
  2041         
  1985         _AKNTRACE("CEikDialog::TryExitL return with OkToExitL false");
  2042         _AKNTRACE("CEikDialog::TryExitL return with OkToExitL false");
  1986         return;
  2043         return;
  1987         }
  2044         }
  1988         
  2045