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