photosgallery/viewframework/medialists/inc/glxmedia.h
changeset 0 4e91876724a2
child 15 d08a2bd7f23a
child 25 191387a8b767
equal deleted inserted replaced
-1:000000000000 0:4e91876724a2
       
     1 /*
       
     2 * Copyright (c) 2008-2009 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:    Media item
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 
       
    21 #ifndef C_GLXMEDIA_H
       
    22 #define C_GLXMEDIA_H
       
    23 
       
    24 #include <e32base.h>
       
    25 #include <glxmediageneraldefs.h>
       
    26 #include <mpxmediageneraldefs.h>
       
    27 
       
    28 #include "glxmediaid.h"
       
    29 #include "glxthumbnailinfo.h"
       
    30 
       
    31 class CGlxMedia; 
       
    32 class CGlxMediaList; 
       
    33 class CGlxThumbnailAttribute;
       
    34 class CGlxUstringConverter;
       
    35 class MGlxMediaUser;
       
    36 class TCoordinate;
       
    37 /**
       
    38  *  TGlxMedia
       
    39  *
       
    40  *  Reference to a media item in the item pool.
       
    41  *
       
    42  * @ingroup mlm_media_list_manager_design
       
    43  */
       
    44 NONSHARABLE_CLASS( TGlxMedia )
       
    45     {
       
    46 	friend class CGlxMediaList; // To avoid exposing a SetProperties(...) interface
       
    47 	//Only to access AttributeTypeId to get the MPX attribute type
       
    48 	friend class GlxUStringConverter;
       
    49 public:
       
    50     inline TGlxMedia( const TGlxMediaId& aId ) : iId( aId ) { iItem = NULL; };
       
    51     inline TGlxMedia( const TGlxMediaId& aId, CGlxMedia* aProperties ) : iId( aId ) { iItem = aProperties; };
       
    52     inline TGlxMedia( const TGlxMedia& aItem ) : iId( aItem.iId ) { iItem = aItem.iItem; };
       
    53 
       
    54     /**
       
    55      * Constructor
       
    56      * Not inlined as not intended to be used outside the dll 
       
    57      * Only intended to be used for static items
       
    58      * @param aMedia Media object from which to take the id, and to which to point
       
    59      */
       
    60     TGlxMedia( CGlxMedia& aMedia );
       
    61   
       
    62     /**
       
    63      * @return Id of this media item
       
    64      */
       
    65     inline TGlxMediaId Id() const { return iId; };
       
    66     
       
    67     /**
       
    68      * @return Properties object of this media item
       
    69      * @note May return NULL if the properties are not yet available
       
    70      */ 
       
    71     inline const CGlxMedia* Properties() const { return iItem; };
       
    72     
       
    73     /**
       
    74      * Compare two media items by id
       
    75      * This can be used in array's Find etc. methods
       
    76      */
       
    77     IMPORT_C static TBool MatchById(const TGlxMedia& aMedia1, const TGlxMedia& aMedia2);
       
    78     
       
    79     /**
       
    80      * Tests to see if the Media is a static.
       
    81      * returns False if item is not static 
       
    82      *         True is item is static
       
    83      */
       
    84     IMPORT_C TBool IsStatic() const;
       
    85     
       
    86     /**
       
    87      * Get the command associated with a static media item.
       
    88      * @param aCmd Reference to variable into which to place the command
       
    89      * @return EFalse if unable to get command - aCmd is unchanged. 
       
    90      *         ETrue if command successfully put in aCmd.
       
    91      */
       
    92     IMPORT_C TBool GetStaticItemCommand(TInt& aCmd) const;
       
    93 
       
    94     /**
       
    95      * Get the date associated with the media.
       
    96      * @param aDate Reference to variable into which to place the date
       
    97      * @return EFalse if unable to get date - aDate is unchanged. 
       
    98      *         ETrue if date successfully put in aDate.
       
    99      */
       
   100     IMPORT_C TBool GetDate(TTime& aDate) const;
       
   101 
       
   102     /**
       
   103      * Get the date associated with the media.
       
   104      * @param aDate Reference to variable into which to place the date
       
   105      * @return EFalse if unable to get date - aDate is unchanged. 
       
   106      *         ETrue if date successfully put in aDate.
       
   107      */
       
   108     IMPORT_C TBool GetLastModifiedDate(TTime& aDate) const;
       
   109 
       
   110     /**
       
   111      * Get the general category associated with the media.
       
   112      * @param aCategory Reference to variable into which to place the category
       
   113      * @return The category or EMPXNoCategory if unsuccessful. 
       
   114      */
       
   115     IMPORT_C TMPXGeneralCategory Category() const;
       
   116 
       
   117     /**
       
   118      * Get the dimensions associated with the media.
       
   119      * @param aSize Reference to variable into which to place the dimensions
       
   120      * @return EFalse if unable to get dimensions - aSize is unchanged. 
       
   121      *         ETrue if dimensions successfully put in aSize.
       
   122      */
       
   123     IMPORT_C TBool GetDimensions(TSize& aSize) const;
       
   124     
       
   125     /**
       
   126      * Get the (file) size associated with the media.
       
   127      * @param aSize Reference to variable into which to place the (file) size
       
   128      * @return EFalse if unable to get size - aSize is unchanged. 
       
   129      *         ETrue if size successfully put in aSize.
       
   130      */
       
   131     IMPORT_C TBool GetSize(TInt& aSize) const;
       
   132     
       
   133     /**
       
   134      * Get the duration associated with the media.
       
   135      * @param aDuration Reference to variable into which to place the duration
       
   136      * @return EFalse if unable to get size - aDuration is unchanged. 
       
   137      *         ETrue if duration successfully put in aDuration.
       
   138      */
       
   139     IMPORT_C TBool GetDuration(TReal32& aDuration) const;
       
   140 
       
   141     /**
       
   142      * Get the frame count associated with the media.
       
   143      * @param aFrameCount Reference to variable into which to place count
       
   144      * @return EFalse if unable to get count - aFrameCount is unchanged. 
       
   145      *         ETrue if count successfully put in aFrameCount.
       
   146      */
       
   147     IMPORT_C TBool GetFrameCount(TInt& aFrameCount) const;
       
   148 
       
   149     /**
       
   150      * Get the general count associated with the media.
       
   151      * @param aGeneralCount Reference to variable into which to place count
       
   152      * @return EFalse if unable to get count - aGeneralCount is unchanged. 
       
   153      *         ETrue if count successfully put in aGeneralCount.
       
   154      */
       
   155     IMPORT_C TBool GetContainedItemCount(TInt& aGeneralCount) const;
       
   156 
       
   157     /**
       
   158      * Get the general count associated with the media.
       
   159      * @param aGeneralCount Reference to variable into which to place count
       
   160      * @return EFalse if unable to get count - aGeneralCount is unchanged. 
       
   161      *         ETrue if count successfully put in aGeneralCount.
       
   162      */
       
   163     IMPORT_C TBool GetSlideshowPlayableContainedItemCount(TInt& aGeneralCount) const;
       
   164 
       
   165    /**
       
   166      * Get the coordinate associated with the media.
       
   167      * @param aCoordinate Reference to variable into which to place the coordinate
       
   168      * @return EFalse if unable to get coordinate - aCoordinate is unchanged. 
       
   169      *         ETrue if coordinate successfully put in aCoordinate.
       
   170      */
       
   171     IMPORT_C TBool GetCoordinate(TCoordinate& aCoordinate) const;
       
   172 
       
   173     /**
       
   174      * Get the Icon Info associated with the media.
       
   175      * @param aInfo Reference to variable into which to place the icon Info
       
   176      * @return EFalse if unable to get info - aInfo is unchanged. 
       
   177      *         ETrue if info successfully put in aInfo.
       
   178      */
       
   179     IMPORT_C TBool GetIconInfo(TIconInfo& aInfo) const;
       
   180     
       
   181     /**
       
   182      * Returns the DRM protection indication associated with the media.
       
   183      * @return EFalse if not protected. 
       
   184      *         ETrue if protected (also by default).
       
   185      */
       
   186     IMPORT_C TBool IsDrmProtected() const;
       
   187     
       
   188     /**
       
   189      * Get the DRM protection indicator associated with the media.
       
   190      * @param aIsProtected Reference to variable into which to place the DRM indicator
       
   191      * @return EFalse if unable to get indicator - aIsProtected is unchanged. 
       
   192      *         ETrue if indicator successfully put in aIsProtected.
       
   193      */
       
   194     IMPORT_C TBool GetDrmProtected(TBool& aIsProtected) const;
       
   195 
       
   196     /**
       
   197      * Get the DRM protection indicator associated with the media.
       
   198      * @param aIsProtected Reference to variable into which to place the DRM indicator
       
   199      * @return EFalse if unable to get indicator - aIsProtected is unchanged. 
       
   200      *         ETrue if indicator successfully put in aIsProtected.
       
   201      */
       
   202     IMPORT_C TBool GetDrmValidity(TGlxMediaGeneralRightsValidity& aIsValid) const;
       
   203 
       
   204     /**
       
   205      * Get the System Item indicator associated with the media.
       
   206      * @param aIsSystemItem Reference to variable into which to place the SI indicator
       
   207      * @return EFalse if unable to get indicator - aIsSystemItem is unchanged. 
       
   208      *         ETrue if indicator successfully put in aIsSystemItem.
       
   209      */
       
   210     IMPORT_C TBool GetSystemItem(TBool& aIsSystemItem) const;
       
   211 
       
   212     /**
       
   213      * Get the title associated with the media.
       
   214      * @return descriptor reference to title if found, else to an empty descriptor.
       
   215      */
       
   216     IMPORT_C const TDesC& Title() const;
       
   217 
       
   218     /**
       
   219      * Get the subtitle associated with the media.
       
   220      * @return descriptor reference to subtitle if found, else to an empty descriptor.
       
   221      */
       
   222     IMPORT_C const TDesC& SubTitle() const;
       
   223 
       
   224     /**
       
   225      * Get the comment associated with the media.
       
   226      * @return descriptor reference to comment if found, else to the NULL descriptor.
       
   227      */
       
   228     IMPORT_C const TDesC& Comment() const;
       
   229     
       
   230     /**
       
   231      * Get the URI associated with the media.
       
   232      * @return Uri for success or KNullDesC for failure
       
   233      */
       
   234     IMPORT_C const TDesC& Uri() const;
       
   235 
       
   236     /**
       
   237      * Get the MimeType associated with the media.
       
   238      * @return MimeType for success or KNullDesC for failure
       
   239      */
       
   240     IMPORT_C const TDesC& MimeType() const;
       
   241 
       
   242     /**
       
   243      * Get a thumbnail attribute associated with the media.
       
   244      * @param aAttribute The attribute to obtain
       
   245      * @return A pointer to the thumbnail attribute or NULL if unsuccessful. 
       
   246      */
       
   247     IMPORT_C const CGlxThumbnailAttribute* TGlxMedia::ThumbnailAttribute(
       
   248                                              TMPXAttribute& aAttribute) const;
       
   249     
       
   250     /**
       
   251      * Find the closest available thumbnail to a given size.
       
   252      * @param aAttribute Set to the closest available thumbnail, if any
       
   253      * @param aDesiredSize Size of thumbnail required
       
   254      * @param aDrmValid If false, the function will not return a thumbnail
       
   255                 bigger than the requested size
       
   256      * @return EFalse if no thumbnails available. 
       
   257      *         ETrue if aAttribute has been set.
       
   258      */
       
   259     IMPORT_C TBool GetClosestThumbnail( TMPXAttribute& aAttribute,
       
   260                         const TSize& aDesiredSize, TBool aDrmValid ) const;
       
   261                         
       
   262     /**
       
   263      * Can the media be played in slideshow
       
   264      * @return EFalse if not playable. 
       
   265      *         ETrue if playable. 
       
   266      */                        
       
   267     IMPORT_C TBool IsSlideShowPlayableContent() const;                        
       
   268 
       
   269     /**
       
   270      * Returns the IdSpaceId associated with the media.
       
   271      * @return TGlxIdSpaceId of the media
       
   272      */
       
   273     IMPORT_C TGlxIdSpaceId IdSpaceId() const;
       
   274 
       
   275     /** 
       
   276      * Set media object pointer
       
   277      * not inlined, since will not be exported
       
   278      * @param aMedia Media object, or NULL
       
   279      * @param aMediaUser User of media
       
   280      * @param aIndex Index of media object in media list user
       
   281      */
       
   282     void SetMedia( CGlxMedia* Media, MGlxMediaUser& aMediaUser, TInt aIndex = KErrNotFound);
       
   283     
       
   284     /** 
       
   285      * Update media object
       
   286      * Used to update the index into the media list user
       
   287      * @param aMediaUser User of media
       
   288      * @param aIndex Index of media object in media list user
       
   289      */
       
   290     void UpdateMedia( MGlxMediaUser& aMediaUser, TInt aIndex );
       
   291     
       
   292     IMPORT_C void DeleteLocationAttribute();
       
   293 
       
   294 private:
       
   295     /**
       
   296      * Unique identifier of this media item
       
   297      */
       
   298     TGlxMediaId iId;
       
   299 
       
   300     /**
       
   301      * Pointer to the shared instance of media item properties
       
   302      * Not owned
       
   303      */
       
   304 	CGlxMedia* iItem; 
       
   305     };
       
   306 
       
   307 /**
       
   308  *  CGlxMedia 
       
   309  *
       
   310  *  Basic properties for a media item
       
   311  *
       
   312  *  @lib glxmedialists.lib
       
   313  */
       
   314 NONSHARABLE_CLASS( CGlxMedia ) : public CBase
       
   315     {
       
   316 public:
       
   317 
       
   318     /**
       
   319      * Constructor
       
   320      * @param aId media item ID
       
   321      */
       
   322     IMPORT_C CGlxMedia( const TGlxMediaId& aId );
       
   323 
       
   324     /**
       
   325      * Destructor
       
   326      */
       
   327     IMPORT_C ~CGlxMedia();
       
   328        
       
   329     /**
       
   330      * @param aId New Id for this media item.
       
   331      */
       
   332     inline void SetId(const TGlxMediaId& aId) { iId = aId; }  // TEMPORARY, merge to attribute array
       
   333     
       
   334     /**
       
   335      * @return Id of this media item
       
   336      */
       
   337     inline TGlxMediaId Id() const { return iId; }; // TEMPORARY, merge to attribute array
       
   338 
       
   339 public:
       
   340 
       
   341     /**
       
   342      *  The attributes provided in this media object 
       
   343      *
       
   344      *  @return array of attributes indicating the attributes for the values contained 
       
   345      *  in this object
       
   346      */
       
   347     inline const TArray<TMPXAttribute> Attributes() const;
       
   348     
       
   349     /**
       
   350      *  Does this object contain the value for a given attribute 
       
   351      *
       
   352      *  @param aAttribute, the specified attribute
       
   353      *  @return whether supported or not
       
   354      */
       
   355     inline TBool IsSupported(const TMPXAttribute& aAttribute) const;
       
   356     
       
   357     /**
       
   358      *  The number of attribute values provided in this media object 
       
   359      *
       
   360      *  @return count of attribute values in this object
       
   361      */
       
   362     inline TInt Count() const;
       
   363     
       
   364     /**
       
   365      *  The attribute for a specific index 
       
   366      *
       
   367      *  @param aIndex the index from 0 to Count()-1, covering all the values
       
   368      *                provided in this object
       
   369      *  @return the attribute corresponding to the value at the specified index
       
   370      */
       
   371     inline const TMPXAttribute& Attribute(TInt aIndex) const;
       
   372     
       
   373     /**
       
   374      *  The index of a given attribute 
       
   375      *
       
   376      *  @param aAttribute the specified attribute
       
   377      *  @return the index, or KErrNotFound if not present in this object
       
   378      */
       
   379     inline TInt Index(const TMPXAttribute& aAttribute) const;
       
   380         
       
   381     /**
       
   382      *  The value for a specific attribute 
       
   383      *
       
   384      *  @param aAttribute, the attribute whose value is queried
       
   385      *  @return value of the attribute
       
   386      */
       
   387     template<typename T> 
       
   388     inline T ValueTObject(const TMPXAttribute& aAttribute) const;
       
   389 
       
   390     /**
       
   391      *  Get the value for a specific attribute, indicating success 
       
   392      *
       
   393      *  @param aValue, reference to object into which to place the value
       
   394      *  @param aAttribute, the attribute whose value is queried
       
   395      *  @return EFalse if unable to get value - aValue is unchanged. 
       
   396      *         ETrue if value successfully put in aValue.
       
   397      */
       
   398     template<typename T> 
       
   399     inline TBool GetValueTObject(T& aValue, const TMPXAttribute& aAttribute) const;
       
   400 
       
   401         
       
   402     /**
       
   403      *  The value for a specific attribute 
       
   404      *
       
   405      *  @param aAttribute, the attribute whose value is queried
       
   406      *  @return value of the attribute
       
   407      */
       
   408     IMPORT_C const TDesC& ValueText(const TMPXAttribute& aAttribute) const;
       
   409 
       
   410     /**
       
   411      *  Get the text for a specific attribute, indicating success 
       
   412      *
       
   413      *  @param aText, reference to object into which to place a pointer to the text
       
   414      *  @param aAttribute, the attribute whose value is queried
       
   415      *  @return EFalse if unable to get text - aText is unchanged. 
       
   416      *         ETrue if pointer to text successfully put in aText.
       
   417      */
       
   418     IMPORT_C TBool GetValueText(TPtrC& aText, 
       
   419                                 const TMPXAttribute& aAttribute) const;
       
   420 
       
   421    
       
   422     /**
       
   423      *  The value for a specific attribute 
       
   424      *
       
   425      *  @param aAttribute, the attribute whose value is queried
       
   426      *  @return value of the attribute
       
   427      */
       
   428     IMPORT_C const CBase* ValueCObject(const TMPXAttribute& aAttribute) const;
       
   429     
       
   430     /**
       
   431      * Clears all the attributes and values
       
   432      */
       
   433     IMPORT_C void Reset();
       
   434 
       
   435     /**
       
   436      * Add a new attribute value to this object, or modifies existing
       
   437      * value if already present 
       
   438      *
       
   439      *  @param aAttribute the attribute whose value is added/modified
       
   440      *  @return value of the attribute
       
   441      */    
       
   442     IMPORT_C void SetTextValueL(const TMPXAttribute& aAttribute,
       
   443                                 const TDesC& aValue);
       
   444       
       
   445     /**
       
   446      * Add a new attribute value to this object, or modifies existing
       
   447      * value if already present 
       
   448      *
       
   449      *  @param aAttribute the attribute whose value is added/modified
       
   450      *  @return value of the attribute
       
   451      */
       
   452     template<typename T> 
       
   453     inline void SetTObjectValueL(const TMPXAttribute& aAttribute, T aValue);
       
   454     
       
   455     /**
       
   456      * Add a new attribute value to this object, or modifies existing
       
   457      * value if already present 
       
   458      *
       
   459      *  @param aAttribute the attribute whose value is added/modified
       
   460      *					  Takes ownership, unless leaves.
       
   461      *  @return value of the attribute
       
   462      */
       
   463     IMPORT_C void SetCObjectValueL(const TMPXAttribute& aAttribute, CBase* aValue_TakesOwnership);    
       
   464 
       
   465     /**
       
   466      * Delete an attribute of the media item
       
   467      * @param aAttribute The attribute that is deleted
       
   468      */
       
   469     IMPORT_C void DeleteAttribute(const TMPXAttribute& aAttribute);
       
   470     
       
   471     /**
       
   472      * Delete an attribute of the media item
       
   473      * @param aAttributeIndex index of the attribute to delete
       
   474      */
       
   475     void DeleteAttribute( TInt aAttributeIndex );
       
   476 
       
   477 	/**
       
   478 	 * Handles modification of item
       
   479 	 *
       
   480 	 * @param aAttributes Attributes that have been modified
       
   481 	 */
       
   482 	IMPORT_C void HandleModified(const RArray<TMPXAttribute>& aAttributes);
       
   483 
       
   484     /**
       
   485      * Add a new attribute value to this object, or modifies existing
       
   486      * value if already present 
       
   487      *
       
   488      *  @param aAttribute the attribute whose value is added/modified
       
   489      *  @param aValue value of the attribute
       
   490      *  @param aType type of the attribute
       
   491      */
       
   492     IMPORT_C void SetValueL(const TMPXAttribute& aAttribute, TAny* aValue, TMPXAttributeType aType);
       
   493 
       
   494 public: // Media-list-manager-internal management interface
       
   495 	/**
       
   496 	 * Reserve space for users to be added, so AddUser can be called with 
       
   497 	 * danger of failure
       
   498 	 * This should not be exported
       
   499 	 * @param aReservationCount space is allocated for this number of users
       
   500 	 */
       
   501 	void ReserveUsersL( TInt aReservationCount );
       
   502 
       
   503 	/**
       
   504 	 * Add the list as a user of the media object
       
   505      * The index into list is also stored, to allow clients that
       
   506      * are processing users of a media, to index directly into the list
       
   507 	 * This should not be exported
       
   508 	 * Reservation must have been made before calling this
       
   509 	 * @param aUser the object to be added as a user
       
   510      * @param aIndex the index into the media list user
       
   511 	 */
       
   512 	void AddUser( MGlxMediaUser& aUser, TInt aIndex );  
       
   513 
       
   514 	/**
       
   515 	 * Remove the list as a user list of the media object
       
   516 	 * This should not be exported
       
   517 	 * @param aUser the user to be removed 
       
   518 	 */
       
   519 	void RemoveUser( const MGlxMediaUser& aUser );  
       
   520 	
       
   521 	/**
       
   522 	 * Determines if the list is a user
       
   523 	 * This should not be exported
       
   524 	 * @return ETrue if the object is a user of this media object
       
   525 	 */
       
   526 	TBool IsUser( const MGlxMediaUser& aUser ) const;  
       
   527 	
       
   528 	/**
       
   529 	 * Count of user lists
       
   530 	 * This should not be exported
       
   531 	 * @return The number of users of this media object
       
   532 	 */
       
   533 	TInt UserCount() const;  
       
   534 	
       
   535 	/**
       
   536 	 * User by index
       
   537 	 * This should not be exported
       
   538 	 * @param aIndex index of the user
       
   539 	 * @return User by index
       
   540 	 */
       
   541 	MGlxMediaUser& User(TInt aIndex) const;  
       
   542 
       
   543     /**
       
   544      * Index in the media list user
       
   545      * This should not be exported
       
   546      * @param aIndex index of the user
       
   547      * @return Index in the media list user
       
   548      */
       
   549     TInt IndexInUser(TInt aIndex) const;
       
   550 
       
   551     /**
       
   552      * Update index in the media list user
       
   553      * This should not be exported
       
   554      * @param aUser the user to be updated
       
   555      * @param aIndex the index into the media list user
       
   556      */
       
   557     void UpdateUser( MGlxMediaUser& aUser, TInt aIndex );
       
   558     
       
   559     /**
       
   560      * Returns the TMPXAttributeType corresponding to TMPXAttribute
       
   561      * @param aAttribute the attribute whose type is required
       
   562      */
       
   563     TMPXAttributeType AttributeTypeId(const TMPXAttribute& aAttribute) const;
       
   564 
       
   565 private:
       
   566 	struct TValue
       
   567 		{
       
   568 		inline TValue(TAny* aValue, TMPXAttributeType aType);
       
   569 		TAny* iValue;
       
   570 		TMPXAttributeType iType;
       
   571 		};
       
   572 	
       
   573 	/**
       
   574 	 * Deletes a value in the right way, depending on its type
       
   575 	 */
       
   576 	void Delete(TValue& aValue);
       
   577 		
       
   578 private:
       
   579     struct TMediaUser
       
   580         {
       
   581         /**
       
   582          * Find match by MGlxMediaUser
       
   583          */
       
   584         static TBool MatchUser(const TMediaUser& aUser1, 
       
   585                                const TMediaUser& aUser2);
       
   586 
       
   587         /**
       
   588          * Constructor
       
   589          */
       
   590         TMediaUser(MGlxMediaUser* aMediaUser, TInt aIndex = KErrNotFound);
       
   591 
       
   592         MGlxMediaUser* iMediaUser;
       
   593         TInt iIndex;
       
   594         };
       
   595 		
       
   596 private:
       
   597     RArray<TValue> iValues; // Array index corresponds to iAttributes
       
   598     RArray<TMPXAttribute> iAttributes; // Array index corresponds to iValues
       
   599 	
       
   600 	/**
       
   601 	 * Media item id 
       
   602 	 */
       
   603 	TGlxMediaId iId; // TEMPORARY, merge to attribute array
       
   604 
       
   605     /**
       
   606      * Objects by which this object is used by. When the array is empty,
       
   607      * the item does not have any users (and can be deleted).
       
   608      * Only exposed to CGlxMediaListManager
       
   609      */
       
   610     RArray< TMediaUser > iUsers; // TEMPORARY, merge to attribute array
       
   611     
       
   612     /// Number of users currently reserved on iUsers
       
   613     __DEBUG_ONLY( TInt _iUserReservationCount; )
       
   614         
       
   615     __DECLARE_TEST;
       
   616 	};
       
   617 
       
   618 #include "glxmedia.inl"
       
   619 
       
   620 #endif // C_GLXMEDIA_H