--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/epoc32/include/mw/aknenv.h Wed Mar 31 12:33:34 2010 +0100
@@ -0,0 +1,536 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+#if !defined(__AVKON_ENV_H__)
+#define __AVKON_ENV_H__
+
+// INCLUDES
+#include <eikenv.h>
+#include <eiksbfrm.h>
+#include <eikcba.h>
+#include <eikmobs.h>
+#include <eikmenub.h>
+#include <eikappui.h>
+#include <AknLayout2Id.h> // for TAknLayoutId
+#include <AknDef.h> // for TAknUiZoom
+
+// FORWARD DECLARATIONS
+namespace AknLayout { class CInstance; }
+namespace LayoutPack { class CInstance; }
+
+class CCdlEngineRef;
+class MAknEditingStateIndicator;
+class MAknIntermediateState;
+class CAknAppUi;
+class CAknWaitDialog;
+class CEikListBox;
+class CAknSettingCache;
+class CAknFontRegistry;
+class CLafSystemFont;
+class TAknLayoutConfigScreenMode;
+class CCdlRefs;
+class CTransitionManager;
+class CAknCommandMediator;
+// Since there is no include of aknsystemfont.h we need the typedef CLafSystemFont here as well
+// Hence this requires parallel maintenance.
+typedef CLafSystemFont CAknSystemFont;
+
+// MACROS
+// Color Macros
+/** Color indirection macros
+ *
+ * This macro takes number from LAF specification and converts it to TRgb for
+ * use to draw things.
+ */
+
+// Color macros
+#define AKN_LAF_COLOR_ENV(env,nn) CAknEnv::AvkonColor(nn)
+#define AKN_LAF_COLOR(nn) CAknEnv::AvkonColor(nn)
+#define AKN_LAF_COLOR_STATIC(nn) CAknEnv::AvkonColor(nn)
+
+ // Avkon layout
+// IMPORT_C const AknLayout::CInstance& AknLayout() const;
+
+
+// CLASS DECLARATION
+
+/**
+* This class is a Series 60 extension to @c CEikonEnv.
+* Every Avkon application is provided with an instance of @c CAvkEnv by the
+* framework, which can be accessed through the @c iAvkonEnv macro.
+*
+* @since Series 60 0.9
+*/
+class CAknEnv : public CBase
+ {
+public:
+ /**
+ * Gets the @c CAknEnv maintained by the framework for the application.
+ * Compare @c CCoeEnv::Static().
+ *
+ * This function should never be run in a thread where such a static Avkon
+ * environment does not exist. Code that may run on the server side of an
+ * application server is one such case.
+ * @return A static @c CAknEnv.
+ */
+ IMPORT_C static CAknEnv* Static();
+
+ /**
+ * Destructor.
+ */
+ IMPORT_C ~CAknEnv();
+public:
+ // this one creates an empty dialog. for list queries and popup lists with
+ // "No Data" in it.
+ /**
+ * Executes empty popup list.
+ *
+ * @param aEmptyText Text indicating empty popup list. NULL if
+ * @c R_AVKON_EMPTY_POPUP_LIST_TEXT used.
+ */
+
+ IMPORT_C void ExecuteEmptyPopupListL(const TDesC *aEmptyText=0);
+
+ /**
+ * Executes empty popup list.
+ * @c aSoftkeyId is soft key rescource used, but shown without left soft
+ * key (except @c R_AVKON_SOFTKEYS_OK_EMPTY).
+ *
+ * @param aEmptyText Text indicating empty popup list. NULL if
+ * @c R_AVKON_EMPTY_POPUP_LIST_TEXT used.
+ * @param aTitle A title of the popup list.
+ * @param aSoftKeyId CBA resource to be used as a base. 0 if
+ * @c R_AVKON_SOFTKEYS_CANCEL is used.
+ */
+ IMPORT_C void ExecuteEmptyPopupListL(const TDesC *aEmptyText,
+ const TDesC *aTitle,
+ TInt aSoftkeyId=0);
+
+public:
+ /**
+ * Set the FEP menu observer.
+ *
+ * @param aObserver the FEP menu observer.
+ */
+ IMPORT_C void SetFepMenuObserver(MEikMenuObserver* aObserver);
+
+ /**
+ * Get the FEP menu observer.
+ *
+ * @return Pointer to the FEP menu observer.
+ */
+ IMPORT_C MEikMenuObserver* FepMenuObserver();
+
+ /**
+ * Get the editing state indicator.
+ *
+ * @return Pointer to the editing state indicator.
+ */
+ IMPORT_C MAknEditingStateIndicator* EditingStateIndicator();
+
+
+ /**
+ * Swap the editing state indicator.
+ *
+ * @param aIndicator The new editing state indicator.
+ * @return The old editing state indicator.
+ */
+ IMPORT_C MAknEditingStateIndicator* SwapEditingStateIndicator(
+ MAknEditingStateIndicator* aIndicator);
+
+ /**
+ * Exit foreground application.
+ */
+ IMPORT_C static void ExitForegroundAppL();
+
+public: // Intermediate states support
+ /**
+ * Register the control implementing intermediate states.
+ * Call @c iAvkonEnv->RegisterIntermediateState(this) in control's
+ * @c ActivateL().
+ *
+ * @param aState The control implementing intermediate states.
+ */
+ IMPORT_C void RegisterIntermediateStateL(MAknIntermediateState *aState);
+
+ /**
+ * Unregister the control implementing intermediate states.
+ * Call @c iAvkonEnv->UnRegisterIntermediateState(this) in control's
+ * destructor.
+ *
+ * @param aState The control implementing intermediate states.
+ */
+ IMPORT_C void UnRegisterIntermediateState(MAknIntermediateState *aState);
+
+ /**
+ * Closes all intermediate states as a low-priority process.
+ */
+ IMPORT_C void CloseAllIntermediateStates();
+
+public:
+ /**
+ * Run application shutter.
+ */
+ IMPORT_C static void RunAppShutter();
+
+ /**
+ * Get pointer to the most embedded application UI with Dialog Shutter
+ * running.
+ *
+ * @return Pointer to the most embedded application UI with Dialog Shutter
+ * running. @c NULL if no any Dialog Shutter running.
+ */
+ IMPORT_C static CAknAppUi* AppWithShutterRunning();
+
+ /**
+ * Stop the scheduler. If the waiting control can't stop the scheduler
+ * immediately, then trying to show a busy note.
+ * @param aWait Scheduler object to be stopped.
+ */
+ IMPORT_C static void StopSchedulerWaitWithBusyMessage(
+ CActiveSchedulerWait& aWait);
+
+public:
+ /**
+ * Create CBA observer. The possible existing one is removed first.
+ * @param aCba A control which @c ProcessCommandL handles the command.
+ * @param aListBox Stored to data member @c iListBox.
+ */
+ IMPORT_C void CreateCbaObserverL(CEikButtonGroupContainer *aCba,
+ CEikListBox *aListBox);
+
+ /**
+ * Remove CBA observer.
+ */
+ IMPORT_C void RemoveCbaObserver();
+
+
+ /**
+ * Remove CBA observer if the right one.
+ * @param aCba CBA to be checked.
+ */
+ IMPORT_C void InformCbaDeletion(CEikButtonGroupContainer *aCba);
+
+ /**
+ * Requests mediation of MSK commmands from specified CBA to the
+ * given observer. When called for the first time, this method creates
+ * an observer that is added to specified CBA to observe MSK commands
+ * and to mediate all received events to the given observer. The created
+ * observer exists until the CAknEnv instance is destroyed. All subsequent
+ * calls to this method replace the previously requested mediation.
+ *
+ * @param aCba CBA whose MSK is to be observed.
+ * @param aCommandObserver An observer for which the commands are sent.
+ */
+ IMPORT_C void RequestCommandMediationL( CEikButtonGroupContainer& aCba,
+ MEikCommandObserver& aCommandObserver );
+
+ /**
+ * Ends mediating MSK commands to specified command observer. If commands
+ * are being mediated to the specifed observer, the command mediator is
+ * removed from the CBA to end mediation.
+ *
+ * @param aCommandObserver An observer.
+ */
+ IMPORT_C void EndCommandMediation( MEikCommandObserver& aCommandObserver );
+
+public:
+ /**
+ * Get current layout ID.
+ * @since Series 60 2.0
+ * @param aCurrentLayoutId On return, contains current layout ID.
+ */
+ IMPORT_C void GetCurrentLayoutId(TAknLayoutId& aCurrentLayoutId) const;
+
+ /**
+ * Get current global zoom
+ * @since 3.1
+ * @param aCurrentGlobalUiZoom On return, contains current global zoom.
+ */
+ IMPORT_C void GetCurrentGlobalUiZoom(TAknUiZoom& aCurrentGlobalUiZoom) const;
+
+public:
+ /**
+ * Tells the type of status pane layout for UI.
+ * @since Series 60 2.0
+ * @param aResId resource id for current layout.
+ * @return Resource id equivalent type of status pane layout.
+ */
+ IMPORT_C TInt StatusPaneResIdForCurrentLayout(TInt aResId) const;
+
+public:
+ /**
+ * Requests Window Server client buffer used by the application to
+ * be of at least the given size. All code that wants to increase
+ * (to avoid flicker) or decrease (to save RAM) the buffer compared
+ * to the default size should call this method instead of using
+ * WS interface directly. A list of all requests is maintained
+ * and the highest request is always effective. Only if there are no
+ * requests done, the default buffer size is used.
+ *
+ * @since Series 60 2.0
+ *
+ * @param aRequestedBufferSize requested Window Server client buffer size.
+ *
+ * @return Request ID. This is used when the request is canceled.
+ * In OOM situation, @c KErrNoMemory is returned.
+ * @c CancelWsBufferRequest ignores negative values as error codes
+ * so it is OK to pass any value returned by this method to
+ * @c CancelWsBufferRequest.
+ */
+ IMPORT_C TInt RequestWsBuffer( TInt aRequestedBufferSize );
+
+ /**
+ * Cancels a request made by call @c RequestWsBuffer. This should be
+ * called in order to save RAM when higher than normal buffer size is
+ * no longer required.
+ *
+ * @since Series 60 2.0
+ *
+ * @param aRequestID The request ID returned by the
+ * @c RequestWsBuffer call which is to be canceled.
+ * Negative values are treated as error codes and ignored.
+ */
+ IMPORT_C void CancelWsBufferRequest( TInt aRequestID );
+
+public:
+ /**
+ * @internal to Series 60
+ */
+ IMPORT_C CAknSettingCache& SettingCache() const;
+
+ /**
+ * Access to the registry of CAknLayoutFont pointers. Used for runtime
+ * checking of CFont pointers.
+ *
+ * @internal to Series 60
+ * @since Series 60 2.8
+ *
+ * @return Reference to the registry
+ */
+ CAknFontRegistry& FontRegistry() const;
+
+ /**
+ * Access to the system font array that is owned by CEikonEnv. The member accessed by this
+ * is set during CEikonEnv construction and may be null during application startup.
+ *
+ * @internal to Series 60
+ * @since Series 60 2.8
+ *
+ * @return Pointer to the system font array
+ */
+ CArrayPtr<CAknSystemFont>* SystemFontArray() const;
+
+ void UpdateSystemFontsL();
+
+ static void ShutOrHideAppL();
+
+public: // layout
+
+ /**
+ * Load an appropriate Avkon layout.
+ *
+ * @since Series 60 2.6
+ * @return @c EFalse if the layout is already loaded.
+ */
+ IMPORT_C TBool LoadAknLayoutL();
+ /**
+ * Load an appropriate Avkon layout for a particular screen mode.
+ *
+ * @since Series 60 3.1
+ * @param aScreenMode The screen mode which the layout is required for
+ * @return @c EFalse if the layout is already loaded.
+ */
+ IMPORT_C TBool LoadAknLayoutL(const TAknLayoutConfigScreenMode& aScreenMode);
+
+ /**
+ * Re-load the current Avkon layout, in case there are new layout instances present.
+ *
+ * @since Series 60 5.1
+ */
+ void ReloadAknLayoutL();
+
+ // Avkon layout
+ /**
+ * Accessor method to layout.
+ *
+ * @since Series 60 2.6
+ * @return Reference to the Layout.
+ */
+ IMPORT_C const AknLayout::CInstance& AknLayout() const;
+
+public: // color support
+ /**
+ * Gets the TRgb value of the entry at the specified index in the colour
+ * lookup table.
+ *
+ * @since Series 60 0.9
+ * @param The aIndex of the colour lookup table, integer between 0 and 255.
+ * @return The TRgb value of the colour lookup table at the aIndex.
+ */
+ IMPORT_C static TRgb AvkonColor( TInt );
+
+public: // split view support
+ /**
+ * Checks if split view is active.
+ * @since Series 60 5.0
+ * @return ETrue if split view is active.
+ */
+ IMPORT_C TBool SplitViewActive() const;
+
+ /**
+ * Sets split view flag.
+ * @since Series 60 5.0
+ * @param aSplitViewActive Etrue if split view is active.
+ */
+ void SplitViewActive( const TBool aSplitViewActive );
+
+ void TransitionEvent(TInt aEvent, const TUid& aAppUid);
+ void TransitionEvent(TInt aEvent);
+ TBool HasBlank() const;
+
+public: // future language
+ /*
+ * Check if the feature language is same.
+ * @param aFeatureLanguage feature language (e.g. KFeatureIdJapanese)
+ * @return ETrue if the arg is same as iFeatureLanguage.
+ * @since 3.1
+ */
+ TBool IsFeatureLanguage(TInt aFeatureLanguage);
+
+private:
+
+ void SetWsBufferSize();
+ void SetWsBufferSize( TInt aRequestedBufferSize );
+
+ // Only these can use run info array, so it cannot get messed up
+ // by simultaneous use.
+ friend class AknBidiTextUtils;
+ friend class TAknTextWrapper;
+
+ /**
+ * Returns run info array owned by AknEnv.
+ *
+ * @param aLength Length of the array is returned here.
+ *
+ * @return Run info array owned by AknEnv.
+ */
+ TBidirectionalState::TRunInfo* RunInfoArray( TInt& aLength ) const;
+
+ /**
+ * Tests how big run info array the given text requires and
+ * tries to increase the size of the array if required.
+ *
+ * @param aLogicalText Text in logical order.
+ *
+ * @return KErrNone or KErrNoMemory.
+ */
+ TInt PrepareRunInfoArray( const TDesC& aLogicalText );
+
+ /**
+ * Tries to increase the size of the run info array if
+ * it is currently smaller than given length.
+ *
+ * @param aLength Length of the new run info array to be allocated.
+ *
+ * @return KErrNone or KErrNoMemory.
+ */
+ TInt SetRequiredRunInfoArraySize( TInt aLength );
+
+ void SetLayoutRequirementsL();
+ void AssertLayoutLoaded();
+ TBool TryLoadAknLayoutL(TAknLayoutId aId, const TAknLayoutConfigScreenMode& aScreenMode, TAknUiZoom aUiZoom);
+ TBool LoadAknLayoutL(TAknLayoutId aId, const TAknLayoutConfigScreenMode& aScreenMode, TAknUiZoom aUiZoom);
+ TAknUiZoom ResolveCurrentUiZoom();
+
+ /**
+ * Use the currently loaded layout to set the values of the font size array used by CCoeFontProvider.
+ */
+ void SetConeFontSizeArrayL() const;
+
+private:
+ static TInt RealCloseIntermediateStates(TAny *aEnv);
+ static TInt SchedulerStoppedCallBack(TAny* aWaitNote);
+ void DoSchedulerStoppedCallBack();
+
+private:
+ friend class LafEnv;
+
+ IMPORT_C static void InstallAknEnvAsExtensionL(CEikonEnv* aEnv);
+ IMPORT_C CAknEnv();
+ IMPORT_C void ConstructL();
+
+public:
+ /**
+ * Return if Transparency is Enabled .
+ *
+ * @since 5.0
+ *
+ * @return if Transparency is Enabled.
+ */
+ IMPORT_C TBool TransparencyEnabled() const;
+
+private:
+ MEikMenuObserver* iFepMenuObserver;
+ MAknEditingStateIndicator* iEditStateIndicator;
+private:
+ CArrayPtr<MAknIntermediateState> *iStateArray;
+ CArrayPtr<CBase> *iDeleteArray;
+ CIdle *iIdle;
+ CAknWaitDialog* iBusyMsgDialog;
+ TInt iBusyMsgCount;
+ MEikCommandObserver *iCbaCommandObserver;
+ CAknSettingCache* iSettingCache;
+ TBidirectionalState::TRunInfo* iRunInfoArray;
+ TInt iRunInfoArrayLength;
+
+ struct TWsBufferRequest
+ {
+ TInt iRequestID;
+ TInt iRequestedSize;
+ };
+
+ RArray<TWsBufferRequest> iWsBufferRequestArray;
+ TInt iRequestIdCounter;
+ TInt iCurrentWsBufferRequest;
+
+ // cache for layout parameters
+ TAknLayoutId iLastLayoutId;
+ TInt iLastScreenMode;
+ TAknUiZoom iLastZoom;
+
+ CEikonEnv* iCoeEnv;
+ CAknFontRegistry* iFontRegistry; // Owned register of CAknLayoutFont pointers
+ CCdlEngineRef* iCdlEngRef;
+ const AknLayout::CInstance* iLayout;
+ CArrayPtr<CAknSystemFont>* iSystemFontArray; // Not owned. System Font array is owned by CEikonEnv
+ TBool iSplitViewActive;
+ CTransitionManager* iTransitionManager;
+ CAknCommandMediator* iCommandMediator;
+ /*
+ * Set the feature language Id
+ * If device uses Japanese language variant, KFeatureIdJapanese is set.
+ * @since 3.1
+ */
+ TInt iFeatureLanguage;
+ };
+
+
+#define iAvkonEnv (STATIC_CAST(CAknEnv*,iEikonEnv->Extension()))
+#define AVKONENV (STATIC_CAST(CAknEnv*, CEikonEnv::Static()->Extension()))
+
+#endif