epoc32/include/mw/aknpopuplayout.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100
branchSymbian3
changeset 4 837f303aceeb
parent 2 2fe1408b6811
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
williamr@2
     1
/*
williamr@2
     2
* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
williamr@2
     3
* All rights reserved.
williamr@2
     4
* This component and the accompanying materials are made available
williamr@4
     5
* under the terms of "Eclipse Public License v1.0"
williamr@2
     6
* which accompanies this distribution, and is available
williamr@4
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
williamr@2
     8
*
williamr@2
     9
* Initial Contributors:
williamr@2
    10
* Nokia Corporation - initial contribution.
williamr@2
    11
*
williamr@2
    12
* Contributors:
williamr@2
    13
*
williamr@2
    14
* Description: 
williamr@2
    15
*     Layouts from pop-up windows. Mostly used for implementing list queries,
williamr@2
    16
*     options menus, grouped soft notifications and other popup windows.
williamr@2
    17
*
williamr@2
    18
*/
williamr@2
    19
williamr@2
    20
williamr@2
    21
#ifndef __AKNPOPUPLAYOUT__
williamr@2
    22
#define __AKNPOPUPLAYOUT__
williamr@2
    23
williamr@4
    24
#include <AknUtils.h>
williamr@2
    25
#include <e32std.h>
williamr@2
    26
williamr@2
    27
struct TAknPopupWindowLayoutDef;
williamr@2
    28
class CEikListBox;
williamr@2
    29
class CAknPopupHeadingPane;
williamr@2
    30
class CWindowGc;
williamr@2
    31
class CCoeControl;
williamr@2
    32
class CEikonEnv;
williamr@2
    33
class TAknWindowComponentLayout;
williamr@2
    34
williamr@2
    35
const TInt EAknPopupLayoutsDynamic = 0x80;
williamr@2
    36
const TInt EAknPopupLayoutsFind = 0x100;
williamr@2
    37
williamr@2
    38
/** The purpose of AknPopupLayouts class is to provide layouts
williamr@2
    39
 *  for popup windows described in European Avkon LAF
williamr@2
    40
 *  document.
williamr@2
    41
 *  
williamr@2
    42
 *  Applications should not use this class except for building custom
williamr@2
    43
 *  layouts. The default layouts looks usually much nicer.
williamr@2
    44
 *
williamr@2
    45
 *  Applications cannot extend this class to add new layouts, but they
williamr@2
    46
 *  can override virtual methods from the class that call methods from
williamr@2
    47
 *  these classes.
williamr@2
    48
 *
williamr@2
    49
 *  These classes are used by
williamr@2
    50
 *    1) List queries CAknListQueryDialog (aknquerydialog.cpp)
williamr@2
    51
 *    2) options menus CEikMenuPane and CEikMenuBar (uikon/coctlsrc/eikmenup.cpp)
williamr@2
    52
 *    3) popup windows CAknPopupList (aknpopup.cpp)
williamr@2
    53
 *    4) grouped soft notifications
williamr@2
    54
 *
williamr@2
    55
 */
williamr@2
    56
struct TAknPopupLayoutsNode;
williamr@2
    57
struct TAknPopupLayoutsNode
williamr@2
    58
{
williamr@2
    59
	TAknPopupLayoutsNode *iNext;
williamr@2
    60
	TInt iId;
williamr@2
    61
	CCoeControl *iControl;
williamr@2
    62
};
williamr@2
    63
enum TAknPopupLayoutsNodeList
williamr@2
    64
{
williamr@2
    65
	EListNode = 0x5555,
williamr@2
    66
	EHeadingNode,
williamr@2
    67
	EWindowOwningNode,
williamr@2
    68
	EMessageBoxNode,
williamr@2
    69
    EFindBoxNode
williamr@2
    70
};
williamr@2
    71
williamr@2
    72
