--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/contacts_plat/phonebook_2_common_ui_api/inc/CPbk2ViewGraph.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,462 @@
+/*
+* Copyright (c) 2005-2007 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: Phonebook 2 view graph related classes.
+*
+*/
+
+
+#ifndef CPBK2VIEWGRAPH_H
+#define CPBK2VIEWGRAPH_H
+
+// INCLUDES
+#include <e32base.h>
+#include <pbk2viewinfo.hrh>
+
+// FORWARD DECLARATIONS
+class CPbk2ViewNode;
+class TResourceReader;
+
+// CLASS DECLARATION
+
+/**
+ * Phonebook 2 view transition class.
+ */
+class TPbk2ViewTransition
+ {
+ public: // Data
+ /// Own: ID of an event triggering this transition
+ TPbk2ViewTransitionEvent iEvent;
+ /// Own: Target node view id
+ TUid iTargetViewId;
+ /// Ref: Node to activate if this transition is accepted
+ CPbk2ViewNode* iNode;
+ };
+
+/**
+ * Phonebook 2 view navigation node class.
+ */
+class CPbk2ViewNode : public CBase
+ {
+ public: // Constructor and destructor
+
+ /**
+ * Constructor.
+ *
+ * @param aViewId View id of this node.
+ * @param aDefaultPrevViewId This views default
+ * previous view id.
+ * @param aExitNode ETrue if an exit node.
+ * @param aTabGroupId Tab group id.
+ * @param aTabGroupOrdering Tab group ordering item.
+ * @param aTabResourceId Tab resource id. Can be defined as 0,
+ * which means that the tab should be
+ * created by hand.
+ * @param aTransitionReader A resource reader pointed to an
+ * array of PBK2_VIEW_TRANSITION's.
+ * @return New instance of this class.
+ */
+ IMPORT_C static CPbk2ViewNode* NewL(
+ TUid aViewId,
+ TUid aDefaultPrevViewId,
+ TBool aExitNode,
+ TPbk2TabGroupId aTabGroupId,
+ TPbk2TabGroupOrdering aTabGroupOrdering,
+ TInt aTabResourceId,
+ TResourceReader& aTransitionReader );
+
+ /**
+ * Destructor.
+ */
+ ~CPbk2ViewNode();
+
+ public: // Interface
+
+ /**
+ * Returns the view id of this node.
+ *
+ * @return View id of this node.
+ */
+ inline TUid ViewId() const;
+
+ /**
+ * Returns the default previous node.
+ *
+ * @return Default previous node.
+ */
+ inline CPbk2ViewNode* DefaultPreviousNode() const;
+
+ /**
+ * Returns the currently set previous node.
+ *
+ * @return Currently set previous node.
+ */
+ inline CPbk2ViewNode* PreviousNode() const;
+
+ /**
+ * Returns ETrue if this is an exit node.
+. *
+ * @return ETrue if an exit node, EFalse otherwise.
+ */
+ inline TBool ExitNode() const;
+
+ /**
+ * Returns tab group id.
+ *
+ * @return Tab group id.
+ */
+ inline TPbk2TabGroupId TabGroupId() const;
+
+ /**
+ * Returns the ordering item of this node in the tab group.
+ *
+ * @return Tab group ordering item.
+ */
+ inline TPbk2TabGroupOrdering TabGroupOrdering() const;
+
+ /**
+ * Returns a tab resource id pointing to a PBK2_VIEW_NODE_TAB.
+ *
+ * @return Tab resource id.
+ */
+ inline TInt TabResourceId() const;
+
+ /**
+ * Sets previous node to aNode.
+ *
+ * @param aNode The node to set.
+ */
+ inline void SetPreviousNode(
+ CPbk2ViewNode* aNode );
+
+ /**
+ * Returns the number of transitions from this node.
+ *
+ * @return Number of transitions.
+ */
+ inline TInt TransitionCount() const;
+
+ /**
+ * Returns aIndex:th transition from this node.
+ *
+ * @param aIndex The transition index to query.
+ * @return View transition.
+ */
+ inline const TPbk2ViewTransition& TransitionAt(
+ TInt aIndex ) const;
+
+ /**
+ * Returns ETrue if this node contains a transition equal to
+ * aTransition.
+ *
+ * @param aTransition The transition to look for.
+ * @return ETrue if transition found, EFalse otherwise.
+ */
+ IMPORT_C TBool FindTransition(
+ const TPbk2ViewTransition& aTransition ) const;
+
+ /**
+ * Sets the ordering item of this node in the tab group.
+ *
+ * @param aTabGroupOrdering Tab group ordering item.
+ */
+ inline void SetTabGroupOrdering(
+ TPbk2TabGroupOrdering aTabGroupOrdering );
+
+ /**
+ * Sets this nodes tab resource id.
+ *
+ * @param aTabResourceId Tab resource id.
+ * @see PBK2_VIEW_NODE_TAB
+ */
+ inline void SetTabResourceId(
+ TInt aTabResourceId );
+
+ private: // Implementation
+ CPbk2ViewNode(); // private contructor for internal use
+ CPbk2ViewNode(
+ TUid aViewId,
+ TUid aDefaultPrevViewId,
+ TBool aExitNode,
+ TPbk2TabGroupId aTabGroupId,
+ TPbk2TabGroupOrdering aTabGroupOrdering,
+ TInt aTabResourceId );
+ TPbk2ViewTransition* FindTransition(
+ TPbk2ViewTransitionEvent aEvent );
+ void ReadTransitionsL(
+ TResourceReader& aResReader);
+
+ private: // Data
+ /// Own: View id
+ TUid iViewId;
+ /// Own: Default previous node id
+ TUid iDefaultPrevViewId;
+ /// Ref: Default previous node
+ CPbk2ViewNode* iDefaultPreviousNode;
+ /// Ref: Previous node
+ CPbk2ViewNode* iPreviousNode;
+ /// Own: Indicates whether this is an exit node
+ TBool iExitNode;
+ /// Own: Transitions array
+ CArrayFixFlat<TPbk2ViewTransition> iTransitions;
+ /// Own: Tab group id
+ TPbk2TabGroupId iTabGroupId;
+ /// Own: Ordering item in tab group
+ TPbk2TabGroupOrdering iTabGroupOrdering;
+ /// Own: Tab resource id
+ TInt iTabResourceId;
+
+ private: // Friends
+ friend class CPbk2ViewGraph;
+ };
+
+
+/**
+ * Phonebook 2 view navigation graph class.
+ */
+class CPbk2ViewGraph : public CBase
+ {
+ public: // Constructors and destructor
+
+ /**
+ * Creates a new view graph from a PBK2_VIEW_GRAPH resource.
+ *
+ * @param aResReader Resource reader pointed
+ * to a PBK2_VIEW_GRAPH resource.
+ * @return A new instance of this class.
+ */
+ IMPORT_C static CPbk2ViewGraph* NewL(
+ TResourceReader& aResReader );
+
+ /**
+ * Destructor.
+ */
+ ~CPbk2ViewGraph();
+
+ public: // Interface
+
+ /**
+ * Returns node with given resource id, NULL if not found.
+ *
+ * @param aViewId Id of the node to found.
+ * @return View node.
+ */
+ IMPORT_C CPbk2ViewNode* FindNodeWithViewId(
+ TUid aViewId ) const;
+
+ /**
+ * Modifies existing view graph. Updates transitions and
+ * appends new view node according to given resource reader.
+ *
+ * @param aResReader Resource reader pointed
+ * to a PBK2_VIEW_GRAPH resource.
+ */
+ IMPORT_C void ModifyViewGraphL(
+ TResourceReader& aResReader );
+
+ /**
+ * Appends and links aNode to the view graph structure.
+ * Takes ownership of the node.
+ *
+ * @param aNode Node to add to the view graph.
+ */
+ IMPORT_C void AddViewNodeL(
+ CPbk2ViewNode* aNode );
+
+ /**
+ * Finds and returns the ids of the views that are in
+ * the specified tab group. Returned array is sorted in
+ * the proper tab group ordering of the views.
+ *
+ * @param aTabGroupId Id of the tab group to investigate.
+ * @return Array of views in the tab group.
+ */
+ IMPORT_C RPointerArray<CPbk2ViewNode> FindViewsInTabGroupL(
+ TPbk2TabGroupId aTabGroupId ) const;
+
+ /**
+ * Returns view graph node count.
+ *
+ * @return Node count.
+ */
+ inline TInt Count() const;
+
+ /**
+ * Returns view graph node at aIndex.
+ *
+ * @param aIndex Index to query.
+ * @return View node.
+ */
+ inline const CPbk2ViewNode& operator[](
+ TInt aIndex ) const;
+
+ private: // Implementation
+ inline CPbk2ViewGraph();
+ void ConstructL(
+ TResourceReader& aResReader );
+ void AppendNodesFromResourceL(
+ TResourceReader& aResReader );
+ void LinkNodesWithTransitions();
+
+ private: // Types
+ /// Definition of the view node array type
+ typedef CArrayPtrFlat<CPbk2ViewNode> CPbk2ViewNodeArray;
+
+ private: // Data
+ /// Own: Array of view nodes
+ CPbk2ViewNodeArray* iNodes;
+ };
+
+// INLINE FUNCTIONS
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::ViewId
+// --------------------------------------------------------------------------
+//
+inline TUid CPbk2ViewNode::ViewId() const
+ {
+ return iViewId;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::DefaultPreviousNode
+// --------------------------------------------------------------------------
+//
+inline CPbk2ViewNode* CPbk2ViewNode::DefaultPreviousNode() const
+ {
+ return iDefaultPreviousNode;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::PreviousNode
+// --------------------------------------------------------------------------
+//
+inline CPbk2ViewNode* CPbk2ViewNode::PreviousNode() const
+ {
+ return iPreviousNode;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::ExitNode
+// --------------------------------------------------------------------------
+//
+inline TBool CPbk2ViewNode::ExitNode() const
+ {
+ return iExitNode;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::TabGroupId
+// --------------------------------------------------------------------------
+//
+inline TPbk2TabGroupId CPbk2ViewNode::TabGroupId() const
+ {
+ return iTabGroupId;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::TabGroupOrdering
+// --------------------------------------------------------------------------
+//
+inline TPbk2TabGroupOrdering CPbk2ViewNode::TabGroupOrdering() const
+ {
+ return iTabGroupOrdering;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::TabResourceId
+// --------------------------------------------------------------------------
+//
+inline TInt CPbk2ViewNode::TabResourceId() const
+ {
+ return iTabResourceId;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::SetPreviousNode
+// --------------------------------------------------------------------------
+//
+inline void CPbk2ViewNode::SetPreviousNode( CPbk2ViewNode* aNode )
+ {
+ iPreviousNode = aNode;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::TransitionCount
+// --------------------------------------------------------------------------
+//
+inline TInt CPbk2ViewNode::TransitionCount() const
+ {
+ return iTransitions.Count();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::TransitionAt
+// --------------------------------------------------------------------------
+//
+inline const TPbk2ViewTransition& CPbk2ViewNode::TransitionAt
+ ( TInt aIndex ) const
+ {
+ // iTransitions::operator[] will check aIndex
+ return iTransitions[aIndex];
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::SetTabGroupOrdering
+// --------------------------------------------------------------------------
+//
+inline void CPbk2ViewNode::SetTabGroupOrdering
+ ( TPbk2TabGroupOrdering aTabGroupOrdering )
+ {
+ iTabGroupOrdering = aTabGroupOrdering;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewNode::SetTabResourceId
+// --------------------------------------------------------------------------
+//
+inline void CPbk2ViewNode::SetTabResourceId( TInt aTabResourceId )
+ {
+ iTabResourceId = aTabResourceId;
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewGraph::CPbk2ViewGraph
+// --------------------------------------------------------------------------
+//
+inline CPbk2ViewGraph::CPbk2ViewGraph()
+ {
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewGraph::Count
+// --------------------------------------------------------------------------
+//
+inline TInt CPbk2ViewGraph::Count() const
+ {
+ return iNodes->Count();
+ }
+
+// --------------------------------------------------------------------------
+// CPbk2ViewGraph::operator[]
+// --------------------------------------------------------------------------
+//
+inline const CPbk2ViewNode& CPbk2ViewGraph::operator[]( TInt aIndex ) const
+ {
+ // iNodes::operator[] will check aIndex
+ return *iNodes->At( aIndex );
+ }
+
+#endif // CPBK2VIEWGRAPH_H
+
+// End of File