javauis/eswt_akn/org.eclipse.ercp.swt.s60/native/inc/swtmenuarranger.h
branchRCL_3
changeset 14 04becd199f91
child 17 0fd27995241b
equal deleted inserted replaced
13:f5050f1da672 14:04becd199f91
       
     1 /*******************************************************************************
       
     2  * Copyright (c) 2005, 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3  * All rights reserved. This program and the accompanying materials
       
     4  * are made available under the terms of the Eclipse Public License v1.0
       
     5  * which accompanies this distribution, and is available at
       
     6  * http://www.eclipse.org/legal/epl-v10.html
       
     7  *
       
     8  * Contributors:
       
     9  *     Nokia Corporation - S60 implementation
       
    10  *******************************************************************************/
       
    11 
       
    12 
       
    13 #ifndef SWTMENUARRANGER_H
       
    14 #define SWTMENUARRANGER_H
       
    15 
       
    16 
       
    17 #include "eswtwidgetscore.h"
       
    18 
       
    19 
       
    20 class CSwtMenuBar;
       
    21 #ifdef RD_SCALABLE_UI_V2
       
    22 class CAknStylusPopUpMenu;
       
    23 #endif //RD_SCALABLE_UI_V2
       
    24 
       
    25 /**
       
    26  * CSwtMenuArranger
       
    27  * @lib eswt
       
    28  * 
       
    29  * Context menus contain:
       
    30  * # Prior to 9.2:
       
    31  *      - Specific control menu of focused control (Mark, Unmark, etc.).
       
    32  *      - OK & SELECT commands of focused control.
       
    33  *      - OK & SELECT commands of all parents of focused control.
       
    34  * # Since 9.2:
       
    35  *      - No context menus in 9.2.
       
    36  * 
       
    37  * Stylus popup menus contain:
       
    38  * # Prior to 9.2:
       
    39  *      - Specific control menu of long tapped control (Mark, Unmark, etc.).
       
    40  *      - OK & SELECT commands of long tapped control.
       
    41  *      - OK & SELECT commands of all parents of long tapped control.
       
    42  *      if the control is also the focused control.
       
    43  *      - Popup menu of long tapped control (Control.setMenu()).
       
    44  * # Since 9.2:
       
    45  *      - Specific control menu of long tapped control (Mark, Unmark, etc.).
       
    46  *      - All commands of long tapped control.
       
    47  *      - Popup menu of long tapped control (Control.setMenu()).
       
    48  * 
       
    49  * Options menus contain:
       
    50  * # Prior to 9.2:
       
    51  *      - Menu bar of active shell.
       
    52  *      - Specific control menu of focused control (Mark, Unmark, etc.).
       
    53  *      - All commands of all parents of focused control.
       
    54  *      - All commands of focused control.
       
    55  *      - Popup menu of focused control (Control.setMenu()).
       
    56  * # Since 9.2:
       
    57  *      - Menu bar of active shell.
       
    58  *      - All commands of active shell.
       
    59  */
       
    60 NONSHARABLE_CLASS(CSwtMenuArranger)
       
    61         : public CBase
       
    62         , public MEikMenuObserver
       
    63         , public MSwtMenuArranger
       
    64 {
       
    65 public:
       
    66     /**
       
    67      * Two phase constructor.
       
    68      * @param aDisplay Current display.
       
    69      * @return Object pointer.
       
    70      */
       
    71     static CSwtMenuArranger* NewL(MSwtDisplay& aDisplay);
       
    72 
       
    73     /**
       
    74      * Destructor
       
    75      */
       
    76     ~CSwtMenuArranger();
       
    77 
       
    78 private:
       
    79     /**
       
    80      * First phase constructor.
       
    81      * @param aDisplay Current display.
       
    82      */
       
    83     inline CSwtMenuArranger(MSwtDisplay& aDisplay);
       
    84 
       
    85     /**
       
    86      * Second phase constructor.
       
    87      */
       
    88     void ConstructL();
       
    89 
       
    90     /**
       
    91      * Compute menu bar.
       
    92      */
       
    93     void ComputeCurrentMenuBar();
       
    94 
       
    95     /**
       
    96      * Popup menu getter.
       
    97      * @return MSwtMenu*
       
    98      */
       
    99     const MSwtMenu* GetCurrentPopupMenu() const;
       
   100 
       
   101     /**
       
   102      * Control menu getter.
       
   103      * @return MSwtMenu*
       
   104      */
       
   105     const MSwtMenu* GetCurrentControlMenu() const;
       
   106 
       
   107     /**
       
   108      * Active menu bar getter.
       
   109      * @return MSwtMenu*
       
   110      */
       
   111     const MSwtMenu* GetActiveMenuBar() const;
       
   112 
       
   113     /**
       
   114      * Cascade menu getter.
       
   115      * @param aItemData
       
   116      * @return MSwtMenu*
       
   117      */
       
   118     const MSwtMenu* GetCascadeMenu(const CEikMenuPaneItem::SData& aItemData) const;
       
   119 
       
   120     /**
       
   121      * Focused control getter.
       
   122      * @return MSwtControl*
       
   123      */
       
   124     const MSwtControl* GetFocusedControl() const;
       
   125 
       
   126     /**
       
   127      * Check if opened menu has radio group.
       
   128      * @return true if radio group
       
   129      */
       
   130     TBool OpenedMenusHaveRadioGroup() const;
       
   131 
       
   132     /**
       
   133      * Refresh CBA.
       
   134      * @param aItemData aCommandArrangerRefreshRequired
       
   135      */
       
   136     void RefreshCba(TBool aCommandArrangerRefreshRequired = ETrue,
       
   137                     TBool aFocusedControlOnly = EFalse);
       
   138 
       
   139     /**
       
   140      * Helper for handling menu pane visibility changes.
       
   141      * The status of the new visibility must be known and passed as parameter.
       
   142      * @param aStatus is the real visibility status.
       
   143      */
       
   144     void HandlePaneVisibilityChangeL(CEikMenuPane* aPane, TBool aStatus);
       
   145 
       
   146     /**
       
   147      * Resets the list of opened menus, menu panes, etc.
       
   148      */
       
   149     void ResetOpenedLists();
       
   150 
       
   151     /**
       
   152      * Updates the images size after resolution change
       
   153      */
       
   154     void UpdateImageSize();
       
   155 
       
   156 // From MSwtMenuArranger
       
   157 public:
       
   158     void ControlFocusLost();
       
   159     void ControlFocusGained(const MSwtControl& aControl);
       
   160     void ActiveShellLost();
       
   161     void ActiveShellGained(const MSwtShell& aShell);
       
   162     void MenuBarSetOnDecorations();
       
   163     void SetCommandMenu(const MSwtMenu* aCommandMenu);
       
   164     void SetContextMenu(const MSwtMenu* aCommandMenuOk);
       
   165     void HandleMenuChangedL(const MSwtMenu& aMenu, TSwtMenuEvent aType);
       
   166     CEikMenuBar* EikMenuBar() const;
       
   167     void AddOptionsCommandL();
       
   168     void RemoveOptionsCommand();
       
   169     void UpdateOptionsCommandL();
       
   170     TBool IsOptionsCommandAdded();
       
   171     void TryDisplayMenuBarL(TBool aDisplayContextMenu);
       
   172     void TryDisplayPopupMenuL(const MSwtMenu& aMenu);
       
   173     void StopDisplayingPopupMenuL(const MSwtMenu& aMenu);
       
   174     void StopDisplayingMenuBar();
       
   175     TBool HasMenuItems() const;
       
   176     void HandleResolutionChangeL();
       
   177     void HandleWindowVisibilityChangeL(CCoeControl* aDestination);
       
   178     TSize ImageSize() const;
       
   179     CEikMenuPane* ParentPane(CEikMenuPane& aPane) const;
       
   180 
       
   181 #ifdef RD_SCALABLE_UI_V2
       
   182     void OpenStylusPopupMenuL(const MSwtControl& aControl, const TPoint& aPoint, 
       
   183                               MSwtPopupMenuCallBack* aCallBack = NULL);
       
   184     void OpenStylusPopupMenuL(const MSwtMenu& aMenu, const TPoint& aPoint);
       
   185     void CloseStylusPopupMenuL();
       
   186 #endif //RD_SCALABLE_UI_V2
       
   187 
       
   188 // From MEikMenuObserver
       
   189 public:
       
   190     /**
       
   191      * Dynamically initialises a menu pane. The framework calls this function
       
   192      * immediately before the menu pane is activated. Typically should inquire
       
   193      * the value of application data, and initialise menu items accordingly.
       
   194      * This includes dimming menu items, changing their text, setting the state
       
   195      * of checked items and radio buttons and dynamically adding items to a menu.
       
   196      */
       
   197     void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
       
   198 
       
   199     /**
       
   200      * Called by the Uikon framework to handle the emphasising or de-emphasising
       
   201      * of a menu window. CEikMenuBar objects call this on their observer to
       
   202      * emphasise themselves when they are displayed, and de-emphasise themselves
       
   203      * when they stop displaying.
       
   204      */
       
   205     void SetEmphasis(CCoeControl* aMenuControl, TBool aEmphasis);
       
   206 
       
   207 // From MEikCommandObserver
       
   208 public:
       
   209     void ProcessCommandL(TInt aCommandId);
       
   210 
       
   211 // Data
       
   212 private:
       
   213     /**
       
   214      * Related display.
       
   215      */
       
   216     MSwtDisplay& iDisplay;
       
   217 
       
   218     /**
       
   219      * Current command menu, not owned, may be null.
       
   220      */
       
   221     const MSwtMenu* iCommandMenu;
       
   222 
       
   223     /**
       
   224      * Current context menu, not owned, may be null
       
   225      */
       
   226     const MSwtMenu* iCommandMenuOk;
       
   227 
       
   228     /**
       
   229      * Current menubar (default menubar or menubar of focused decorations)
       
   230      */
       
   231     const MSwtMenu* iCurrentMenuBar;
       
   232 
       
   233     /**
       
   234      * Current menubar when focused decorations has no menubar, owned
       
   235      */
       
   236     MSwtMenu* iDefaultMenuBar;
       
   237 
       
   238     /**
       
   239      * Control used to display menubar, owned
       
   240      */
       
   241     CSwtMenuBar* iMenuBar;
       
   242 
       
   243     /**
       
   244      * Previous menubar control, not owned, may be null
       
   245      */
       
   246     CEikMenuBar* iOldEikMenuBar;
       
   247 
       
   248     /**
       
   249      * Array of opened menus
       
   250      */
       
   251     RPointerArray<MSwtMenu> iOpenedMenus;
       
   252 
       
   253     /**
       
   254      * Array of opened menu panes
       
   255      */
       
   256     RPointerArray<CEikMenuPane> iOpenedMenuPanes;
       
   257 
       
   258     /**
       
   259      * Keeps track of the visibility of the panes.
       
   260      * Needed to avoid a resolution change glitch.
       
   261      */
       
   262     RArray<TBool> iOpenedMenuPanesVisibility;
       
   263 
       
   264     /**
       
   265      * The string for menu Options in right soft key
       
   266      */
       
   267     HBufC* iOptionsString;
       
   268 
       
   269     /**
       
   270      * Flag for indicating if the "Options" command has been added in CBA
       
   271      */
       
   272     TBool iOptionsCommandAdded;
       
   273 
       
   274     /**
       
   275      * Indicates if the menu bar is closing
       
   276      */
       
   277     TBool iMenuBarIsClosing;
       
   278 
       
   279 #ifdef RD_SCALABLE_UI_V2
       
   280     /**
       
   281      * Stylus popup menu
       
   282      */
       
   283     CAknStylusPopUpMenu* iStylusPopup;
       
   284 
       
   285     /**
       
   286      * Indicates if the stylus popup menu is currently shown
       
   287      */
       
   288     TBool iShowingStylusPopup;
       
   289 #endif //RD_SCALABLE_UI_V2
       
   290 
       
   291     /**
       
   292      * Cached image size for the panes
       
   293      */
       
   294     TSize iImageSize;
       
   295     
       
   296     MSwtPopupMenuCallBack* iPopupMenuCallback;
       
   297 };
       
   298 
       
   299 
       
   300 #endif // SWTMENUARRANGER_H