class AknPopupLayouts
williamr@2
    73
    {
williamr@2
    74
public: 
williamr@2
    75
    /** 
williamr@2
    76
     *	If you ever want to add new items here, do not -- instead derive from
williamr@2
    77
     * popuplist or list query and override SetupWindowLayout().
williamr@2
    78
     * (or if you can modify avkon, then add them here to make it easier for apps to use
williamr@2
    79
     * the new layout..)
williamr@2
    80
     * There's example at aknGMSstylegrid.cpp how to make new popup window without avkon
williamr@2
    81
     * modifications.
williamr@2
    82
     */
williamr@2
    83
    enum TAknPopupLayouts
williamr@2
    84
	{
williamr@2
    85
	// these are the standard popup windows
williamr@2
    86
	EMenuWindow, // CAknSinglePopupMenuStyleListBox
williamr@2
    87
	EMenuGraphicWindow, // CAknSingleGraphicPopupMenuStyleListBox
williamr@2
    88
	EMenuGraphicHeadingWindow, // CAknSingleGraphicHeadingPopupMenuStyleListBox, CAknSingleHeadingPopupMenuStyleListBox
williamr@2
    89
	EMenuDoubleWindow, // CAknDoublePopupMenuStyleListBox
williamr@2
    90
	EMenuDoubleLargeGraphicWindow, // CAknDoubleLargeGraphicPopupMenuStyleListBox
williamr@2
    91
	EPopupSNotePopupWindow,
williamr@2
    92
    EMenuUnknownColumnWindow,       // for apps that use Column listboxes inside popup list
williamr@2
    93
    EMenuUnknownFormattedCellWindow,// for apps that use Formatted cell listboxes inside popup list
williamr@2
    94
	
williamr@2
    95
	// these are versions of the popup windows which does not resize
williamr@2
    96
	// themselves if you insert items. (they're full size from the
williamr@2
    97
	// beginning)
williamr@2
    98
	EDynMenuWindow = EMenuWindow + 0x80,
williamr@2
    99
	EDynMenuGraphicWindow,
williamr@2
   100
	EDynMenuGraphicHeadingWindow,
williamr@2
   101
	EDynMenuDoubleWindow,
williamr@2
   102
	EDynMenuDoubleLargeGraphicWindow	
williamr@2
   103
	};
williamr@2
   104
williamr@2
   105
public: // interface for controls
williamr@2
   106
    
williamr@2
   107
williamr@2
   108
   /** 
williamr@2
   109
    * Implementation of SizeChanged() for a popup window control with a list inside
williamr@2
   110
    *
williamr@2
   111
    * This method calls setrect() on heading, listbox and window owning control
williamr@2
   112
    * and expects the window owning control has listbox and heading in
williamr@2
   113
    * its componentcontrols...
williamr@2
   114
    */
williamr@2
   115
    IMPORT_C static void HandleSizeChanged(TAknPopupWindowLayoutDef &aDef,
williamr@2
   116
					   TAknPopupLayouts aLayout,
williamr@2
   117
					   TAknPopupLayoutsNode *aListOfControls);
williamr@2
   118
    IMPORT_C static void HandleSizeChanged(TAknPopupWindowLayoutDef &aDef, 
williamr@2
   119
				  TAknPopupLayouts aLayout,
williamr@2
   120
				  CAknPopupHeadingPane *aHeadingOrNull,
williamr@2
   121
				  CEikListBox *aListBox,
williamr@2
   122
				  CCoeControl *aWindowOwningControl);
williamr@2
   123
   /** 
williamr@2
   124
    * Implementation of Draw() for a popup window control with a list inside
williamr@2
   125
    */    
williamr@2
   126
    IMPORT_C static void HandleDraw(CEikonEnv* aEikEnv,
williamr@2
   127
			   CWindowGc &aGc,
williamr@2
   128
			   const TAknPopupWindowLayoutDef &aDef, 
williamr@2
   129
			   CEikListBox *aListBox,
williamr@2
   130
			   CAknPopupHeadingPane *aHeadingOrNull);
williamr@2
   131
williamr@2
   132
williamr@2
   133
public: // interface for adding heading
williamr@2
   134
   /** 
williamr@2
   135
    * Adds a heading to popup window
williamr@2
   136
    */
williamr@2
   137
    IMPORT_C static void ModifyWindowGraphicForHeading(TAknPopupWindowLayoutDef &aDef);
williamr@2
   138
    IMPORT_C static void ModifyWindowGraphicForMessageBox(TAknPopupWindowLayoutDef &aDef, TInt aNumOfLines);
williamr@2
   139
williamr@2
   140
public: // The implementation of different popup window styles.
williamr@2
   141
   /** 
williamr@2
   142
    * Calculates layout of popup_menu_window from LAF specification
williamr@2
   143
    */
williamr@2
   144
    IMPORT_C static void CalcPopupMenuWindow(TAknPopupWindowLayoutDef &aDef, 
williamr@2
   145
					     TRect aClientRect, 
williamr@2
   146
					     TInt aNumberOfLinesInListBox);
williamr@2
   147
   /** 
williamr@2
   148
    * Calculates layout of popup_menu_graphic_window from LAF specification
williamr@2
   149
    */
williamr@2
   150
    IMPORT_C static void CalcPopupMenuGraphicWindow(TAknPopupWindowLayoutDef &aDef,
williamr@2
   151
						    TRect aClientRect, 
williamr@2
   152
						    TInt aNumberOfLinesInListBox);
williamr@2
   153
   /** 
williamr@2
   154
    * Calculates layout of popup_menu_graphic_heading_window from LAF specification
williamr@2
   155
    */
williamr@2
   156
    IMPORT_C static void CalcPopupMenuGraphicHeadingWindow(TAknPopupWindowLayoutDef &aDef,
williamr@2
   157
							   TRect aClientRect, 
williamr@2
   158
							   TInt aNumberOfLinesInListBox);
williamr@2
   159
   /** 
williamr@2
   160
    * Calculates layout of popup_menu_double_window from LAF specification
williamr@2
   161
    */
williamr@2
   162
    IMPORT_C static void CalcPopupMenuDoubleWindow(TAknPopupWindowLayoutDef &aDef,
williamr@2
   163
						   TRect aClientRect, 
williamr@2
   164
						   TInt aNumberOfLinesInListBox);
williamr@2
   165
   /** 
williamr@2
   166
    * Calculates layout of popup_menu_double_large_graphic_window from LAF specification
williamr@2
   167
    */
williamr@2
   168
    IMPORT_C static void CalcPopupMenuDoubleLargeGraphicWindow(TAknPopupWindowLayoutDef &aDef,
williamr@2
   169
							       TRect aClientRect, 
williamr@2
   170
							       TInt aNumberOfLinesInListBox);
williamr@2
   171
   /** 
williamr@2
   172
    * Calculates layout of popup_snote_window from LAF specification
williamr@2
   173
    */
williamr@2
   174
    IMPORT_C static void CalcPopupSNoteGroupWindow(TAknPopupWindowLayoutDef &aDef, 
williamr@2
   175
						   TRect aClientRect, 
williamr@2
   176
						   TInt aNumberOfLinesInListBox);
williamr@2
   177
williamr@2
   178
    /**
williamr@2
   179
     * Setup a border for the window
williamr@2
   180
     */
williamr@2
   181
    IMPORT_C static void SetupMenuPopupWindow(TAknPopupWindowLayoutDef &aDef, 
williamr@2
   182
					      TInt aNumberOfLinesInListBox, 
williamr@2
   183
					      TBool aHeading);
williamr@2
   184
    /**
williamr@2
   185
     * Setup a border for the window
williamr@2
   186
     */
williamr@2
   187
    IMPORT_C static void SetupPopupMenuGraphicWindow(TAknPopupWindowLayoutDef &aDef, 
williamr@2
   188
						     TInt aNumberOfLinesInListBox,
williamr@2
   189
						     TBool aHeading);
williamr@2
   190
    /**
williamr@2
   191
     * Setup a border for the window
williamr@2
   192
     */
williamr@2
   193
    IMPORT_C static void SetupPopupMenuGraphicHeadingWindow(TAknPopupWindowLayoutDef &aDef, 
williamr@2
   194
							    TInt aNumberOfLinesInListBox, 
williamr@2
   195
							    TBool aHeading);
williamr@2
   196
    /**
williamr@2
   197
     * Setup a border for the window
williamr@2
   198
     */
williamr@2
   199
    IMPORT_C static void SetupPopupMenuDoubleWindow(TAknPopupWindowLayoutDef &aDef, 
williamr@2
   200
						    TInt aNumberOfLinesInListBox, 
williamr@2
   201
						    TBool aHeading);    
williamr@2
   202
    /**
williamr@2
   203
     * Setup a border for the window
williamr@2
   204
     */
williamr@2
   205
    IMPORT_C static void SetupImageSelectionMenuPopupWindow(TAknPopupWindowLayoutDef &aDef,
williamr@2
   206
							    TInt num, 
williamr@2
   207
							    TBool heading);
williamr@2
   208
    /**
williamr@2
   209
     * Setup a border for the window
williamr@2
   210
     */
williamr@2
   211
    IMPORT_C static void SetupPopupSNoteGroupWindow(TAknPopupWindowLayoutDef &aDef,
williamr@2
   212
						    TInt num,
williamr@2
   213
						    TBool heading);
williamr@2
   214
williamr@2
   215
    
williamr@2
   216
public: // interface to setup listbox and popup heading pane. (used by HandleSizeChanged)
williamr@2
   217
    IMPORT_C static void HandleSizeAndPositionOfComponents(const TAknPopupWindowLayoutDef &aDef, 
williamr@2
   218
						  CCoeControl *aContentInsidePopup,
williamr@2
   219
						  CAknPopupHeadingPane *aHeadingOrNull);
williamr@2
   220
    IMPORT_C static void SetupDefaults(TAknPopupWindowLayoutDef &aDef);
williamr@2
   221
public: // Utilities
williamr@2
   222
    /**
williamr@2
   223
     * Access to different coordinate transformations needed to setup popup windows
williamr@2
   224
     */
williamr@2
   225
    IMPORT_C static TRect WindowRect(TAknPopupWindowLayoutDef &aDef);
williamr@2
   226
    /**
williamr@2
   227
     * Access to different coordinate transformations needed to setup popup windows
williamr@2
   228
     */
williamr@2
   229
    IMPORT_C static TRect MenuRect(TAknPopupWindowLayoutDef &aDef);
williamr@2
   230
    /**
williamr@2
   231
     * Check integer range
williamr@2
   232
     */
williamr@2
   233
    IMPORT_C static void CheckRange(TInt &aValue, TInt aMin, TInt aMax);
williamr@2
   234
    /**
williamr@2
   235
     * Helper for building popup window layout
williamr@2
   236
     */
williamr@2
   237
    IMPORT_C static void MenuPopupWindowGraphics(TAknPopupWindowLayoutDef &aDef);
williamr@2
   238
williamr@2
   239
    static TRect RectFromLayout(TRect aParent, const TAknWindowComponentLayout &aComponentLayout);
williamr@2
   240
    };
