|
1 /* |
|
2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 #include <aknpopuplayout.h> |
|
20 #include <e32def.h> |
|
21 #include <eiklbx.h> |
|
22 #include <aknPopupHeadingPane.h> |
|
23 #include <AknPanic.h> |
|
24 #include <AknLayout.lag> |
|
25 #include <aknenv.h> |
|
26 |
|
27 #include <AknUtils.h> |
|
28 #include <eiksfont.h> |
|
29 #include <avkon.rsg> |
|
30 #include <AknsDrawUtils.h> |
|
31 #include <AknsControlContext.h> |
|
32 #include <eikfrlbd.h> |
|
33 #include <AknsBasicBackgroundControlContext.h> |
|
34 #include <aknmessagequerycontrol.h> |
|
35 #include <aknsfld.h> |
|
36 |
|
37 #include <skinlayout.cdl.h> |
|
38 |
|
39 #include <AknLayout2ScalableDef.h> |
|
40 #include <aknlayoutscalable_avkon.cdl.h> |
|
41 #include <layoutmetadata.cdl.h> |
|
42 #include <aknlayoutscalable_apps.cdl.h> |
|
43 |
|
44 #include <touchfeedback.h> |
|
45 #include <aknlists.h> |
|
46 |
|
47 |
|
48 static CCoeControl *FindControl(TAknPopupLayoutsNode *aNode, TInt aId) |
|
49 { |
|
50 while(aNode) |
|
51 { |
|
52 if (aId == aNode->iId) |
|
53 { |
|
54 return aNode->iControl; |
|
55 } |
|
56 aNode = aNode -> iNext; |
|
57 } |
|
58 return NULL; |
|
59 } |
|
60 |
|
61 static TInt GetMaxListHeight() |
|
62 { |
|
63 TAknLayoutRect temp, layout; |
|
64 |
|
65 TRect mainPane; |
|
66 TRect statusPane; |
|
67 TRect controlPane; |
|
68 AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EPopupParent, mainPane ); |
|
69 AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EStatusPane, statusPane ); |
|
70 AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EControlPane, controlPane ); |
|
71 |
|
72 // in landscape orientation popuplist can't go on top of statuspane |
|
73 if ( !Layout_Meta_Data::IsLandscapeOrientation() ) |
|
74 { |
|
75 mainPane.iTl.iY -= statusPane.Height(); |
|
76 } |
|
77 |
|
78 // treat mainpane+statuspane area as popup window |
|
79 // too bad we can't use this, because e.g. QVGA landscape has border-size 7 |
|
80 // in avkon layout and border-size 9 in skin drawing... |
|
81 /*temp.LayoutRect( mainPane, AknLayoutScalable_Avkon::listscroll_menu_pane(0)); |
|
82 layout.LayoutRect( temp.Rect(), AknLayoutScalable_Avkon::list_menu_pane(0)); |
|
83 return layout.Rect().Height();*/ |
|
84 |
|
85 // shadow |
|
86 TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation(); |
|
87 |
|
88 TAknLayoutRect insideArea; |
|
89 insideArea.LayoutRect( |
|
90 mainPane, |
|
91 AknLayoutScalable_Avkon::bg_popup_window_pane_g1(varietyIndex) ); |
|
92 |
|
93 return insideArea.Rect().Height(); |
|
94 } |
|
95 |
|
96 |
|
97 EXPORT_C |
|
98 void AknPopupLayouts::HandleSizeChanged( TAknPopupWindowLayoutDef &aDef, |
|
99 TAknPopupLayouts aLayout_1, |
|
100 CAknPopupHeadingPane *aHeading, |
|
101 CEikListBox *aListBox, |
|
102 CCoeControl *aWindowOwningControl ) |
|
103 { |
|
104 TAknPopupLayoutsNode list = { 0, EListNode, aListBox }; |
|
105 TAknPopupLayoutsNode heading = { &list, EHeadingNode, aHeading }; |
|
106 TAknPopupLayoutsNode windowOwning = { &heading, EWindowOwningNode, aWindowOwningControl }; |
|
107 HandleSizeChanged(aDef, aLayout_1, &windowOwning); |
|
108 } |
|
109 |
|
110 |
|
111 EXPORT_C |
|
112 void AknPopupLayouts::HandleSizeChanged( TAknPopupWindowLayoutDef &aDef, |
|
113 TAknPopupLayouts aLayout_1, |
|
114 TAknPopupLayoutsNode *aNode) |
|
115 { |
|
116 CAknPopupHeadingPane *aHeading = (CAknPopupHeadingPane*)FindControl(aNode, EHeadingNode); |
|
117 CEikListBox *aListBox = (CEikListBox*)FindControl(aNode, EListNode); |
|
118 CCoeControl *aWindowOwningControl = FindControl(aNode, EWindowOwningNode); |
|
119 CAknMessageQueryControl *aMsgQueryCtrl = (CAknMessageQueryControl*)FindControl(aNode, EMessageBoxNode); |
|
120 |
|
121 TInt aLayout = aLayout_1; |
|
122 TInt numofitems = aListBox->Model()->NumberOfItems(); |
|
123 |
|
124 aListBox->View()->ItemDrawer()->SetSkinEnabledL(ETrue); |
|
125 |
|
126 TInt maxListHeight = GetMaxListHeight(); |
|
127 |
|
128 // position popup window's bottom correctly |
|
129 TRect clientRect; |
|
130 AknLayoutUtils::LayoutMetricsRect(AknLayoutUtils::EPopupParent, clientRect); |
|
131 // set windowrect to minimum size - this will be adjusted later |
|
132 TAknLayoutRect windowRect; |
|
133 windowRect.LayoutRect( clientRect, AknLayoutScalable_Avkon::popup_menu_window(8)); |
|
134 aDef.iWindowRect = windowRect.Rect(); |
|
135 TRAP_IGNORE( aListBox->View()->ItemDrawer()->SetSkinEnabledL(ETrue) ); |
|
136 |
|
137 // Popup window when the size does not change based on |
|
138 // the number of items. |
|
139 TBool fixedWindowSize = EFalse; |
|
140 if ( (aLayout & EAknPopupLayoutsDynamic) || numofitems == 0 || |
|
141 (aLayout & EAknPopupLayoutsFind) ) |
|
142 { |
|
143 aLayout &= ~EAknPopupLayoutsDynamic; |
|
144 fixedWindowSize = ETrue; |
|
145 } |
|
146 |
|
147 // heading ============================================================= |
|
148 TInt spaceForHeading = 0; |
|
149 if (aHeading) |
|
150 { |
|
151 aHeading->SetLayout( CAknPopupHeadingPane::EListHeadingPane ); |
|
152 TAknLayoutRect tempHeadingRect; |
|
153 tempHeadingRect.LayoutRect(clientRect, |
|
154 AknLayoutScalable_Avkon::heading_pane(0)); |
|
155 spaceForHeading = tempHeadingRect.Rect().Height(); |
|
156 maxListHeight -= spaceForHeading; |
|
157 } |
|
158 aDef.iPopupMenuWindowOffset=TPoint(0,spaceForHeading); |
|
159 |
|
160 |
|
161 // findbox ============================================================= |
|
162 TBool windowSizeFind = EFalse; |
|
163 TInt spaceForFind = 0; |
|
164 if (aLayout & EAknPopupLayoutsFind) |
|
165 { |
|
166 aLayout &= ~EAknPopupLayoutsFind; |
|
167 windowSizeFind = ETrue; |
|
168 // calculate space needed for find |
|
169 TAknLayoutRect tempFindRect; |
|
170 tempFindRect.LayoutRect(clientRect,AknLayoutScalable_Avkon::find_popup_pane_cp2(0)); |
|
171 spaceForFind = tempFindRect.Rect().Height(); |
|
172 maxListHeight -= spaceForFind; |
|
173 } |
|
174 |
|
175 // messagebox ========================================================== |
|
176 TRect messageRect; |
|
177 TInt messageNumOfLines = 0; |
|
178 TBool messageBox = EFalse; |
|
179 if (aMsgQueryCtrl && aMsgQueryCtrl->Lines() > 0) |
|
180 { |
|
181 messageBox = ETrue; |
|
182 messageNumOfLines = aMsgQueryCtrl->Lines(); |
|
183 TInt varietyIndex = 0; |
|
184 switch(messageNumOfLines) |
|
185 { |
|
186 case (0): |
|
187 case (1): varietyIndex = 0; |
|
188 break; |
|
189 case (2): varietyIndex = 1; |
|
190 break; |
|
191 default : varietyIndex = 2; |
|
192 } |
|
193 TAknWindowLineLayout lay = AknLayoutScalable_Apps::loc_type_pane(varietyIndex).LayoutLine(); |
|
194 TAknLayoutRect layout; |
|
195 layout.LayoutRect( TRect(0,0,0,0), lay ); |
|
196 messageRect = layout.Rect(); |
|
197 maxListHeight -= messageRect.Height(); |
|
198 } |
|
199 |
|
200 TInt minItems = 1; |
|
201 |
|
202 TRect scrollBarRect(0,0,0,0); |
|
203 |
|
204 TAknWindowLineLayout listLayout; |
|
205 TAknLayoutScalableParameterLimits listLimits; |
|
206 |
|
207 switch(aLayout) |
|
208 { |
|
209 case EPopupSNotePopupWindow: |
|
210 case EMenuUnknownColumnWindow: |
|
211 case EMenuUnknownFormattedCellWindow: |
|
212 case EMenuWindow: |
|
213 { |
|
214 minItems = aHeading ? 5 : 6; |
|
215 listLayout = AknLayoutScalable_Avkon::list_single_pane_cp2(0); |
|
216 listLimits = AknLayoutScalable_Avkon::list_single_pane_cp2_ParamLimits(); |
|
217 break; |
|
218 } |
|
219 case EMenuGraphicWindow: |
|
220 { |
|
221 minItems = 5; |
|
222 listLayout = AknLayoutScalable_Avkon::list_single_graphic_pane_cp2(0); |
|
223 listLimits = AknLayoutScalable_Avkon::list_single_graphic_pane_cp2_ParamLimits(); |
|
224 break; |
|
225 } |
|
226 case EMenuGraphicHeadingWindow: |
|
227 { |
|
228 minItems = 5; |
|
229 listLayout = AknLayoutScalable_Avkon::list_single_graphic_heading_pane_cp2(0); |
|
230 listLimits = AknLayoutScalable_Avkon::list_single_graphic_heading_pane_cp2_ParamLimits(); |
|
231 break; |
|
232 } |
|
233 case EMenuDoubleWindow: |
|
234 { |
|
235 minItems = 3; |
|
236 listLayout = AknLayoutScalable_Avkon::list_double_pane_cp2(0); |
|
237 listLimits = AknLayoutScalable_Avkon::list_double_pane_cp2_ParamLimits(); |
|
238 break; |
|
239 } |
|
240 case EMenuDoubleLargeGraphicWindow: |
|
241 { |
|
242 minItems = 3; |
|
243 listLayout = AknLayoutScalable_Avkon::list_double_large_graphic_pane_cp2(0); |
|
244 listLimits = AknLayoutScalable_Avkon::list_double_large_graphic_pane_cp2_ParamLimits(); |
|
245 break; |
|
246 } |
|
247 } |
|
248 |
|
249 if (!fixedWindowSize) |
|
250 { |
|
251 minItems = 1; |
|
252 } |
|
253 |
|
254 TInt maxLayoutItems = listLimits.LastRow() + 1; // last row is a zero based index, we need num items which is 1 based |
|
255 |
|
256 //aDef.iVertLineExt1.LayoutRect(TRect(1,1,1,1), 0, 0,0, ELayoutEmpty, ELayoutEmpty, 0,0); |
|
257 //aDef.iVertLineExt2.LayoutRect(TRect(1,1,1,1), 0, 0,0, ELayoutEmpty, ELayoutEmpty, 0,0); |
|
258 |
|
259 TAknLayoutRect listItemRect; |
|
260 listItemRect.LayoutRect( aDef.iWindowRect, listLayout); |
|
261 TInt listItemHeight = listItemRect.Rect().Height(); |
|
262 TInt maxItems = maxListHeight / listItemHeight; |
|
263 // minItems == 1 only if the popuplist is dynamically changeable |
|
264 if ( (numofitems > 1) && (minItems == 1) ) |
|
265 { |
|
266 minItems = numofitems; |
|
267 } |
|
268 if (minItems > maxItems) |
|
269 { |
|
270 minItems = maxItems; |
|
271 } |
|
272 // maxItems might be greater than max items from layout -> use layout's maximum |
|
273 if (minItems > maxLayoutItems) |
|
274 { |
|
275 minItems = maxLayoutItems; |
|
276 } |
|
277 |
|
278 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
279 |
|
280 TAknLayoutRect temp, layout; |
|
281 TRect screenRect; |
|
282 AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screenRect ); |
|
283 TAknWindowLineLayout lineLayout = AknLayoutScalable_Avkon::listscroll_menu_pane(0).LayoutLine(); |
|
284 |
|
285 // Layout data of listscroll_menu_pane are changed for CR 417-35260. |
|
286 // The change is just for QHD landscape model. |
|
287 // The CR makes listscroll_menu_pane's ir or il bigger than normal, |
|
288 // so that width of list item is smaller than needs. Then, first cell |
|
289 // of list item can not be drawn on proper position. |
|
290 // Adjustment of layout is a solution for this problem. This is not a perfect idea, but |
|
291 // creating a new layout for popuplist is too complex to do that. Adjustment is a must. |
|
292 if(Layout_Meta_Data::IsLandscapeOrientation()) |
|
293 { |
|
294 TInt offset = AknListBoxLayouts::AdjustPopupLayoutData( screenRect ); |
|
295 if (!AknLayoutUtils::LayoutMirrored()) |
|
296 { |
|
297 lineLayout.ir -= offset; |
|
298 } |
|
299 else |
|
300 { |
|
301 lineLayout.il -= offset; |
|
302 } |
|
303 } |
|
304 temp.LayoutRect( window_rect, lineLayout); |
|
305 |
|
306 layout.LayoutRect( temp.Rect(), AknLayoutScalable_Avkon::list_menu_pane(0)); |
|
307 TRect tempListRect = layout.Rect(); // this is list's rect for the whole window |
|
308 |
|
309 // subtract heading, findbox and messagebox from tempListRect |
|
310 tempListRect.iBr.iY -= spaceForFind; |
|
311 tempListRect.iTl.iY += spaceForHeading; |
|
312 tempListRect.iTl.iY += messageRect.Height(); |
|
313 |
|
314 // We really don't want parent relative list layout here because findbox will be overwritten. |
|
315 // Just calculate list height and use that. |
|
316 TRect nullRect(0,0,0,0); |
|
317 listLayout.iH = (TInt16)(minItems * listItemHeight); |
|
318 listLayout.ib = ELayoutEmpty; |
|
319 |
|
320 aDef.iListRect.LayoutRect(tempListRect, |
|
321 listLayout); |
|
322 |
|
323 // we have to scale iWindowRect to list rect - layout is not (yet) correct |
|
324 TInt usedHeight = aDef.iListRect.Rect().Height() |
|
325 + spaceForFind |
|
326 + spaceForHeading |
|
327 + messageRect.Height(); |
|
328 |
|
329 // popupwindow's inside area |
|
330 TInt varietyIndex = Layout_Meta_Data::IsLandscapeOrientation(); |
|
331 |
|
332 TAknLayoutRect insideArea; |
|
333 insideArea.LayoutRect( |
|
334 window_rect, |
|
335 AknLayoutScalable_Avkon::bg_popup_window_pane_g1(varietyIndex) ); |
|
336 |
|
337 if (layout.Rect().Height() < usedHeight) |
|
338 { |
|
339 aDef.iWindowRect.iTl.iY -= (usedHeight - layout.Rect().Height()); |
|
340 } |
|
341 |
|
342 AknLayoutUtils::TAknCbaLocation cbaLocation = AknLayoutUtils::CbaLocation(); |
|
343 |
|
344 // In landscape we have to center (on y-axis) popup window (but not with bottom CBA) |
|
345 if (varietyIndex == 1 && cbaLocation != AknLayoutUtils::EAknCbaLocationBottom) |
|
346 { |
|
347 TRect mainPane; |
|
348 AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EPopupParent, mainPane ); |
|
349 TInt diff = (mainPane.Height()-aDef.iWindowRect.Height()) / 2; |
|
350 aDef.iWindowRect.iTl.iY -= diff; |
|
351 aDef.iWindowRect.iBr.iY -= diff; |
|
352 |
|
353 // with right CBA, move window to the right side of the screen |
|
354 if (cbaLocation == AknLayoutUtils::EAknCbaLocationRight) |
|
355 { |
|
356 TInt offset = mainPane.Width()-aDef.iWindowRect.iBr.iX; |
|
357 aDef.iWindowRect.iTl.iX += offset; |
|
358 aDef.iWindowRect.iBr.iX += offset; |
|
359 } |
|
360 |
|
361 //should this be uncommented?? |
|
362 // If we have left CBA, we move window to left side of screen (on x-axis). |
|
363 /*else if (cbaLocation == AknLayoutUtils::EAknCbaLocationLeft) |
|
364 { |
|
365 TInt xOffset = aDef.iWindowRect.iTl.iX; |
|
366 if ( xOffset > 0 ) |
|
367 { |
|
368 aDef.iWindowRect.iTl.iX = 0; |
|
369 aDef.iWindowRect.iBr.iX -= xOffset; |
|
370 } |
|
371 }*/ |
|
372 } |
|
373 |
|
374 TRect screen; |
|
375 AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EScreen, screen ); |
|
376 |
|
377 TAknLayoutRect cbaRect; |
|
378 cbaRect.LayoutRect( screen, |
|
379 AknLayoutScalable_Avkon::popup_sk_window( 0 ).LayoutLine() ); |
|
380 |
|
381 if ( AknLayoutUtils::PenEnabled() ) |
|
382 { |
|
383 TSize size( aDef.iWindowRect.Size() ); |
|
384 // add softkey height |
|
385 size.iHeight += cbaRect.Rect().Height(); |
|
386 |
|
387 // Reduce listbox's and popup's height if total height is more than |
|
388 // screen height. |
|
389 if ( size.iHeight > screen.Height() ) |
|
390 { |
|
391 listLayout.iH -= ( size.iHeight - screen.Height() ); |
|
392 aDef.iListRect.LayoutRect( tempListRect, listLayout ); |
|
393 |
|
394 size.iHeight = screen.Height(); |
|
395 } |
|
396 |
|
397 aDef.iWindowRect.SetRect( AknPopupUtils::Position( size, ETrue ), size ); |
|
398 } |
|
399 |
|
400 // now we finally know the window rect: first setup heading |
|
401 if (aHeading) |
|
402 { |
|
403 aDef.iHeadingRect.LayoutRect(AknPopupLayouts::MenuRect(aDef), |
|
404 AknLayoutScalable_Avkon::heading_pane(0)); |
|
405 } |
|
406 |
|
407 MenuPopupWindowGraphics(aDef); |
|
408 aWindowOwningControl->SetRect(WindowRect(aDef)); |
|
409 HandleSizeAndPositionOfComponents(aDef, aListBox, aHeading); |
|
410 |
|
411 layout.LayoutRect(MenuRect(aDef), lineLayout); |
|
412 TRect scrollBarClientRect(layout.Rect()); |
|
413 |
|
414 if ( AknLayoutUtils::PenEnabled() ) |
|
415 { |
|
416 // remove softkey height that was added earlier so that |
|
417 // scroll bar doesn't get behind the softkey |
|
418 scrollBarClientRect.iBr.iY -= cbaRect.Rect().Height(); |
|
419 } |
|
420 |
|
421 if (aHeading) |
|
422 { |
|
423 scrollBarClientRect.iTl.iY += spaceForHeading; |
|
424 } |
|
425 |
|
426 if (windowSizeFind) |
|
427 { |
|
428 scrollBarClientRect.iBr.iY -= spaceForFind; |
|
429 } |
|
430 |
|
431 if (messageBox) |
|
432 { |
|
433 scrollBarClientRect.iTl.iY += messageRect.Height(); |
|
434 } |
|
435 varietyIndex = 0; |
|
436 AknLayoutUtils::LayoutVerticalScrollBar( |
|
437 aListBox->ScrollBarFrame(), |
|
438 scrollBarClientRect, |
|
439 AknLayoutScalable_Avkon::scroll_pane_cp25(varietyIndex).LayoutLine() ) ; |
|
440 |
|
441 if (messageBox) |
|
442 { |
|
443 TAknLayoutRect msgQuery; |
|
444 |
|
445 TInt varietyIndex = 0; |
|
446 switch(messageNumOfLines) |
|
447 { |
|
448 case (0): |
|
449 case (1): varietyIndex = 0; |
|
450 break; |
|
451 case (2): varietyIndex = 1; |
|
452 break; |
|
453 default : varietyIndex = 2; |
|
454 } |
|
455 msgQuery.LayoutRect( AknPopupLayouts::MenuRect(aDef), |
|
456 AknLayoutScalable_Apps::loc_type_pane(varietyIndex).LayoutLine() ); |
|
457 aMsgQueryCtrl->SetRect(msgQuery.Rect()); |
|
458 } |
|
459 |
|
460 window_rect = WindowRect(aDef); |
|
461 MAknsControlContext *cc = AknsDrawUtils::ControlContext( aListBox ); |
|
462 TBool defaultContext = EFalse; |
|
463 if (!cc) |
|
464 { |
|
465 cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext(); |
|
466 defaultContext = ETrue; |
|
467 } |
|
468 if (cc) |
|
469 { |
|
470 CAknsBasicBackgroundControlContext *bcc = (CAknsBasicBackgroundControlContext*)cc; |
|
471 TAknLayoutRect popupBgRect; |
|
472 popupBgRect.LayoutRect(window_rect, |
|
473 SkinLayout::Popup_windows_skin_placing__background_slice__Line_1(window_rect)); |
|
474 bcc->SetBitmap(KAknsIIDQsnFrPopupCenter); |
|
475 if (defaultContext) bcc->SetRect(popupBgRect.Rect()); |
|
476 bcc->SetParentPos(aWindowOwningControl->PositionRelativeToScreen()); |
|
477 if (defaultContext) |
|
478 bcc->SetParentPos(TPoint(0,0)); |
|
479 } |
|
480 // handled in CFormattedCellListBoxDataExtension, since listbox does not always cover whole |
|
481 // window rect (listquery/popup list), especially when items are added after construction |
|
482 /* |
|
483 // note, that cleanup is done in ~CFormattedCellListBoxData() |
|
484 // or ( shudder ) in ~CColumnListBoxData() |
|
485 MTouchFeedback* feedback = MTouchFeedback::Instance(); |
|
486 if( feedback ) |
|
487 { |
|
488 feedback->SetFeedbackArea( aListBox, 0, aListBox->Rect(), |
|
489 ETouchFeedbackBasic, ETouchEventStylusDown ); |
|
490 } |
|
491 */ |
|
492 } |
|
493 |
|
494 EXPORT_C void AknPopupLayouts::HandleSizeAndPositionOfComponents(const TAknPopupWindowLayoutDef &aDef, |
|
495 CCoeControl *aContent, |
|
496 CAknPopupHeadingPane *aHeading) |
|
497 { |
|
498 __ASSERT_DEBUG(aContent->MinimumSize() == aDef.iListRect.Rect().Size(), RDebug::Print(_L("AknPopupLayouts:ERROR, control minimumsize and LAF spec does not match!"))); |
|
499 TRect lbrect = aDef.iListRect.Rect(); |
|
500 TRect headrect; |
|
501 |
|
502 aContent->SetRect(lbrect); |
|
503 if (aHeading) |
|
504 { |
|
505 headrect = aDef.iHeadingRect.Rect(); |
|
506 aHeading->SetRect(headrect); |
|
507 } |
|
508 } |
|
509 |
|
510 EXPORT_C void AknPopupLayouts::CheckRange(TInt &aValue, TInt aMin, TInt aMax) |
|
511 { |
|
512 if (aValue > aMax) aValue = aMax; |
|
513 if (aValue < aMin) aValue = aMin; |
|
514 } |
|
515 |
|
516 // Disable "unreferenced formal parameter" for when aEikEnv is not used in the AKN_LAF_COLOR_ENV macro. |
|
517 #pragma warning(disable : 4100) |
|
518 EXPORT_C void AknPopupLayouts::HandleDraw(CEikonEnv* /*aEikEnv*/, |
|
519 CWindowGc &aGc, |
|
520 const TAknPopupWindowLayoutDef &aDef, |
|
521 CEikListBox* aListBox, |
|
522 CAknPopupHeadingPane* aHeading) |
|
523 { |
|
524 TRect windowRect = MenuRect(const_cast<TAknPopupWindowLayoutDef&>(aDef)); |
|
525 MAknsSkinInstance *skin = AknsUtils::SkinInstance(); |
|
526 MAknsControlContext *cc = AknsDrawUtils::ControlContext( aListBox ); |
|
527 TBool windowFrameDrawn = EFalse; |
|
528 if (!cc) cc = aListBox->View()->ItemDrawer()->SkinBackgroundControlContext(); |
|
529 |
|
530 TRegionFix<5> dontDrawRegion; |
|
531 TRegionFix<22> drawRegion; |
|
532 if ( aListBox ) |
|
533 { |
|
534 dontDrawRegion.AddRect( aListBox->Rect() ); |
|
535 |
|
536 // If there are scroll bars and they draw their own background, take |
|
537 // them out of clipping region |
|
538 CEikScrollBarFrame* scrollBarFrame = aListBox->ScrollBarFrame(); |
|
539 if (scrollBarFrame) |
|
540 { |
|
541 CEikScrollBar* hBar = scrollBarFrame->GetScrollBarHandle( |
|
542 CEikScrollBar::EHorizontal); |
|
543 CEikScrollBar* vBar = scrollBarFrame->GetScrollBarHandle( |
|
544 CEikScrollBar::EVertical); |
|
545 TBool drawHorizontal = ETrue; |
|
546 TBool drawVertical = ETrue; |
|
547 scrollBarFrame->DrawBackgroundState(drawHorizontal, drawVertical); |
|
548 drawHorizontal = drawHorizontal && hBar && hBar->IsVisible(); |
|
549 drawVertical = drawVertical && vBar && vBar->IsVisible(); |
|
550 if (drawHorizontal) |
|
551 { |
|
552 TRect scrollBarRect(hBar->Rect()); |
|
553 if (hBar->OwnsWindow()) |
|
554 { |
|
555 TPoint windowPos = aDef.iWindowRect.iTl; |
|
556 TPoint scrollBarPos = hBar->PositionRelativeToScreen(); |
|
557 scrollBarRect.Move(scrollBarPos - windowPos); |
|
558 } |
|
559 dontDrawRegion.AddRect(scrollBarRect); |
|
560 } |
|
561 if (drawVertical) |
|
562 { |
|
563 TRect scrollBarRect(vBar->Rect()); |
|
564 if (vBar->OwnsWindow()) |
|
565 { |
|
566 TPoint windowPos = aDef.iWindowRect.iTl; |
|
567 TPoint scrollBarPos = vBar->PositionRelativeToScreen(); |
|
568 scrollBarRect.Move(scrollBarPos - windowPos); |
|
569 } |
|
570 dontDrawRegion.AddRect(scrollBarRect); |
|
571 } |
|
572 } |
|
573 } |
|
574 if ( aHeading ) |
|
575 { |
|
576 dontDrawRegion.AddRect( aHeading->Rect() ); |
|
577 } |
|
578 drawRegion.AddRect( windowRect ); |
|
579 drawRegion.SubRegion( dontDrawRegion ); |
|
580 if (cc) |
|
581 { |
|
582 const TAknsItemID *popupBgId = &KAknsIIDQsnBgPopupBackground; |
|
583 TAknLayoutRect popupBgRect; |
|
584 popupBgRect.LayoutRect(windowRect, SkinLayout::Popup_windows_skin_placing__background_slice__Line_1(windowRect)); |
|
585 AknsDrawUtils::DrawCachedImage(skin, aGc, popupBgRect.Rect(), *popupBgId); |
|
586 |
|
587 const TAknsItemID *sliceId = &KAknsIIDQsnBgSlicePopup; |
|
588 TAknLayoutRect sliceRect; |
|
589 sliceRect.LayoutRect(windowRect, SkinLayout::Popup_windows_skin_placing__background_slice__Line_2()); |
|
590 AknsDrawUtils::DrawCachedImage(skin, aGc, sliceRect.Rect(), *sliceId); |
|
591 |
|
592 TAknLayoutRect topLeft; |
|
593 topLeft.LayoutRect(windowRect, SkinLayout::Popup_windows_skin_placing__frame_general__Line_2()); |
|
594 |
|
595 TAknLayoutRect bottomRight; |
|
596 bottomRight.LayoutRect(windowRect, SkinLayout::Popup_windows_skin_placing__frame_general__Line_5()); |
|
597 |
|
598 TRect outerRect = TRect(topLeft.Rect().iTl, bottomRight.Rect().iBr); |
|
599 TRect innerRect = TRect(topLeft.Rect().iBr, bottomRight.Rect().iTl); |
|
600 aGc.SetPenStyle(CGraphicsContext::ENullPen); |
|
601 const TAknsItemID *frameId = &KAknsIIDQsnFrPopup; |
|
602 const TAknsItemID *frameCenterId = &KAknsIIDQsnFrPopupCenter; |
|
603 aGc.SetClippingRegion( drawRegion ); |
|
604 windowFrameDrawn = AknsDrawUtils::DrawFrame(skin, aGc, outerRect, innerRect, *frameId, *frameCenterId); |
|
605 aGc.CancelClippingRegion(); |
|
606 } |
|
607 if (!windowFrameDrawn) |
|
608 { |
|
609 AknDraw::DrawWindowShadow(aGc, aDef.iCover, aDef.iSecond, aDef.iFirst, aDef.iOutline, aDef.iInside); |
|
610 } |
|
611 } |
|
612 #pragma warning(default : 4100) |
|
613 |
|
614 |
|
615 EXPORT_C TRect AknPopupLayouts::MenuRect(TAknPopupWindowLayoutDef &aDef) |
|
616 { |
|
617 return TRect(TPoint(0,0), aDef.iWindowRect.Size()); |
|
618 } |
|
619 |
|
620 |
|
621 EXPORT_C void AknPopupLayouts::MenuPopupWindowGraphics(TAknPopupWindowLayoutDef &aDef) |
|
622 { |
|
623 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
624 TAknWindowLineLayout s0 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_graphics_Line_1(window_rect); |
|
625 TAknWindowLineLayout s1 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_graphics_Line_2(window_rect); |
|
626 TAknWindowLineLayout s2 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_graphics_Line_3(window_rect); |
|
627 TAknWindowLineLayout s3 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_graphics_Line_4(window_rect); |
|
628 TAknWindowLineLayout s4 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_graphics_Line_5(window_rect); |
|
629 |
|
630 aDef.iCover.LayoutRect( window_rect, s0); |
|
631 aDef.iSecond.LayoutRect( window_rect, s1); |
|
632 aDef.iFirst.LayoutRect( window_rect, s2); |
|
633 aDef.iOutline.LayoutRect(window_rect, s3); |
|
634 aDef.iInside.LayoutRect( window_rect, s4); |
|
635 } |
|
636 |
|
637 EXPORT_C void AknPopupLayouts::SetupMenuPopupWindow(TAknPopupWindowLayoutDef &aDef, TInt num, TBool heading) |
|
638 { |
|
639 SetupDefaults(aDef); |
|
640 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
641 TAknWindowLineLayout listLayout = AKN_LAYOUT_WINDOW_list_menu_pane(heading?1:0, num-1); |
|
642 // We really don't want parent relative list layout here because findbox will be overwritten. |
|
643 // Just calculate list height and use that. |
|
644 TRect nullRect(0,0,0,0); |
|
645 TRect listItemRect = RectFromLayout(nullRect, AknLayoutScalable_Avkon::list_single_number_heading_pane_cp2(0)); |
|
646 listLayout.iH = (TInt16)(num * listItemRect.Height()); |
|
647 listLayout.ib = ELayoutEmpty; |
|
648 |
|
649 aDef.iListRect.LayoutRect(window_rect, listLayout); |
|
650 |
|
651 //aDef.iListRect.LayoutRect(window_rect, AKN_LAYOUT_WINDOW_list_menu_pane(heading?1:0, num-1)); |
|
652 |
|
653 TAknWindowLineLayout part1 = AKN_LAYOUT_WINDOW_Pop_up_window_list_pane_descendants_Line_8; |
|
654 TAknWindowLineLayout part2 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants_Line_2; |
|
655 |
|
656 // Combine two layouts togeher. |
|
657 if (part2.iC != ELayoutEmpty) part1.iC = part2.iC; |
|
658 if (part2.il != ELayoutEmpty) part1.il = part2.il; |
|
659 if (part2.it != ELayoutEmpty) part1.it = part2.it; |
|
660 if (part2.ir != ELayoutEmpty) part1.ir = part2.ir; |
|
661 if (part2.ib != ELayoutEmpty) part1.ib = part2.ib; |
|
662 if (part2.iW != ELayoutEmpty) part1.iW = part2.iW; |
|
663 if (part2.iH != ELayoutEmpty) part1.iH = part2.iH; |
|
664 |
|
665 aDef.iHeadingRect.LayoutRect(window_rect, part1); |
|
666 |
|
667 //MenuPopupWindowGraphics(aDef); |
|
668 } |
|
669 |
|
670 EXPORT_C void AknPopupLayouts::SetupPopupMenuGraphicWindow(TAknPopupWindowLayoutDef &aDef, TInt num, TBool heading) |
|
671 { |
|
672 SetupDefaults(aDef); |
|
673 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
674 TAknWindowLineLayout listLayout = AKN_LAYOUT_WINDOW_list_menu_graphic_pane(heading?1:0, num-1); |
|
675 // We really don't want parent relative list layout here because findbox will be overwritten. |
|
676 // Just calculate list height and use that. |
|
677 TRect nullRect(0,0,0,0); |
|
678 TRect listItemRect = RectFromLayout(nullRect, AknLayoutScalable_Avkon::list_single_graphic_heading_pane_cp2(0)); |
|
679 listLayout.iH = (TInt16)(num * listItemRect.Height()); |
|
680 listLayout.ib = ELayoutEmpty; |
|
681 |
|
682 aDef.iListRect.LayoutRect(window_rect, listLayout); |
|
683 |
|
684 //aDef.iListRect.LayoutRect(window_rect, AKN_LAYOUT_WINDOW_list_menu_graphic_pane(heading?1:0, num-1)); |
|
685 TAknWindowLineLayout part1 = AKN_LAYOUT_WINDOW_Pop_up_window_list_pane_descendants_Line_8; |
|
686 TAknWindowLineLayout part2 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants_Line_2; |
|
687 |
|
688 // Combine two layouts togeher. |
|
689 if (part2.iC != ELayoutEmpty) part1.iC = part2.iC; |
|
690 if (part2.il != ELayoutEmpty) part1.il = part2.il; |
|
691 if (part2.it != ELayoutEmpty) part1.it = part2.it; |
|
692 if (part2.ir != ELayoutEmpty) part1.ir = part2.ir; |
|
693 if (part2.ib != ELayoutEmpty) part1.ib = part2.ib; |
|
694 if (part2.iW != ELayoutEmpty) part1.iW = part2.iW; |
|
695 if (part2.iH != ELayoutEmpty) part1.iH = part2.iH; |
|
696 |
|
697 aDef.iHeadingRect.LayoutRect(window_rect, part1); |
|
698 |
|
699 //MenuPopupWindowGraphics(aDef); |
|
700 } |
|
701 |
|
702 EXPORT_C void AknPopupLayouts::SetupPopupMenuGraphicHeadingWindow(TAknPopupWindowLayoutDef &aDef, TInt num, TBool heading) |
|
703 { |
|
704 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
705 TAknWindowLineLayout listLayout = AKN_LAYOUT_WINDOW_list_menu_graphic_heading_pane(heading?1:0, num-1); |
|
706 // We really don't want parent relative list layout here because findbox will be overwritten. |
|
707 // Just calculate list height and use that. |
|
708 TRect nullRect(0,0,0,0); |
|
709 TRect listItemRect = RectFromLayout(nullRect, AknLayoutScalable_Avkon::list_single_graphic_heading_pane_cp2(0)); |
|
710 listLayout.iH = (TInt16)(num * listItemRect.Height()); |
|
711 listLayout.ib = ELayoutEmpty; |
|
712 |
|
713 aDef.iListRect.LayoutRect(window_rect, listLayout); |
|
714 |
|
715 TAknWindowLineLayout part1 = AKN_LAYOUT_WINDOW_Pop_up_window_list_pane_descendants_Line_8; |
|
716 TAknWindowLineLayout part2 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants_and_elements__single_graphic_heading__Line_2; |
|
717 // Combine two layouts togeher. |
|
718 if (part2.iC != ELayoutEmpty) part1.iC = part2.iC; |
|
719 if (part2.il != ELayoutEmpty) part1.il = part2.il; |
|
720 if (part2.it != ELayoutEmpty) part1.it = part2.it; |
|
721 if (part2.ir != ELayoutEmpty) part1.ir = part2.ir; |
|
722 if (part2.ib != ELayoutEmpty) part1.ib = part2.ib; |
|
723 if (part2.iW != ELayoutEmpty) part1.iW = part2.iW; |
|
724 if (part2.iH != ELayoutEmpty) part1.iH = part2.iH; |
|
725 |
|
726 aDef.iHeadingRect.LayoutRect(window_rect, part1); |
|
727 |
|
728 //MenuPopupWindowGraphics(aDef); |
|
729 |
|
730 const TAknWindowLineLayout lines[] = |
|
731 { |
|
732 AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants_and_elements__single_graphic_heading__Line_3(heading?1:0), |
|
733 AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants_and_elements__single_graphic_heading__Line_3(1) |
|
734 }; |
|
735 TRect inner_rect = window_rect; |
|
736 aDef.iVertLineExt1.LayoutRect( inner_rect, lines[0]); |
|
737 aDef.iVertLineExt2.LayoutRect( inner_rect, lines[1]); |
|
738 } |
|
739 |
|
740 EXPORT_C void AknPopupLayouts::SetupPopupMenuDoubleWindow(TAknPopupWindowLayoutDef &aDef, TInt num, TBool heading) |
|
741 { |
|
742 SetupDefaults(aDef); |
|
743 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
744 TAknWindowLineLayout listLayout = AKN_LAYOUT_WINDOW_list_menu_double_pane_list_menu_double2_pane(heading?1:0, num-1); |
|
745 // We really don't want parent relative list layout here because findbox will be overwritten. |
|
746 // Just calculate list height and use that. |
|
747 TRect nullRect(0,0,0,0); |
|
748 TRect listItemRect = RectFromLayout(nullRect, AknLayoutScalable_Avkon::list_double2_graphic_pane_cp2(0)); |
|
749 listLayout.iH = (TInt16)(num * listItemRect.Height()); |
|
750 listLayout.ib = ELayoutEmpty; |
|
751 |
|
752 aDef.iListRect.LayoutRect(window_rect, listLayout); |
|
753 |
|
754 //aDef.iListRect.LayoutRect(window_rect, AKN_LAYOUT_WINDOW_list_menu_double_pane_list_menu_double2_pane(heading?1:0, num-1 )); |
|
755 TAknWindowLineLayout part1 = AKN_LAYOUT_WINDOW_Pop_up_window_list_pane_descendants_Line_8; |
|
756 TAknWindowLineLayout part2 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants__double__Line_2; |
|
757 // Combine two layouts togeher. |
|
758 if (part2.iC != ELayoutEmpty) part1.iC = part2.iC; |
|
759 if (part2.il != ELayoutEmpty) part1.il = part2.il; |
|
760 if (part2.it != ELayoutEmpty) part1.it = part2.it; |
|
761 if (part2.ir != ELayoutEmpty) part1.ir = part2.ir; |
|
762 if (part2.ib != ELayoutEmpty) part1.ib = part2.ib; |
|
763 if (part2.iW != ELayoutEmpty) part1.iW = part2.iW; |
|
764 if (part2.iH != ELayoutEmpty) part1.iH = part2.iH; |
|
765 |
|
766 aDef.iHeadingRect.LayoutRect(window_rect, part1); |
|
767 |
|
768 //MenuPopupWindowGraphics(aDef); |
|
769 } |
|
770 |
|
771 EXPORT_C void AknPopupLayouts::SetupImageSelectionMenuPopupWindow(TAknPopupWindowLayoutDef &aDef, TInt num, TBool heading) |
|
772 { |
|
773 SetupDefaults(aDef); |
|
774 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
775 TAknWindowLineLayout listLayout = AKN_LAYOUT_WINDOW_list_menu_double_large_graphic_pane(heading?1:0, num-1); |
|
776 // We really don't want parent relative list layout here because findbox will be overwritten. |
|
777 // Just calculate list height and use that. |
|
778 TRect nullRect(0,0,0,0); |
|
779 TRect listItemRect = RectFromLayout(nullRect, AknLayoutScalable_Avkon::list_double_large_graphic_pane_cp2(0)); |
|
780 listLayout.iH = (TInt16)(num * listItemRect.Height()); |
|
781 listLayout.ib = ELayoutEmpty; |
|
782 |
|
783 aDef.iListRect.LayoutRect(window_rect, listLayout); |
|
784 |
|
785 //aDef.iListRect.LayoutRect(window_rect, AKN_LAYOUT_WINDOW_list_menu_double_large_graphic_pane(heading?1:0, num-1)); |
|
786 |
|
787 TAknWindowLineLayout part1 = AKN_LAYOUT_WINDOW_Pop_up_window_list_pane_descendants_Line_8; |
|
788 TAknWindowLineLayout part2 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants__double__Line_2; |
|
789 |
|
790 // Combine two layouts togeher. |
|
791 if (part2.iC != ELayoutEmpty) part1.iC = part2.iC; |
|
792 if (part2.il != ELayoutEmpty) part1.il = part2.il; |
|
793 if (part2.it != ELayoutEmpty) part1.it = part2.it; |
|
794 if (part2.ir != ELayoutEmpty) part1.ir = part2.ir; |
|
795 if (part2.ib != ELayoutEmpty) part1.ib = part2.ib; |
|
796 if (part2.iW != ELayoutEmpty) part1.iW = part2.iW; |
|
797 if (part2.iH != ELayoutEmpty) part1.iH = part2.iH; |
|
798 aDef.iHeadingRect.LayoutRect(window_rect, part1); |
|
799 |
|
800 //MenuPopupWindowGraphics(aDef); |
|
801 } |
|
802 |
|
803 |
|
804 EXPORT_C void AknPopupLayouts::SetupPopupSNoteGroupWindow(TAknPopupWindowLayoutDef &aDef, TInt num, TBool /*heading*/) |
|
805 { |
|
806 // not used (at least by AvKon) - no need to remove magic numbers |
|
807 SetupDefaults(aDef); |
|
808 TRect window_rect = AknPopupLayouts::MenuRect(aDef); |
|
809 aDef.iListRect.LayoutRect(window_rect, 0, 3, 11, ELayoutEmpty, ELayoutEmpty, 168, 38+(57-38)*(num-2) ); |
|
810 TAknWindowLineLayout part1 = AKN_LAYOUT_WINDOW_Pop_up_window_list_pane_descendants_Line_8; |
|
811 TAknWindowLineLayout part2 = AKN_LAYOUT_WINDOW_Menu_pop_up_window_descendants_Line_2; |
|
812 |
|
813 // Combine two layouts togeher. |
|
814 if (part2.iC != ELayoutEmpty) part1.iC = part2.iC; |
|
815 if (part2.il != ELayoutEmpty) part1.il = part2.il; |
|
816 if (part2.it != ELayoutEmpty) part1.it = part2.it; |
|
817 if (part2.ir != ELayoutEmpty) part1.ir = part2.ir; |
|
818 if (part2.ib != ELayoutEmpty) part1.ib = part2.ib; |
|
819 if (part2.iW != ELayoutEmpty) part1.iW = part2.iW; |
|
820 if (part2.iH != ELayoutEmpty) part1.iH = part2.iH; |
|
821 |
|
822 aDef.iHeadingRect.LayoutRect(window_rect, part1); |
|
823 |
|
824 TInt p = window_rect.Size().iHeight; |
|
825 const AknLayoutUtils::SAknLayoutRect shadow[] = |
|
826 { |
|
827 { 0,0,0,ELayoutEmpty, ELayoutEmpty, 176, p }, |
|
828 { 86,7,12,ELayoutEmpty, ELayoutEmpty, 167, p -16 }, |
|
829 { 221,4,10,ELayoutEmpty, ELayoutEmpty, 169, p -15 }, |
|
830 { 215,2,8,ELayoutEmpty, ELayoutEmpty, 170, p -14 }, |
|
831 { 0,3,9,ELayoutEmpty, ELayoutEmpty, 168, p -16 } |
|
832 }; |
|
833 |
|
834 aDef.iCover.LayoutRect( window_rect, shadow[0]); |
|
835 aDef.iSecond.LayoutRect( window_rect, shadow[1]); |
|
836 aDef.iFirst.LayoutRect( window_rect, shadow[2]); |
|
837 aDef.iOutline.LayoutRect(window_rect, shadow[3]); |
|
838 aDef.iInside.LayoutRect( window_rect, shadow[4]); |
|
839 } |
|
840 |
|
841 |
|
842 |
|
843 EXPORT_C void AknPopupLayouts::CalcPopupMenuWindow(TAknPopupWindowLayoutDef &aDef,TRect aRect, TInt num) |
|
844 { |
|
845 TAknLayoutRect popup_menu_window; |
|
846 popup_menu_window.LayoutRect(aRect, AKN_LAYOUT_WINDOW_popup_menu_window(num-1)); |
|
847 aDef.iWindowRect = popup_menu_window.Rect(); |
|
848 aDef.iPopupMenuWindowOffset=TPoint(0,0); |
|
849 } |
|
850 EXPORT_C void AknPopupLayouts::CalcPopupMenuGraphicWindow(TAknPopupWindowLayoutDef &aDef,TRect aRect, TInt num) |
|
851 { |
|
852 TAknLayoutRect popup_menu_graphic_window; |
|
853 popup_menu_graphic_window.LayoutRect(aRect, AKN_LAYOUT_WINDOW_popup_menu_graphic_window(num-1)); |
|
854 aDef.iWindowRect = popup_menu_graphic_window.Rect(); |
|
855 aDef.iPopupMenuWindowOffset=TPoint(0,0); |
|
856 } |
|
857 EXPORT_C void AknPopupLayouts::CalcPopupMenuGraphicHeadingWindow(TAknPopupWindowLayoutDef &aDef,TRect aRect, TInt num) |
|
858 { |
|
859 TAknLayoutRect popup_menu_graphic_heading_window; |
|
860 popup_menu_graphic_heading_window.LayoutRect(aRect,AKN_LAYOUT_WINDOW_popup_menu_graphic_heading_window(num-1)); |
|
861 aDef.iWindowRect = popup_menu_graphic_heading_window.Rect(); |
|
862 aDef.iPopupMenuWindowOffset=TPoint(0,0); |
|
863 } |
|
864 EXPORT_C void AknPopupLayouts::CalcPopupMenuDoubleWindow(TAknPopupWindowLayoutDef &aDef,TRect aRect, TInt num) |
|
865 { |
|
866 TAknLayoutRect popup_menu_double_window; |
|
867 TInt items = 2; |
|
868 if (num == 2) items = 1; |
|
869 if (num == 1) items = 0; |
|
870 popup_menu_double_window.LayoutRect(aRect, AKN_LAYOUT_WINDOW_popup_menu_double_window(items)); |
|
871 aDef.iWindowRect = popup_menu_double_window.Rect(); |
|
872 aDef.iPopupMenuWindowOffset=TPoint(0,0); |
|
873 } |
|
874 |
|
875 EXPORT_C void AknPopupLayouts::CalcPopupMenuDoubleLargeGraphicWindow(TAknPopupWindowLayoutDef &aDef,TRect aRect, TInt num) |
|
876 { |
|
877 TAknLayoutRect popup_menu_double_large_graphic_window; |
|
878 TInt items = 2; |
|
879 if (num == 2) items = 1; |
|
880 if (num == 1) items = 0; |
|
881 popup_menu_double_large_graphic_window.LayoutRect(aRect, AKN_LAYOUT_WINDOW_popup_menu_double_large_graphic_window(items)); |
|
882 aDef.iWindowRect = popup_menu_double_large_graphic_window.Rect(); |
|
883 aDef.iPopupMenuWindowOffset=TPoint(0,0); |
|
884 } |
|
885 |
|
886 |
|
887 EXPORT_C void AknPopupLayouts::CalcPopupSNoteGroupWindow(TAknPopupWindowLayoutDef &aDef,TRect aRect, TInt num) |
|
888 { |
|
889 TAknLayoutRect popup_menu_snote_window; |
|
890 if (num-2 < 0) { num = 2; } |
|
891 popup_menu_snote_window.LayoutRect(aRect, AKN_LAYOUT_WINDOW_popup_snote_group_window(num-2)); |
|
892 aDef.iWindowRect = popup_menu_snote_window.Rect(); |
|
893 aDef.iPopupMenuWindowOffset=TPoint(0,0); |
|
894 } |
|
895 |
|
896 |
|
897 EXPORT_C TRect AknPopupLayouts::WindowRect(TAknPopupWindowLayoutDef &aDef) {return aDef.iWindowRect; } |
|
898 |
|
899 EXPORT_C void AknPopupLayouts::ModifyWindowGraphicForHeading(TAknPopupWindowLayoutDef &aDef) |
|
900 { |
|
901 TRect nullRect(0,0,0,0); |
|
902 TAknLayoutRect nullHeadingRect; |
|
903 // find out, how much space is needed for heading (spaceForHeading was 23) |
|
904 nullHeadingRect.LayoutRect(nullRect,AKN_LAYOUT_WINDOW_Pop_up_menu_with_heading_window_graphics_Line_1(nullRect)); |
|
905 TInt spaceForHeading = nullHeadingRect.Rect().Height(); |
|
906 |
|
907 |
|
908 aDef.iWindowRect.iTl.iY -= spaceForHeading; // This is necessary to position it correctly |
|
909 // this is because b=0 in parent of coverrect and because |
|
910 // parent's height is used in the child... |
|
911 |
|
912 TRect window_rect = aDef.iWindowRect; |
|
913 |
|
914 aDef.iCover.LayoutRect( window_rect, AKN_LAYOUT_WINDOW_Pop_up_menu_with_heading_window_graphics_Line_1(window_rect)); |
|
915 aDef.iSecond.LayoutRect( window_rect, AKN_LAYOUT_WINDOW_Pop_up_menu_with_heading_window_graphics_Line_2(window_rect)); |
|
916 aDef.iFirst.LayoutRect( window_rect, AKN_LAYOUT_WINDOW_Pop_up_menu_with_heading_window_graphics_Line_3(window_rect)); |
|
917 aDef.iOutline.LayoutRect(window_rect, AKN_LAYOUT_WINDOW_Pop_up_menu_with_heading_window_graphics_Line_4(window_rect)); |
|
918 aDef.iInside.LayoutRect( window_rect, AKN_LAYOUT_WINDOW_Pop_up_menu_with_heading_window_graphics_Line_5(window_rect)); |
|
919 |
|
920 aDef.iPopupMenuWindowOffset=TPoint(0,spaceForHeading); |
|
921 } |
|
922 |
|
923 EXPORT_C void AknPopupLayouts::ModifyWindowGraphicForMessageBox(TAknPopupWindowLayoutDef &aDef, TInt aNumberOfLines) |
|
924 { |
|
925 TInt varietyIndex = 0; |
|
926 switch (aNumberOfLines) |
|
927 { |
|
928 case (2): varietyIndex = 1; |
|
929 break; |
|
930 case (3): varietyIndex = 2; |
|
931 } |
|
932 |
|
933 TAknWindowLineLayout lay = AknLayoutScalable_Apps::loc_type_pane(varietyIndex).LayoutLine(); |
|
934 TAknLayoutRect layout; |
|
935 layout.LayoutRect( TRect(0,0,0,0), lay ); |
|
936 TRect messageRect( layout.Rect() ); |
|
937 |
|
938 aDef.iWindowRect.iTl.iY -= messageRect.Height(); |
|
939 } |
|
940 |
|
941 EXPORT_C void AknPopupLayouts::SetupDefaults(TAknPopupWindowLayoutDef &aDef) |
|
942 { |
|
943 aDef.iVertLineExt1.LayoutRect(TRect(1,1,1,1), 0, 0,0, ELayoutEmpty, ELayoutEmpty, 0,0); |
|
944 aDef.iVertLineExt2.LayoutRect(TRect(1,1,1,1), 0, 0,0, ELayoutEmpty, ELayoutEmpty, 0,0); |
|
945 } |
|
946 |
|
947 |
|
948 EXPORT_C TAknPopupWindowLayoutDef::TAknPopupWindowLayoutDef() |
|
949 : iMaximumHeight(0) |
|
950 { |
|
951 |
|
952 } |
|
953 |
|
954 TRect AknPopupLayouts::RectFromLayout(TRect aParent, const TAknWindowComponentLayout &aComponentLayout) |
|
955 { |
|
956 TAknWindowLineLayout lineLayout = aComponentLayout.LayoutLine(); |
|
957 TAknLayoutRect layoutRect; |
|
958 layoutRect.LayoutRect(aParent,lineLayout); |
|
959 return layoutRect.Rect(); |
|
960 } |
|
961 |
|
962 // End of File |