--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiacceltk/hitchcock/ServerCore/Inc/alfnodes.h Tue Feb 02 07:56:43 2010 +0200
@@ -0,0 +1,546 @@
+/*
+* Copyright (c) 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 C_ALFNODES_H
+#define C_ALFNODES_H
+
+#include <e32base.h>
+
+// Define this to get window tree traces. By default, traces are printed only when a new node is created, in DoNodeCreatedL().
+// FYI: you can get similiar window tree traces from WSERV by calling: RWsSession::LogCommand(ELoggingStatusDump).
+//#define ALF_DEBUG_PRINT_NODE_INFO
+
+
+#include "alfhierarchymodel.h"
+// forward declarations
+class CAlfWindow;
+class CAlfNode;
+
+/**
+ * Base class for window tree hierarcy items
+ * Hierarcy will have a single CAlfRootNode. CAlfVisualNode is base for nodes that can receive drawing.
+ *
+ * @code
+ * ?good_class_usage_example(s)
+ * @endcode
+ *
+ * @lib ?library
+ * @since S60 ?S60_version *** for example, S60 v3.0
+ */
+
+class CAlfNodeSprite;
+class CAlfNodeAnim;
+class CAlfNodeTextCursor;
+class CAlfNodeVisual;
+
+class CAlfNode : public CBase
+ {
+// ---------------------------------------------------------------------------
+public:
+
+ static CAlfNode* NewL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream,
+ MWsWindowTreeNode::TType aType );
+
+protected:
+
+ void ConstructL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream );
+
+protected:
+
+ CAlfNode();
+
+ void RemoveDependencies( CAlfNode* aFirstChildOfMyType );
+
+ /*
+ * UpdateChildrenOrdinalPositions
+ *
+ * When ordinal position of a window is updated, it affects also the children
+ * ordinal positions. These must be calculated and sent to alfbridge
+ */
+ void UpdateChildrenOrdinalPositions(CAlfNode* aNode);
+
+ /*
+ * UpdateOrdinalPosition
+ *
+ * Creates a flat structure out of the linked tree structure and calculates
+ * node ordinal position in it. Passes ordinal position to alfbridge.
+ */
+ void UpdateOrdinalPosition();
+
+public:
+
+ /*
+ * HasChildren
+ *
+ * Return ETrue, if node has sprite, anim, text cursor or child windows.
+ */
+ TBool HasChildren();
+
+ void ResolveParent( TUint32 aParentId, TInt aMyId );
+
+ void SetFirstChild( );
+
+ void SetFirstAnim();
+
+ void SetFirstSprite();
+
+ CAlfNode* OrphonMe();
+
+ CAlfNode* FindPreviousChild();
+
+ TUint32 FindParentGroup();
+
+ class TIter
+ {
+ public:
+
+
+ TBool iChildrenProcessed;
+
+ TIter(CAlfNode* aTopNode);
+
+ CAlfNode* Current();
+
+ CAlfNode* Next();
+
+ CAlfNode* iTopNode;
+
+ CAlfNode* iCurrentNode;
+
+ CAlfNode* iCurrentSibling;
+
+ CAlfNode* iCurrentParent;
+
+ CAlfNode* iMasterNode;
+
+
+ private:
+
+ enum TState
+ {
+ ESearchingSprites,
+ ESearchMoreSprites,
+ ESearchingTextCursor,
+ ESearchingMoreTextCursor,
+ ESearchingAnims,
+ ESearchMoreAnims,
+ ESearchingChildWindows
+ };
+
+ TState iState;
+ };
+
+ void GetAllChildrenInGroup( RPointerArray<CAlfNode>& aNodes, TUint32 aParentId );
+
+ TInt OrdinalPosition();
+
+ void TraverseNodeTree( CAlfNode* node, RPointerArray<CAlfNode>& nodes, TBool aTraverseOnlySiblings, TBool aAddMe = ETrue);
+
+#ifdef ALF_DEBUG_PRINT_NODE_INFO
+public:
+
+ static void PrintInfo(
+ CAlfNode* node, TInt aHighLightNode, TInt aDepth = 0);
+
+ static void PrintNodeTree(
+ CAlfNodeRoot* aNode,
+ TInt aHighlightNode = 0 );
+
+ static void PrintSubTree( CAlfNode* aNode, TInt aHighlightNode, TInt& aDepth );
+
+ TBool Activated()
+ {
+ return iNodeActivated;
+ }
+
+ TBool Visible()
+ {
+ return iVisible;
+ }
+
+ TBool Faded()
+ {
+ return iFadeState;
+ }
+
+ TBool NonFading()
+ {
+ return iNonFading;
+ }
+
+ TInt PrintOrdinalPositions();
+
+#endif // ALF_DEBUG_PRINT_NODE_INFO
+
+ void MovedToWindowGroup( RMemReadStream* aStream );
+
+ /*
+ * ListOffspring
+ * @param aList, list where children pointers will be added
+ * @param aListChildren, When EFalse then only sprite, anim and text cursor child will be
+ * added. No children nodes will be inserted to the list.
+ */
+ void ListOffspring( RArray<CAlfNode*>& aList, TBool aListChildren = ETrue);
+
+ virtual void FlagChanged( MWsWindowTreeObserver::TFlags aFlag, TBool aNewValue );
+
+ void FadeAllChildren( TBool aFaded );
+
+ void FadeCountChanged( TInt aFadeCount );
+
+ void SetFaded( TBool aFaded );
+ virtual void ActivateNode(){ iNodeActivated = ETrue;};
+
+ TAny* CreateWindowAttributes(TInt& aIndex, TInt aSize );
+
+ void SiblingOrderChanged( TInt aNewPos );
+
+ virtual ~CAlfNode();
+
+ void SetTracking( TBool aValue );
+
+ inline TBool Tracking( )
+ {
+ return iTrackNode;
+ }
+
+ CAlfNode* iParent;
+
+ CAlfNode* iChild;
+
+ CAlfNode* iSibling;
+
+ CAlfNodeSprite* iSpriteChild;
+
+ CAlfNodeAnim* iAnimChild;
+
+ CAlfNodeTextCursor* iTextCursor;
+
+
+ TUint32 iId;
+
+ TUint32 iGroupId;
+
+ TInt iScreenNumber;
+
+ MWsWindowTreeNode::TType Type()
+ {
+ return iType;
+ }
+
+
+ CAlfWindow* iWindow;
+
+ TInt iFadeCount;
+
+protected:
+
+ /**
+ * ReadInt32L
+ * Convinience function for reading a TInt32 from stream. This function is inlined.
+ *
+ * @since S60 ?S60_version
+ * @param aPoint
+ */
+ inline void ReadInt32L( TInt& aValue, RMemReadStream* aStream )
+ {
+ TRAPD( err,
+ aValue = aStream->ReadInt32L(););
+ if ( err )
+ {
+ RDebug::Print(_L("Eof in err ReadInt32L %d value %d"), err, aValue);
+ }
+ }
+
+ inline TInt8 ReadInt8L( RMemReadStream* aStream )
+ {
+
+ TInt8 value;
+ TRAPD( err, value = aStream->ReadInt8L() );
+ if ( err )
+ {
+ RDebug::Print(_L("Eof in err ReadInt8L %d value %d"), err, value);
+ }
+ return value;
+ }
+
+
+
+protected:
+
+
+
+ CAlfHierarchyModel* iModel;
+
+ /*
+ * Flags
+ */
+ TBool iVisible;
+
+ TBool iNonFading;
+
+ TBool iAlphaChannelTransparencyEnabled;
+
+ TBool iNodeActivated;
+
+ MWsWindowTreeNode::TType iType;
+
+ TBool iTrackNode;
+ TBool iFadeState;
+ TBool iPostedFadeState;
+ };
+
+// ---------------------------------------------------------------------------
+class CAlfNodeVisual : public CAlfNode
+ {
+protected:
+
+ CAlfNodeVisual();
+
+
+public:
+
+ void SetExtent( TRect &aRect );
+
+ void DrawWindowFrameL( RMemReadStream& aStream );
+
+ inline CAlfWindow* Window(){return iWindow;}
+
+ void FlagChanged( MWsWindowTreeObserver::TFlags aFlag, TBool aNewValue );
+
+ void UpdateChildrenFlags( MWsWindowTreeObserver::TFlags aFlag, TBool aNewValue );
+
+ void ActivateNode();
+
+ void ReadEndMarkerL( RMemReadStream& aStream );
+
+ void CommitCommands( TInt aCurrentPos, TInt aFrameSize, TBool aPartial, TBool aLastPart, TInt aChunkInUse );
+
+ void CreateWindowL(TInt aWindowGroupHandle, TInt aWindowHandle, TInt aParentWindowHandle);
+
+ ~CAlfNodeVisual();
+
+ TSize iSize;
+
+ TPoint iOrigin;
+
+protected:
+
+ void ConstructL( CAlfHierarchyModel* aModel, RMemReadStream* aStream );
+
+ void UpdateParentPosition(TPoint aPosDelta);
+
+ void UpdateChildrenExtents(TPoint aPosDelta);
+
+ TBool iReadingPartialBuffer;
+ };
+
+
+class CAlfNodeWindow : public CAlfNodeVisual
+ {
+public:
+
+ CAlfNodeWindow();
+
+ ~CAlfNodeWindow();
+
+ static CAlfNodeWindow* NewL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream,
+ TInt aScreenNumber );
+
+ void MoveToWindowGroup( TUint32 aNewGroupId );
+
+protected:
+
+ void ConstructL( CAlfHierarchyModel* aModel, RMemReadStream* aStream );
+
+protected:
+
+ struct TNodeWindowConstructionStruct
+ {
+ TInt iOrdinalPriority;
+ TInt32 iParentId;
+ TInt iWindowGroupHandle;
+ TInt iWindowHandle;
+ };
+
+ TNodeWindowConstructionStruct iNodeWindowConstructionStruct;
+
+ TInt iOrdinalPriority;
+
+ };
+
+
+// ---------------------------------------------------------------------------
+class CAlfNodeRoot : public CAlfNodeVisual
+ {
+private:
+
+ CAlfNodeRoot();
+
+public:
+
+ static CAlfNodeRoot* NewL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream ,
+ TInt aScreenNumber );
+
+ ~CAlfNodeRoot( );
+
+#ifdef ALF_DEBUG_PRINT_NODE_INFO
+ TBool iLogging;
+#endif // ALF_DEBUG_PRINT_NODE_INFO
+
+protected:
+
+ void ConstructL( CAlfHierarchyModel* aModel, RMemReadStream* aStream );
+
+ };
+
+// ---------------------------------------------------------------------------
+class CAlfNodeGroup : public CAlfNode
+ {
+private:
+
+ CAlfNodeGroup();
+
+public:
+
+ static CAlfNodeGroup* NewL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream,
+ TInt aScreenNumber );
+
+ void WindowGroupChained( TUint32 aChainedGroup );
+
+ void GroupChainBrokenAfter( );
+
+ ~CAlfNodeGroup();
+
+#ifdef ALF_DEBUG_PRINT_NODE_INFO
+ const TUint32 SecureId()
+ {
+ return iSecureId;
+ }
+#endif
+ /*
+ * The node, that this group is chained to.
+ */
+ CAlfNodeGroup* iChainedFrom;
+ CAlfNodeGroup* iChainedTo;
+
+protected:
+
+ void ConstructL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream );
+private:
+
+ TUint32 iSecureId;
+
+ };
+
+// ---------------------------------------------------------------------------
+class CAlfNodeAnim: public CAlfNodeVisual
+ {
+private:
+
+ CAlfNodeAnim();
+
+ ~CAlfNodeAnim( );
+
+public:
+
+
+ static CAlfNodeAnim* NewL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream,
+ TInt aScreenNumber );
+
+protected:
+
+ void ConstructL( CAlfHierarchyModel* aModel, RMemReadStream* aStream );
+
+ TBool iActive;
+ };
+
+
+// ---------------------------------------------------------------------------
+class CAlfNodeSprite: public CAlfNodeVisual
+ {
+private:
+
+ CAlfNodeSprite();
+
+ ~CAlfNodeSprite( );
+public:
+
+ static CAlfNodeSprite* NewL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream,
+ TInt aScreenNumber );
+
+protected:
+
+ void ConstructL( CAlfHierarchyModel* aModel, RMemReadStream* aStream );
+
+ };
+
+
+class CAlfNodeTextCursor: public CAlfNodeVisual
+ {
+private:
+
+ CAlfNodeTextCursor();
+public:
+
+ static CAlfNodeTextCursor* NewL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream,
+ TInt aScreenNumber );
+
+ void AttributeChangedL( RMemReadStream* aStream );
+
+ virtual ~CAlfNodeTextCursor();
+protected:
+
+ void ConstructL(
+ CAlfHierarchyModel* aModel,
+ RMemReadStream* aStream );
+
+private:
+
+ TRect iRect;
+
+ TRect iClipRect;
+
+ TInt iFlags;
+
+ TInt iColor;
+
+ TInt iFlashInterval;
+
+ TInt iCursorType;
+ };
+#endif // C_ALFNODES_H