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