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: * williamr@2: */ williamr@2: williamr@2: // AknView.h williamr@2: // williamr@2: // Copyright (c) 1997-2001 Symbian Ltd. All rights reserved. williamr@2: // williamr@2: williamr@2: #ifndef AKNVIEW_H williamr@2: #define AKNVIEW_H williamr@2: williamr@2: // INCLUDES williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: #include williamr@2: williamr@2: // FORWARD DECLARATIONS williamr@2: class CAknViewAppUi; williamr@2: class CEikStatusPane; williamr@2: class CEikButtonGroupContainer; williamr@2: class CAknControlStack; williamr@2: class CAknViewExtension; williamr@2: class CAknToolbar; williamr@2: williamr@2: // CLASS DECLARATION williamr@2: williamr@2: /** williamr@2: * This is an abstract base class for a Series 60 application view. williamr@2: * williamr@2: * @since Series 60 0.9 williamr@2: */ williamr@2: class CAknView : public CBase, public MCoeView, public MEikMenuObserver, williamr@2: public MObjectProvider williamr@2: { williamr@2: public: williamr@2: williamr@2: /** williamr@2: * Standard constructor. williamr@2: */ williamr@2: IMPORT_C CAknView(); williamr@2: williamr@2: /** williamr@2: * Standard destructor. williamr@2: */ williamr@2: IMPORT_C ~CAknView(); williamr@2: williamr@2: /** williamr@2: * This is a second stage constructor initializing this view with standard williamr@2: * values. Should be called from derived classes second stage construction williamr@2: * functions. williamr@2: * @param aResId The numeric ID of the resource (@c iViewInfo) to be read. williamr@2: * If aResId=0, resource file is not accessed. williamr@2: */ williamr@2: IMPORT_C void BaseConstructL(TInt aResId=0); williamr@2: williamr@2: /** williamr@2: * Constructs invisible button group container and menu if they don't exist williamr@2: * yet. They are placed on the view stack. To be used by views which need williamr@2: * to access the menu or cba before the view is activated for the first williamr@2: * time. williamr@2: */ williamr@2: IMPORT_C void ConstructMenuAndCbaEarlyL(); williamr@2: williamr@2: /** williamr@2: * Activate any view in the product. Calls @c CCoeAppUi::ActivateViewL( williamr@2: * aViewId) williamr@2: * @param aViewId Identifies the view to activate. williamr@2: */ williamr@2: IMPORT_C void ActivateViewL(const TVwsViewId& aViewId); williamr@2: williamr@2: /** williamr@2: * Activate any view, then passes the message text @c aCustomMessage of williamr@2: * type @c aCustomMessageId. Calls @c CCoeAppUi::ActivateViewL( williamr@2: * aViewId,aCustomMessageId,aCustomMessage) williamr@2: * @param aViewId Identifies the view to activate. williamr@2: * @param aCustomMessageId Specifies the message type. williamr@2: * @param aCustomMessage The message passed to the activated view. williamr@2: */ williamr@2: IMPORT_C void ActivateViewL(const TVwsViewId& aViewId, williamr@2: TUid aCustomMessageId, williamr@2: const TDesC8& aCustomMessage); williamr@2: williamr@2: /** williamr@2: * Returns views id, intended for overriding by sub classes. williamr@2: * @return id for this view. williamr@2: */ williamr@2: IMPORT_C virtual TUid Id() const =0; williamr@2: williamr@2: /** williamr@2: * Event handler for status pane size changes. williamr@2: * @c CAknView provides an empty implementation for sub classes that do williamr@2: * not want to handle this event. williamr@2: */ williamr@2: IMPORT_C virtual void HandleStatusPaneSizeChange(); williamr@2: williamr@2: /** williamr@2: * From @c MCoeView. The full view Id for this view. Calls @c Id() williamr@2: * @return View identification number. williamr@2: */ williamr@2: IMPORT_C TVwsViewId ViewId() const; williamr@2: williamr@2: /** williamr@2: * From @c MEikMenuObserver. This function processes user commands by williamr@2: * handling @c aCommand values @c EAknSoftkeyOptions, @c EAknCmdExit, williamr@2: * @c EEikCmdCanceled and passing the others to @c HandleCommandL() williamr@2: * for sub class to decide the actions. williamr@2: * @param aCommand ID of the command to respond to. williamr@2: */ williamr@2: IMPORT_C virtual void ProcessCommandL(TInt aCommand); williamr@2: williamr@2: /** williamr@2: * Command handling function intended for overriding by sub classes. williamr@2: * Default implementation is empty. williamr@2: * @param aCommand ID of the command to respond to. williamr@2: */ williamr@2: IMPORT_C virtual void HandleCommandL(TInt aCommand); williamr@2: williamr@2: /** williamr@2: * Menu bar accessor method. This returns the views menu if available, williamr@2: * otherwise it returns the applications menu bar. williamr@2: * @return @c CEikMenuBar pointer to views menu bar. williamr@2: */ williamr@2: IMPORT_C virtual CEikMenuBar* MenuBar() const; williamr@2: williamr@2: /** williamr@2: * Calculates the client rectangle of the view, taking the applications williamr@2: * client rectangle and the views CBA into account. williamr@2: * Calls @c CEikAppUi::ClientRect() williamr@2: * @return @c TRect the area of the screen available to the application williamr@2: * for drawing. williamr@2: */ williamr@2: IMPORT_C TRect ClientRect() const; williamr@2: williamr@2: /** williamr@2: * This function causes the menu bar to disappear from the screen until it williamr@2: * is invoked again by the user. williamr@2: * Calls @c CEikAppUi::StopDisplayingMenuBar(). williamr@2: */ williamr@2: IMPORT_C void StopDisplayingMenuBar(); williamr@2: williamr@2: /** williamr@2: * Determines whether the application is foreground. williamr@2: * @return @c ETrue if view is foreground. williamr@2: */ williamr@2: IMPORT_C TBool IsForeground() const; williamr@2: williamr@2: /** williamr@2: * Called by the framework when view's rectangle changes. The default williamr@2: * implementation is empty. This function is not used yet. williamr@2: * @since Series 60 3.0 williamr@2: */ williamr@2: IMPORT_C virtual void HandleViewRectChange(); williamr@2: williamr@2: /** williamr@2: * Asks the view to redraw its area. Needs to be implemented only by williamr@2: * views used in split view architecture. The default implementation is williamr@2: * empty. This function is not used yet. williamr@2: * @since Series 60 3.0 williamr@2: */ williamr@2: IMPORT_C virtual void Redraw() const; williamr@2: williamr@2: williamr@2: /** williamr@2: * Avkon view architecture system. Internal use only. williamr@2: * Calls @c DoActivateL. williamr@2: */ williamr@2: IMPORT_C virtual void AknViewActivatedL(const TVwsViewId& aPrevViewId, williamr@2: TUid aCustomMessageId, williamr@2: const TDesC8& aCustomMessage); williamr@2: williamr@2: /** williamr@2: * Avkon view architecture system. Internal use only. Function is called williamr@2: * by @c CAknViewAppUi::~CAknViewAppUi() for immediate view deactivation. williamr@2: * Calls @c DoDeactivate. williamr@2: */ williamr@2: void AknViewDeactivated(); williamr@2: williamr@2: /** williamr@2: * Avkon view architecture system. Internal use only. williamr@2: */ williamr@2: void ProcessForegroundEventL(TBool aForeground); williamr@2: williamr@2: private: // formerly from @c MTopSetMember williamr@2: IMPORT_C virtual void Reserved_MtsmPosition(); williamr@2: IMPORT_C virtual void Reserved_MtsmObject(); williamr@2: williamr@2: protected: williamr@2: williamr@2: /** williamr@2: * Accessor for the applications user interface as a @c CAknViewAppUi. williamr@2: * @return Pointer to user interface instance. williamr@2: */ williamr@2: IMPORT_C CAknViewAppUi* AppUi() const; williamr@2: williamr@2: /** williamr@2: * Status pane accessor method. williamr@2: * @return Pointer to status pane. williamr@2: */ williamr@2: IMPORT_C CEikStatusPane* StatusPane() const; williamr@2: williamr@2: /** williamr@2: * Button group container (=CBA) accessor method. williamr@2: * This returns the views CBA if there is one, and the applications user williamr@2: * interfaces CBA otherwise. williamr@2: * @return Pointer to @c CEikButtonGroupContainer. williamr@2: */ williamr@2: IMPORT_C CEikButtonGroupContainer* Cba() const; williamr@2: williamr@2: /** williamr@2: * Handles a view activation and passes the message of type williamr@2: * @c aCustomMessageId. This function is intended for overriding by williamr@2: * sub classes. This function is called by @c AknViewActivatedL(). williamr@2: * Views should not launch waiting or modal notes or dialogs in williamr@2: * @c DoActivateL. williamr@2: * @param aPrevViewId Specifies the view previously active. williamr@2: * @param aCustomMessageId Specifies the message type. williamr@2: * @param aCustomMessage The activation message. williamr@2: */ williamr@2: IMPORT_C virtual void DoActivateL(const TVwsViewId& aPrevViewId, williamr@2: TUid aCustomMessageId, williamr@2: const TDesC8& aCustomMessage) = 0; williamr@2: williamr@2: /** williamr@2: * View deactivation function intended for overriding by sub classes. williamr@2: * This function is called by @c AknViewDeactivated(). williamr@2: */ williamr@2: virtual void DoDeactivate() = 0; williamr@2: williamr@2: protected: // From MCoeView. williamr@2: williamr@2: /** williamr@2: * From @c MCoeView. Takes any action required when this view is activated. williamr@2: * Handles this view activation event from view server. Calls williamr@2: * @c CAknViewAppUi::ViewActivatedL() williamr@2: * @param aPrevViewId Specifies the view previously active. williamr@2: * @param aCustomMessageId Specifies the message type. williamr@2: * @param aCustomMessage Activation message. williamr@2: */ williamr@2: IMPORT_C void ViewActivatedL(const TVwsViewId& aPrevViewId, williamr@2: TUid aCustomMessageId, williamr@2: const TDesC8& aCustomMessage); williamr@2: williamr@2: /** williamr@2: * From @c MCoeView. Takes any action that is required following williamr@2: * deactivation of this view. Handles this view deactivation event from williamr@2: * viewserver. Calls @c CAknViewAppUi::ViewDeactivated() williamr@2: */ williamr@2: IMPORT_C void ViewDeactivated(); williamr@2: williamr@2: /** williamr@2: * From @c MCoeView. Screen device changed function from viewserver. williamr@2: * @return TVwsViewIdAndMessage created with default values. williamr@2: */ williamr@2: IMPORT_C TVwsViewIdAndMessage ViewScreenDeviceChangedL(); williamr@2: williamr@2: protected: // from MObjectProvider williamr@2: williamr@2: /** williamr@2: * From @c MObjectProvider. Gets an (@c MAknsControlContext) object whose williamr@2: * type is encapsulated by the specified TTypeUid object. Calls williamr@2: * @c SupplyMopObject( @c TTypeUid aId, williamr@2: * @c CEikButtonGroupContainer* iCba, @c CEikMenuBar* iMenu ). williamr@2: * @param aId Encapsulates the @c Uid that identifies the type of object williamr@2: * required. williamr@2: * @return Pointer to the @c MAknsControlContext object provided. Note that williamr@2: * the pointer may be @c NULL. williamr@2: */ williamr@2: IMPORT_C TTypeUid::Ptr MopSupplyObject(TTypeUid aId); williamr@2: williamr@2: /** williamr@2: * From @c MObjectProvider. Gets the parent object provider. williamr@2: * @return Pointer to the parent object provider (@c MObjectProvider) that williamr@2: * is @c CAknViewAppUi* iAppUi, or @c NULL. williamr@2: */ williamr@2: IMPORT_C MObjectProvider* MopNext(); williamr@2: williamr@2: protected: // From MEikMenuObserver. williamr@2: williamr@2: /** williamr@2: * From @c MEikMenuObserver. Menu emphasising or de-emphasising function. williamr@2: * @c CEikMenuBar objects call this on their observer. Updates the value of williamr@2: * the flags for the (@c aMenuControl) on the control stack. williamr@2: * @param aMenuControl The control to be emphasised or de-emphasisied. williamr@2: * @param aEmphasis @c ETrue to emphasize the menu, @c EFalse to refuse the williamr@2: * focus. williamr@2: */ williamr@2: IMPORT_C virtual void SetEmphasis(CCoeControl* aMenuControl, williamr@2: TBool aEmphasis); williamr@2: williamr@2: /** williamr@2: * From @c MEikMenuObserver. Foreground event handling function intended williamr@2: * for overriding by sub classes. williamr@2: * @param aForeground Indicates the required focus state of the control. williamr@2: */ williamr@2: IMPORT_C virtual void HandleForegroundEventL(TBool aForeground); williamr@2: williamr@2: private: // internal functions williamr@2: void ConstructMenuAndCbaL(TBool aVisible); williamr@2: williamr@2: /** williamr@2: * Asserts that extension class object exists. williamr@2: * @return Extension object. williamr@2: */ williamr@2: CAknViewExtension* Extension() const; williamr@2: williamr@2: public: // new functions williamr@2: williamr@2: /** williamr@2: * @since Series 60 3.1 williamr@2: * @return toolbar object. williamr@2: */ williamr@2: IMPORT_C CAknToolbar* Toolbar() const; williamr@2: williamr@2: /** williamr@2: * This function causes toolbar to be hidden williamr@2: * @since Series 60 3.1 williamr@2: */ williamr@2: IMPORT_C void StopDisplayingToolbar(); williamr@2: williamr@2: /** williamr@2: * Determines if the toolbar of this view is shown when the view is williamr@2: * activated. williamr@2: * @since S60 3.2 williamr@2: * @return ETrue if toolbar is shown. williamr@2: */ williamr@2: IMPORT_C TBool ToolbarShownOnViewActivation() const; williamr@2: williamr@2: /** williamr@2: * Sets toolbar visibility status of this view according to value given. williamr@2: * The value is used when view is activated. williamr@2: * @since S60 3.2 williamr@2: * @param aVisible to determine if toolbar should be shown. williamr@2: */ williamr@2: IMPORT_C void ShowToolbarOnViewActivation( TBool aVisible ); williamr@2: williamr@2: /** williamr@2: * Saves toolbar status of this view according to values given. williamr@2: * The values are used when view is activated. williamr@2: * @since S60 3.2 williamr@2: * @param aVisible to determine if toolbar should be shown. williamr@2: * @param aFocused ETrue if toolbar is focused, EFalse if not williamr@2: */ williamr@2: void SaveToolbarStatus( TBool aVisible, TBool aFocused ); williamr@2: williamr@2: /** williamr@2: * Sets new toolbar for the view. Deletes old toolbar. If the old toolbar williamr@2: * was shown before deleting, then the new toolbar will also be shown. williamr@2: * @since S60 5.0 williamr@2: * @param aToolbar pointer to new toolbar williamr@2: */ williamr@2: IMPORT_C void SetToolbar( CAknToolbar* aToolbar ); williamr@2: williamr@2: /** williamr@2: * Creates a new toolbar object with the resource id given and sets it for williamr@2: * the view. Deletes old toolbar. If the old toolbar was shown before williamr@2: * deleting, then the new toolbar will also be shown. williamr@2: * @since S60 5.0 williamr@2: * @param aResourceId Resource id of the new toolbar williamr@2: */ williamr@2: IMPORT_C void CreateAndSetToolbarL( TInt aResourceId ); williamr@2: williamr@2: williamr@2: protected: // Data williamr@2: // The follow object is not owned by this class. iCoeEnv is protected in williamr@2: // keeping with @c CCoeAppUi & @c CCoeControl williamr@2: CCoeEnv* iCoeEnv; williamr@2: williamr@2: private: williamr@2: CAknViewAppUi* iAppUi; williamr@2: williamr@2: // @c SAknViewInfo is the C++ image of resource structure AVKON_VIEW williamr@2: struct SAknViewInfo williamr@2: { williamr@2: public: williamr@2: TUint8 iVersion; // resource struct version williamr@2: TInt iHotKeys; // resource id williamr@2: TInt iMenu; // resource id williamr@2: TInt iCba; // resource id williamr@2: TInt iToolbar; // resource id williamr@2: TInt iExtension; // resource id williamr@2: }; williamr@2: williamr@2: // The following member data are owned by this class williamr@2: SAknViewInfo iViewInfo; williamr@2: CEikMenuBar* iMenu; williamr@2: CEikButtonGroupContainer* iCba; williamr@2: TBitFlags iFlags; williamr@2: CAknViewExtension* iExtension; williamr@2: }; williamr@2: williamr@2: #endif // AKNVIEW_H