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 |
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 |