--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDDisplayable.h Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,595 @@
+/*
+* Copyright (c) 2003-2008 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: ?Description
+*
+*/
+
+
+#ifndef CMIDDISPLAYABLE_H
+#define CMIDDISPLAYABLE_H
+
+// CEikBorderedControl inheritance in class declaration
+#include <eikbctrl.h>
+#include <eikmobs.h>
+// needed for calling function SupplyMopObject in CMIDControlItem.cpp, CMIDDisplayable.cpp, CMIDForm.cpp
+#include <eikmop.h>
+#include <lcdui.h>
+#include <eikmenub.h>
+// used MAknLongTapDetectorCallBack interface in class declaration
+// using CAknLongTapDetector* iLongTapDetector member
+#include <aknlongtapdetector.h>
+
+// Skin
+// using API for icons in CMIDCanvas.cpp
+// using API for skin in CMIDDisplayable.cpp
+// using API for icons and skin in CMIDChoiceGroupModel.cpp
+#include <AknsDrawUtils.h>// skin
+// for backgroud control context (iBackGroundControlContext)
+#include <AknsBasicBackgroundControlContext.h> //skin
+
+#include "CMIDCommand.h"
+// API needed for working with commands and command list (setting, getting, handling)
+#include "CMIDCommandList.h"
+// using CMIDMenuHandler::TMenuType
+#include "CMIDMenuHandler.h"
+// using TMidpCustomEvents enumeration
+#include "S60LCDUICustomEvents.h"
+#include "CMIDCanvasKeypad.h"
+#include <e32property.h>
+
+#ifdef RD_TACTILE_FEEDBACK
+#include <touchfeedback.h>
+#include <peninputclient.h>
+#endif //RD_TACTILE_FEEDBACK
+
+// Constants
+const TInt KSoftKeyLabelPropertyNumberOfSoftKeys = 3;
+
+// Forward declarations
+class CMIDAppUi;
+class CMIDSoftKey;
+class CMIDUIManager;
+class CAknAppUi;
+class CMIDTicker;
+class CCommandList;
+class MMIDDisplayableObserver;
+class CEikButtonGroupContainer;
+class CAknStylusPopUpMenu;
+class CPropertyWatch;
+
+// Container for MIDlet Displayables.
+NONSHARABLE_CLASS(CMIDDisplayable) : public CEikBorderedControl, public MMIDDisplayable,
+ public MMIDEnvObserver, public MAknLongTapDetectorCallBack, public MEikMenuObserver
+{
+public:
+
+#ifdef RD_SCALABLE_UI_V2
+ /**
+ * On screen keypad options for devices that do not have physical keypads.
+ */
+ enum TOnScreenKeypadValue
+ {
+ EOnScreenKeypadValueUndefined = 0,
+ EOnScreenKeypadValueNo,
+ EOnScreenKeypadValueNavigationKeys,
+ EOnScreenKeypadValueGameActions,
+ EOnScreenKeypadValueLskRsk
+ };
+
+ // is VKB on screen
+ TBool IsVKBOnScreen();
+#endif // RD_SCALABLE_UI_V2
+
+ /**
+ * On-Screen Keypad SoftKey positions(used when hw-qwerty does not have LSK&RSK)
+ */
+ enum TOnScreenKeypadSoftKeysPosition
+ {
+ ESoftkeysBottom = 0,//default value
+ ESoftkeysRight
+ };
+
+ /**
+ * Returns SoftKey position defined by JAD parameter(default position is bottom)
+ */
+ TInt GetSKPositionForOSK();
+
+ // Construction
+ static CMIDDisplayable* NewL(MMIDEnv& aEnv,CMIDUIManager& aUIManager);
+
+ // From MMIDDisplayable
+ void SetTitleL(const TDesC* aTitle);
+ void SetTickerL(MMIDTicker* aTicker);
+ MMIDTicker* Ticker() const;
+ void AddCommandL(MMIDCommand* aCommand);
+ void RemoveCommand(MMIDCommand* aCommand);
+ TSize ContentSize() const;
+ void HandleCurrentL(TBool aCurrent);
+ void SetComponentL(MMIDComponent& aComponent);
+ MMIDComponent* Component() const;
+ void SetFullScreenModeL(TBool aFullScreen);
+ CCoeControl& ContentWindow();
+ TBool SoftKeyLabelLocation(TInt aSoftKeyId, TPoint& aPosition, TSize& aSize);
+ TInt SoftKeyLabelAnchor(TInt aSoftKeyId);
+ void DrawNow();
+ void ChangeOSKBackgroundState(TBool aOSKBackgroundState);
+
+ /**
+ * Sets a command listener existence info.
+ * @since Series S60 3.2
+ * @param aExistence ETrue if command listener is set
+ */
+ void SetCommandListenerExistence(TBool aExistence);
+
+ // From MMIDComponent
+ void Dispose();
+
+ // From MMIDEnvObserver
+ void HandleSwitchOnL(TBool aSwitchOn);
+ void HandleForegroundL(TBool aForeground);
+ void HandleResourceChangeL(TInt aType);
+
+ // Title handling
+ TBool HasTitle() const;
+ void ShowTitleL();
+ HBufC* Title();
+ void ClearTitleL();
+
+ // Command handling
+ CMIDCommandList* MainCommandList() const;
+ CMIDCommand* FindCommandWithId(TInt aCommandId) const;
+
+ /**
+ * Find the correct softkey commands, if any, and draw the CBA.
+ * Finally draw the CBA.
+ *
+ * @see RestoreMenuL()
+ **/
+ void InitializeCbasL();
+ void SetCba(CEikButtonGroupContainer* aCba);
+ TBool ShowOkOptionsMenuL();
+ TInt NumCommandsForOkOptionsMenu() const;
+ TInt GetHighestPriorityScreenOrHelpCommand() const;
+ void SetItemCommandList(CMIDCommandList* aList, CMIDCommand* aMSKCommand);
+ void SetMSKCommand(CMIDCommand* aMSKCommand);
+ /**
+ * Stores select command to Displayable
+ * @param aSelectCommand a command used in MSK and in menu
+ */
+ void SetSelectCommand(CMIDCommand* aSelectCommand);
+ /**
+ * Disables or enables select command
+ * @aEnableSelectCommand ETrue enables select command and EFalse disables select command
+ */
+ void SetSelectCommandState(TBool aEnableSelectCommand);
+
+ TInt CommandCount();
+ void ProcessCommandL(TInt aCommandId);
+ void DisplayableBehindPopupIsDestroyed();
+ // Processes native Help command event to java
+ void HandleHelpCommandL();
+ // Get number of inserted help commands
+ TInt NumCommandsForHelpOptionsMenu() const;
+ void HandleHighestPriorityScreenOrHelpCommandL();
+
+#ifdef RD_SCALABLE_UI_V2
+ // This function can be moved out from RD_SCALABLE_UI_V2 flag if needed.
+ // It is behind this flag because currently it is used only by Touch.
+ /**
+ * Passes call to ProcessCommandL (TInt aCommandId) function.
+ * This is useful in situations in which the internal Command ID is not available.
+ *
+ * @param aCommand to be executed.
+ * @since S60 5.0
+ */
+ void ProcessCommandL(CMIDCommand* aCommand);
+#endif // RD_SCALABLE_UI_V2
+
+ void CreateMenuItemsL(const CMIDMenuHandler::TMenuType& aMenuType,
+ RArray<CEikMenuPaneItem::SData>& aMenuItems);
+ // Skin
+ MAknsControlContext* BackGroundControlContext();
+
+ /** From MAknLongTapDetectorCallBack */
+ void HandleLongTapEventL(const TPoint& /*aPenEventLocation*/, const TPoint& /*aPenEventScreenLocation*/);
+
+ /**
+ * Way to report pointer event to displayable so that the component will get the
+ * default long tap functionality. This method should be called when ever a pointer
+ * event occurs in an ui component. Returns true if the event is consumed and should
+ * not be forwarded any more (e.g. pointer up event after a detected long tap).
+ **/
+ TBool TryDetectLongTapL(const TPointerEvent& aPointerEvent);
+
+ // Misc.
+ TBool IsFullScreenMode() const;
+ CMIDMenuHandler* MenuHandler() const;
+ TBool IsActive() const;
+
+ /**
+ * Content component notifies Displayable about its deletion.
+ *
+ * @note It might happen that content is destroyed before displayable
+ * and that's why we need to notify displayable about its content deletion.
+ * @see Displayable.java: registeredFinalize()
+ **/
+ void NotifyContentDestroyed();
+
+ /**
+ * Gets a command listener existence info.
+ * @since Series S60 3.2
+ * @return ETrue if a command listener is set
+ */
+ TBool IsCommandListenerSet() const;
+ /**
+ * Get UI manager
+ * @return CMIDUIManager instance
+ *
+ * @since s60
+ */
+ virtual CMIDUIManager* GetUIManager() const;
+
+ /**
+ * Sets S60 Selection Key Compatibility
+ */
+ void SetS60SelectionKeyCompatibility(TBool aS60SelectionKeyCompatibility);
+
+ /**
+ Adds a rectangle which is excluded from redrawing (for DSA)
+ @param "aRect" Rentangle to be exluded from redrawing.
+ */
+ void AddDirectContentArea(const TRect& aRect);
+
+ /**
+ Removes a rectangle which is excluded from redrawing (for DSA)
+ @param "aRect" Rentangle to be removed from exclusion list.
+ */
+ void RemoveDirectContentArea(const TRect& aRect);
+
+ /**
+ Checks if there were some direct content area added
+ @return ETrue if there no DC Area has been added
+ */
+ TBool NoDirectContentAreaDefined();
+
+ /**
+ * Sets popup style TextBox boolean value. Called by CMIDTextBoxDialogControl when
+ * TextBox presentation is pop-up.
+ *
+ * @param "aPopup" boolean value indicating whether the textbox is popup or not.
+ *
+ * @since S60 5.0
+ */
+ void SetPopupTextBox(TBool aPopup);
+
+ /**
+ * Returns boolean value indicating whether this displayable is pop-up TextBox.
+ *
+ * @return TBool
+ *
+ * @since S60 5.0
+ */
+ virtual TBool IsPopupTextBox();
+
+ /**
+ * Handles the On-Screen Keypad visual appearance.
+ *
+ * @return void
+ *
+ * @since S60 5.0
+ */
+ void HandleOnScreenKeypadVisual();
+
+ /**
+ * Notify a CMIDDisplayable then application is switch to background.
+ *
+ * @return void
+ *
+ * @since S60 5.0
+ */
+ void HandleApplicationBackground();
+
+ /**
+ * Function process command which is mapped to MSK
+ *
+ * @return void
+ *
+ * @since S60 5.0
+ */
+ void ProcessMSKCommandL();
+
+private:
+ // Construction and destruction
+ CMIDDisplayable(MMIDEnv& aEnv,CMIDUIManager& aUIManager);
+ void ConstructL();
+ ~CMIDDisplayable();
+
+ // From CCoeControl
+ void Draw(const TRect& aRect) const;
+ virtual TInt CountComponentControls() const;
+ CCoeControl* ComponentControl(TInt aIndex) const;
+ void SizeChanged();
+ TTypeUid::Ptr MopSupplyObject(TTypeUid aId);
+
+ // Private command handling
+ void PopulateMenuItemsWithListL(const CMIDMenuHandler::TMenuType& aMenuType,
+ RArray<CEikMenuPaneItem::SData>& aItems, CMIDCommandList* aCommandList, TBool aSeparator);
+ TBool CommandIsMappedToSk(const CMIDCommand* aCommand) const;
+ void HandleStandardCommandL(const TCommandEntry& aCmdEntry);
+ void HandleItemCommandL(const TCommandEntry& aCmdEntry);
+ TInt GetInternalCommandIdFor(CMIDCommand* aCommand) const;
+ void GetOkOptionsMenuCommands(RPointerArray<CMIDCommand>& aCommands) const;
+ void ResetSoftKeysAndCommands(const RArray<CMIDCommandList*>& aLists);
+
+ // Visual layouting and updating
+ void UpdateVisualAppearanceL();
+ void UpdateTickerL();
+ void Layout();
+ void SizeWindowAndToolBar();
+ void ReplaceBehindAlertIfNeeded();
+ void UpdateDisplayableRect();
+
+ // Activation handling
+ void HandleActivatedL();
+ void HandleDeactivated();
+
+
+ // The structure to store the Direct content bounds and its identification number
+ struct TDirectContentsRect
+ {
+ /**
+ * Default ctor
+ */
+ TDirectContentsRect()
+ : iRefCount(0) {}
+
+ /**
+ * Ctor
+ * @param aRect Rectangle
+ */
+ TDirectContentsRect(const TRect& aRect)
+ : iRect(aRect), iRefCount(1) {}
+
+ TRect iRect;
+ TInt iRefCount;
+ };
+
+ /**
+ * Determines whether two TDirectContentsRect type objects match
+ * @param aLhs First object
+ * @param aRhs Second object
+ * @return True if matched
+ * @see RArray::Find
+ */
+ static TBool MatchDirectContentsRects(
+ const TDirectContentsRect& aLhs, const TDirectContentsRect& aRhs);
+
+ /**
+ * Updates <code>iDirectContentsRegion</code> according to
+ * the <code>iDirectContentsRects</code> array.
+ */
+ void UpdateDirectContentsRegion();
+
+
+ // From MEikMenuObserver
+ void SetEmphasis(CCoeControl* aMenuControl,TBool aEmphasis);
+ /**
+ * OnScreenKeypad
+ * Returns canvas rect from LAF when using OnScreenKeypad.
+ *
+ * @return TRect Canvas Rect
+ *
+ * @since S60 5.0
+ */
+ TRect GetCanvasRectFromLaf();
+
+ /**
+ * Set correct On-Screen keyboard type.
+ *
+ * @return void
+ *
+ * @since S60 5.0
+ */
+ void UpdateOnScreenKeypadSettings();
+
+ /**
+ * Read On-Screen keyboard MIDlet suite settings
+ *
+ * @return void
+ *
+ * @since S60 5.0
+ */
+ void ReadOnScreenKeypadTypeFromSuiteSettings();
+
+#ifdef RD_SCALABLE_UI_V2
+ /**
+ * Returns midlet suite setting for on screen keypad.
+ * The setting is retrieved from the User preferences API and it requires file accessing, thus
+ * this function should not be called repeatedly because of performance issues.
+ *
+ * @return TOnScreenKeypadValue Current setting value.
+ * Returns EOnScreenKeypadValueUndefined if reading of the setting fails.
+ *
+ * @since S60 5.0
+ */
+ TUint OnScreenKeypadL();
+#endif // RD_SCALABLE_UI_V2
+
+ void RenewFullscreenCanvasLabelCacheL();
+
+#ifdef RD_JAVA_NGA_ENABLED
+ /**
+ * In case content is Canvas, notifies it about changed
+ * foreground status.
+ *
+ * @param aForeground ETrue, if displayable is on foreground,
+ * EFalse otherwise.
+ * @since S60 9.2
+ */
+ void HandleCanvasForeground(TBool aForeground);
+#endif // RD_JAVA_NGA_ENABLED
+
+ void HideIndicator(CEikStatusPane* aSp, TInt aId);
+ void HideIndicators();
+
+private:
+ CMIDAppUi* iAppUi;
+ CMIDUIManager* iUIManager;
+ MMIDEnv& iEnv;
+ CAknLongTapDetector* iLongTapDetector;
+ TBool iLongTapDetected;
+ CAknStylusPopUpMenu* iStylusPopupMenu;
+
+ // Controls
+ CCoeControl* iContentControl;
+ CEikButtonGroupContainer* iCba;
+ // Peers
+ CMIDTicker* iTicker;
+ MMIDComponent* iContent;
+
+ //The main displayable commands
+ CMIDCommandList* iCommandList;
+
+ //Displayable behind Alert and PopupTextBox
+ CMIDDisplayable* iDisplayableBehindPopup;
+
+ //The commands associated with form items
+ CMIDCommandList* iItemCommandList;
+
+ // The command associated with middle soft key, may be NULL
+ CMIDCommand* iMSKCommand;
+
+ //Sofkey information. For each softkey on the device it
+ //stores the allowed commands types, the mapped command
+ //or default CBA button
+ RPointerArray<CMIDSoftKey> iSoftKeys;
+
+ CMIDMenuHandler* iMenuHandler;
+ HBufC* iTitle;
+ TBool iHasTitle;
+
+ //Skin
+ CAknsBasicBackgroundControlContext* iBackGroundControlContext;
+
+ // State
+ TBool iIsFullScreenMode;
+ TBool iActive;
+ TBool iCommandListenerExistence;
+ TRect iDisplayableRect;
+ // current number of item commands
+ TInt iItemCommandsCount;
+
+ CMIDCommand* iSelectCommand;
+ TBool iSelectCommandEnabled;
+
+ TBool iS60SelectionKeyCompatibility;
+
+ //OnScreenKeypad specific members
+ CMIDCanvasKeypad* iCanvasKeypad;
+ CMIDCanvas* iCanvas;
+ TBool iUseOnScreenKeypad;
+ TInt iOnScreenKeyboardType;
+ TInt iSKPositionWithQwerty;
+
+ mutable RRegion iUpdateRegion;
+ RRegion iDirectContentsRegion;
+ // Direct content bounds list
+ RArray< TDirectContentsRect > iDirectContentsRects;
+
+ // Structure to store the softkey label position and anchor
+ struct TSoftkeyLabel
+ {
+ TPoint iPosition;
+ TSize iSize;
+ // Java anchor constant as defined in class Graphics
+ enum TJavaAnchor
+ {
+ EJavaHCenter = 1,
+ EJavaVCenter = 2,
+ EJavaLeft = 4,
+ EJavaRight = 8,
+ EJavaTop = 16,
+ EJavaBottom = 32
+ };
+ TInt iAnchor;
+ // Shows if the sk is used
+ TBool iIsOn;
+ };
+
+ // The storage of softkey labels data
+ // This is used for the increasing of the performace of getting SK properties
+ // The data validity is stored in iFullscreenCanvasLabelCacheIsValid
+ // The data are renewed/revalidated by RenewFullscreenCanvasLabelCache()
+ TSoftkeyLabel iFullscreenCanvasLabelCache[ KSoftKeyLabelPropertyNumberOfSoftKeys ];
+
+ // Shows if the data in iFullscreenCanvasLabelCache are valid
+ TBool iFullscreenCanvasLabelCacheIsValid;
+
+ // VKB status
+#ifdef RD_TACTILE_FEEDBACK
+ RPeninputServer iPenInputServer;
+ TBool iPenInputServerConnected;
+#endif
+
+ // Used by TextBox indicating whether the textbox is popup or not.
+ TBool iIsPopupTextBox;
+
+ /**
+ * Initialize iPropertyWatch as CPropertyWatch. Active Object will be
+ * removed from Active Scheduler in CMIDDisplayable (destructor).
+ */
+ CPropertyWatch* iPropertyWatch;
+
+ //stores id of command mapped to the MSK
+ TInt iIdOfMSKCommand;
+
+};
+
+
+
+
+// Timer delay
+const TInt KTimerDelayValue = 200000;//0.2s
+
+/**
+An active object that tracks changes to the active keyboard properties
+*/
+NONSHARABLE_CLASS(CPropertyWatch) : public CActive
+{
+public:
+ static CPropertyWatch* NewL(MMIDDisplayable* aDisplayable);
+ ~CPropertyWatch();
+private:
+ CPropertyWatch();
+ void ConstructL(MMIDDisplayable* aDisplayable);
+ void RunL();
+ void DoCancel();
+ void HandleDelayTimerEventL();
+ static TInt DelayTimerCallbackL(TAny* aThis);
+
+ CMIDDisplayable* iDisplayable;
+ RProperty iProperty;
+
+ /**
+ * Timer delay for reacting to keypad opening/closing.
+ */
+ CPeriodic* iDelayTimer;
+
+};
+
+
+
+#endif // CMIDDISPLAYABLE_H
+
+// End of File