javauis/lcdui_akn/lcdui/inc/CMIDCustomItem.h
branchRCL_3
changeset 14 04becd199f91
child 24 6c158198356e
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/javauis/lcdui_akn/lcdui/inc/CMIDCustomItem.h	Tue Apr 27 16:30:29 2010 +0300
@@ -0,0 +1,344 @@
+/*
+* Copyright (c) 2003-2009 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 CMIDCUSTOMITEM_H
+#define CMIDCUSTOMITEM_H
+
+#include <gdi.h>
+#include <lcdui.h>
+#include <reflcdui.h>
+//
+#include "CMIDForm.h"
+// CMIDControlItem inheritance in class declaration
+#include "CMIDControlItem.h"
+// interface class for receiving media key events
+#include "MMIDMediaKeysListener.h"
+// PointerEventSuppressor
+#include <aknpointereventsuppressor.h>
+
+#ifdef RD_TACTILE_FEEDBACK
+#include "CMIDTactileFeedbackExtension.h"
+#endif //RD_TACTILE_FEEDBACK
+
+// FORWARD DECLARATIONS
+class CMIDRemConObserver;
+class CMIDKeyDecoder;
+class CEikLabel;
+
+NONSHARABLE_CLASS(CMIDCustomItem) : public CMIDControlItem, public MMIDCustomItem,
+#ifndef RD_JAVA_NGA_ENABLED
+        public MDirectScreenAccess,
+#endif
+        public MMIDBufferProcessor, public MDirectContainer, public MMIDMediaKeysListener
+#ifdef RD_TACTILE_FEEDBACK
+        , public MMIDTactileFeedbackComponent
+#endif // RD_TACTILE_FEEDBACK
+
+{
+public:
+    static CMIDCustomItem* NewL(MMIDEnv& aEnv, const TDesC& aLabel, CMIDUIManager* aUIManager);
+
+    TBool           SupportsInternalTraversal() const;
+
+    //
+    // From MMIDCustomItem
+    //
+    TInt            InteractionModes() const;
+    void            SetFocusAndScroll(TBool aFocus,const TRect* aScroll,TInt aDirection);
+
+    void            SetContainerWindowL(const CCoeControl& aWindow);
+    void            Invalidate(const TSize& aMinSize, const TSize& aPrefSize);
+    const TSize&    PreferredContentSize() const;
+    const TSize&    MinimumContentSize() const;
+
+    CFbsBitmap*     FrameBuffer() const;
+    MDirectContainer& DirectContainer();
+    //
+    // From MMIDItem
+    //
+    void  SetLabelL(const TDesC& aLabel);
+    void  SetLayoutL(TLayout aLayout);
+
+    void  SetPreferredSizeL(const TSize& aSize);
+    TSize PreferredSize() const;
+
+    TSize MinimumSize() const;
+
+    void  AddCommandL(MMIDCommand* aCommand);
+    void  RemoveCommand(MMIDCommand* aCommand);
+    void  SetDefaultCommand(MMIDCommand* aCommand);
+
+    //
+    // From MMIDComponent
+    //
+    void Dispose();
+    MMIDBufferProcessor* Processor();
+
+    //
+    // From MMIDBufferProcessor
+    //
+#ifdef RD_JAVA_NGA_ENABLED
+    virtual TBool ProcessL(
+        const TMIDBufferOp*& aRead, const TMIDBufferOp* aEnd,
+        TInt& aCycles, java::util::Monitor* aMonitor);
+#else
+    virtual TBool ProcessL(
+        const TMIDBufferOp*& aRead, const TMIDBufferOp* aEnd,
+        TInt& aCycles, TRequestStatus* aStatus = NULL);
+#endif
+    void  AbortAsync();
+
+    //
+    // From CCoeControl
+    //
+    TSize MinimumSize();
+    TInt CountComponentControls() const;
+    CCoeControl* ComponentControl(TInt aIndex) const;
+    void Draw(const TRect& aRect) const;
+    void SizeChanged();
+    void PositionChanged();
+    TKeyResponse OfferKeyEventL(const TKeyEvent& aEvent, TEventCode aType);
+#ifdef RD_SCALABLE_UI_V2
+    void HandlePointerEventL(const TPointerEvent &aPointerEvent);
+#endif //RD_SCALABLE_UI_V2
+    void HandleCurrentL(TBool aCurrent);
+
+public:
+    TSize ResetPreferredSize() const;
+    TSize CheckRequestedSize(const TSize& aRequestedSize) const;
+    void FocusChanged(TDrawNow aDrawNow);
+    void HandleVisibilityChange();
+    // overrides CMIDItem::SetForm(CMIDForm* aForm)
+    void SetForm(CMIDForm* aForm);
+
+    TInt ItemPreferredHeightWithoutLabel();
+
+public:
+    // from CMIDItem
+    void ItemAddedToFormL();
+    void ItemRemovedFromForm();
+
+    // from CMIDControlItem
+    void PostFocusTransferEvent(TBool aFocus,CMIDForm::TDirection aDirection);
+
+    void AdjustToSizeL(const TSize& aSize);
+
+    void ResolutionChange(TInt aType);
+
+    void HandleWindowFade(TBool aFaded);
+
+private:
+    /**
+     * PointerEventSuppressor.
+     * Own.
+     */
+    CAknPointerEventSuppressor* iPointerEventSuppressor;
+    TPoint iPointerPressedCoordinates;
+    TBool iPointerEventSuppressionOngoing;
+    TInt iPESPointerMovementInTwips;
+    TInt iPESTimeInMilliseconds;
+
+    /**
+     * Ctor
+     * @param aEnv Environment instance
+     * @param aUIManager UI Manager
+     */
+    CMIDCustomItem(MMIDEnv& aEnv, CMIDUIManager* aUIManager);
+    ~CMIDCustomItem();
+    void ConstructL(const TDesC& aLabel);
+
+    CMIDForm::TDirection TranslateKey(const TKeyEvent& aEvent);
+
+    void ResetBuffers();
+    void CreateBuffersL();
+
+    void UpdateMargins();
+
+#ifndef RD_JAVA_NGA_ENABLED
+    /**
+     * Pauses the direct screen access.
+     * Sets iDirectPaused flag to true.
+     */
+    void PauseDirectAccess();
+
+    /**
+     * Sets iDirectPaused flag to true.
+     * Resumes the direct screen access using StartDirectAccess().
+     */
+    void ResumeDirectAccess();
+
+    /**
+     * Stops direct screen access.
+     */
+    void StopDirectAccess();
+
+    void StartDirectAccess();
+#endif
+
+    /**
+     * Checks if there are hw keyboards available in the device and returns the
+     * interaction modes based on keyboard availability.
+     *
+     * @return  TInt containing the supported keyboard interaction modes.
+     * @since S60 5.0
+     */
+    TInt KeyboardInteractionModesL() const;
+
+
+    /**
+     * Notifies the current displayable
+     * about the direct content position update
+     *
+     * @since S60 5.0
+     * @return  ETrue if the update was done
+                EFalse if the update could be done
+     */
+    TBool UpdateDirectContentBounds();
+
+#ifndef RD_JAVA_NGA_ENABLED
+public:
+// From MDirectScreenAccess
+    virtual void AbortNow(RDirectScreenAccess::TTerminationReasons aReasons);
+    virtual void Restart(RDirectScreenAccess::TTerminationReasons aReasons);
+#endif
+
+// From MDirectContainer
+public:
+    void MdcAddContent(MDirectContent* aContent);
+    void MdcRemoveContent(MDirectContent* aContent);
+    TRect MdcContainerWindowRect() const;
+    TBool MdcContainerVisibility() const;
+    TRect MdcContentBounds() const;
+    void MdcItemContentRect(TRect& aContentRect, TRect& aScreenRect) const;
+    void MdcHandlePointerEventL(TPointerEvent& aPointerEvent);
+    void MdcFlushContainer(const TRect& aRect);
+    void MdcAddContentBounds(const TRect& aRect);
+    void MdcRemoveContentBounds(const TRect& aRect);
+    void MdcGetDSAResources(MUiEventConsumer& aConsumer);
+    void MdcGetUICallback(MUiEventConsumer& aConsumer, TInt aCallbackId);
+
+// From MMIDMediaKeysListener
+public:
+    /**
+     * This method is called when a media key has been pressed.
+     * Posts the key event to Java layer.
+     *
+     * @param TMIDKeyEvent      Media key event that has occured.
+     * @since S60 3.2
+     */
+    void HandleMediaKeyEvent(TMIDKeyEvent& aKeyEvent);
+
+    void ChangeDirectContainerVisibility(TBool aVisible);
+
+#ifdef RD_TACTILE_FEEDBACK
+
+    CMIDTactileFeedbackExtension* iTactileFeedback;
+
+public:
+    MMIDTactileFeedbackComponent* TactileFeedbackComponent();
+
+    void UpdateTactileFeedback();
+
+    void RegisterFeedbackArea(TInt aId, TRect aRect, TInt aStyle);
+    void UnregisterFeedbackArea(TInt aId);
+    void UnregisterFeedbackForControl();
+    void MoveAreaToFirstPriority(TInt aId);
+#endif
+
+
+private:
+    /** The content buffer, used by the
+    Graphics object associated to this custom item */
+    CFbsBitmap* iFrameBuffer;
+    CFbsBitGc* iFrameContext;
+    CFbsBitmapDevice* iFrameDevice;
+
+    /** The offscreen buffer, implements double buffering
+    to assure content is kept between drawn. This allows
+    having skin underneath the content if nothing is drawn on it.
+    */
+    CFbsBitmap* iOffScreenBuffer;
+    CFbsBitGc* iOffScreenContext;
+    CFbsBitmapDevice* iOffScreenDevice;
+
+    TSize       iMinimumContentSize; // This doesn't include margin
+    TSize       iPreferredContentSize;  // This doesn't include margin
+    TRect       iContentRect;
+    TBool       iEntered;
+    TBool       iSupportsInternalTraversal;
+    MMIDEnv&    iEnv;
+
+    /**
+     * Indicates that the iFrameBuffer may be reset (with background skin).
+     * It prevents the situation where iFrameBuffer is reset
+     * before it has been copied to iOffScreenBuffer.
+     */
+    TBool iResetFrameBuffer;
+
+    /**
+     * Item can only have one DirectContent.
+     * Content is null if content is not added
+     * with MdcAddContent method.
+     */
+    MDirectContent* iDirectContent;
+    TBool iDirectAreaAddedToDisplayable;
+    TRect iDirectArea;
+
+    TMargins iContentMargins; // Margins for the content in relation to controlItem area
+    CMIDRemConObserver* iRemConObserver;
+    CMIDKeyDecoder* iKeyDecoder;
+    // Nokia-MIDlet-S60-Selection-Key-Compatibility
+    TBool iS60SelectionKeyCompatibility;
+
+#ifndef RD_JAVA_NGA_ENABLED
+    CDirectScreenAccess* iDirectAccess;
+
+    /**
+     * Indicates that direct screen access is paused
+     * using PauseDirectAccess().
+     */
+    TBool iDirectPaused;
+#endif
+
+    TBool iRestoreDirectContentWhenUnfaded;
+
+    // Stores information if CustomItem changed it visibility
+    // from invisible (e.g. outside Form, to background) to visible and vice versa
+    TBool iPreviousVisibility;
+
+    /**
+     * A consumer which is waiting for the callback.
+     * Set in case that Container Window have not been set
+     * before MdcGetDSAResources call.
+     * Not owned.
+     */
+    MUiEventConsumer* iConsumerWaitingForDSAResourcesCallback;
+
+    /**
+     * Stores the last window position as returned
+     * from DrawableWindow()->Position() to be useful
+     * from another than MMAPI ES thread.
+     */
+    TPoint iLastWindowPosition;
+
+};
+
+#endif // CMIDCUSTOMITEM_H
+
+
+