diff -r 666f914201fb -r 2fe1408b6811 epoc32/include/mw/aknpopuplayout.h
--- a/epoc32/include/mw/aknpopuplayout.h	Tue Nov 24 13:55:44 2009 +0000
+++ b/epoc32/include/mw/aknpopuplayout.h	Tue Mar 16 16:12:26 2010 +0000
@@ -1,1 +1,273 @@
-aknpopuplayout.h
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/licencesv10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*     Layouts from pop-up windows. Mostly used for implementing list queries,
+*     options menus, grouped soft notifications and other popup windows.
+*
+*/
+
+
+#ifndef __AKNPOPUPLAYOUT__
+#define __AKNPOPUPLAYOUT__
+
+#include <aknutils.h>
+#include <e32std.h>
+
+struct TAknPopupWindowLayoutDef;
+class CEikListBox;
+class CAknPopupHeadingPane;
+class CWindowGc;
+class CCoeControl;
+class CEikonEnv;
+class TAknWindowComponentLayout;
+
+const TInt EAknPopupLayoutsDynamic = 0x80;
+const TInt EAknPopupLayoutsFind = 0x100;
+
+/** The purpose of AknPopupLayouts class is to provide layouts
+ *  for popup windows described in European Avkon LAF
+ *  document.
+ *  
+ *  Applications should not use this class except for building custom
+ *  layouts. The default layouts looks usually much nicer.
+ *
+ *  Applications cannot extend this class to add new layouts, but they
+ *  can override virtual methods from the class that call methods from
+ *  these classes.
+ *
+ *  These classes are used by
+ *    1) List queries CAknListQueryDialog (aknquerydialog.cpp)
+ *    2) options menus CEikMenuPane and CEikMenuBar (uikon/coctlsrc/eikmenup.cpp)
+ *    3) popup windows CAknPopupList (aknpopup.cpp)
+ *    4) grouped soft notifications
+ *
+ */
+struct TAknPopupLayoutsNode;
+struct TAknPopupLayoutsNode
+{
+	TAknPopupLayoutsNode *iNext;
+	TInt iId;
+	CCoeControl *iControl;
+};
+enum TAknPopupLayoutsNodeList
+{
+	EListNode = 0x5555,
+	EHeadingNode,
+	EWindowOwningNode,
+	EMessageBoxNode,
+    EFindBoxNode
+};
+
+class AknPopupLayouts
+    {
+public: 
+    /** 
+     *	If you ever want to add new items here, do not -- instead derive from
+     * popuplist or list query and override SetupWindowLayout().
+     * (or if you can modify avkon, then add them here to make it easier for apps to use
+     * the new layout..)
+     * There's example at aknGMSstylegrid.cpp how to make new popup window without avkon
+     * modifications.
+     */
+    enum TAknPopupLayouts
+	{
+	// these are the standard popup windows
+	EMenuWindow, // CAknSinglePopupMenuStyleListBox
+	EMenuGraphicWindow, // CAknSingleGraphicPopupMenuStyleListBox
+	EMenuGraphicHeadingWindow, // CAknSingleGraphicHeadingPopupMenuStyleListBox, CAknSingleHeadingPopupMenuStyleListBox
+	EMenuDoubleWindow, // CAknDoublePopupMenuStyleListBox
+	EMenuDoubleLargeGraphicWindow, // CAknDoubleLargeGraphicPopupMenuStyleListBox
+	EPopupSNotePopupWindow,
+    EMenuUnknownColumnWindow,       // for apps that use Column listboxes inside popup list
+    EMenuUnknownFormattedCellWindow,// for apps that use Formatted cell listboxes inside popup list
+	
+	// these are versions of the popup windows which does not resize
+	// themselves if you insert items. (they're full size from the
+	// beginning)
+	EDynMenuWindow = EMenuWindow + 0x80,
+	EDynMenuGraphicWindow,
+	EDynMenuGraphicHeadingWindow,
+	EDynMenuDoubleWindow,
+	EDynMenuDoubleLargeGraphicWindow	
+	};
+
+public: // interface for controls
+    
+
+   /** 
+    * Implementation of SizeChanged() for a popup window control with a list inside
+    *
+    * This method calls setrect() on heading, listbox and window owning control
+    * and expects the window owning control has listbox and heading in
+    * its componentcontrols...
+    */
+    IMPORT_C static void HandleSizeChanged(TAknPopupWindowLayoutDef &aDef,
+					   TAknPopupLayouts aLayout,
+					   TAknPopupLayoutsNode *aListOfControls);
+    IMPORT_C static void HandleSizeChanged(TAknPopupWindowLayoutDef &aDef, 
+				  TAknPopupLayouts aLayout,
+				  CAknPopupHeadingPane *aHeadingOrNull,
+				  CEikListBox *aListBox,
+				  CCoeControl *aWindowOwningControl);
+   /** 
+    * Implementation of Draw() for a popup window control with a list inside
+    */    
+    IMPORT_C static void HandleDraw(CEikonEnv* aEikEnv,
+			   CWindowGc &aGc,
+			   const TAknPopupWindowLayoutDef &aDef, 
+			   CEikListBox *aListBox,
+			   CAknPopupHeadingPane *aHeadingOrNull);
+
+
+public: // interface for adding heading
+   /** 
+    * Adds a heading to popup window
+    */
+    IMPORT_C static void ModifyWindowGraphicForHeading(TAknPopupWindowLayoutDef &aDef);
+    IMPORT_C static void ModifyWindowGraphicForMessageBox(TAknPopupWindowLayoutDef &aDef, TInt aNumOfLines);
+
+public: // The implementation of different popup window styles.
+   /** 
+    * Calculates layout of popup_menu_window from LAF specification
+    */
+    IMPORT_C static void CalcPopupMenuWindow(TAknPopupWindowLayoutDef &aDef, 
+					     TRect aClientRect, 
+					     TInt aNumberOfLinesInListBox);
+   /** 
+    * Calculates layout of popup_menu_graphic_window from LAF specification
+    */
+    IMPORT_C static void CalcPopupMenuGraphicWindow(TAknPopupWindowLayoutDef &aDef,
+						    TRect aClientRect, 
+						    TInt aNumberOfLinesInListBox);
+   /** 
+    * Calculates layout of popup_menu_graphic_heading_window from LAF specification
+    */
+    IMPORT_C static void CalcPopupMenuGraphicHeadingWindow(TAknPopupWindowLayoutDef &aDef,
+							   TRect aClientRect, 
+							   TInt aNumberOfLinesInListBox);
+   /** 
+    * Calculates layout of popup_menu_double_window from LAF specification
+    */
+    IMPORT_C static void CalcPopupMenuDoubleWindow(TAknPopupWindowLayoutDef &aDef,
+						   TRect aClientRect, 
+						   TInt aNumberOfLinesInListBox);
+   /** 
+    * Calculates layout of popup_menu_double_large_graphic_window from LAF specification
+    */
+    IMPORT_C static void CalcPopupMenuDoubleLargeGraphicWindow(TAknPopupWindowLayoutDef &aDef,
+							       TRect aClientRect, 
+							       TInt aNumberOfLinesInListBox);
+   /** 
+    * Calculates layout of popup_snote_window from LAF specification
+    */
+    IMPORT_C static void CalcPopupSNoteGroupWindow(TAknPopupWindowLayoutDef &aDef, 
+						   TRect aClientRect, 
+						   TInt aNumberOfLinesInListBox);
+
+    /**
+     * Setup a border for the window
+     */
+    IMPORT_C static void SetupMenuPopupWindow(TAknPopupWindowLayoutDef &aDef, 
+					      TInt aNumberOfLinesInListBox, 
+					      TBool aHeading);
+    /**
+     * Setup a border for the window
+     */
+    IMPORT_C static void SetupPopupMenuGraphicWindow(TAknPopupWindowLayoutDef &aDef, 
+						     TInt aNumberOfLinesInListBox,
+						     TBool aHeading);
+    /**
+     * Setup a border for the window
+     */
+    IMPORT_C static void SetupPopupMenuGraphicHeadingWindow(TAknPopupWindowLayoutDef &aDef, 
+							    TInt aNumberOfLinesInListBox, 
+							    TBool aHeading);
+    /**
+     * Setup a border for the window
+     */
+    IMPORT_C static void SetupPopupMenuDoubleWindow(TAknPopupWindowLayoutDef &aDef, 
+						    TInt aNumberOfLinesInListBox, 
+						    TBool aHeading);    
+    /**
+     * Setup a border for the window
+     */
+    IMPORT_C static void SetupImageSelectionMenuPopupWindow(TAknPopupWindowLayoutDef &aDef,
+							    TInt num, 
+							    TBool heading);
+    /**
+     * Setup a border for the window
+     */
+    IMPORT_C static void SetupPopupSNoteGroupWindow(TAknPopupWindowLayoutDef &aDef,
+						    TInt num,
+						    TBool heading);
+
+    
+public: // interface to setup listbox and popup heading pane. (used by HandleSizeChanged)
+    IMPORT_C static void HandleSizeAndPositionOfComponents(const TAknPopupWindowLayoutDef &aDef, 
+						  CCoeControl *aContentInsidePopup,
+						  CAknPopupHeadingPane *aHeadingOrNull);
+    IMPORT_C static void SetupDefaults(TAknPopupWindowLayoutDef &aDef);
+public: // Utilities
+    /**
+     * Access to different coordinate transformations needed to setup popup windows
+     */
+    IMPORT_C static TRect WindowRect(TAknPopupWindowLayoutDef &aDef);
+    /**
+     * Access to different coordinate transformations needed to setup popup windows
+     */
+    IMPORT_C static TRect MenuRect(TAknPopupWindowLayoutDef &aDef);
+    /**
+     * Check integer range
+     */
+    IMPORT_C static void CheckRange(TInt &aValue, TInt aMin, TInt aMax);
+    /**
+     * Helper for building popup window layout
+     */
+    IMPORT_C static void MenuPopupWindowGraphics(TAknPopupWindowLayoutDef &aDef);
+
+    static TRect RectFromLayout(TRect aParent, const TAknWindowComponentLayout &aComponentLayout);
+    };
+
+/** TAknPopupWindowLayoutDef
+ * collects all LAF specification lines that are needed for popup windows
+ *
+ */
+
+struct TAknPopupWindowLayoutDef
+    {
+    IMPORT_C TAknPopupWindowLayoutDef();
+    TAknLayoutRect iListRect;
+    TAknLayoutRect iHeadingRect;
+    
+    TAknLayoutRect iCover;
+    TAknLayoutRect iSecond;
+    TAknLayoutRect iFirst;
+    TAknLayoutRect iOutline;
+    TAknLayoutRect iInside;
+    
+    TAknLayoutRect iVertLineExt1;
+    TAknLayoutRect iVertLineExt2;
+
+    // the window position relative to clientrect
+    TRect iWindowRect;
+
+    // popup_menu_window position relative to iWindowPos
+    TPoint iPopupMenuWindowOffset;
+    TInt iMaximumHeight;
+    };
+
+#endif
+
+
+