williamr@2
   241
williamr@2
   242
/** TAknPopupWindowLayoutDef
williamr@2
   243
 * collects all LAF specification lines that are needed for popup windows
williamr@2
   244
 *
williamr@2
   245
 */
williamr@2
   246
williamr@2
   247
struct TAknPopupWindowLayoutDef
williamr@2
   248
    {
williamr@2
   249
    IMPORT_C TAknPopupWindowLayoutDef();
williamr@2
   250
    TAknLayoutRect iListRect;
williamr@2
   251
    TAknLayoutRect iHeadingRect;
williamr@2
   252
    
williamr@2
   253
    TAknLayoutRect iCover;
williamr@2
   254
    TAknLayoutRect iSecond;
williamr@2
   255
    TAknLayoutRect iFirst;
williamr@2
   256
    TAknLayoutRect iOutline;
williamr@2
   257
    TAknLayoutRect iInside;
williamr@2
   258
    
williamr@2
   259
    TAknLayoutRect iVertLineExt1;
williamr@2
   260
    TAknLayoutRect iVertLineExt2;
williamr@2
   261
williamr@2
   262
    // the window position relative to clientrect
williamr@2
   263
    TRect iWindowRect;
williamr@2
   264
williamr@2
   265
    // popup_menu_window position relative to iWindowPos
williamr@2
   266
    TPoint iPopupMenuWindowOffset;
williamr@2
   267
    TInt iMaximumHeight;
williamr@2
   268
    };
williamr@2
   269
williamr@2
   270
#endif
williamr@2
   271
williamr@2
   272
williamr@2
   273